From c8a755a5c9b7ccb67571c49649bcfde28fcc5ef5 Mon Sep 17 00:00:00 2001 From: David Benepe Date: Fri, 16 May 2025 17:51:40 -0400 Subject: [PATCH] DKR Assets Tool v0.5 (#577) * Saving files before attempting to integrate custom crash screen * Put code under DkrAssetsTool namespace * More progress * Lots of work done. * Forgot to revert back to v77 in the makefile * Included cstdint in bytes_view.hpp * Hopefully fixed issue with CEnum::tostring(), removed asset_enums from tracking, and modified gitignore to allow obj files from the mods folder * .mtl file and the textures should now check if the path is absolute or relative. * Fixed compile_all.sh * Doing a thing that is technically not valid. * Removed 'make assets', now assets are built in the normal 'make' setting. --- .gitignore | 6 + Makefile | 80 +- compile_all.sh | 2 +- extract-ver/.gitignore | 2 - extract-ver/eu_1.0.config.json | 416 - extract-ver/eu_1.1.config.json | 416 - extract-ver/jp.config.json | 416 - extract-ver/us_1.0.config.json | 20509 --------- extract-ver/us_1.1.config.json | 416 - include/asset_enums.h | 5205 --- .../asset_object_models.meta.json | 12 + .../assets/examples/CustomModelTest/meta.json | 5 + .../objects/headers/N64logo.json | 6 + .../CustomModelTest/objects/models/ok.png | Bin 0 -> 2710 bytes .../objects/models/okCube.json | 4 + .../CustomModelTest/objects/models/okCube.mtl | 12 + .../CustomModelTest/objects/models/okCube.obj | 50 + src/font.c | 6 +- tools/dkr_assets_tool_extract.json | 34199 ++++++++++++++++ tools/dkr_assets_tool_settings.json | 22 +- .../builder/buildAssetTable.cpp | 193 + .../builder/buildAssetTable.h | 42 + .../dkr_assets_tool_src/builder/buildInfo.cpp | 213 + tools/dkr_assets_tool_src/builder/buildInfo.h | 99 +- .../builder/buildInfoCollection.cpp | 186 + .../builder/buildInfoCollection.h | 61 + .../builder/buildTypes/buildAudio.cpp | 29 +- .../builder/buildTypes/buildAudio.h | 21 +- .../builder/buildTypes/buildBinary.cpp | 25 +- .../builder/buildTypes/buildBinary.h | 21 +- .../builder/buildTypes/buildFonts.cpp | 195 +- .../builder/buildTypes/buildFonts.h | 23 +- .../builder/buildTypes/buildGameText.cpp | 205 +- .../builder/buildTypes/buildGameText.h | 36 +- .../builder/buildTypes/buildJpFonts.cpp | 310 + .../builder/buildTypes/buildJpFonts.h | 9 + .../builder/buildTypes/buildLevelHeader.cpp | 484 +- .../builder/buildTypes/buildLevelHeader.h | 35 +- .../builder/buildTypes/buildLevelModel.cpp | 24 +- .../builder/buildTypes/buildLevelModel.h | 21 +- .../buildLevelObjectTranslationTable.cpp | 31 +- .../buildLevelObjectTranslationTable.h | 15 + .../builder/buildTypes/buildMenuText.cpp | 81 +- .../builder/buildTypes/buildMenuText.h | 25 +- .../builder/buildTypes/buildMisc.cpp | 194 +- .../builder/buildTypes/buildMisc.h | 32 +- .../buildTypes/buildModel/buildModel.cpp | 174 + .../buildTypes/buildModel/buildModel.h | 46 + .../buildTypes/buildModel/buildModelBatch.cpp | 90 + .../buildTypes/buildModel/buildModelBatch.h | 48 + .../buildTypes/buildModel/buildModelBlock.cpp | 79 + .../buildTypes/buildModel/buildModelBlock.h | 34 + .../buildModel/buildModelMaterial.cpp | 48 + .../buildModel/buildModelMaterial.h | 29 + .../buildModel/buildModelVertex.cpp | 53 + .../buildTypes/buildModel/buildModelVertex.h | 36 + .../buildTypes/buildModel/gltfModel.cpp | 0 .../builder/buildTypes/buildModel/gltfModel.h | 2 + .../buildTypes/buildModel/objModel.cpp | 179 + .../builder/buildTypes/buildModel/objModel.h | 17 + .../buildTypes/buildObjectAnimation.cpp | 25 +- .../builder/buildTypes/buildObjectAnimation.h | 21 +- .../builder/buildTypes/buildObjectHeader.cpp | 237 +- .../builder/buildTypes/buildObjectHeader.h | 24 +- .../builder/buildTypes/buildObjectMap.cpp | 246 +- .../builder/buildTypes/buildObjectMap.h | 37 +- .../builder/buildTypes/buildObjectModel.cpp | 58 +- .../builder/buildTypes/buildObjectModel.h | 20 +- .../builder/buildTypes/buildParticle.cpp | 25 +- .../builder/buildTypes/buildParticle.h | 20 +- .../buildTypes/buildParticleBehavior.cpp | 25 +- .../buildTypes/buildParticleBehavior.h | 20 +- .../builder/buildTypes/buildSprite.cpp | 35 +- .../builder/buildTypes/buildSprite.h | 20 +- .../builder/buildTypes/buildTTGhost.cpp | 64 +- .../builder/buildTypes/buildTTGhost.h | 25 +- .../builder/buildTypes/buildTexture.cpp | 161 +- .../builder/buildTypes/buildTexture.h | 24 +- tools/dkr_assets_tool_src/builder/builder.cpp | 378 +- tools/dkr_assets_tool_src/builder/builder.h | 18 +- tools/dkr_assets_tool_src/builder/stats.cpp | 1 + tools/dkr_assets_tool_src/builder/stats.h | 17 + .../extract/assetTable.cpp | 73 +- .../dkr_assets_tool_src/extract/assetTable.h | 32 +- tools/dkr_assets_tool_src/extract/config.cpp | 347 +- tools/dkr_assets_tool_src/extract/config.h | 175 +- .../extract/extractInfo.cpp | 178 +- .../dkr_assets_tool_src/extract/extractInfo.h | 95 +- .../extract/extractTypes/extractAudio.cpp | 24 +- .../extract/extractTypes/extractAudio.h | 14 +- .../extract/extractTypes/extractBinary.cpp | 35 +- .../extract/extractTypes/extractBinary.h | 22 +- .../extract/extractTypes/extractFonts.cpp | 37 +- .../extract/extractTypes/extractFonts.h | 19 +- .../extract/extractTypes/extractGameText.cpp | 81 +- .../extract/extractTypes/extractGameText.h | 18 +- .../extract/extractTypes/extractJpFonts.cpp | 219 + .../extract/extractTypes/extractJpFonts.h | 9 + .../extractTypes/extractLevelHeader.cpp | 210 +- .../extract/extractTypes/extractLevelHeader.h | 24 +- .../extractTypes/extractLevelModel.cpp | 28 +- .../extract/extractTypes/extractLevelModel.h | 14 +- .../extract/extractTypes/extractLevelName.cpp | 20 +- .../extract/extractTypes/extractLevelName.h | 14 +- .../extractLevelObjectTranslationTable.cpp | 24 +- .../extractLevelObjectTranslationTable.h | 14 +- .../extract/extractTypes/extractMenuText.cpp | 54 +- .../extract/extractTypes/extractMenuText.h | 14 +- .../extract/extractTypes/extractMisc.cpp | 120 +- .../extract/extractTypes/extractMisc.h | 23 +- .../extractTypes/extractObjectAnimation.cpp | 39 +- .../extractTypes/extractObjectAnimation.h | 14 +- .../extractTypes/extractObjectHeader.cpp | 90 +- .../extractTypes/extractObjectHeader.h | 19 +- .../extract/extractTypes/extractObjectMap.cpp | 113 +- .../extract/extractTypes/extractObjectMap.h | 23 +- .../extractTypes/extractObjectModel.cpp | 20 +- .../extract/extractTypes/extractObjectModel.h | 14 +- .../extract/extractTypes/extractParticle.cpp | 20 +- .../extract/extractTypes/extractParticle.h | 14 +- .../extractTypes/extractParticleBehavior.cpp | 20 +- .../extractTypes/extractParticleBehavior.h | 14 +- .../extract/extractTypes/extractSprite.cpp | 24 +- .../extract/extractTypes/extractSprite.h | 14 +- .../extract/extractTypes/extractTTGhost.cpp | 24 +- .../extract/extractTypes/extractTTGhost.h | 14 +- .../extract/extractTypes/extractTexture.cpp | 129 +- .../extract/extractTypes/extractTexture.h | 20 +- .../dkr_assets_tool_src/extract/extractor.cpp | 882 +- tools/dkr_assets_tool_src/extract/extractor.h | 63 +- tools/dkr_assets_tool_src/extract/rom.cpp | 2 + tools/dkr_assets_tool_src/extract/rom.h | 3 + tools/dkr_assets_tool_src/extract/stats.cpp | 131 + tools/dkr_assets_tool_src/extract/stats.h | 64 + tools/dkr_assets_tool_src/fileTypes/batch.hpp | 70 + .../dkr_assets_tool_src/fileTypes/jpFonts.hpp | 47 + .../fileTypes/objectModel.hpp | 66 + .../fileTypes/textureInfo.hpp | 33 + .../dkr_assets_tool_src/helpers/asmHeader.cpp | 2 + tools/dkr_assets_tool_src/helpers/asmHeader.h | 3 + .../helpers/assetsHelper.cpp | 253 +- .../helpers/assetsHelper.h | 56 +- .../helpers/c/cContext.cpp | 78 +- .../dkr_assets_tool_src/helpers/c/cContext.h | 8 +- .../helpers/c/cEnumsHelper.cpp | 95 +- .../helpers/c/cEnumsHelper.h | 39 +- .../dkr_assets_tool_src/helpers/c/cHeader.cpp | 6 + tools/dkr_assets_tool_src/helpers/c/cHeader.h | 7 +- .../helpers/c/cStructGltfHelper.cpp | 58 +- .../helpers/c/cStructGltfHelper.h | 13 +- .../helpers/c/cStructHelper.cpp | 27 +- .../helpers/c/cStructHelper.h | 28 +- .../dkr_assets_tool_src/helpers/c/cTypes.cpp | 2 + tools/dkr_assets_tool_src/helpers/c/cTypes.h | 6 +- .../helpers/dataHelper.cpp | 30 + .../dkr_assets_tool_src/helpers/dataHelper.h | 34 +- .../helpers/debugHelper.cpp | 2 + .../dkr_assets_tool_src/helpers/debugHelper.h | 5 +- .../helpers/fileHelper.cpp | 242 +- .../dkr_assets_tool_src/helpers/fileHelper.h | 119 +- .../helpers/gltf/gltfDkrTriangle.cpp | 2 + .../helpers/gltf/gltfDkrTriangle.h | 6 +- .../helpers/gltf/gltfDkrVertex.cpp | 2 + .../helpers/gltf/gltfDkrVertex.h | 6 +- .../helpers/gltf/gltfHelper.cpp | 2 + .../helpers/gltf/gltfHelper.h | 4 + .../helpers/gltf/gltfPrimitive.cpp | 2 + .../helpers/gltf/gltfPrimitive.h | 4 + .../helpers/gzipHelper.cpp | 17 +- .../dkr_assets_tool_src/helpers/gzipHelper.h | 13 +- .../helpers/imageHelper.cpp | 113 +- .../dkr_assets_tool_src/helpers/imageHelper.h | 42 +- .../helpers/jsonHelper.cpp | 314 +- .../dkr_assets_tool_src/helpers/jsonHelper.h | 106 +- .../helpers/mathHelper.cpp | 380 + .../dkr_assets_tool_src/helpers/mathHelper.h | 197 + .../helpers/miscHelper.cpp | 2 + .../dkr_assets_tool_src/helpers/miscHelper.h | 11 +- .../helpers/regex/match.cpp | 2 + .../dkr_assets_tool_src/helpers/regex/match.h | 2 + .../helpers/regex/regexPcre2.cpp | 4 + .../helpers/regex/regexPcre2.h | 13 +- .../helpers/regex/regexStd.cpp | 2 + .../helpers/regex/regexStd.h | 13 +- .../helpers/regexHelper.cpp | 2 + .../dkr_assets_tool_src/helpers/regexHelper.h | 4 + .../helpers/stringHelper.cpp | 55 +- .../helpers/stringHelper.h | 55 +- tools/dkr_assets_tool_src/libs/bytes_view.hpp | 253 + tools/dkr_assets_tool_src/libs/gzip/DKRGzip.c | 4 +- tools/dkr_assets_tool_src/libs/sha1.hpp | 334 + tools/dkr_assets_tool_src/main.cpp | 98 +- tools/dkr_assets_tool_src/misc/args.cpp | 96 + tools/dkr_assets_tool_src/misc/args.h | 28 + tools/dkr_assets_tool_src/misc/constants.hpp | 14 +- .../misc/globalSettings.cpp | 176 + .../dkr_assets_tool_src/misc/globalSettings.h | 32 + .../misc/{settings.hpp => old_settings.hpp} | 7 +- .../prebuild/compileAssets/compile.cpp | 209 +- .../prebuild/compileAssets/compile.h | 42 +- .../prebuild/makeIncludes/assetEnums.cpp | 190 - .../prebuild/makeIncludes/assetEnums.h | 27 - .../prebuild/makeIncludes/assetsAsm.cpp | 320 - .../prebuild/makeIncludes/assetsAsm.h | 36 - .../dkr_assets_tool_src/prebuild/prebuild.cpp | 34 - tools/dkr_assets_tool_src/prebuild/prebuild.h | 25 - tools/dkr_assets_tool_src/test/test.cpp | 53 +- tools/dkr_assets_tool_src/test/test.h | 14 +- tools/dkr_assets_tool_src/text/dkrText.cpp | 166 + tools/dkr_assets_tool_src/text/dkrText.h | 32 + 210 files changed, 43254 insertions(+), 32077 deletions(-) delete mode 100644 extract-ver/.gitignore delete mode 100644 extract-ver/eu_1.0.config.json delete mode 100644 extract-ver/eu_1.1.config.json delete mode 100644 extract-ver/jp.config.json delete mode 100644 extract-ver/us_1.0.config.json delete mode 100644 extract-ver/us_1.1.config.json delete mode 100644 include/asset_enums.h create mode 100644 mods/assets/examples/CustomModelTest/asset_object_models.meta.json create mode 100644 mods/assets/examples/CustomModelTest/meta.json create mode 100644 mods/assets/examples/CustomModelTest/objects/headers/N64logo.json create mode 100644 mods/assets/examples/CustomModelTest/objects/models/ok.png create mode 100644 mods/assets/examples/CustomModelTest/objects/models/okCube.json create mode 100644 mods/assets/examples/CustomModelTest/objects/models/okCube.mtl create mode 100644 mods/assets/examples/CustomModelTest/objects/models/okCube.obj create mode 100644 tools/dkr_assets_tool_extract.json create mode 100644 tools/dkr_assets_tool_src/builder/buildAssetTable.cpp create mode 100644 tools/dkr_assets_tool_src/builder/buildAssetTable.h create mode 100644 tools/dkr_assets_tool_src/builder/buildInfoCollection.cpp create mode 100644 tools/dkr_assets_tool_src/builder/buildInfoCollection.h create mode 100644 tools/dkr_assets_tool_src/builder/buildTypes/buildJpFonts.cpp create mode 100644 tools/dkr_assets_tool_src/builder/buildTypes/buildJpFonts.h create mode 100644 tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModel.cpp create mode 100644 tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModel.h create mode 100644 tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModelBatch.cpp create mode 100644 tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModelBatch.h create mode 100644 tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModelBlock.cpp create mode 100644 tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModelBlock.h create mode 100644 tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModelMaterial.cpp create mode 100644 tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModelMaterial.h create mode 100644 tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModelVertex.cpp create mode 100644 tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModelVertex.h create mode 100644 tools/dkr_assets_tool_src/builder/buildTypes/buildModel/gltfModel.cpp create mode 100644 tools/dkr_assets_tool_src/builder/buildTypes/buildModel/gltfModel.h create mode 100644 tools/dkr_assets_tool_src/builder/buildTypes/buildModel/objModel.cpp create mode 100644 tools/dkr_assets_tool_src/builder/buildTypes/buildModel/objModel.h create mode 100644 tools/dkr_assets_tool_src/builder/stats.cpp create mode 100644 tools/dkr_assets_tool_src/builder/stats.h create mode 100644 tools/dkr_assets_tool_src/extract/extractTypes/extractJpFonts.cpp create mode 100644 tools/dkr_assets_tool_src/extract/extractTypes/extractJpFonts.h create mode 100644 tools/dkr_assets_tool_src/extract/stats.cpp create mode 100644 tools/dkr_assets_tool_src/extract/stats.h create mode 100644 tools/dkr_assets_tool_src/fileTypes/batch.hpp create mode 100644 tools/dkr_assets_tool_src/fileTypes/jpFonts.hpp create mode 100644 tools/dkr_assets_tool_src/fileTypes/objectModel.hpp create mode 100644 tools/dkr_assets_tool_src/fileTypes/textureInfo.hpp create mode 100644 tools/dkr_assets_tool_src/helpers/mathHelper.cpp create mode 100644 tools/dkr_assets_tool_src/helpers/mathHelper.h create mode 100644 tools/dkr_assets_tool_src/libs/bytes_view.hpp create mode 100644 tools/dkr_assets_tool_src/libs/sha1.hpp create mode 100644 tools/dkr_assets_tool_src/misc/args.cpp create mode 100644 tools/dkr_assets_tool_src/misc/args.h create mode 100644 tools/dkr_assets_tool_src/misc/globalSettings.cpp create mode 100644 tools/dkr_assets_tool_src/misc/globalSettings.h rename tools/dkr_assets_tool_src/misc/{settings.hpp => old_settings.hpp} (96%) delete mode 100644 tools/dkr_assets_tool_src/prebuild/makeIncludes/assetEnums.cpp delete mode 100644 tools/dkr_assets_tool_src/prebuild/makeIncludes/assetEnums.h delete mode 100644 tools/dkr_assets_tool_src/prebuild/makeIncludes/assetsAsm.cpp delete mode 100644 tools/dkr_assets_tool_src/prebuild/makeIncludes/assetsAsm.h delete mode 100644 tools/dkr_assets_tool_src/prebuild/prebuild.cpp delete mode 100644 tools/dkr_assets_tool_src/prebuild/prebuild.h create mode 100644 tools/dkr_assets_tool_src/text/dkrText.cpp create mode 100644 tools/dkr_assets_tool_src/text/dkrText.h diff --git a/.gitignore b/.gitignore index 12bd9c8e..0bab989c 100755 --- a/.gitignore +++ b/.gitignore @@ -24,12 +24,18 @@ bin/ bin/* ucode/* +# Asset enums, since it is auto-generated. +include/asset_enums.h + #compiled object files *.slo *.lo *.o *.obj +# Do not ignore .obj files in the mods/ directory +!mods/**/*.obj + #Precompiled Headers *.gch *.pch diff --git a/Makefile b/Makefile index f5c21e77..47756a9b 100755 --- a/Makefile +++ b/Makefile @@ -3,6 +3,11 @@ REGION := us VERSION := v77 NON_MATCHING ?= 0 +# NM is shorthand for NON_MATCHING +ifneq ($(NM),) + NON_MATCHING := 1 +endif + # Experimental option for nonmatching builds. GCC may not function identically to ido. COMPILER ?= ido $(eval $(call validate-option,NON_MATCHING,ido gcc)) @@ -327,6 +332,7 @@ no_verify: $(TARGET).z64 extract: $(SPLAT) ver/splat/$(BASENAME).$(REGION).$(VERSION).yaml + $(TOOLS_DIR)/dkr_assets_tool extract -dkrv $(REGION).$(VERSION) >&2 || echo FAIL #These are the only 4 jpn region functions that match elsewhere, but not for this region. As a temp hack for progress script reasons, just delete these for other regions. ifneq ($(REGION),jpn) @$(RM) asm/nonmatchings/menu/savemenu_render_element.s asm/nonmatchings/menu/pakmenu_render.s asm/nonmatchings/menu/results_render.s asm/nonmatchings/menu/menu_credits_loop.s @@ -395,114 +401,80 @@ expected: verify #Run this to use the asset builder to customize assets assets: all -# Only compile the assets when running `make assets` or if we're making a NON_MATCHING build -ifeq ($(MAKECMDGOALS),assets) - -ASSETS_VERSION := us_1.0 -ASSETS := assets/$(ASSETS_VERSION) -ASSETS_BUILD_DIR := $(BUILD_DIR)/assets -BUILDER = $(TOOLS_DIR)/dkr_assets_tool -dkrv $(ASSETS_VERSION) build - -######## Extract Assets & Microcode ######## -DUMMY != $(PYTHON) $(TOOLS_DIR)/python/check_if_need_to_extract.py $(ASSETS_VERSION) >&2 || echo FAIL - -######## Prebuild step (Compile assets, generate linker file, etc.) ######## -DUMMY != $(TOOLS_DIR)/dkr_assets_tool -dkrv $(ASSETS_VERSION) prebuild >&2 || echo FAIL - -# Helps fix an issue with parallel jobs. -$(ALL_ASSETS_BUILT): | $(BUILD_DIR) - -# This is here to prevent make from deleting all the asset files after the build completes/fails. -dont_remove_asset_files: $(ALL_ASSETS_BUILT) - -# Add .json files -JSON_FILES := $(shell find $(ASSETS) -type f -name '*.json') - -# Ignore .meta.json files -IGNORE_JSON_FILES := $(shell find $(ASSETS) -type f -name '*.meta.json') -JSON_FILES := $(filter-out $(IGNORE_JSON_FILES),$(JSON_FILES)) - -# $1 = asset path (e.g. assets/levels/models/...), $2 = cmd to run -define DEFINE_ASSET_TARGET -$(eval BASE_PATH := $(subst $(ASSETS),$(ASSETS_BUILD_DIR),$(basename $1))) -$$(BASE_PATH).bin: $1 - $2 -$(eval ALL_ASSETS_BUILT+=$(BASE_PATH).bin) -endef - -# $1 = Print message -define JSON_FILE_ACTION - $$(call print,$1:,$$<,$$@) - $$(V)$$(BUILDER) -i $$< -o $$@ -endef - -$(foreach FILE,$(JSON_FILES),$(eval $(call DEFINE_ASSET_TARGET,$(FILE),$(call JSON_FILE_ACTION,Building)))) +ASSETS_OUTPUT := assets/assets.bin +ifeq ($(NON_MATCHING),1) +# The -m flag will attempt to compile assets. Only want to do this on non-matching builds. +MODDED_ARG := -m endif +build_assets: + $(info Building Assets...) + $(TOOLS_DIR)/dkr_assets_tool build -o $(ASSETS_OUTPUT) -dkrv $(REGION).$(VERSION) $(MODDED_ARG) >&2 || echo FAIL + ############################### $(GLOBAL_ASM_O_FILES): CC := $(ASM_PROCESSOR) $(CC) -- $(AS) $(ASFLAGS) -- -$(TARGET).elf: dirs $(LD_SCRIPT) $(O_FILES) | $(ALL_ASSETS_BUILT) +$(TARGET).elf: dirs $(LD_SCRIPT) $(O_FILES) | build_assets @$(PRINT) "$(GREEN)Linking: $(BLUE)$@$(NO_COL)\n" $(V)$(LD) $(LD_FLAGS) -o $@ ifndef PERMUTER -$(GLOBAL_ASM_O_FILES): $(BUILD_DIR)/%.c.o: %.c | $(ALL_ASSETS_BUILT) +$(GLOBAL_ASM_O_FILES): $(BUILD_DIR)/%.c.o: %.c | build_assets $(call print,Compiling:,$<,$@) $(V)$(CC_CHECK) -MMD -MP -MT $@ -MF $(BUILD_DIR)/$*.d $< $(V)$(CC) -c $(CFLAGS) $(CC_WARNINGS) $(OPT_FLAGS) $(MIPSISET) -o $@ $< endif # non asm-processor recipe -$(BUILD_DIR)/%.c.o: %.c | $(ALL_ASSETS_BUILT) +$(BUILD_DIR)/%.c.o: %.c | build_assets $(call print,Compiling:,$<,$@) $(V)$(CC_CHECK) -MMD -MP -MT $@ -MF $(BUILD_DIR)/$*.d $< $(V)$(CC) -c $(CFLAGS) $(CC_WARNINGS) $(OPT_FLAGS) $(MIPSISET) -o $@ $< -$(BUILD_DIR)/$(LIBULTRA_DIR)/src/libc/llcvt.c.o: $(LIBULTRA_DIR)/src/libc/llcvt.c | $(ALL_ASSETS_BUILT) +$(BUILD_DIR)/$(LIBULTRA_DIR)/src/libc/llcvt.c.o: $(LIBULTRA_DIR)/src/libc/llcvt.c | build_assets $(call print,Compiling mips3:,$<,$@) @$(CC) -c $(CFLAGS) $(CC_WARNINGS) $(OPT_FLAGS) $(MIPSISET) -o $@ $< $(V)$(PYTHON) $(TOOLS_DIR)/python/patchmips3.py $@ || rm $@ -$(BUILD_DIR)/$(LIBULTRA_DIR)/src/libc/ll.c.o: $(LIBULTRA_DIR)/src/libc/ll.c | $(ALL_ASSETS_BUILT) +$(BUILD_DIR)/$(LIBULTRA_DIR)/src/libc/ll.c.o: $(LIBULTRA_DIR)/src/libc/ll.c | build_assets $(call print,Compiling mips3:,$<,$@) @$(CC) -c $(CFLAGS) $(CC_WARNINGS) $(OPT_FLAGS) $(MIPSISET) -o $@ $< $(V)$(PYTHON) $(TOOLS_DIR)/python/patchmips3.py $@ || rm $@ -$(BUILD_DIR)/%.s.o: %.s | $(ALL_ASSETS_BUILT) +$(BUILD_DIR)/%.s.o: %.s | build_assets $(call print,Assembling:,$<,$@) $(V)$(AS) $(ASFLAGS) -MD $(BUILD_DIR)/$*.d -o $@ $< # Specifically override the assets bin output location to match what splat output to the ld file. -$(BUILD_DIR)/asm/assets/assets.s.o: asm/assets/assets.s | $(ALL_ASSETS_BUILT) +$(BUILD_DIR)/asm/assets/assets.s.o: asm/assets/assets.s | build_assets $(call print,Assembling Assets:,$<,$@) $(V)$(AS) $(ASFLAGS) -o $(BUILD_DIR)/assets/assets.bin.o $< # Specifically override the header file from what splat extracted to be replaced by what we have in the hasm folder -$(BUILD_DIR)/asm/header.s.o: src/hasm/header.s | $(ALL_ASSETS_BUILT) +$(BUILD_DIR)/asm/header.s.o: src/hasm/header.s | build_assets $(call print,Assembling Header:,$<,$@) $(V)$(AS) $(ASFLAGS) -o $(BUILD_DIR)/asm/header.s.o $< ifeq ($(NON_MATCHING),1) # If doing a NON_MATCHING build, and the custom boot file exists, use that. ifneq ("$(wildcard $(BOOT_CUSTOM))","") -$(BUILD_DIR)/assets/boot.bin.o: $(BOOT_CUSTOM) | $(ALL_ASSETS_BUILT) +$(BUILD_DIR)/assets/boot.bin.o: $(BOOT_CUSTOM) | build_assets $(call print,Linking Custom Boot:,$<,$@) $(V)$(LD) -r -b binary -o $@ $< endif endif -$(BUILD_DIR)/%.bin.o: %.bin | $(ALL_ASSETS_BUILT) +$(BUILD_DIR)/%.bin.o: %.bin | build_assets $(call print,Linking Binary:,$<,$@) $(V)$(LD) -r -b binary -o $@ $< -$(TARGET).bin: $(TARGET).elf | $(ALL_ASSETS_BUILT) +$(TARGET).bin: $(TARGET).elf | build_assets $(call print,Objcopy:,$<,$@) $(V)$(OBJCOPY) $(OBJCOPYFLAGS) $< $@ -$(TARGET).z64: $(TARGET).bin | $(ALL_ASSETS_BUILT) +$(TARGET).z64: $(TARGET).bin | build_assets $(call print,CopyRom:,$<,$@) $(V)$(PYTHON) $(TOOLS_DIR)/python/CopyRom.py $< $@ diff --git a/compile_all.sh b/compile_all.sh index b181c6bc..300fac08 100755 --- a/compile_all.sh +++ b/compile_all.sh @@ -8,6 +8,6 @@ for i in ${!regions[@]}; do region=${regions[$i]} version=${versions[$i]} echo "Compiling $region.$version" - make REGION=$region VERSION=$version cleanextract && make REGION=$region VERSION=$version -j12 + make REGION=$region VERSION=$version cleanextract && make assets REGION=$region VERSION=$version -j12 if [[ $(sha1sum -c --quiet ver/verification/dkr.$region.$version.sha1) = "" ]]; then echo "$region.$version OK"; else echo "Failed $region.$version"; exit 1; fi done diff --git a/extract-ver/.gitignore b/extract-ver/.gitignore deleted file mode 100644 index b7f35541..00000000 --- a/extract-ver/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Ignore all the md5 files -*.md5 diff --git a/extract-ver/eu_1.0.config.json b/extract-ver/eu_1.0.config.json deleted file mode 100644 index 23eeddfe..00000000 --- a/extract-ver/eu_1.0.config.json +++ /dev/null @@ -1,416 +0,0 @@ -{ - "config-name" : "Diddy Kong Racing (Europe v1.0)", - "checksum-md5" : "0f0b7b78b345fbf2581d834cb4a81245", - "subfolder" : "eu_1.0", - "code" : { - "sections" : [ - { - "type": "NoExtract", - "folder" : "", - "files" : [ - { "filename": "work-in-progress", "length" : "0xECBF0" } - ] - } - ] - }, - "assets" : { - "sections": [ - { - "type": "Binary", - "folder": "ai-racers", - "table": 1 - }, - { "type": "Table" }, - { - "type": "Textures", - "folder": "textures/3d", - "table": 3, - "flip-textures": [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] - }, - { "type": "Table" }, - { - "type": "Textures", - "folder": "textures/2d", - "table": 5, - "flip-textures" : [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] - }, - { "type": "Table" }, - { - "type": "GameText", - "folder": "text/game", - "table": 7 - }, - { "type": "Table" }, - { - "type": "MenuText", - "folder": "text/menu", - "table": 9, - "filenames": [ - "english_menu_text", - "german_menu_text", - "french_menu_text", - "japanese_menu_text" - ] - }, - { "type": "Table" }, - { "type": "Empty", "table": 11}, - { "type": "Table" }, - { - "type": "Sprites", - "folder": "sprites", - "table": 13 - }, - { "type": "Table" }, - { "type": "Empty" }, - { - "type": "Miscellaneous", - "folder": "misc", - "table": 16, - "filenames": [ - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "tracks_menu_ids", - "hub_area_ids", - "main_tracks_ids", - "battle_tracks_ids", - "boss_tracks_ids", - "", - "", - "RacerStats_Unknown0", - "RacerStats_Diddy", - "RacerStats_TT", - "RacerStats_Unknown1", - "RacerStats_Krunch", - "RacerStats_Bumper", - "RacerStats_Tiptup", - "RacerStats_Conker", - "RacerStats_Timber", - "RacerStats_Banjo", - "RacerStats_Drumstick", - "RacerStats_Pipsy", - "RacerStats_Unknown2", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "magic_codes", - "title_screen_demo_ids", - "", - "", - "", - "" - ] - }, - { "type": "Table" }, - { - "type": "Binary", - "folder": "ids", - "filenames": [ "hud_element_ids" ] - }, - { - "type": "Binary", - "folder": "ids", - "filenames": [ "menu_element_ids" ] - }, - { - "type": "Binary", - "folder": "bin", - "filenames": [ "unknown_table" ] - }, - { "type": "Table" }, - { - "type": "LevelObjectMap", - "folder": "levels/objectMaps", - "table": 20 - }, - { "type": "Table" }, - { - "type": "LevelHeaders", - "folder": "levels/headers", - "table": 22, - "filenames": [ - "CentralAreaHub", - "Bluey1", - "DragonForestHub", - "FossilCanyon", - "PirateLagoon", - "AncientLake", - "WalrusCove", - "HotTopVolcano", - "WhaleBay", - "SnowballValley", - "CrescentIsland", - "FireMountain", - "DinoDomainHub", - "EverfrostPeak", - "SherbetIslandHub", - "SpaceportAlpha", - "HorseshoeGulch", - "SpacedustAlley", - "GreenwoodVillage", - "BoulderCanyon", - "WindmillPlains", - "FrontEnd", - "CharacterSelect", - "TitleScreenSequence", - "SnowflakeMountainHub", - "SmokeyCastle", - "DarkwaterBeach", - "IciclePyramid", - "FrostyVillage", - "JungleFalls", - "TreasureCaves", - "HauntedWoods", - "DarkmoonCaverns", - "StarCity", - "TrophyRace", - "FutureFunLandHub", - "OpeningSequence", - "Wizpig1", - "Trickytops1", - "OptionsBackground", - "Bubbler1", - "Smokey1", - "WizpigMouthSequence", - "WizpigAmuletSequence", - "TTAmuletSequence", - "RocketSequence", - "Trickytops2", - "DinoDomainTrophyAnim", - "SnowflakeMountainTrophyAnim", - "SherbetIslandTrophyAnim", - "DragonForestTrophyAnim", - "FutureFunLandTrophyAnim", - "Bluey2", - "Bubbler2", - "Smokey2", - "Wizpig2", - "PartySequence", - "TricktopsAnim", - "SmokeyAnim", - "BlueyAnim", - "Wizpig1Anim", - "BubblerAnim", - "Wizpig2Anim", - "LastBit", - "LastBitB" - ] - }, - { "type": "Table" }, - { - "type": "LevelNames", - "folder": "levels/names", - "table": 24, - "filenames": [ - "CentralAreaHub", - "Bluey1", - "DragonForestHub", - "FossilCanyon", - "PirateLagoon", - "AncientLake", - "WalrusCove", - "HotTopVolcano", - "WhaleBay", - "SnowballValley", - "CrescentIsland", - "FireMountain", - "DinoDomainHub", - "EverfrostPeak", - "SherbetIslandHub", - "SpaceportAlpha", - "HorseshoeGulch", - "SpacedustAlley", - "GreenwoodVillage", - "BoulderCanyon", - "WindmillPlains", - "FrontEnd", - "CharacterSelect", - "TitleScreenSequence", - "SnowflakeMountainHub", - "SmokeyCastle", - "DarkwaterBeach", - "IciclePyramid", - "FrostyVillage", - "JungleFalls", - "TreasureCaves", - "HauntedWoods", - "DarkmoonCaverns", - "StarCity", - "TrophyRace", - "FutureFunLandHub", - "OpeningSequence", - "Wizpig1", - "Trickytops1", - "OptionsBackground", - "Bubbler1", - "Smokey1", - "WizpigMouthSequence", - "WizpigAmuletSequence", - "TTAmuletSequence", - "RocketSequence", - "Trickytops2", - "DinoDomainTrophyAnim", - "SnowflakeMountainTrophyAnim", - "SherbetIslandTrophyAnim", - "DragonForestTrophyAnim", - "FutureFunLandTrophyAnim", - "Bluey2", - "Bubbler2", - "Smokey2", - "Wizpig2", - "PartySequence", - "TricktopsAnim", - "SmokeyAnim", - "BlueyAnim", - "Wizpig1Anim", - "BubblerAnim", - "Wizpig2Anim", - "LastBit", - "LastBitB" - ] - }, - { "type": "Table" }, - { - "type": "LevelModels", - "folder": "levels/models", - "table": 26 - }, - { "type": "Table" }, - { - "type": "ObjectModels", - "folder": "objects/models", - "table": 28 - }, - { - "type": "Binary", - "folder": "objects", - "filenames": [ "animation_ids" ] - }, - { "type": "Table" }, - { - "type": "ObjectAnimations", - "folder": "objects/animations", - "table": 31 - }, - { "type": "Table" }, - { - "type": "ObjectHeaders", - "folder": "objects/headers", - "table": 33 - }, - { - "type": "Binary", - "folder": "objects", - "filenames": [ "level_object_translation_table" ] - }, - { "type": "Table" }, - { "type": "Empty", "table": 36 }, - { "type": "Table" }, - { - "type": "Audio", - "folder": "audio", - "table": 38 - }, - { "type": "Table" }, - { - "type": "Particles", - "folder": "particles/particles", - "table": 40 - }, - { "type": "Table" }, - { - "type": "ParticleBehaviors", - "folder": "particles/behaviors", - "table": 42 - }, - { - "type": "Binary", - "folder": "fonts" - }, - { - "type": "Binary", - "folder": "fonts" - }, - { - "type": "Binary", - "folder": "fonts" - }, - { - "type": "Binary", - "folder": "ids" - }, - { "type": "Table" }, - { - "type": "TTGhosts", - "folder": "tt_ghosts", - "table": 48, - "filenames": [ - "FossilCanyon", - "PirateLagoon", - "AncientLake", - "WalrusCove", - "HotTopVolcano", - "WhaleBay", - "SnowballValley", - "CrescentIsland", - "EverfrostPeak", - "SpaceportAlpha", - "SpacedustAlley", - "GreenwoodVillage", - "BoulderCanyon", - "WindmillPlains", - "FrostyVillage", - "JungleFalls", - "TreasureCaves", - "HauntedWoods", - "DarkmoonCaverns", - "StarCity" - ] - } - ] - } -} - - - - - diff --git a/extract-ver/eu_1.1.config.json b/extract-ver/eu_1.1.config.json deleted file mode 100644 index b81a0470..00000000 --- a/extract-ver/eu_1.1.config.json +++ /dev/null @@ -1,416 +0,0 @@ -{ - "config-name" : "Diddy Kong Racing (Europe v1.1)", - "checksum-md5" : "6b2bafe540e0af052a78e85b992be999", - "subfolder" : "eu_1.1", - "code" : { - "sections" : [ - { - "type": "NoExtract", - "folder" : "", - "files" : [ - { "filename": "work-in-progress", "length" : "0xED170" } - ] - } - ] - }, - "assets" : { - "sections": [ - { - "type": "Binary", - "folder": "ai-racers", - "table": 1 - }, - { "type": "Table" }, - { - "type": "Textures", - "folder": "textures/3d", - "table": 3, - "flip-textures": [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] - }, - { "type": "Table" }, - { - "type": "Textures", - "folder": "textures/2d", - "table": 5, - "flip-textures" : [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] - }, - { "type": "Table" }, - { - "type": "GameText", - "folder": "text/game", - "table": 7 - }, - { "type": "Table" }, - { - "type": "MenuText", - "folder": "text/menu", - "table": 9, - "filenames": [ - "english_menu_text", - "german_menu_text", - "french_menu_text", - "japanese_menu_text" - ] - }, - { "type": "Table" }, - { "type": "Empty", "table": 11}, - { "type": "Table" }, - { - "type": "Sprites", - "folder": "sprites", - "table": 13 - }, - { "type": "Table" }, - { "type": "Empty" }, - { - "type": "Miscellaneous", - "folder": "misc", - "table": 16, - "filenames": [ - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "tracks_menu_ids", - "hub_area_ids", - "main_tracks_ids", - "battle_tracks_ids", - "boss_tracks_ids", - "", - "", - "RacerStats_Unknown0", - "RacerStats_Diddy", - "RacerStats_TT", - "RacerStats_Unknown1", - "RacerStats_Krunch", - "RacerStats_Bumper", - "RacerStats_Tiptup", - "RacerStats_Conker", - "RacerStats_Timber", - "RacerStats_Banjo", - "RacerStats_Drumstick", - "RacerStats_Pipsy", - "RacerStats_Unknown2", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "magic_codes", - "title_screen_demo_ids", - "", - "", - "", - "" - ] - }, - { "type": "Table" }, - { - "type": "Binary", - "folder": "ids", - "filenames": [ "hud_element_ids" ] - }, - { - "type": "Binary", - "folder": "ids", - "filenames": [ "menu_element_ids" ] - }, - { - "type": "Binary", - "folder": "bin", - "filenames": [ "unknown_table" ] - }, - { "type": "Table" }, - { - "type": "LevelObjectMap", - "folder": "levels/objectMaps", - "table": 20 - }, - { "type": "Table" }, - { - "type": "LevelHeaders", - "folder": "levels/headers", - "table": 22, - "filenames": [ - "CentralAreaHub", - "Bluey1", - "DragonForestHub", - "FossilCanyon", - "PirateLagoon", - "AncientLake", - "WalrusCove", - "HotTopVolcano", - "WhaleBay", - "SnowballValley", - "CrescentIsland", - "FireMountain", - "DinoDomainHub", - "EverfrostPeak", - "SherbetIslandHub", - "SpaceportAlpha", - "HorseshoeGulch", - "SpacedustAlley", - "GreenwoodVillage", - "BoulderCanyon", - "WindmillPlains", - "FrontEnd", - "CharacterSelect", - "TitleScreenSequence", - "SnowflakeMountainHub", - "SmokeyCastle", - "DarkwaterBeach", - "IciclePyramid", - "FrostyVillage", - "JungleFalls", - "TreasureCaves", - "HauntedWoods", - "DarkmoonCaverns", - "StarCity", - "TrophyRace", - "FutureFunLandHub", - "OpeningSequence", - "Wizpig1", - "Trickytops1", - "OptionsBackground", - "Bubbler1", - "Smokey1", - "WizpigMouthSequence", - "WizpigAmuletSequence", - "TTAmuletSequence", - "RocketSequence", - "Trickytops2", - "DinoDomainTrophyAnim", - "SnowflakeMountainTrophyAnim", - "SherbetIslandTrophyAnim", - "DragonForestTrophyAnim", - "FutureFunLandTrophyAnim", - "Bluey2", - "Bubbler2", - "Smokey2", - "Wizpig2", - "PartySequence", - "TricktopsAnim", - "SmokeyAnim", - "BlueyAnim", - "Wizpig1Anim", - "BubblerAnim", - "Wizpig2Anim", - "LastBit", - "LastBitB" - ] - }, - { "type": "Table" }, - { - "type": "LevelNames", - "folder": "levels/names", - "table": 24, - "filenames": [ - "CentralAreaHub", - "Bluey1", - "DragonForestHub", - "FossilCanyon", - "PirateLagoon", - "AncientLake", - "WalrusCove", - "HotTopVolcano", - "WhaleBay", - "SnowballValley", - "CrescentIsland", - "FireMountain", - "DinoDomainHub", - "EverfrostPeak", - "SherbetIslandHub", - "SpaceportAlpha", - "HorseshoeGulch", - "SpacedustAlley", - "GreenwoodVillage", - "BoulderCanyon", - "WindmillPlains", - "FrontEnd", - "CharacterSelect", - "TitleScreenSequence", - "SnowflakeMountainHub", - "SmokeyCastle", - "DarkwaterBeach", - "IciclePyramid", - "FrostyVillage", - "JungleFalls", - "TreasureCaves", - "HauntedWoods", - "DarkmoonCaverns", - "StarCity", - "TrophyRace", - "FutureFunLandHub", - "OpeningSequence", - "Wizpig1", - "Trickytops1", - "OptionsBackground", - "Bubbler1", - "Smokey1", - "WizpigMouthSequence", - "WizpigAmuletSequence", - "TTAmuletSequence", - "RocketSequence", - "Trickytops2", - "DinoDomainTrophyAnim", - "SnowflakeMountainTrophyAnim", - "SherbetIslandTrophyAnim", - "DragonForestTrophyAnim", - "FutureFunLandTrophyAnim", - "Bluey2", - "Bubbler2", - "Smokey2", - "Wizpig2", - "PartySequence", - "TricktopsAnim", - "SmokeyAnim", - "BlueyAnim", - "Wizpig1Anim", - "BubblerAnim", - "Wizpig2Anim", - "LastBit", - "LastBitB" - ] - }, - { "type": "Table" }, - { - "type": "LevelModels", - "folder": "levels/models", - "table": 26 - }, - { "type": "Table" }, - { - "type": "ObjectModels", - "folder": "objects/models", - "table": 28 - }, - { - "type": "Binary", - "folder": "objects", - "filenames": [ "animation_ids" ] - }, - { "type": "Table" }, - { - "type": "ObjectAnimations", - "folder": "objects/animations", - "table": 31 - }, - { "type": "Table" }, - { - "type": "ObjectHeaders", - "folder": "objects/headers", - "table": 33 - }, - { - "type": "Binary", - "folder": "objects", - "filenames": [ "level_object_translation_table" ] - }, - { "type": "Table" }, - { "type": "Empty", "table": 36 }, - { "type": "Table" }, - { - "type": "Audio", - "folder": "audio", - "table": 38 - }, - { "type": "Table" }, - { - "type": "Particles", - "folder": "particles/particles", - "table": 40 - }, - { "type": "Table" }, - { - "type": "ParticleBehaviors", - "folder": "particles/behaviors", - "table": 42 - }, - { - "type": "Binary", - "folder": "fonts" - }, - { - "type": "Binary", - "folder": "fonts" - }, - { - "type": "Binary", - "folder": "fonts" - }, - { - "type": "Binary", - "folder": "ids" - }, - { "type": "Table" }, - { - "type": "TTGhosts", - "folder": "tt_ghosts", - "table": 48, - "filenames": [ - "FossilCanyon", - "PirateLagoon", - "AncientLake", - "WalrusCove", - "HotTopVolcano", - "WhaleBay", - "SnowballValley", - "CrescentIsland", - "EverfrostPeak", - "SpaceportAlpha", - "SpacedustAlley", - "GreenwoodVillage", - "BoulderCanyon", - "WindmillPlains", - "FrostyVillage", - "JungleFalls", - "TreasureCaves", - "HauntedWoods", - "DarkmoonCaverns", - "StarCity" - ] - } - ] - } -} - - - - - diff --git a/extract-ver/jp.config.json b/extract-ver/jp.config.json deleted file mode 100644 index ebcbc871..00000000 --- a/extract-ver/jp.config.json +++ /dev/null @@ -1,416 +0,0 @@ -{ - "config-name" : "Diddy Kong Racing (Japan)", - "checksum-md5" : "10747662a55241b9234cd114c940504f", - "subfolder" : "jp", - "code" : { - "sections" : [ - { - "type": "NoExtract", - "folder" : "", - "files" : [ - { "filename": "work-in-progress", "length" : "0xEE5D0" } - ] - } - ] - }, - "assets" : { - "sections": [ - { - "type": "Binary", - "folder": "ai-racers", - "table": 1 - }, - { "type": "Table" }, - { - "type": "Textures", - "folder": "textures/3d", - "table": 3, - "flip-textures": [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] - }, - { "type": "Table" }, - { - "type": "Textures", - "folder": "textures/2d", - "table": 5, - "flip-textures" : [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] - }, - { "type": "Table" }, - { - "type": "GameText", - "folder": "text/game", - "table": 7 - }, - { "type": "Table" }, - { - "type": "MenuText", - "folder": "text/menu", - "table": 9, - "filenames": [ - "english_menu_text", - "german_menu_text", - "french_menu_text", - "japanese_menu_text" - ] - }, - { "type": "Table" }, - { "type": "Empty", "table": 11}, - { "type": "Table" }, - { - "type": "Sprites", - "folder": "sprites", - "table": 13 - }, - { "type": "Table" }, - { "type": "Empty" }, - { - "type": "Miscellaneous", - "folder": "misc", - "table": 16, - "filenames": [ - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "tracks_menu_ids", - "hub_area_ids", - "main_tracks_ids", - "battle_tracks_ids", - "boss_tracks_ids", - "", - "", - "RacerStats_Unknown0", - "RacerStats_Diddy", - "RacerStats_TT", - "RacerStats_Unknown1", - "RacerStats_Krunch", - "RacerStats_Bumper", - "RacerStats_Tiptup", - "RacerStats_Conker", - "RacerStats_Timber", - "RacerStats_Banjo", - "RacerStats_Drumstick", - "RacerStats_Pipsy", - "RacerStats_Unknown2", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "magic_codes", - "title_screen_demo_ids", - "", - "", - "", - "" - ] - }, - { "type": "Table" }, - { - "type": "Binary", - "folder": "ids", - "filenames": [ "hud_element_ids" ] - }, - { - "type": "Binary", - "folder": "ids", - "filenames": [ "menu_element_ids" ] - }, - { - "type": "Binary", - "folder": "bin", - "filenames": [ "unknown_table" ] - }, - { "type": "Table" }, - { - "type": "LevelObjectMap", - "folder": "levels/objectMaps", - "table": 20 - }, - { "type": "Table" }, - { - "type": "LevelHeaders", - "folder": "levels/headers", - "table": 22, - "filenames": [ - "CentralAreaHub", - "Bluey1", - "DragonForestHub", - "FossilCanyon", - "PirateLagoon", - "AncientLake", - "WalrusCove", - "HotTopVolcano", - "WhaleBay", - "SnowballValley", - "CrescentIsland", - "FireMountain", - "DinoDomainHub", - "EverfrostPeak", - "SherbetIslandHub", - "SpaceportAlpha", - "HorseshoeGulch", - "SpacedustAlley", - "GreenwoodVillage", - "BoulderCanyon", - "WindmillPlains", - "FrontEnd", - "CharacterSelect", - "TitleScreenSequence", - "SnowflakeMountainHub", - "SmokeyCastle", - "DarkwaterBeach", - "IciclePyramid", - "FrostyVillage", - "JungleFalls", - "TreasureCaves", - "HauntedWoods", - "DarkmoonCaverns", - "StarCity", - "TrophyRace", - "FutureFunLandHub", - "OpeningSequence", - "Wizpig1", - "Trickytops1", - "OptionsBackground", - "Bubbler1", - "Smokey1", - "WizpigMouthSequence", - "WizpigAmuletSequence", - "TTAmuletSequence", - "RocketSequence", - "Trickytops2", - "DinoDomainTrophyAnim", - "SnowflakeMountainTrophyAnim", - "SherbetIslandTrophyAnim", - "DragonForestTrophyAnim", - "FutureFunLandTrophyAnim", - "Bluey2", - "Bubbler2", - "Smokey2", - "Wizpig2", - "PartySequence", - "TricktopsAnim", - "SmokeyAnim", - "BlueyAnim", - "Wizpig1Anim", - "BubblerAnim", - "Wizpig2Anim", - "LastBit", - "LastBitB" - ] - }, - { "type": "Table" }, - { - "type": "LevelNames", - "folder": "levels/names", - "table": 24, - "filenames": [ - "CentralAreaHub", - "Bluey1", - "DragonForestHub", - "FossilCanyon", - "PirateLagoon", - "AncientLake", - "WalrusCove", - "HotTopVolcano", - "WhaleBay", - "SnowballValley", - "CrescentIsland", - "FireMountain", - "DinoDomainHub", - "EverfrostPeak", - "SherbetIslandHub", - "SpaceportAlpha", - "HorseshoeGulch", - "SpacedustAlley", - "GreenwoodVillage", - "BoulderCanyon", - "WindmillPlains", - "FrontEnd", - "CharacterSelect", - "TitleScreenSequence", - "SnowflakeMountainHub", - "SmokeyCastle", - "DarkwaterBeach", - "IciclePyramid", - "FrostyVillage", - "JungleFalls", - "TreasureCaves", - "HauntedWoods", - "DarkmoonCaverns", - "StarCity", - "TrophyRace", - "FutureFunLandHub", - "OpeningSequence", - "Wizpig1", - "Trickytops1", - "OptionsBackground", - "Bubbler1", - "Smokey1", - "WizpigMouthSequence", - "WizpigAmuletSequence", - "TTAmuletSequence", - "RocketSequence", - "Trickytops2", - "DinoDomainTrophyAnim", - "SnowflakeMountainTrophyAnim", - "SherbetIslandTrophyAnim", - "DragonForestTrophyAnim", - "FutureFunLandTrophyAnim", - "Bluey2", - "Bubbler2", - "Smokey2", - "Wizpig2", - "PartySequence", - "TricktopsAnim", - "SmokeyAnim", - "BlueyAnim", - "Wizpig1Anim", - "BubblerAnim", - "Wizpig2Anim", - "LastBit", - "LastBitB" - ] - }, - { "type": "Table" }, - { - "type": "LevelModels", - "folder": "levels/models", - "table": 26 - }, - { "type": "Table" }, - { - "type": "ObjectModels", - "folder": "objects/models", - "table": 28 - }, - { - "type": "Binary", - "folder": "objects", - "filenames": [ "animation_ids" ] - }, - { "type": "Table" }, - { - "type": "ObjectAnimations", - "folder": "objects/animations", - "table": 31 - }, - { "type": "Table" }, - { - "type": "ObjectHeaders", - "folder": "objects/headers", - "table": 33 - }, - { - "type": "Binary", - "folder": "objects", - "filenames": [ "level_object_translation_table" ] - }, - { "type": "Table" }, - { "type": "Empty", "table": 36 }, - { "type": "Table" }, - { - "type": "Audio", - "folder": "audio", - "table": 38 - }, - { "type": "Table" }, - { - "type": "Particles", - "folder": "particles/particles", - "table": 40 - }, - { "type": "Table" }, - { - "type": "ParticleBehaviors", - "folder": "particles/behaviors", - "table": 42 - }, - { - "type": "Binary", - "folder": "fonts" - }, - { - "type": "Binary", - "folder": "fonts" - }, - { - "type": "Binary", - "folder": "fonts" - }, - { - "type": "Binary", - "folder": "ids" - }, - { "type": "Table" }, - { - "type": "TTGhosts", - "folder": "tt_ghosts", - "table": 48, - "filenames": [ - "FossilCanyon", - "PirateLagoon", - "AncientLake", - "WalrusCove", - "HotTopVolcano", - "WhaleBay", - "SnowballValley", - "CrescentIsland", - "EverfrostPeak", - "SpaceportAlpha", - "SpacedustAlley", - "GreenwoodVillage", - "BoulderCanyon", - "WindmillPlains", - "FrostyVillage", - "JungleFalls", - "TreasureCaves", - "HauntedWoods", - "DarkmoonCaverns", - "StarCity" - ] - } - ] - } -} - - - - - diff --git a/extract-ver/us_1.0.config.json b/extract-ver/us_1.0.config.json deleted file mode 100644 index 470b2749..00000000 --- a/extract-ver/us_1.0.config.json +++ /dev/null @@ -1,20509 +0,0 @@ -{ - "config-name": "Diddy Kong Racing (USA v1.0)", - "checksum-md5": "4f0e07f0eeac7e5d7ce3a75461888d03", - "subfolder": "us_1.0", - "revision": 3, - "code": { - "sections": [ - { - "type": "NoExtract", - "folder": "", - "files": [ - { - "filename": "rom_header", - "length": "0x40" - } - ] - }, - { - "type": "Binary", - "folder": "asm/boot", - "files": [ - { - "filename": "boot", - "length": "0xFC0" - } - ] - }, - { - "type": "NoExtract", - "folder": "", - "files": [ - { - "filename": "game_code", - "length": "0xD7200" - } - ] - }, - { - "type": "Binary", - "folder": "ucode/us_1.0", - "files": [ - { - "filename": "ucode_audio", - "length": "0xEC0" - }, - { - "filename": "ucode_boot", - "length": "0xD0" - }, - { - "filename": "ucode_f3ddkr_dram", - "length": "0x1200" - }, - { - "filename": "ucode_f3ddkr_fifo", - "length": "0x11E0" - }, - { - "filename": "ucode_f3ddkr_xbus", - "length": "0x1200" - }, - { - "filename": "ucode_unknown_2", - "length": "0xAC0" - } - ] - }, - { - "type": "NoExtract", - "folder": "", - "files": [ - { - "filename": "game_data", - "length": "0xD2A0" - } - ] - }, - { - "type": "Binary", - "folder": "ucode/us_1.0", - "files": [ - { - "filename": "data_audio", - "length": "0x2D0" - }, - { - "filename": "data_f3ddkr_dram", - "length": "0x800" - }, - { - "filename": "data_f3ddkr_fifo", - "length": "0x800" - }, - { - "filename": "data_f3ddkr_xbus", - "length": "0x800" - }, - { - "filename": "data_unknown_2", - "length": "0xBC0" - } - ] - } - ] - }, - "assets": { - "sections": [ - { - "build-id": "ASSET_AI_BEHAVIOUR", - "type": "Binary", - "folder": "ai-racers", - "table": 1 - }, - { - "build-id": "ASSET_AI_BEHAVIOUR_TABLE", - "type": "Table", - "for": "ASSET_AI_BEHAVIOUR" - }, - { - "build-id": "ASSET_TEXTURES_3D", - "type": "Texture", - "folder": "textures/3d", - "table": 3, - "flip-textures-by-default": true, - "files-default-folder": "unlabeled", - "default-build-id-prefix": "ASSET_TEX3D_", - "files": [ - { - "index": 0, - "filename": "white_wall_200496", - "build-id": "ASSET_TEX3D_SPACE_WHITEWALL200496", - "folder": "space" - }, - { - "index": 1, - "filename": "green_wall_337", - "build-id": "ASSET_TEX3D_SPACE_GREENWALL337", - "folder": "space" - }, - { - "index": 2, - "filename": "white_wall", - "build-id": "ASSET_TEX3D_SPACE_WHITEWALL", - "folder": "space" - }, - { - "index": 3, - "filename": "white_wall_with_arrow", - "build-id": "ASSET_TEX3D_SPACE_WHITEWALLWITHARROW", - "folder": "space" - }, - { - "index": 4, - "filename": "neon_rocket_sign", - "build-id": "ASSET_TEX3D_SPACE_NEONROCKETSIGN", - "folder": "space" - }, - { - "index": 5, - "filename": "water", - "build-id": "ASSET_TEX3D_COMMON_WATER", - "folder": "common" - }, - { - "index": 6, - "filename": "water2", - "build-id": "ASSET_TEX3D_COMMON_WATER2", - "folder": "common" - }, - { - "index": 7, - "filename": "zipper", - "build-id": "ASSET_TEX3D_OBJECTS_ZIPPER", - "folder": "objects" - }, - { - "index": 8, - "filename": "ceiling_lights", - "build-id": "ASSET_TEX3D_SPACE_CEILINGLIGHTS", - "folder": "space" - }, - { - "index": 9, - "filename": "white_wall_alpha_0", - "build-id": "ASSET_TEX3D_SPACE_WHITEWALLALPHA_0", - "folder": "space" - }, - { - "index": 10, - "filename": "white_wall_alpha_1", - "build-id": "ASSET_TEX3D_SPACE_WHITEWALLALPHA_1", - "folder": "space" - }, - { - "index": 11, - "filename": "white_wall_blue_line", - "build-id": "ASSET_TEX3D_SPACE_WHITEWALLBLUELINE", - "folder": "space" - }, - { - "index": 12, - "filename": "water3", - "build-id": "ASSET_TEX3D_COMMON_WATER3", - "folder": "common" - }, - { - "index": 13, - "filename": "water_still", - "build-id": "ASSET_TEX3D_COMMON_WATERSTILL", - "folder": "common" - }, - { - "index": 14, - "filename": "red_arrow_sign", - "build-id": "ASSET_TEX3D_COMMON_REDARROWSIGN", - "folder": "common" - }, - { - "index": 15, - "filename": "water4", - "build-id": "ASSET_TEX3D_COMMON_WATER4", - "folder": "common" - }, - { - "index": 16, - "filename": "lava", - "build-id": "ASSET_TEX3D_COMMON_LAVA", - "folder": "common" - }, - { - "index": 17, - "filename": "zipper2", - "build-id": "ASSET_TEX3D_OBJECTS_ZIPPER2", - "folder": "objects" - }, - { - "index": 18, - "filename": "pirateship_taffrail", - "build-id": "ASSET_TEX3D_TROPICAL_PIRATESHIPTAFFRAIL", - "folder": "tropical" - }, - { - "index": 19, - "filename": "yellow_arrow_sign", - "build-id": "ASSET_TEX3D_COMMON_YELLOWARROWSIGN", - "folder": "common" - }, - { - "index": 20, - "filename": "floor_tile", - "build-id": "ASSET_TEX3D_COMMON_FLOORTILE", - "folder": "common" - }, - { - "index": 21, - "filename": "ice", - "build-id": "ASSET_TEX3D_WINTER_ICE", - "folder": "winter" - }, - { - "index": 22, - "filename": "ice2", - "build-id": "ASSET_TEX3D_WINTER_ICE2", - "folder": "winter" - }, - { - "index": 23, - "filename": "snowy_wall", - "build-id": "ASSET_TEX3D_WINTER_SNOWYWALL", - "folder": "winter" - }, - { - "index": 24, - "filename": "candy_cane", - "build-id": "ASSET_TEX3D_WINTER_CANDYCANE", - "folder": "winter" - }, - { - "index": 25, - "filename": "igloo_brick", - "build-id": "ASSET_TEX3D_WINTER_IGLOOBRICK", - "folder": "winter" - }, - { - "index": 26, - "filename": "sand", - "build-id": "ASSET_TEX3D_COMMON_SAND", - "folder": "common" - }, - { - "index": 27, - "filename": "boost_loop", - "build-id": "ASSET_TEX3D_SPACE_BOOSTLOOP", - "folder": "space" - }, - { - "index": 28, - "filename": "dirt_wall_sandy", - "build-id": "ASSET_TEX3D_TROPICAL_DIRTWALLSANDY", - "folder": "tropical" - }, - { - "index": 29, - "filename": "dirt_wall", - "build-id": "ASSET_TEX3D_TROPICAL_DIRTWALL", - "folder": "tropical" - }, - { - "index": 30, - "filename": "rock_guardrail", - "build-id": "ASSET_TEX3D_TROPICAL_ROCKGUARDRAIL", - "folder": "tropical" - }, - { - "index": 31, - "filename": "blue_yellow_arrows", - "build-id": "ASSET_TEX3D_COMMON_BLUEYELLOWARROWS", - "folder": "common" - }, - { - "index": 32, - "filename": "castle_window", - "build-id": "ASSET_TEX3D_MEDIEVAL_CASTLEWINDOW", - "folder": "medieval" - }, - { - "index": 33, - "filename": "castle_bridge", - "build-id": "ASSET_TEX3D_MEDIEVAL_CASTLEBRIDGE", - "folder": "medieval" - }, - { - "index": 34, - "filename": "yellow_stone", - "build-id": "ASSET_TEX3D_MEDIEVAL_YELLOWSTONE", - "folder": "medieval" - }, - { - "index": 35, - "filename": "yellow_stone_hillside", - "build-id": "ASSET_TEX3D_MEDIEVAL_YELLOWSTONEHILLSIDE", - "folder": "medieval" - }, - { - "index": 36, - "filename": "beta_dkr_logo", - "build-id": "ASSET_TEX3D_UNUSED_BETADKRLOGO", - "folder": "unused" - }, - { - "index": 37, - "filename": "finish_line_0", - "build-id": "ASSET_TEX3D_SPACE_FINISHLINE_0", - "folder": "space" - }, - { - "index": 38, - "filename": "finish_line_1", - "build-id": "ASSET_TEX3D_SPACE_FINISHLINE_1", - "folder": "space" - }, - { - "index": 39, - "filename": "finish_line_2", - "build-id": "ASSET_TEX3D_SPACE_FINISHLINE_2", - "folder": "space" - }, - { - "index": 40, - "filename": "finish_line_3", - "build-id": "ASSET_TEX3D_SPACE_FINISHLINE_3", - "folder": "space" - }, - { - "index": 41, - "filename": "finish_line_4", - "build-id": "ASSET_TEX3D_SPACE_FINISHLINE_4", - "folder": "space" - }, - { - "index": 42, - "filename": "cave_wall", - "build-id": "ASSET_TEX3D_SPACE_CAVEWALL", - "folder": "space" - }, - { - "index": 43, - "filename": "smokey_fence", - "build-id": "ASSET_TEX3D_MEDIEVAL_SMOKEYFENCE", - "folder": "medieval" - }, - { - "index": 44, - "filename": "cobblestone_floor", - "build-id": "ASSET_TEX3D_COMMON_COBBLESTONEFLOOR", - "folder": "common" - }, - { - "index": 45, - "filename": "hay", - "build-id": "ASSET_TEX3D_MEDIEVAL_HAY", - "folder": "medieval" - }, - { - "index": 46, - "filename": "hay_eye", - "build-id": "ASSET_TEX3D_MEDIEVAL_HAYEYE", - "folder": "medieval" - }, - { - "index": 47, - "filename": "sunkin_ship_floorboard", - "build-id": "ASSET_TEX3D_TROPICAL_SUNKINSHIPFLOORBOARD", - "folder": "tropical" - }, - { - "index": 48, - "filename": "icy_floor", - "build-id": "ASSET_TEX3D_WINTER_ICYFLOOR", - "folder": "winter" - }, - { - "index": 49, - "filename": "windmill_base", - "build-id": "ASSET_TEX3D_MEDIEVAL_WINDMILLBASE", - "folder": "medieval" - }, - { - "index": 50, - "filename": "dirt_transition", - "build-id": "ASSET_TEX3D_MEDIEVAL_DIRTTRANSITION", - "folder": "medieval" - }, - { - "index": 51, - "filename": "wheat_field", - "build-id": "ASSET_TEX3D_MEDIEVAL_WHEATFIELD", - "folder": "medieval" - }, - { - "index": 52, - "filename": "castle_walls_with_shadow", - "build-id": "ASSET_TEX3D_MEDIEVAL_CASTLEWALLSWITHSHADOW", - "folder": "medieval" - }, - { - "index": 53, - "filename": "castle_walls", - "build-id": "ASSET_TEX3D_MEDIEVAL_CASTLEWALLS", - "folder": "medieval" - }, - { - "index": 54, - "filename": "castle_merlon", - "build-id": "ASSET_TEX3D_MEDIEVAL_CASTLEMERLON", - "folder": "medieval" - }, - { - "index": 55, - "filename": "orange_wall", - "build-id": "ASSET_TEX3D_DINO_ORANGEWALL", - "folder": "dino" - }, - { - "index": 56, - "filename": "white_wall_bricks", - "build-id": "ASSET_TEX3D_SPACE_WHITEWALLBRICKS", - "folder": "space" - }, - { - "index": 57, - "filename": "proam64_balloon_red_line", - "build-id": "ASSET_TEX3D_UNUSED_PROAM64BALLOONREDLINE", - "folder": "unused" - }, - { - "index": 58, - "filename": "fog", - "build-id": "ASSET_TEX3D_TROPICAL_FOG", - "folder": "tropical" - }, - { - "index": 59, - "filename": "windsail", - "build-id": "ASSET_TEX3D_MEDIEVAL_WINDSAIL", - "folder": "medieval" - }, - { - "index": 60, - "filename": "snowy_red_arrow_down", - "build-id": "ASSET_TEX3D_WINTER_SNOWYREDARROWDOWN", - "folder": "winter" - }, - { - "index": 61, - "filename": "garden_fence", - "build-id": "ASSET_TEX3D_MEDIEVAL_GARDENFENCE", - "folder": "medieval" - }, - { - "index": 62, - "filename": "village_white_wall", - "build-id": "ASSET_TEX3D_MEDIEVAL_VILLAGEWHITEWALL", - "folder": "medieval" - }, - { - "index": 63, - "filename": "hanging_moss", - "build-id": "ASSET_TEX3D_COMMON_HANGINGMOSS", - "folder": "common" - }, - { - "index": 64, - "filename": "hanging_moss2", - "build-id": "ASSET_TEX3D_COMMON_HANGINGMOSS2", - "folder": "common" - }, - { - "index": 65, - "filename": "grass", - "build-id": "ASSET_TEX3D_COMMON_GRASS", - "folder": "common" - }, - { - "index": 66, - "filename": "grass2", - "build-id": "ASSET_TEX3D_COMMON_GRASS2", - "folder": "common" - }, - { - "index": 67, - "filename": "unknown_rocky_texture", - "build-id": "ASSET_TEX3D_WINTER_UNKNOWNROCKYTEXTURE", - "folder": "winter" - }, - { - "index": 68, - "filename": "mossy_rock", - "build-id": "ASSET_TEX3D_TROPICAL_MOSSYROCK", - "folder": "tropical" - }, - { - "index": 69, - "filename": "mossy_rock2", - "build-id": "ASSET_TEX3D_TROPICAL_MOSSYROCK2", - "folder": "tropical" - }, - { - "index": 70, - "filename": "snowy_wall2", - "build-id": "ASSET_TEX3D_WINTER_SNOWYWALL2", - "folder": "tropical" - }, - { - "index": 71, - "filename": "debug_chequered_redyellow", - "build-id": "ASSET_TEX3D_COMMON_DEBUGREDYELLOW", - "folder": "common" - }, - { - "index": 72, - "filename": "debug_purple", - "build-id": "ASSET_TEX3D_COMMON_DEBUGPURPLE", - "folder": "common" - }, - { - "index": 73, - "filename": "ice3", - "build-id": "ASSET_TEX3D_WINTER_ICE3", - "folder": "winter" - }, - { - "index": 74, - "filename": "semitransparent_ice", - "build-id": "ASSET_TEX3D_WINTER_SEMITRANSICE", - "folder": "winter" - }, - { - "index": 75, - "filename": "semitransparent_ice2", - "build-id": "ASSET_TEX3D_WINTER_SEMITRANSICE2", - "folder": "winter" - }, - { - "index": 76, - "filename": "semitransparent_ice3", - "build-id": "ASSET_TEX3D_WINTER_SEMITRANSICE3", - "folder": "winter" - }, - { - "index": 77, - "filename": "tree_branch", - "build-id": "ASSET_TEX3D_MEDIEVAL_TREEBRANCH", - "folder": "medieval" - }, - { - "index": 78, - "filename": "ice_ceiling", - "build-id": "ASSET_TEX3D_WINTER_ICECEILING", - "folder": "winter" - }, - { - "index": 79, - "filename": "hanging_ice_0", - "build-id": "ASSET_TEX3D_WINTER_HANGINGICE_0", - "folder": "winter" - }, - { - "index": 80, - "filename": "hanging_ice_1", - "build-id": "ASSET_TEX3D_WINTER_HANGINGICE_1", - "folder": "winter" - }, - { - "index": 81, - "filename": "hanging_ice_2", - "build-id": "ASSET_TEX3D_WINTER_HANGINGICE_2", - "folder": "winter" - }, - { - "index": 82, - "filename": "crystal", - "build-id": "ASSET_TEX3D_WINTER_CRYSTAL", - "folder": "winter" - }, - { - "index": 83, - "filename": "crystal_shadow", - "build-id": "ASSET_TEX3D_WINTER_CRYSTALSHADOW", - "folder": "winter" - }, - { - "index": 84, - "filename": "dock64_0", - "build-id": "ASSET_TEX3D_SPACE_DOCK64_0", - "folder": "space" - }, - { - "index": 85, - "filename": "dock64_1", - "build-id": "ASSET_TEX3D_SPACE_DOCK64_1", - "folder": "space" - }, - { - "index": 86, - "filename": "dock64_2", - "build-id": "ASSET_TEX3D_SPACE_DOCK64_2", - "folder": "space" - }, - { - "index": 87, - "filename": "dock64_3", - "build-id": "ASSET_TEX3D_SPACE_DOCK64_3", - "folder": "space" - }, - { - "index": 88, - "filename": "dock64_4", - "build-id": "ASSET_TEX3D_SPACE_DOCK64_4", - "folder": "space" - }, - { - "index": 89, - "filename": "dock64_5", - "build-id": "ASSET_TEX3D_SPACE_DOCK64_5", - "folder": "space" - }, - { - "index": 90, - "filename": "dock64_6", - "build-id": "ASSET_TEX3D_SPACE_DOCK64_6", - "folder": "space" - }, - { - "index": 91, - "filename": "dock64_7", - "build-id": "ASSET_TEX3D_SPACE_DOCK64_7", - "folder": "space" - }, - { - "index": 92, - "filename": "dock64_8", - "build-id": "ASSET_TEX3D_SPACE_DOCK64_8", - "folder": "space" - }, - { - "index": 93, - "filename": "dock64_9", - "build-id": "ASSET_TEX3D_SPACE_DOCK64_9", - "folder": "space" - }, - { - "index": 94, - "filename": "dock64_10", - "build-id": "ASSET_TEX3D_SPACE_DOCK64_10", - "folder": "space" - }, - { - "index": 95, - "filename": "dock64_11", - "build-id": "ASSET_TEX3D_SPACE_DOCK64_11", - "folder": "space" - }, - { - "index": 96, - "filename": "wood", - "build-id": "ASSET_TEX3D_COMMON_WOOD", - "folder": "common" - }, - { - "index": 97, - "filename": "beta_n64logo_0", - "build-id": "ASSET_TEX3D_UNUSED_BETAN64LOGO_0", - "folder": "unused" - }, - { - "index": 98, - "filename": "beta_n64logo_1", - "build-id": "ASSET_TEX3D_UNUSED_BETAN64LOGO_1", - "folder": "unused" - }, - { - "index": 99, - "filename": "brown_brick_tile", - "build-id": "ASSET_TEX3D_TROPICAL_BROWNBRICKTILE", - "folder": "tropical" - }, - { - "index": 100, - "filename": "snow", - "build-id": "ASSET_TEX3D_WINTER_SNOW", - "folder": "winter" - }, - { - "index": 101, - "filename": "snow2", - "build-id": "ASSET_TEX3D_WINTER_SNOW2", - "folder": "winter" - }, - { - "index": 102, - "filename": "semitransparent_ice4", - "build-id": "ASSET_TEX3D_WINTER_SEMITRANSICE4", - "folder": "winter" - }, - { - "index": 103, - "filename": "portal", - "build-id": "ASSET_TEX3D_COMMON_PORTAL", - "folder": "common" - }, - { - "index": 104, - "filename": "stone_tile", - "build-id": "ASSET_TEX3D_MEDIEVAL_STONETILE", - "folder": "medieval" - }, - { - "index": 105, - "filename": "stone_tile2", - "build-id": "ASSET_TEX3D_MEDIEVAL_STONETILE2", - "folder": "medieval" - }, - { - "index": 106, - "filename": "brick_wall_with_snow", - "build-id": "ASSET_TEX3D_WINTER_BRICKWALLWITHSNOW", - "folder": "winter" - }, - { - "index": 107, - "filename": "brick_wall", - "build-id": "ASSET_TEX3D_TROPICAL_BRICKWALL", - "folder": "tropical" - }, - { - "index": 108, - "filename": "wood_planks", - "build-id": "ASSET_TEX3D_COMMON_WOODPLANKS", - "folder": "common" - }, - { - "index": 109, - "filename": "pirateship_wood_planks", - "build-id": "ASSET_TEX3D_TROPICAL_PIRATESHIPWOODPLANKS", - "folder": "tropical" - }, - { - "index": 110, - "filename": "life_preserver_ring", - "build-id": "ASSET_TEX3D_COMMON_LIFEPRESERVERRING", - "folder": "common" - }, - { - "index": 111, - "filename": "red_stone", - "build-id": "ASSET_TEX3D_TROPICAL_REDSTONE", - "folder": "tropical" - }, - { - "index": 112, - "filename": "stone", - "build-id": "ASSET_TEX3D_COMMON_STONE", - "folder": "common" - }, - { - "index": 113, - "filename": "rare_logo_stone", - "build-id": "ASSET_TEX3D_DINO_RARELOGOSTONE", - "folder": "dino" - }, - { - "index": 114, - "filename": "stone_wall_sandy", - "build-id": "ASSET_TEX3D_TROPICAL_STONEWALLSANDY", - "folder": "tropical" - }, - { - "index": 115, - "filename": "arrow_sign_shadow", - "build-id": "ASSET_TEX3D_COMMON_ARROWSIGNSHADOW", - "folder": "common" - }, - { - "index": 116, - "filename": "ice_bricks", - "build-id": "ASSET_TEX3D_WINTER_ICEBRICKS", - "folder": "winter" - }, - { - "index": 117, - "filename": "ice_bricks_with_snow", - "build-id": "ASSET_TEX3D_WINTER_ICEBRICKSWITHSNOW", - "folder": "winter" - }, - { - "index": 118, - "filename": "hanging_snow", - "build-id": "ASSET_TEX3D_WINTER_HANGINGSNOW", - "folder": "winter" - }, - { - "index": 119, - "filename": "hanging_snow2", - "build-id": "ASSET_TEX3D_WINTER_HANGINGSNOW2", - "folder": "winter" - }, - { - "index": 120, - "filename": "element_gradient", - "build-id": "ASSET_TEX3D_COMMON_ELEMENTGRADIENT", - "folder": "common" - }, - { - "index": 121, - "filename": "snow_trees_billboard_0", - "build-id": "ASSET_TEX3D_WINTER_SNOWTREESBILLBOARD_0", - "folder": "winter" - }, - { - "index": 122, - "filename": "snow_trees_billboard_1", - "build-id": "ASSET_TEX3D_WINTER_SNOWTREESBILLBOARD_1", - "folder": "winter" - }, - { - "index": 123, - "filename": "icy_snow", - "build-id": "ASSET_TEX3D_WINTER_ICYSNOW", - "folder": "winter" - }, - { - "index": 124, - "filename": "snowy_fence", - "build-id": "ASSET_TEX3D_WINTER_SNOWYFENCE", - "folder": "winter" - }, - { - "index": 125, - "filename": "icy_path", - "build-id": "ASSET_TEX3D_WINTER_ICYPATH", - "folder": "winter" - }, - { - "index": 126, - "filename": "jungle_trees_billboard_0", - "build-id": "ASSET_TEX3D_TROPICAL_JUNGLETREESBILLBOARD_0", - "folder": "tropical" - }, - { - "index": 127, - "filename": "jungle_trees_billboard_1", - "build-id": "ASSET_TEX3D_TROPICAL_JUNGLETREESBILLBOARD_1", - "folder": "tropical" - }, - { - "index": 128, - "filename": "mossy_ship_planks_broken", - "build-id": "ASSET_TEX3D_TROPICAL_MOSSYSHIPPLANKSBROKEN", - "folder": "tropical" - }, - { - "index": 129, - "filename": "mossy_ship_planks", - "build-id": "ASSET_TEX3D_TROPICAL_MOSSYSHIPPLANKS", - "folder": "tropical" - }, - { - "index": 130, - "filename": "mossy_ship_torn_sail", - "build-id": "ASSET_TEX3D_TROPICAL_MOSSYSHIPTORNSAIL", - "folder": "tropical" - }, - { - "index": 131, - "filename": "pirateship_rear_decoration", - "build-id": "ASSET_TEX3D_TROPICAL_PIRATESHIPREARDECORATION", - "folder": "tropical" - }, - { - "index": 132, - "filename": "thatch_roofing", - "build-id": "ASSET_TEX3D_MEDIEVAL_THATCHROOFING", - "folder": "medieval" - }, - { - "index": 133, - "filename": "house_window_with_plants", - "build-id": "ASSET_TEX3D_MEDIEVAL_HOUSEWINDOWWITHPLANTS", - "folder": "medieval" - }, - { - "index": 134, - "filename": "house_door", - "build-id": "ASSET_TEX3D_MEDIEVAL_HOUSEDOOR", - "folder": "medieval" - }, - { - "index": 135, - "filename": "house_roof_support", - "build-id": "ASSET_TEX3D_MEDIEVAL_HOUSEROOFSUPPORT", - "folder": "medieval" - }, - { - "index": 136, - "filename": "house_wall_support", - "build-id": "ASSET_TEX3D_MEDIEVAL_HOUSEWALLSUPPORT", - "folder": "medieval" - }, - { - "index": 137, - "filename": "white", - "build-id": "ASSET_TEX3D_COMMON_WHITE", - "folder": "common" - }, - { - "index": 138, - "filename": "finish_line_tape", - "build-id": "ASSET_TEX3D_COMMON_FINISHLINETAPE", - "folder": "common" - }, - { - "index": 139, - "filename": "ice_bricks2", - "build-id": "ASSET_TEX3D_WINTER_ICEBRICKS2", - "folder": "winter" - }, - { - "index": 140, - "filename": "water_still2", - "build-id": "ASSET_TEX3D_COMMON_WATERSTILL2", - "folder": "common" - }, - { - "index": 141, - "filename": "unused_track_select_frame_texture", - "build-id": "ASSET_TEX3D_COMMON_UNUSEDTRACKSELCTFRAMETEXTURE", - "folder": "common" - }, - { - "index": 142, - "filename": "sand_dry", - "build-id": "ASSET_TEX3D_COMMON_SANDDRY", - "folder": "common" - }, - { - "index": 143, - "filename": "sand_dry_to_wet", - "build-id": "ASSET_TEX3D_COMMON_SANDDRYTOWET", - "folder": "common" - }, - { - "index": 144, - "filename": "ancient_lake_sign", - "build-id": "ASSET_TEX3D_DINO_ANCIENTLAKESIGN", - "folder": "dino" - }, - { - "index": 145, - "filename": "log_exposed_side", - "build-id": "ASSET_TEX3D_COMMON_LOGEXPOSEDSIDE", - "folder": "common" - }, - { - "index": 146, - "filename": "brick_rail_with_snow_edge", - "build-id": "ASSET_TEX3D_WINTER_BRICKRAILWITHSNOWEDGE", - "folder": "winter" - }, - { - "index": 147, - "filename": "brick_rail_with_snow", - "build-id": "ASSET_TEX3D_WINTER_BRICKRAILWITHSNOW", - "folder": "winter" - }, - { - "index": 148, - "filename": "colourful_arrow", - "build-id": "ASSET_TEX3D_COMMON_COLOURFULARROW", - "folder": "common" - }, - { - "index": 149, - "filename": "blue_floor_tile", - "build-id": "ASSET_TEX3D_SPACE_BLUEFLOORTILE", - "folder": "common" - }, - { - "index": 150, - "filename": "pirateship_underside", - "build-id": "ASSET_TEX3D_TROPICAL_PIRATESHIPUNDERSIDE", - "folder": "tropical" - }, - { - "index": 151, - "filename": "pirateship_sails", - "build-id": "ASSET_TEX3D_TROPICAL_PIRATESHIPSAILS", - "folder": "tropical" - }, - { - "index": 152, - "filename": "pirateship_bowspirit", - "build-id": "ASSET_TEX3D_TROPICAL_PIRATESHIPBOWSPIRIT", - "folder": "tropical" - }, - { - "index": 153, - "filename": "sand2", - "build-id": "ASSET_TEX3D_COMMON_SAND2", - "folder": "common" - }, - { - "index": 154, - "filename": "trackselectframe_gold", - "build-id": "ASSET_TEX3D_OBJECTS_TRACKSELECTFRAMEGOLD", - "folder": "objects" - }, - { - "index": 155, - "filename": "pirateship_cannon", - "build-id": "ASSET_TEX3D_TROPICAL_PIRATESHIPCANNON", - "folder": "tropical" - }, - { - "index": 156, - "filename": "chain_link", - "build-id": "ASSET_TEX3D_COMMON_CHAINLINK", - "folder": "common" - }, - { - "index": 157, - "filename": "finish_line_tape2", - "build-id": "ASSET_TEX3D_COMMON_FINISHLINETAPE2", - "folder": "common" - }, - { - "index": 158, - "filename": "finish_line_water", - "build-id": "ASSET_TEX3D_COMMON_FINISHLINEWATER", - "folder": "common" - }, - { - "index": 159, - "filename": "finish_line_chequered_red_and_white", - "build-id": "ASSET_TEX3D_COMMON_FINISHLINECHEQUEREDREDWHITE", - "folder": "common" - }, - { - "index": 160, - "filename": "finish_line_chequered_red_and_yellow", - "build-id": "ASSET_TEX3D_COMMON_FINISHLINECHEQUEREDREDYELLOW", - "folder": "common" - }, - { - "index": 161, - "filename": "finish_line_chequered_purple_and_yellow", - "build-id": "ASSET_TEX3D_COMMON_FINISHLINECHEQUEREDPURPLEYELLOW", - "folder": "common" - }, - { - "index": 162, - "filename": "cyan_yellow_arrow_sign", - "build-id": "ASSET_TEX3D_COMMON_CYANYELLOWARROWSIGN", - "folder": "common" - }, - { - "index": 163, - "filename": "blue_yellow_arrows2_0", - "build-id": "ASSET_TEX3D_COMMON_BLUEYELLOWARROWS2_0", - "folder": "common" - }, - { - "index": 164, - "filename": "blue_yellow_arrows2_1", - "build-id": "ASSET_TEX3D_COMMON_BLUEYELLOWARROWS2_1", - "folder": "common" - }, - { - "index": 165, - "filename": "blue_yellow_arrows2_2", - "build-id": "ASSET_TEX3D_COMMON_BLUEYELLOWARROWS2_2", - "folder": "common" - }, - { - "index": 166, - "filename": "transparent", - "build-id": "ASSET_TEX3D_COMMON_TRANSPARENT", - "folder": "common" - }, - { - "index": 167, - "filename": "stone_with_grass", - "build-id": "ASSET_TEX3D_UNUSED_STONEWITHGRASS", - "folder": "unused" - }, - { - "index": 168, - "filename": "orange_stone", - "build-id": "ASSET_TEX3D_DINO_ORANGESTONE", - "folder": "dino" - }, - { - "index": 169, - "filename": "thin_cloud", - "build-id": "ASSET_TEX3D_DINO_THINCLOUD", - "folder": "dino" - }, - { - "index": 170, - "filename": "dome_clouds", - "build-id": "ASSET_TEX3D_OBJECTS_DOMECLOUDS", - "folder": "objects" - }, - { - "index": 171, - "filename": "dome_clouds2", - "build-id": "ASSET_TEX3D_OBJECTS_DOMECLOUDS2", - "folder": "objects" - }, - { - "index": 172, - "filename": "temple_brick", - "build-id": "ASSET_TEX3D_DINO_TEMPLEBRICK", - "folder": "dino" - }, - { - "index": 173, - "filename": "snow3", - "build-id": "ASSET_TEX3D_WINTER_SNOW3", - "folder": "winter" - }, - { - "index": 174, - "filename": "temple_brick_tile", - "build-id": "ASSET_TEX3D_DINO_TEMPLEBRICKTILE", - "folder": "dino" - }, - { - "index": 175, - "filename": "castle_tower_block", - "build-id": "ASSET_TEX3D_TROPICAL_CASTLETOWERBLOCK", - "folder": "tropical" - }, - { - "index": 176, - "filename": "bridge", - "build-id": "ASSET_TEX3D_UNUSED_BRIDGE", - "folder": "unused" - }, - { - "index": 177, - "filename": "bridge2", - "build-id": "ASSET_TEX3D_UNUSED_BRIDGE2", - "folder": "unused" - }, - { - "index": 178, - "filename": "flashing_arrow", - "build-id": "ASSET_TEX3D_COMMON_FLASHINGARROW", - "folder": "common" - }, - { - "index": 179, - "filename": "metal_environment_map", - "build-id": "ASSET_TEX3D_UNUSED_METALENVIRONMENTMAP", - "folder": "unused" - }, - { - "index": 180, - "filename": "grass_transition", - "build-id": "ASSET_TEX3D_COMMON_GRASSTRANSITION", - "folder": "common" - }, - { - "index": 181, - "filename": "grass3", - "build-id": "ASSET_TEX3D_COMMON_GRASS3", - "folder": "common" - }, - { - "index": 182, - "filename": "pirateship_guardrail", - "build-id": "ASSET_TEX3D_TROPICAL_PIRATESHIPGUARDRAIL", - "folder": "tropical" - }, - { - "index": 183, - "filename": "wood_bridge", - "build-id": "ASSET_TEX3D_OBJECTS_WOODBRIDGE", - "folder": "objects" - }, - { - "index": 184, - "filename": "snowy_path", - "build-id": "ASSET_TEX3D_WINTER_SNOWYPATH", - "folder": "winter" - }, - { - "index": 185, - "filename": "mossy_overlay", - "build-id": "ASSET_TEX3D_TROPICAL_MOSSYOVERLAY", - "folder": "winter" - }, - { - "index": 186, - "filename": "fossil_canyon_sign", - "build-id": "ASSET_TEX3D_DINO_FOSSILCANYONSIGN", - "folder": "dino" - }, - { - "index": 187, - "filename": "trophy_cab_base", - "build-id": "ASSET_TEX3D_OBJECTS_TROPHYCABBASE", - "folder": "objects" - }, - { - "index": 188, - "filename": "orange_stone_wall_hillside", - "build-id": "ASSET_TEX3D_COMMON_ORANGESTONEWALLHILLSIDE", - "folder": "common" - }, - { - "index": 189, - "filename": "blue_stone_wall_sandy_with_moss", - "build-id": "ASSET_TEX3D_TROPICAL_BLUESTONEWALLSANDYWITHMOSS", - "folder": "tropical" - }, - { - "index": 190, - "filename": "dirt_blue_stone_transition", - "build-id": "ASSET_TEX3D_COMMON_DIRTBLUESTONETRANSITION", - "folder": "common" - }, - { - "index": 191, - "filename": "blue_stone", - "build-id": "ASSET_TEX3D_COMMON_BLUESTONE", - "folder": "common" - }, - { - "index": 192, - "filename": "blue_stone_sandy", - "build-id": "ASSET_TEX3D_COMMON_BLUESTONESANDY", - "folder": "common" - }, - { - "index": 193, - "filename": "hot_top_volcano_sign", - "build-id": "ASSET_TEX3D_DINO_HOTTOPVOLCANOSIGN", - "folder": "dino" - }, - { - "index": 194, - "filename": "unknown_icy_texture", - "build-id": "ASSET_TEX3D_UNUSED_UNKNOWNICYTEXTURE", - "folder": "unused" - }, - { - "index": 195, - "filename": "transparent", - "build-id": "ASSET_TEX3D_UNUSED_TRANSPARENT", - "folder": "unused" - }, - { - "index": 196, - "filename": "blue_stone_wall_sandy_heavy_moss", - "build-id": "ASSET_TEX3D_TROPICAL_BLUESTONEWALLSANDYHEAVYMOSS", - "folder": "tropical" - }, - { - "index": 197, - "filename": "moss", - "build-id": "ASSET_TEX3D_UNUSED_MOSS", - "folder": "unused" - }, - { - "index": 198, - "filename": "jungle_falls_sign", - "build-id": "ASSET_TEX3D_DINO_JUNGLEFALLSSIGN", - "folder": "dino" - }, - { - "index": 199, - "filename": "blinking_computer_lights", - "build-id": "ASSET_TEX3D_SPACE_BLINKINGCOMPUTERLIGHTS", - "folder": "space" - }, - { - "index": 200, - "filename": "yellow_house_wall", - "build-id": "ASSET_TEX3D_MEDIEVAL_YELLOWHOUSEWALL", - "folder": "medieval" - }, - { - "index": 201, - "filename": "coloured_lamp", - "build-id": "ASSET_TEX3D_COMMON_COLOUREDLAMP", - "folder": "common" - }, - { - "index": 202, - "filename": "volcano_wall", - "build-id": "ASSET_TEX3D_DINO_VOLCANOWALL", - "folder": "dino" - }, - { - "index": 203, - "filename": "volcano_wall_magma_transition", - "build-id": "ASSET_TEX3D_DINO_VOLCANOWALLMAGMATRANSITION", - "folder": "dino" - }, - { - "index": 204, - "filename": "magma_high_line_transition", - "build-id": "ASSET_TEX3D_DINO_MAGMAHIGHLINETRANSITION", - "folder": "dino" - }, - { - "index": 205, - "filename": "volcano_wall2", - "build-id": "ASSET_TEX3D_DINO_VOLCANOWALL2", - "folder": "dino" - }, - { - "index": 206, - "filename": "yellow_brick_tile", - "build-id": "ASSET_TEX3D_COMMON_YELLOWBRICKTILE", - "folder": "common" - }, - { - "index": 207, - "filename": "yellow_brick_tile2", - "build-id": "ASSET_TEX3D_COMMON_YELLOWBRICKTILE2", - "folder": "common" - }, - { - "index": 208, - "filename": "grass_uncolored", - "build-id": "ASSET_TEX3D_TROPICAL_GRASSUNCOLORED", - "folder": "tropical" - }, - { - "index": 209, - "filename": "blue_wall_with_yellow_arrows", - "build-id": "ASSET_TEX3D_SPACE_BLUEWALLWITHYELLOWARROWS", - "folder": "space" - }, - { - "index": 210, - "filename": "blue_wall_small_light", - "build-id": "ASSET_TEX3D_SPACE_BLUEWALLSMALLLIGHT", - "folder": "space" - }, - { - "index": 211, - "filename": "blue_wall", - "build-id": "ASSET_TEX3D_SPACE_BLUEWALL", - "folder": "space" - }, - { - "index": 212, - "filename": "wall_tile_lights", - "build-id": "ASSET_TEX3D_SPACE_WALLTILELIGHTS", - "folder": "space" - }, - { - "index": 213, - "filename": "grass4", - "build-id": "ASSET_TEX3D_COMMON_GRASS4", - "folder": "common" - }, - { - "index": 214, - "filename": "grass5", - "build-id": "ASSET_TEX3D_COMMON_GRASS5", - "folder": "common" - }, - { - "index": 215, - "filename": "grass6", - "build-id": "ASSET_TEX3D_COMMON_GRASS6", - "folder": "common" - }, - { - "index": 216, - "filename": "trophy_cab_edge", - "build-id": "ASSET_TEX3D_OBJECTS_TROPHYCABEDGE", - "folder": "objects" - }, - { - "index": 217, - "filename": "stone_wall_snowy", - "build-id": "ASSET_TEX3D_WINTER_STONEWALLSNOWY", - "folder": "winter" - }, - { - "index": 218, - "filename": "blue_stone_wall_snowy", - "build-id": "ASSET_TEX3D_WINTER_BLUESTONEWALLSNOWY", - "folder": "winter" - }, - { - "index": 219, - "filename": "stone_path", - "build-id": "ASSET_TEX3D_COMMON_STONEPATH", - "folder": "common" - }, - { - "index": 220, - "filename": "dome_sun_shining", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESUNSHINING", - "folder": "objects" - }, - { - "index": 221, - "filename": "sand_water_transition", - "build-id": "ASSET_TEX3D_COMMON_SANDWATERTRANSITION", - "folder": "common" - }, - { - "index": 222, - "filename": "nintendo_logo", - "build-id": "ASSET_TEX3D_COMMON_NINTENDOLOGO", - "folder": "common" - }, - { - "index": 223, - "filename": "tan_stone_tile", - "build-id": "ASSET_TEX3D_UNUSED_TANSTONETILE", - "folder": "unused" - }, - { - "index": 224, - "filename": "orange_stone2", - "build-id": "ASSET_TEX3D_DINO_ORANGESTONE2", - "folder": "dino" - }, - { - "index": 225, - "filename": "volcano_wall3", - "build-id": "ASSET_TEX3D_DINO_VOLCANOWALL3", - "folder": "dino" - }, - { - "index": 226, - "filename": "sand3", - "build-id": "ASSET_TEX3D_COMMON_SAND3", - "folder": "common" - }, - { - "index": 227, - "filename": "palm_trees_billboard_0", - "build-id": "ASSET_TEX3D_TROPICAL_PALMTREESBILLBOARD_0", - "folder": "tropical" - }, - { - "index": 228, - "filename": "palm_trees_billboard_1", - "build-id": "ASSET_TEX3D_TROPICAL_PALMTREESBILLBOARD_1", - "folder": "tropical" - }, - { - "index": 229, - "filename": "palm_trees_billboard_2", - "build-id": "ASSET_TEX3D_TROPICAL_PALMTREESBILLBOARD_2", - "folder": "tropical" - }, - { - "index": 230, - "filename": "palm_trees_billboard2_0", - "build-id": "ASSET_TEX3D_TROPICAL_PALMTREESBILLBOARD2_0", - "folder": "tropical" - }, - { - "index": 231, - "filename": "palm_trees_billboard2_1", - "build-id": "ASSET_TEX3D_TROPICAL_PALMTREESBILLBOARD2_1", - "folder": "tropical" - }, - { - "index": 232, - "filename": "palm_trees_billboard2_2", - "build-id": "ASSET_TEX3D_TROPICAL_PALMTREESBILLBOARD2_2", - "folder": "tropical" - }, - { - "index": 233, - "filename": "palm_trees_billboard2_3", - "build-id": "ASSET_TEX3D_TROPICAL_PALMTREESBILLBOARD2_3", - "folder": "tropical" - }, - { - "index": 234, - "filename": "palm_trees_billboard2_4", - "build-id": "ASSET_TEX3D_TROPICAL_PALMTREESBILLBOARD2_4", - "folder": "tropical" - }, - { - "index": 235, - "filename": "palm_tree_leaves", - "build-id": "ASSET_TEX3D_TROPICAL_PALMTREELEAVES", - "folder": "tropical" - }, - { - "index": 236, - "filename": "palm_tree_bark_brown", - "build-id": "ASSET_TEX3D_TROPICAL_PALMTREEBARKBROWN", - "folder": "tropical" - }, - { - "index": 237, - "filename": "asset_tex3d_tropical_palmtreesbillboard3", - "build-id": "ASSET_TEX3D_TROPICAL_ASSETTEX3DTROPICALPALMTREESBILLBOARD3", - "folder": "tropical" - }, - { - "index": 238, - "filename": "palm_tree_bark_white", - "build-id": "ASSET_TEX3D_TROPICAL_PALMTREEBARKWHITE", - "folder": "tropical" - }, - { - "index": 239, - "filename": "palm_tree_shadow", - "build-id": "ASSET_TEX3D_TROPICAL_PALMTREESHADOW", - "folder": "tropical" - }, - { - "index": 240, - "filename": "palm_tree_bark_white2", - "build-id": "ASSET_TEX3D_TROPICAL_PALMTREEBARKWHITE2", - "folder": "tropical" - }, - { - "index": 241, - "filename": "light_shaft", - "build-id": "ASSET_TEX3D_COMMON_LIGHTSHAFT", - "folder": "common" - }, - { - "index": 242, - "filename": "light_shaft2", - "build-id": "ASSET_TEX3D_COMMON_LIGHTSHAFT2", - "folder": "common" - }, - { - "index": 243, - "filename": "spacecolumn_block_saturn", - "build-id": "ASSET_TEX3D_OBJECTS_SPACECOLUMNBLOCKSATURN", - "folder": "objects" - }, - { - "index": 244, - "filename": "tower_spire", - "build-id": "ASSET_TEX3D_TROPICAL_TOWERSPIRE", - "folder": "tropical" - }, - { - "index": 245, - "filename": "ship_wood_planks", - "build-id": "ASSET_TEX3D_TROPICAL_SHIPWOODPLANKS", - "folder": "tropical" - }, - { - "index": 246, - "filename": "vines", - "build-id": "ASSET_TEX3D_COMMON_VINES", - "folder": "common" - }, - { - "index": 247, - "filename": "vines2", - "build-id": "ASSET_TEX3D_COMMON_VINES2", - "folder": "common" - }, - { - "index": 248, - "filename": "taj_pad_grass", - "build-id": "ASSET_TEX3D_COMMON_TAJPADGRASS", - "folder": "common" - }, - { - "index": 249, - "filename": "tree_branch_with_vines", - "build-id": "ASSET_TEX3D_MEDIEVAL_TREEBRANCHWITHVINES", - "folder": "medieval" - }, - { - "index": 250, - "filename": "red_carpet", - "build-id": "ASSET_TEX3D_COMMON_REDCARPET", - "folder": "common" - }, - { - "index": 251, - "filename": "large_tree_log", - "build-id": "ASSET_TEX3D_COMMON_LARGETREELOG", - "folder": "common" - }, - { - "index": 252, - "filename": "temple_stone_dino", - "build-id": "ASSET_TEX3D_DINO_TEMPLESTONEDINO", - "folder": "dino" - }, - { - "index": 253, - "filename": "white_wall_with_flags", - "build-id": "ASSET_TEX3D_MEDIEVAL_WHITEWALLWITHFLAGS", - "folder": "medieval" - }, - { - "index": 254, - "filename": "town_castle_sprite", - "build-id": "ASSET_TEX3D_MEDIEVAL_TOWNCASTLESPRITE", - "folder": "medieval" - }, - { - "index": 255, - "filename": "village_viaduct_shadow", - "build-id": "ASSET_TEX3D_WINTER_VILLAGEVIADUCTSHADOW", - "folder": "winter" - }, - { - "index": 256, - "filename": "dirt_path", - "build-id": "ASSET_TEX3D_DINO_DIRTPATH", - "folder": "dino" - }, - { - "index": 257, - "filename": "proam64balloonrope", - "build-id": "ASSET_TEX3D_UNUSED_PROAM64BALLOONROPE", - "folder": "unused" - }, - { - "index": 258, - "filename": "dome_blue_sky_0", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY_0", - "folder": "objects" - }, - { - "index": 259, - "filename": "dome_blue_sky_1", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY_1", - "folder": "objects" - }, - { - "index": 260, - "filename": "dome_blue_sky_2", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY_2", - "folder": "objects" - }, - { - "index": 261, - "filename": "dome_blue_sky_3", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY_3", - "folder": "objects" - }, - { - "index": 262, - "filename": "ship_torn_sail", - "build-id": "ASSET_TEX3D_TROPICAL_SHIPTORNSAIL", - "folder": "tropical" - }, - { - "index": 263, - "filename": "ship_sail_shadow", - "build-id": "ASSET_TEX3D_TROPICAL_SHIPSAILSHADOW", - "folder": "tropical" - }, - { - "index": 264, - "filename": "sand_transition", - "build-id": "ASSET_TEX3D_COMMON_SANDTRANSITION", - "folder": "common" - }, - { - "index": 265, - "filename": "sand_underwater", - "build-id": "ASSET_TEX3D_COMMON_SANDUNDERWATER", - "folder": "common" - }, - { - "index": 266, - "filename": "spacecolumn_block", - "build-id": "ASSET_TEX3D_OBJECTS_SPACECOLUMNBLOCK", - "folder": "objects" - }, - { - "index": 267, - "filename": "volcano_stone", - "build-id": "ASSET_TEX3D_DINO_VOLCANOSTONE", - "folder": "dino" - }, - { - "index": 268, - "filename": "moon_stone", - "build-id": "ASSET_TEX3D_SPACE_MOONSTONE", - "folder": "space" - }, - { - "index": 269, - "filename": "tower_window", - "build-id": "ASSET_TEX3D_TROPICAL_TOWERWINDOW", - "folder": "tropical" - }, - { - "index": 270, - "filename": "brown_stone_brick", - "build-id": "ASSET_TEX3D_COMMON_BROWNSTONEBRICK", - "folder": "common" - }, - { - "index": 271, - "filename": "sand_wet_dry_transition", - "build-id": "ASSET_TEX3D_DINO_SANDWETDRYTRANSITION", - "folder": "dino" - }, - { - "index": 272, - "filename": "dark_stone_wall_snowy", - "build-id": "ASSET_TEX3D_WINTER_DARKSTONEWALLSNOWY", - "folder": "winter" - }, - { - "index": 273, - "filename": "snow_trees_billboard_small", - "build-id": "ASSET_TEX3D_WINTER_SNOWTREESBILLBOARDSMALL", - "folder": "winter" - }, - { - "index": 274, - "filename": "snow4", - "build-id": "ASSET_TEX3D_WINTER_SNOW4", - "folder": "winter" - }, - { - "index": 275, - "filename": "hanging_snow3", - "build-id": "ASSET_TEX3D_WINTER_HANGINGSNOW3", - "folder": "winter" - }, - { - "index": 276, - "filename": "hanging_snow4", - "build-id": "ASSET_TEX3D_WINTER_HANGINGSNOW4", - "folder": "winter" - }, - { - "index": 277, - "filename": "dark_stone_wall_snowy2", - "build-id": "ASSET_TEX3D_WINTER_DARKSTONEWALLSNOWY2", - "folder": "winter" - }, - { - "index": 278, - "filename": "snow_char_blue_eye", - "build-id": "ASSET_TEX3D_WINTER_SNOWCHARBLUEEYE", - "folder": "winter" - }, - { - "index": 279, - "filename": "snow_char_yellow_eye", - "build-id": "ASSET_TEX3D_WINTER_SNOWCHARYELLOWEYE", - "folder": "winter" - }, - { - "index": 280, - "filename": "snow_char_blue_goggles", - "build-id": "ASSET_TEX3D_WINTER_SNOWCHARBLUEGOGGLES", - "folder": "winter" - }, - { - "index": 281, - "filename": "village_window_lights", - "build-id": "ASSET_TEX3D_WINTER_VILLAGEWINDOWLIGHTS", - "folder": "winter" - }, - { - "index": 282, - "filename": "village_window_lights_glow", - "build-id": "ASSET_TEX3D_WINTER_VILLAGEWINDOWLIGHTSGLOW", - "folder": "winter" - }, - { - "index": 283, - "filename": "snow_char_nose", - "build-id": "ASSET_TEX3D_WINTER_SNOWCHARNOSE", - "folder": "winter" - }, - { - "index": 284, - "filename": "cyan_stone", - "build-id": "ASSET_TEX3D_WINTER_CYANSTONE", - "folder": "winter" - }, - { - "index": 285, - "filename": "snow_trees_billboard_small2", - "build-id": "ASSET_TEX3D_WINTER_SNOWTREESBILLBOARDSMALL2", - "folder": "winter" - }, - { - "index": 286, - "filename": "cyan_stone_snow", - "build-id": "ASSET_TEX3D_WINTER_CYANSTONESNOW", - "folder": "winter" - }, - { - "index": 287, - "filename": "pink_white_snow", - "build-id": "ASSET_TEX3D_WINTER_PINKWHITESNOW", - "folder": "winter" - }, - { - "index": 288, - "filename": "purple_stone", - "build-id": "ASSET_TEX3D_SPACE_PURPLESTONE", - "folder": "space" - }, - { - "index": 289, - "filename": "finish_line_flag_green_0", - "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGGREEN_0", - "folder": "common" - }, - { - "index": 290, - "filename": "finish_line_flag_green_1", - "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGGREEN_1", - "folder": "common" - }, - { - "index": 291, - "filename": "finish_line_flag_green_2", - "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGGREEN_2", - "folder": "common" - }, - { - "index": 292, - "filename": "finish_line_flag_green_3", - "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGGREEN_3", - "folder": "common" - }, - { - "index": 293, - "filename": "starfish", - "build-id": "ASSET_TEX3D_TROPICAL_STARFISH", - "folder": "tropical" - }, - { - "index": 294, - "filename": "finish_line_flag_orange_0", - "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGORANGE_0", - "folder": "common" - }, - { - "index": 295, - "filename": "finish_line_flag_orange_1", - "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGORANGE_1", - "folder": "common" - }, - { - "index": 296, - "filename": "finish_line_flag_orange_2", - "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGORANGE_2", - "folder": "common" - }, - { - "index": 297, - "filename": "finish_line_flag_orange_3", - "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGORANGE_3", - "folder": "common" - }, - { - "index": 298, - "filename": "finish_line_flag_orange_4", - "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGORANGE_4", - "folder": "common" - }, - { - "index": 299, - "filename": "finish_line_palm_trees_shadow", - "build-id": "ASSET_TEX3D_DINO_FINISHLINEPALMTREESSHADOW", - "folder": "dino" - }, - { - "index": 300, - "filename": "water_scrolling", - "build-id": "ASSET_TEX3D_COMMON_WATERSCROLLING", - "folder": "common" - }, - { - "index": 301, - "filename": "firemountain_lava", - "build-id": "ASSET_TEX3D_DINO_FIREMOUNTAINLAVA", - "folder": "dino" - }, - { - "index": 302, - "filename": "firemountain_red_base", - "build-id": "ASSET_TEX3D_DINO_FIREMOUNTAINREDBASE", - "folder": "dino" - }, - { - "index": 303, - "filename": "firemountain_yellow_base", - "build-id": "ASSET_TEX3D_DINO_FIREMOUNTAINYELLOWBASE", - "folder": "dino" - }, - { - "index": 304, - "filename": "firemountain_green_base", - "build-id": "ASSET_TEX3D_DINO_FIREMOUNTAINGREENBASE", - "folder": "dino" - }, - { - "index": 305, - "filename": "firemountain_blue_base", - "build-id": "ASSET_TEX3D_DINO_FIREMOUNTAINBLUEBASE", - "folder": "dino" - }, - { - "index": 306, - "filename": "brown_dirt_wall", - "build-id": "ASSET_TEX3D_COMMON_BROWNDIRTWALL", - "folder": "common" - }, - { - "index": 307, - "filename": "brown_dirt_wall_hilltop", - "build-id": "ASSET_TEX3D_COMMON_BROWNDIRTWALLHILLTOP", - "folder": "common" - }, - { - "index": 308, - "filename": "brown_dirt_wall_hilltop_sandy", - "build-id": "ASSET_TEX3D_COMMON_BROWNDIRTWALLHILLTOPSANDY", - "folder": "common" - }, - { - "index": 309, - "filename": "light_shaft_3", - "build-id": "ASSET_TEX3D_COMMON_LIGHTSHAFT3", - "folder": "common" - }, - { - "index": 310, - "filename": "lagoon_castle_merlon", - "build-id": "ASSET_TEX3D_TROPICAL_LAGOONCASTLEMERLON", - "folder": "tropical" - }, - { - "index": 311, - "filename": "house_guardrail_flags", - "build-id": "ASSET_TEX3D_MEDIEVAL_HOUSEGUARDRAILFLAGS", - "folder": "medieval" - }, - { - "index": 312, - "filename": "blue_flag", - "build-id": "ASSET_TEX3D_MEDIEVAL_BLUEFLAG", - "folder": "medieval" - }, - { - "index": 313, - "filename": "white_flag", - "build-id": "ASSET_TEX3D_MEDIEVAL_WHITEFLAG", - "folder": "medieval" - }, - { - "index": 314, - "filename": "yellow_flag", - "build-id": "ASSET_TEX3D_MEDIEVAL_YELLOWFLAG", - "folder": "medieval" - }, - { - "index": 315, - "filename": "volcano_ceiling_shadow", - "build-id": "ASSET_TEX3D_DINO_VOLCANOCEILINGSHADOW", - "folder": "dino" - }, - { - "index": 316, - "filename": "lagoon_castle_merlon2", - "build-id": "ASSET_TEX3D_TROPICAL_LAGOONCASTLEMERLON2", - "folder": "tropical" - }, - { - "index": 317, - "filename": "waterfall", - "build-id": "ASSET_TEX3D_COMMON_WATERFALL", - "folder": "common" - }, - { - "index": 318, - "filename": "white_fence", - "build-id": "ASSET_TEX3D_OBJECTS_WHITEFENCE", - "folder": "objects" - }, - { - "index": 319, - "filename": "dome_white", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEWHITE", - "folder": "objects" - }, - { - "index": 320, - "filename": "sand_abovewater", - "build-id": "ASSET_TEX3D_COMMON_SANDABOVEWATER", - "folder": "common" - }, - { - "index": 321, - "filename": "wood_bark", - "build-id": "ASSET_TEX3D_COMMON_WOODBARK", - "folder": "common" - }, - { - "index": 322, - "filename": "lagoon_castle_tile", - "build-id": "ASSET_TEX3D_TROPICAL_LAGOONCASTLETILE", - "folder": "tropical" - }, - { - "index": 323, - "filename": "spacecolumn_gold_horn", - "build-id": "ASSET_TEX3D_OBJECTS_SPACECOLUMNGOLDHORN", - "folder": "objects" - }, - { - "index": 324, - "filename": "sand4", - "build-id": "ASSET_TEX3D_COMMON_SAND4", - "folder": "common" - }, - { - "index": 325, - "filename": "sand5", - "build-id": "ASSET_TEX3D_COMMON_SAND5", - "folder": "common" - }, - { - "index": 326, - "filename": "magma_fall", - "build-id": "ASSET_TEX3D_DINO_MAGMAFALL", - "folder": "dino" - }, - { - "index": 327, - "filename": "diddy_brown_fur", - "build-id": "ASSET_TEX3D_OBJECTS_DIDDYBROWNFUR", - "folder": "objects" - }, - { - "index": 328, - "filename": "tt_plane_wing", - "build-id": "ASSET_TEX3D_OBJECTS_TTPLANEWING", - "folder": "objects" - }, - { - "index": 329, - "filename": "bluey_nose", - "build-id": "ASSET_TEX3D_OBJECTS_BLUEYNOSE", - "folder": "objects" - }, - { - "index": 330, - "filename": "taj_eye", - "build-id": "ASSET_TEX3D_OBJECTS_TAJEYE", - "folder": "objects" - }, - { - "index": 331, - "filename": "tower_belfry", - "build-id": "ASSET_TEX3D_MEDIEVAL_TOWERBELFRY", - "folder": "medieval" - }, - { - "index": 332, - "filename": "tower_belfry2", - "build-id": "ASSET_TEX3D_MEDIEVAL_TOWERBELFRY2", - "folder": "medieval" - }, - { - "index": 333, - "filename": "tower_base", - "build-id": "ASSET_TEX3D_MEDIEVAL_TOWERBASE", - "folder": "medieval" - }, - { - "index": 334, - "filename": "tower_base_window", - "build-id": "ASSET_TEX3D_MEDIEVAL_TOWERBASEWINDOW", - "folder": "medieval" - }, - { - "index": 335, - "filename": "car_backlights_lowpoly", - "build-id": "ASSET_TEX3D_OBJECTS_CARBACKLIGHTSLOWPOLY", - "folder": "objects" - }, - { - "index": 336, - "filename": "timber_stripes", - "build-id": "ASSET_TEX3D_OBJECTS_TIMBERSTRIPES", - "folder": "objects" - }, - { - "index": 337, - "filename": "bumper_back", - "build-id": "ASSET_TEX3D_OBJECTS_BUMPERBACK", - "folder": "objects" - }, - { - "index": 338, - "filename": "bumper_front", - "build-id": "ASSET_TEX3D_OBJECTS_BUMPERFRONT", - "folder": "objects" - }, - { - "index": 339, - "filename": "bumper_head_fur", - "build-id": "ASSET_TEX3D_OBJECTS_BUMPERHEADFUR", - "folder": "objects" - }, - { - "index": 340, - "filename": "bumper_glove_plus", - "build-id": "ASSET_TEX3D_OBJECTS_BUMPERGLOVEPLUS", - "folder": "objects" - }, - { - "index": 341, - "filename": "bumper_goggles_front", - "build-id": "ASSET_TEX3D_OBJECTS_BUMPERGOGGLESFRONT", - "folder": "objects" - }, - { - "index": 342, - "filename": "bumper_red_pilot_cap", - "build-id": "ASSET_TEX3D_OBJECTS_BUMPERREDPILOTCAP", - "folder": "objects" - }, - { - "index": 343, - "filename": "bumper_shoulder_fur", - "build-id": "ASSET_TEX3D_OBJECTS_BUMPERSHOULDERFUR", - "folder": "objects" - }, - { - "index": 344, - "filename": "bumper_nose", - "build-id": "ASSET_TEX3D_OBJECTS_BUMPERNOSE", - "folder": "objects" - }, - { - "index": 345, - "filename": "racer_common_red", - "build-id": "ASSET_TEX3D_OBJECTS_RACERCOMMONRED", - "folder": "objects" - }, - { - "index": 346, - "filename": "bumper_head_fur_lowpoly", - "build-id": "ASSET_TEX3D_OBJECTS_BUMPERHEADFURLOWPOLY", - "folder": "objects" - }, - { - "index": 347, - "filename": "bumper_face_lowpoly", - "build-id": "ASSET_TEX3D_OBJECTS_BUMPERFACELOWPOLY", - "folder": "objects" - }, - { - "index": 348, - "filename": "bumper_back_lowpoly", - "build-id": "ASSET_TEX3D_OBJECTS_BUMPERBACKLOWPOLY", - "folder": "objects" - }, - { - "index": 349, - "filename": "bumper_goggles_side", - "build-id": "ASSET_TEX3D_OBJECTS_BUMPERGOGGLESSIDE", - "folder": "objects" - }, - { - "index": 350, - "filename": "bumper_head_fur_light", - "build-id": "ASSET_TEX3D_OBJECTS_BUMPERHEADFURLIGHT", - "folder": "objects" - }, - { - "index": 351, - "filename": "bumper_goggles_side2", - "build-id": "ASSET_TEX3D_OBJECTS_BUMPERGOGGLESSIDE2", - "folder": "objects" - }, - { - "index": 352, - "filename": "banjo_backpack", - "build-id": "ASSET_TEX3D_OBJECTS_BANJOBACKPACK", - "folder": "objects" - }, - { - "index": 353, - "filename": "banjo_shorts", - "build-id": "ASSET_TEX3D_OBJECTS_BANJOSHORTS", - "folder": "objects" - }, - { - "index": 354, - "filename": "banjo_shorts_charselect", - "build-id": "ASSET_TEX3D_OBJECTS_BANJOSHORTSCHARSELECT", - "folder": "objects" - }, - { - "index": 355, - "filename": "banjo_chest", - "build-id": "ASSET_TEX3D_OBJECTS_BANJOCHEST", - "folder": "objects" - }, - { - "index": 356, - "filename": "banjo_chest_charselect", - "build-id": "ASSET_TEX3D_OBJECTS_BANJOCHESTCHARSELECT", - "folder": "objects" - }, - { - "index": 357, - "filename": "banjo_hair_top_charselect", - "build-id": "ASSET_TEX3D_OBJECTS_BANJOHAIRTOPCHARSELECT", - "folder": "objects" - }, - { - "index": 358, - "filename": "banjo_wrist_ankles_charselect", - "build-id": "ASSET_TEX3D_OBJECTS_BANJOWRISTANKLESCHARSELECT", - "folder": "objects" - }, - { - "index": 359, - "filename": "banjo_ear_shadow", - "build-id": "ASSET_TEX3D_OBJECTS_BANJOEARSHADOW", - "folder": "objects" - }, - { - "index": 360, - "filename": "banjo_eyes", - "build-id": "ASSET_TEX3D_OBJECTS_BANJOEYES", - "folder": "objects" - }, - { - "index": 361, - "filename": "beta_balloon_banjo_0", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONBANJO_0", - "folder": "unused" - }, - { - "index": 362, - "filename": "beta_balloon_banjo_1", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONBANJO_1", - "folder": "unused" - }, - { - "index": 363, - "filename": "beta_balloon_banjo_2", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONBANJO_2", - "folder": "unused" - }, - { - "index": 364, - "filename": "beta_balloon_banjo_3", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONBANJO_3", - "folder": "unused" - }, - { - "index": 365, - "filename": "banjo_skin", - "build-id": "ASSET_TEX3D_OBJECTS_BANJOSKIN", - "folder": "objects" - }, - { - "index": 366, - "filename": "banjo_chest_lowpoly", - "build-id": "ASSET_TEX3D_OBJECTS_BANJOCHESTLOWPOLY", - "folder": "objects" - }, - { - "index": 367, - "filename": "banjo_hair_fur", - "build-id": "ASSET_TEX3D_OBJECTS_BANJOHAIRFUR", - "folder": "objects" - }, - { - "index": 368, - "filename": "banjo_arm_fur", - "build-id": "ASSET_TEX3D_OBJECTS_BANJOARMFUR", - "folder": "objects" - }, - { - "index": 369, - "filename": "banjo_neck", - "build-id": "ASSET_TEX3D_OBJECTS_BANJONECK", - "folder": "objects" - }, - { - "index": 370, - "filename": "banjo_neck_fur_back", - "build-id": "ASSET_TEX3D_OBJECTS_BANJONECKFURBACK", - "folder": "objects" - }, - { - "index": 371, - "filename": "banjo_back_lowestpoly", - "build-id": "ASSET_TEX3D_OBJECTS_BANJOBACKLOWESTPOLY", - "folder": "objects" - }, - { - "index": 372, - "filename": "banjo_backpack_straps", - "build-id": "ASSET_TEX3D_OBJECTS_BANJOBACKPACKSTRAPS", - "folder": "objects" - }, - { - "index": 373, - "filename": "banjo_back_lowpoly", - "build-id": "ASSET_TEX3D_OBJECTS_BANJOBACKLOWPOLY", - "folder": "objects" - }, - { - "index": 374, - "filename": "diddy_nose", - "build-id": "ASSET_TEX3D_OBJECTS_DIDDYNOSE", - "folder": "objects" - }, - { - "index": 375, - "filename": "racer_common_black", - "build-id": "ASSET_TEX3D_OBJECTS_RACERCOMMONBLACK", - "folder": "objects" - }, - { - "index": 376, - "filename": "tt_vehicle_silver", - "build-id": "ASSET_TEX3D_OBJECTS_TTVEHICLESILVER", - "folder": "objects" - }, - { - "index": 377, - "filename": "bubbler_tentacles_top", - "build-id": "ASSET_TEX3D_OBJECTS_BUBBLERTENTACLESTOP", - "folder": "objects" - }, - { - "index": 378, - "filename": "drumstick_vehicle_cyan", - "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKVEHICLECYAN", - "folder": "objects" - }, - { - "index": 379, - "filename": "beta_tiptup_balloon_envmap", - "build-id": "ASSET_TEX3D_OBJECTS_BETATIPTUPBALLOONENVMAP", - "folder": "objects" - }, - { - "index": 380, - "filename": "banjo_car_envmap", - "build-id": "ASSET_TEX3D_OBJECTS_BANJOCARENVMAP", - "folder": "objects" - }, - { - "index": 381, - "filename": "tiptup_car_envmap", - "build-id": "ASSET_TEX3D_OBJECTS_TIPTUPCARENVMAP", - "folder": "objects" - }, - { - "index": 382, - "filename": "conker_shirt", - "build-id": "ASSET_TEX3D_OBJECTS_CONKERSHIRT", - "folder": "objects" - }, - { - "index": 383, - "filename": "bonus", - "build-id": "ASSET_TEX3D_OBJECTS_BONUS", - "folder": "objects" - }, - { - "index": 384, - "filename": "racer_common_underside", - "build-id": "ASSET_TEX3D_OBJECTS_RACERCOMMONUNDERSIDE", - "folder": "objects" - }, - { - "index": 385, - "filename": "timber_cap_brim", - "build-id": "ASSET_TEX3D_OBJECTS_TIMBERCAPBRIM", - "folder": "objects" - }, - { - "index": 386, - "filename": "timber_cap_brim_charselect", - "build-id": "ASSET_TEX3D_OBJECTS_TIMBERCAPBRIMCHARSELECT", - "folder": "objects" - }, - { - "index": 387, - "filename": "timber_hands", - "build-id": "ASSET_TEX3D_OBJECTS_TIMBERHANDS", - "folder": "objects" - }, - { - "index": 388, - "filename": "drumstick_vest", - "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKVEST", - "folder": "objects" - }, - { - "index": 389, - "filename": "drumstick_back_lowpoly", - "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKBACKLOWPOLY", - "folder": "objects" - }, - { - "index": 390, - "filename": "drumstick_beak", - "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKBEAK", - "folder": "objects" - }, - { - "index": 391, - "filename": "drumstick_feathers", - "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKFEATHERS", - "folder": "objects" - }, - { - "index": 392, - "filename": "tt_amulet_eye", - "build-id": "ASSET_TEX3D_OBJECTS_TTAMULETEYE", - "folder": "objects" - }, - { - "index": 393, - "filename": "beta_drumstick_balloon_0", - "build-id": "ASSET_TEX3D_UNUSED_BETADRUMSTICKBALLOON_0", - "folder": "unused" - }, - { - "index": 394, - "filename": "beta_drumstick_balloon_1", - "build-id": "ASSET_TEX3D_UNUSED_BETADRUMSTICKBALLOON_1", - "folder": "unused" - }, - { - "index": 395, - "filename": "beta_drumstick_balloon_2", - "build-id": "ASSET_TEX3D_UNUSED_BETADRUMSTICKBALLOON_2", - "folder": "unused" - }, - { - "index": 396, - "filename": "beta_drumstick_balloon_3", - "build-id": "ASSET_TEX3D_UNUSED_BETADRUMSTICKBALLOON_3", - "folder": "unused" - }, - { - "index": 397, - "filename": "drumstick_lowerback", - "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKLOWERBACK", - "folder": "objects" - }, - { - "index": 398, - "filename": "drumstick_front_lowpoly", - "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKFRONTLOWPOLY", - "folder": "objects" - }, - { - "index": 399, - "filename": "drumstick_feet_charselect", - "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKFEETCHARSELECT", - "folder": "objects" - }, - { - "index": 400, - "filename": "drumstick_feathers2", - "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKFEATHERS2", - "folder": "objects" - }, - { - "index": 401, - "filename": "drumstick_pants_bottom_charselect", - "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKPANTSBOTTOMCHARSELECT", - "folder": "objects" - }, - { - "index": 402, - "filename": "diddy_mouth_charselect", - "build-id": "ASSET_TEX3D_OBJECTS_DIDDYMOUTHCHARSELECT", - "folder": "objects" - }, - { - "index": 403, - "filename": "drumstick_eyes", - "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKEYES", - "folder": "objects" - }, - { - "index": 404, - "filename": "racer_common_plane_underside", - "build-id": "ASSET_TEX3D_OBJECTS_RACERCOMMONPLANEUNDERSIDE", - "folder": "objects" - }, - { - "index": 405, - "filename": "bluey_tuxedo_piece", - "build-id": "ASSET_TEX3D_OBJECTS_BLUEYTUXEDOPIECE", - "folder": "objects" - }, - { - "index": 406, - "filename": "conker_fur", - "build-id": "ASSET_TEX3D_OBJECTS_CONKERFUR", - "folder": "objects" - }, - { - "index": 407, - "filename": "conker_eyes", - "build-id": "ASSET_TEX3D_OBJECTS_CONKEREYES", - "folder": "objects" - }, - { - "index": 408, - "filename": "conkey_mouth", - "build-id": "ASSET_TEX3D_OBJECTS_CONKEYMOUTH", - "folder": "objects" - }, - { - "index": 409, - "filename": "conker_fur_solid", - "build-id": "ASSET_TEX3D_OBJECTS_CONKERFURSOLID", - "folder": "objects" - }, - { - "index": 410, - "filename": "conker_shoes_charselect", - "build-id": "ASSET_TEX3D_OBJECTS_CONKERSHOESCHARSELECT", - "folder": "objects" - }, - { - "index": 411, - "filename": "conker_back", - "build-id": "ASSET_TEX3D_OBJECTS_CONKERBACK", - "folder": "objects" - }, - { - "index": 412, - "filename": "beta_banjo_balloon_envmap", - "build-id": "ASSET_TEX3D_UNUSED_BETABANJOBALLOONENVMAP", - "folder": "unused" - }, - { - "index": 413, - "filename": "racer_common_break_light", - "build-id": "ASSET_TEX3D_OBJECTS_RACERCOMMONBREAKLIGHT", - "folder": "objects" - }, - { - "index": 414, - "filename": "banjo_break_light1", - "build-id": "ASSET_TEX3D_OBJECTS_BANJOBREAKLIGHT1", - "folder": "objects" - }, - { - "index": 415, - "filename": "banjo_break_light2", - "build-id": "ASSET_TEX3D_OBJECTS_BANJOBREAKLIGHT2", - "folder": "objects" - }, - { - "index": 416, - "filename": "banjo_break_light3", - "build-id": "ASSET_TEX3D_OBJECTS_BANJOBREAKLIGHT3", - "folder": "objects" - }, - { - "index": 417, - "filename": "banjo_break_light4", - "build-id": "ASSET_TEX3D_OBJECTS_BANJOBREAKLIGHT4", - "folder": "objects" - }, - { - "index": 418, - "filename": "banjo_break_light5", - "build-id": "ASSET_TEX3D_OBJECTS_BANJOBREAKLIGHT5", - "folder": "objects" - }, - { - "index": 419, - "filename": "racer_common_plane_break_light", - "build-id": "ASSET_TEX3D_UNUSED_RACERCOMMONPLANEBREAKLIGHT", - "folder": "unused" - }, - { - "index": 420, - "filename": "drumstick_straps", - "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKSTRAPS", - "folder": "objects" - }, - { - "index": 421, - "filename": "diddy_lower_back", - "build-id": "ASSET_TEX3D_OBJECTS_DIDDYLOWERBACK", - "folder": "objects" - }, - { - "index": 422, - "filename": "diddy_lower_front", - "build-id": "ASSET_TEX3D_OBJECTS_DIDDYLOWERFRONT", - "folder": "objects" - }, - { - "index": 423, - "filename": "diddy_unknown", - "build-id": "ASSET_TEX3D_UNUSED_DIDDYUNKNOWN", - "folder": "unused" - }, - { - "index": 424, - "filename": "diddy_eye_noblink", - "build-id": "ASSET_TEX3D_UNUSED_DIDDYEYENOBLINK", - "folder": "unused" - }, - { - "index": 425, - "filename": "diddy_cap_strap", - "build-id": "ASSET_TEX3D_OBJECTS_DIDDYCAPSTRAP", - "folder": "objects" - }, - { - "index": 426, - "filename": "diddy_cap", - "build-id": "ASSET_TEX3D_OBJECTS_DIDDYCAP", - "folder": "objects" - }, - { - "index": 427, - "filename": "diddy_back_lowpoly", - "build-id": "ASSET_TEX3D_OBJECTS_DIDDYBACKLOWPOLY", - "folder": "objects" - }, - { - "index": 428, - "filename": "diddy_back_star", - "build-id": "ASSET_TEX3D_OBJECTS_DIDDYBACKSTAR", - "folder": "objects" - }, - { - "index": 429, - "filename": "diddy_wrist", - "build-id": "ASSET_TEX3D_OBJECTS_DIDDYWRIST", - "folder": "objects" - }, - { - "index": 430, - "filename": "diddy_eye", - "build-id": "ASSET_TEX3D_OBJECTS_DIDDYEYE", - "folder": "objects" - }, - { - "index": 431, - "filename": "yellow_dinosaur_feet", - "build-id": "ASSET_TEX3D_OBJECTS_YELLOWDINOSAURFEET", - "folder": "objects" - }, - { - "index": 432, - "filename": "green_dinosaur_underside", - "build-id": "ASSET_TEX3D_OBJECTS_GREENDINOSAURUNDERSIDE", - "folder": "objects" - }, - { - "index": 433, - "filename": "yellow_dinosaur_neck_transition", - "build-id": "ASSET_TEX3D_OBJECTS_YELLOWDINOSAURNECKTRANSITION", - "folder": "objects" - }, - { - "index": 434, - "filename": "green_dinosaur_face_smile", - "build-id": "ASSET_TEX3D_OBJECTS_GREENDINOSAURFACESMILE", - "folder": "objects" - }, - { - "index": 435, - "filename": "yellow_dinosaur_nose", - "build-id": "ASSET_TEX3D_OBJECTS_YELLOWDINOSAURNOSE", - "folder": "objects" - }, - { - "index": 436, - "filename": "green_dinosaur_nose", - "build-id": "ASSET_TEX3D_OBJECTS_GREENDINOSAURNOSE", - "folder": "objects" - }, - { - "index": 437, - "filename": "green_dinosaur_skin", - "build-id": "ASSET_TEX3D_OBJECTS_GREENDINOSAURSKIN", - "folder": "objects" - }, - { - "index": 438, - "filename": "yellow_dinosaur_neck_back", - "build-id": "ASSET_TEX3D_OBJECTS_YELLOWDINOSAURNECKBACK", - "folder": "objects" - }, - { - "index": 439, - "filename": "yellow_dinosaur_limbs", - "build-id": "ASSET_TEX3D_OBJECTS_YELLOWDINOSAURLIMBS", - "folder": "objects" - }, - { - "index": 440, - "filename": "racer_common_steering_wheel", - "build-id": "ASSET_TEX3D_OBJECTS_RACERCOMMONSTEERINGWHEEL", - "folder": "objects" - }, - { - "index": 441, - "filename": "diddy_front_neckloop", - "build-id": "ASSET_TEX3D_OBJECTS_DIDDYFRONTNECKLOOP", - "folder": "objects" - }, - { - "index": 442, - "filename": "smokey_tricky_tongue", - "build-id": "ASSET_TEX3D_OBJECTS_SMOKEYTRICKYTONGUE", - "folder": "objects" - }, - { - "index": 443, - "filename": "smokey_arms_back_scales", - "build-id": "ASSET_TEX3D_OBJECTS_SMOKEYARMSBACKSCALES", - "folder": "objects" - }, - { - "index": 444, - "filename": "smokey_back_head_scales", - "build-id": "ASSET_TEX3D_OBJECTS_SMOKEYBACKHEADSCALES", - "folder": "objects" - }, - { - "index": 445, - "filename": "smokey_underside", - "build-id": "ASSET_TEX3D_OBJECTS_SMOKEYUNDERSIDE", - "folder": "objects" - }, - { - "index": 446, - "filename": "smokey_eye", - "build-id": "ASSET_TEX3D_OBJECTS_SMOKEYEYE", - "folder": "objects" - }, - { - "index": 447, - "filename": "spacecolumn_smokey_eye", - "build-id": "ASSET_TEX3D_OBJECTS_SPACECOLUMNSMOKEYEYE", - "folder": "objects" - }, - { - "index": 448, - "filename": "smokey_feet_bottom", - "build-id": "ASSET_TEX3D_OBJECTS_SMOKEYFEETBOTTOM", - "folder": "objects" - }, - { - "index": 449, - "filename": "smokey_cheek", - "build-id": "ASSET_TEX3D_OBJECTS_SMOKEYCHEEK", - "folder": "objects" - }, - { - "index": 450, - "filename": "drumstick_straps_lowpoly", - "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKSTRAPSLOWPOLY", - "folder": "objects" - }, - { - "index": 451, - "filename": "dome_blue_sky_clouds_0", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKYCLOUDS_0", - "folder": "objects" - }, - { - "index": 452, - "filename": "dome_blue_sky_clouds_1", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKYCLOUDS_1", - "folder": "objects" - }, - { - "index": 453, - "filename": "racer_common_car_exhaust", - "build-id": "ASSET_TEX3D_OBJECTS_RACERCOMMONCAREXHAUST", - "folder": "objects" - }, - { - "index": 454, - "filename": "racer_common_car_exhaust_lowpoly", - "build-id": "ASSET_TEX3D_OBJECTS_RACERCOMMONCAREXHAUSTLOWPOLY", - "folder": "objects" - }, - { - "index": 455, - "filename": "exit", - "build-id": "ASSET_TEX3D_OBJECTS_EXIT", - "folder": "objects" - }, - { - "index": 456, - "filename": "stopwatch_eye_0", - "build-id": "ASSET_TEX3D_OBJECTS_STOPWATCHEYE_0", - "folder": "objects" - }, - { - "index": 457, - "filename": "stopwatch_eye_1", - "build-id": "ASSET_TEX3D_OBJECTS_STOPWATCHEYE_1", - "folder": "objects" - }, - { - "index": 458, - "filename": "stopwatch_eye_2", - "build-id": "ASSET_TEX3D_OBJECTS_STOPWATCHEYE_2", - "folder": "objects" - }, - { - "index": 459, - "filename": "frog_belly", - "build-id": "ASSET_TEX3D_OBJECTS_FROGBELLY", - "folder": "objects" - }, - { - "index": 460, - "filename": "blue", - "build-id": "ASSET_TEX3D_UNUSED_BLUE", - "folder": "unused" - }, - { - "index": 461, - "filename": "tiptup_shell_outline", - "build-id": "ASSET_TEX3D_OBJECTS_TIPTUPSHELLOUTLINE", - "folder": "objects" - }, - { - "index": 462, - "filename": "beta_balloon_bumper_0", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONBUMPER_0", - "folder": "unused" - }, - { - "index": 463, - "filename": "beta_balloon_bumper_1", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONBUMPER_1", - "folder": "unused" - }, - { - "index": 464, - "filename": "beta_balloon_bumper_2", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONBUMPER_2", - "folder": "unused" - }, - { - "index": 465, - "filename": "beta_balloon_bumper_3", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONBUMPER_3", - "folder": "unused" - }, - { - "index": 466, - "filename": "bumper_eyes", - "build-id": "ASSET_TEX3D_OBJECTS_BUMPEREYES", - "folder": "objects" - }, - { - "index": 467, - "filename": "gold_envmap", - "build-id": "ASSET_TEX3D_OBJECTS_GOLDENVMAP", - "folder": "objects" - }, - { - "index": 468, - "filename": "gold_envmap2", - "build-id": "ASSET_TEX3D_OBJECTS_GOLDENVMAP2", - "folder": "objects" - }, - { - "index": 469, - "filename": "gold_balloon_envmap", - "build-id": "ASSET_TEX3D_OBJECTS_GOLDBALLOONENVMAP", - "folder": "objects" - }, - { - "index": 470, - "filename": "green_envmap", - "build-id": "ASSET_TEX3D_OBJECTS_GREENENVMAP", - "folder": "objects" - }, - { - "index": 471, - "filename": "diddy_car_envmap", - "build-id": "ASSET_TEX3D_OBJECTS_DIDDYCARENVMAP", - "folder": "objects" - }, - { - "index": 472, - "filename": "racer_common_plane_tail_light", - "build-id": "ASSET_TEX3D_OBJECTS_RACERCOMMONPLANETAILLIGHT", - "folder": "objects" - }, - { - "index": 473, - "filename": "timber_car_envmap", - "build-id": "ASSET_TEX3D_OBJECTS_TIMBERCARENVMAP", - "folder": "objects" - }, - { - "index": 474, - "filename": "debug_gray", - "build-id": "ASSET_TEX3D_COMMON_DEBUGGRAY", - "folder": "common" - }, - { - "index": 475, - "filename": "timber_cap_back", - "build-id": "ASSET_TEX3D_OBJECTS_TIMBERCAPBACK", - "folder": "objects" - }, - { - "index": 476, - "filename": "timber_cap_front", - "build-id": "ASSET_TEX3D_OBJECTS_TIMBERCAPFRONT", - "folder": "objects" - }, - { - "index": 477, - "filename": "timber_cap_top", - "build-id": "ASSET_TEX3D_OBJECTS_TIMBERCAPTOP", - "folder": "objects" - }, - { - "index": 478, - "filename": "timber_head_fur", - "build-id": "ASSET_TEX3D_OBJECTS_TIMBERHEADFUR", - "folder": "objects" - }, - { - "index": 479, - "filename": "timber_stripes_arms_nape", - "build-id": "ASSET_TEX3D_OBJECTS_TIMBERSTRIPESARMSNECKBACK", - "folder": "objects" - }, - { - "index": 480, - "filename": "timber_stripes_arms_nape_plane", - "build-id": "ASSET_TEX3D_OBJECTS_TIMBERSTRIPESARMSNECKBACKPLANE", - "folder": "objects" - }, - { - "index": 481, - "filename": "timber_stripes_limbs_back_charselect", - "build-id": "ASSET_TEX3D_OBJECTS_TIMBERSTRIPESLIMBSBACKCHARSELECT", - "folder": "objects" - }, - { - "index": 482, - "filename": "white_wall_with_pipes", - "build-id": "ASSET_TEX3D_SPACE_WHITEWALLWITHPIPES", - "folder": "space" - }, - { - "index": 483, - "filename": "smokey_legs", - "build-id": "ASSET_TEX3D_OBJECTS_SMOKEYLEGS", - "folder": "objects" - }, - { - "index": 484, - "filename": "rings_metal_envmap", - "build-id": "ASSET_TEX3D_SPACE_RINGSMETALENVMAP", - "folder": "space" - }, - { - "index": 485, - "filename": "krunch_jacket_sides", - "build-id": "ASSET_TEX3D_OBJECTS_KRUNCHJACKETSIDES", - "folder": "objects" - }, - { - "index": 486, - "filename": "dots", - "build-id": "ASSET_TEX3D_OBJECTS_DOTS", - "folder": "objects" - }, - { - "index": 487, - "filename": "krunch_scutes", - "build-id": "ASSET_TEX3D_OBJECTS_KRUNCHSCUTES", - "folder": "objects" - }, - { - "index": 488, - "filename": "beta_balloon_krunch_0", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONKRUNCH_0", - "folder": "unused" - }, - { - "index": 489, - "filename": "beta_balloon_krunch_1", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONKRUNCH_1", - "folder": "unused" - }, - { - "index": 490, - "filename": "beta_balloon_krunch_2", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONKRUNCH_2", - "folder": "unused" - }, - { - "index": 491, - "filename": "beta_balloon_krunch_3", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONKRUNCH_3", - "folder": "unused" - }, - { - "index": 492, - "filename": "krunch_underside", - "build-id": "ASSET_TEX3D_OBJECTS_KRUNCHUNDERSIDE", - "folder": "objects" - }, - { - "index": 493, - "filename": "krunch_eye", - "build-id": "ASSET_TEX3D_OBJECTS_KRUNCHEYE", - "folder": "objects" - }, - { - "index": 494, - "filename": "krunch_eye_lowpoly", - "build-id": "ASSET_TEX3D_OBJECTS_KRUNCHEYELOWPOLY", - "folder": "objects" - }, - { - "index": 495, - "filename": "krunch_skull", - "build-id": "ASSET_TEX3D_OBJECTS_KRUNCHSKULL", - "flip-tex": false, - "folder": "objects" - }, - { - "index": 496, - "filename": "krunch_toes", - "build-id": "ASSET_TEX3D_OBJECTS_KRUNCHTOES", - "folder": "objects" - }, - { - "index": 497, - "filename": "krunch_skin", - "build-id": "ASSET_TEX3D_OBJECTS_KRUNCHSKIN", - "folder": "objects" - }, - { - "index": 498, - "filename": "krunch_head_sides", - "build-id": "ASSET_TEX3D_OBJECTS_KRUNCHHEADSIDES", - "folder": "objects" - }, - { - "index": 499, - "filename": "krunch_head_top_lowpoly", - "build-id": "ASSET_TEX3D_OBJECTS_KRUNCHHEADTOPLOWPOLY", - "folder": "objects" - }, - { - "index": 500, - "filename": "krunch_mouth", - "build-id": "ASSET_TEX3D_OBJECTS_KRUNCHMOUTH", - "folder": "objects" - }, - { - "index": 501, - "filename": "krunch_back_lowpoly", - "build-id": "ASSET_TEX3D_OBJECTS_KRUNCHBACKLOWPOLY", - "folder": "objects" - }, - { - "index": 502, - "filename": "empty_car_break_lights", - "build-id": "ASSET_TEX3D_OBJECTS_EMPTYCARBREAKLIGHTS", - "folder": "objects" - }, - { - "index": 503, - "filename": "trophy_race_flag", - "build-id": "ASSET_TEX3D_COMMON_TROPHYRACEFLAG", - "folder": "common" - }, - { - "index": 504, - "filename": "diddy_skin", - "build-id": "ASSET_TEX3D_OBJECTS_DIDDYSKIN", - "folder": "objects" - }, - { - "index": 505, - "filename": "taj_trunk_top", - "build-id": "ASSET_TEX3D_OBJECTS_TAJTRUNKTOP", - "folder": "objects" - }, - { - "index": 506, - "filename": "mode", - "build-id": "ASSET_TEX3D_OBJECTS_MODE", - "folder": "objects" - }, - { - "index": 507, - "filename": "pipsy_ears", - "build-id": "ASSET_TEX3D_OBJECTS_PIPSYEARS", - "folder": "objects" - }, - { - "index": 508, - "filename": "pipsy_head_top", - "build-id": "ASSET_TEX3D_OBJECTS_PIPSYHEADTOP", - "folder": "objects" - }, - { - "index": 509, - "filename": "snow_char_bow", - "build-id": "ASSET_TEX3D_WINTER_SNOWCHARBOW", - "folder": "winter" - }, - { - "index": 510, - "filename": "pipsy_bow", - "build-id": "ASSET_TEX3D_OBJECTS_PIPSYBOW", - "folder": "objects" - }, - { - "index": 511, - "filename": "pipsy_belly", - "build-id": "ASSET_TEX3D_OBJECTS_PIPSYBELLY", - "folder": "objects" - }, - { - "index": 512, - "filename": "pipsy_sailor_suit", - "build-id": "ASSET_TEX3D_OBJECTS_PIPSYSAILORSUIT", - "folder": "objects" - }, - { - "index": 513, - "filename": "pipsy_eyes", - "build-id": "ASSET_TEX3D_OBJECTS_PIPSYEYES", - "folder": "objects" - }, - { - "index": 514, - "filename": "pterodactyl_eye", - "build-id": "ASSET_TEX3D_OBJECTS_PTERODACTYLEYE", - "folder": "objects" - }, - { - "index": 515, - "filename": "beta_balloon_pipsy_0", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPIPSY_0", - "folder": "unused" - }, - { - "index": 516, - "filename": "beta_balloon_pipsy_1", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPIPSY_1", - "folder": "unused" - }, - { - "index": 517, - "filename": "beta_balloon_pipsy_2", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPIPSY_2", - "folder": "unused" - }, - { - "index": 518, - "filename": "beta_balloon_pipsy_3", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPIPSY_3", - "folder": "unused" - }, - { - "index": 519, - "filename": "pipsy_gloves", - "build-id": "ASSET_TEX3D_OBJECTS_PIPSYGLOVES", - "folder": "objects" - }, - { - "index": 520, - "filename": "pipsy_arms", - "build-id": "ASSET_TEX3D_OBJECTS_PIPSYARMS", - "folder": "objects" - }, - { - "index": 521, - "filename": "pipsy_nose_whiskers", - "build-id": "ASSET_TEX3D_OBJECTS_PIPSYNOSEWHISKERS", - "folder": "objects" - }, - { - "index": 522, - "filename": "pipsy_head", - "build-id": "ASSET_TEX3D_OBJECTS_PIPSYHEAD", - "folder": "objects" - }, - { - "index": 523, - "filename": "pipsy_back_charselect", - "build-id": "ASSET_TEX3D_OBJECTS_PIPSYBACKCHARSELECT", - "folder": "objects" - }, - { - "index": 524, - "filename": "timber_mouth_lowpoly", - "build-id": "ASSET_TEX3D_OBJECTS_TIMBERMOUTHLOWPOLY", - "folder": "objects" - }, - { - "index": 525, - "filename": "green_dinosaur_inside_mouth", - "build-id": "ASSET_TEX3D_OBJECTS_GREENDINOSAURINSIDEMOUTH", - "folder": "objects" - }, - { - "index": 526, - "filename": "stopwatch_mouth_worried", - "build-id": "ASSET_TEX3D_OBJECTS_STOPWATCHMOUTHWORRIED", - "folder": "objects" - }, - { - "index": 527, - "filename": "stopwatch_mouth_happy", - "build-id": "ASSET_TEX3D_OBJECTS_STOPWATCHMOUTHHAPPY", - "folder": "objects" - }, - { - "index": 528, - "filename": "stopwatch_mouth_open_mouth", - "build-id": "ASSET_TEX3D_OBJECTS_STOPWATCHMOUTHOPENMOUTH", - "folder": "objects" - }, - { - "index": 529, - "filename": "bumper_goggles_front_charselect", - "build-id": "ASSET_TEX3D_OBJECTS_BUMPERGOGGLESFRONTCHARSELECT", - "folder": "objects" - }, - { - "index": 530, - "filename": "timber_ears_lowpoly", - "build-id": "ASSET_TEX3D_OBJECTS_TIMBEREARSLOWPOLY", - "folder": "objects" - }, - { - "index": 531, - "filename": "drumstick_car_envmap", - "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKCARENVMAP", - "folder": "objects" - }, - { - "index": 532, - "filename": "player_1_select", - "build-id": "ASSET_TEX3D_OBJECTS_PLAYER1SELECT", - "folder": "objects" - }, - { - "index": 533, - "filename": "player_2_select", - "build-id": "ASSET_TEX3D_OBJECTS_PLAYER2SELECT", - "folder": "objects" - }, - { - "index": 534, - "filename": "player_3_select", - "build-id": "ASSET_TEX3D_OBJECTS_PLAYER3SELECT", - "folder": "objects" - }, - { - "index": 535, - "filename": "player_4_select", - "build-id": "ASSET_TEX3D_OBJECTS_PLAYER4SELECT", - "folder": "objects" - }, - { - "index": 536, - "filename": "beta_balloon_player_1_0", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYER1_0", - "folder": "unused" - }, - { - "index": 537, - "filename": "beta_balloon_player_1_1", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYER1_1", - "folder": "unused" - }, - { - "index": 538, - "filename": "beta_balloon_player_1_2", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYER1_2", - "folder": "unused" - }, - { - "index": 539, - "filename": "beta_balloon_player_1_3", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYER1_3", - "folder": "unused" - }, - { - "index": 540, - "filename": "beta_balloon_player_2_0", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYER2_0", - "folder": "unused" - }, - { - "index": 541, - "filename": "beta_balloon_player_2_1", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYER2_1", - "folder": "unused" - }, - { - "index": 542, - "filename": "beta_balloon_player_2_2", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYER2_2", - "folder": "unused" - }, - { - "index": 543, - "filename": "beta_balloon_player_2_3", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYER2_3", - "folder": "unused" - }, - { - "index": 544, - "filename": "beta_balloon_player_3_0", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYER3_0", - "folder": "unused" - }, - { - "index": 545, - "filename": "beta_balloon_player_3_1", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYER3_1", - "folder": "unused" - }, - { - "index": 546, - "filename": "beta_balloon_player_3_2", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYER3_2", - "folder": "unused" - }, - { - "index": 547, - "filename": "beta_balloon_player_3_3", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYER3_3", - "folder": "unused" - }, - { - "index": 548, - "filename": "beta_balloon_player_4_0", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYER4_0", - "folder": "unused" - }, - { - "index": 549, - "filename": "beta_balloon_player_4_1", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYER4_1", - "folder": "unused" - }, - { - "index": 550, - "filename": "beta_balloon_player_4_2", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYER4_2", - "folder": "unused" - }, - { - "index": 551, - "filename": "beta_balloon_player_4_3", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYER4_3", - "folder": "unused" - }, - { - "index": 552, - "filename": "sign_shield", - "build-id": "ASSET_TEX3D_MEDIEVAL_SIGNSHIELD", - "folder": "medieval" - }, - { - "index": 553, - "filename": "cobble_ground", - "build-id": "ASSET_TEX3D_MEDIEVAL_COBBLEGROUND", - "folder": "medieval" - }, - { - "index": 554, - "filename": "yellow_cobble_ground", - "build-id": "ASSET_TEX3D_MEDIEVAL_YELLOWCOBBLEGROUND", - "folder": "medieval" - }, - { - "index": 555, - "filename": "bubbler_skin_sides_smooth", - "build-id": "ASSET_TEX3D_OBJECTS_BUBBLERSKINSIDESSMOOTH", - "folder": "objects" - }, - { - "index": 556, - "filename": "bubbler_eye", - "build-id": "ASSET_TEX3D_OBJECTS_BUBBLEREYE", - "folder": "objects" - }, - { - "index": 557, - "filename": "bubbler_skin_sides_dots", - "build-id": "ASSET_TEX3D_OBJECTS_BUBBLERSKINSIDESDOTS", - "folder": "objects" - }, - { - "index": 558, - "filename": "bubbler_eye_socket", - "build-id": "ASSET_TEX3D_OBJECTS_BUBBLEREYESOCKET", - "folder": "objects" - }, - { - "index": 559, - "filename": "tiptup_shell", - "build-id": "ASSET_TEX3D_OBJECTS_TIPTUPSHELL", - "folder": "objects" - }, - { - "index": 560, - "filename": "krunch_car_envmap", - "build-id": "ASSET_TEX3D_OBJECTS_KRUNCHCARENVMAP", - "folder": "objects" - }, - { - "index": 561, - "filename": "beta_balloon_krunch_envmap", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONKRUNCHENVMAP", - "folder": "unused" - }, - { - "index": 562, - "filename": "turn_sign", - "build-id": "ASSET_TEX3D_MEDIEVAL_TURNSIGN", - "folder": "medieval" - }, - { - "index": 563, - "filename": "yellow_dinosaur_back", - "build-id": "ASSET_TEX3D_OBJECTS_YELLOWDINOSAURBACK", - "folder": "objects" - }, - { - "index": 564, - "filename": "green_dinosaur_back", - "build-id": "ASSET_TEX3D_OBJECTS_GREENDINOSAURBACK", - "folder": "objects" - }, - { - "index": 565, - "filename": "wizpig_cape", - "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGCAPE", - "folder": "objects" - }, - { - "index": 566, - "filename": "wizpig_nose_side", - "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGNOSESIDE", - "folder": "objects" - }, - { - "index": 567, - "filename": "wizpig_nose_front", - "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGNOSEFRONT", - "folder": "objects" - }, - { - "index": 568, - "filename": "wizpig_hoof", - "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGHOOF", - "folder": "objects" - }, - { - "index": 569, - "filename": "smokey_skin", - "build-id": "ASSET_TEX3D_OBJECTS_SMOKEYSKIN", - "folder": "objects" - }, - { - "index": 570, - "filename": "smokey_wings_outline", - "build-id": "ASSET_TEX3D_OBJECTS_SMOKEYWINGSOUTLINE", - "folder": "objects" - }, - { - "index": 571, - "filename": "wizpig_amulet_nose", - "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGAMULETNOSE", - "folder": "objects" - }, - { - "index": 572, - "filename": "wizpig_head_eye", - "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGHEADEYE", - "folder": "objects" - }, - { - "index": 573, - "filename": "trickytops_mouth_edge", - "build-id": "ASSET_TEX3D_OBJECTS_TRICKYTOPSMOUTHEDGE", - "folder": "objects" - }, - { - "index": 574, - "filename": "wizpig_head_below_ears", - "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGHEADBELOWEARS", - "folder": "objects" - }, - { - "index": 575, - "filename": "wizpig_forehead", - "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGFOREHEAD", - "folder": "objects" - }, - { - "index": 576, - "filename": "wizpig_clothes", - "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGCLOTHES", - "folder": "objects" - }, - { - "index": 577, - "filename": "wizpig_jewel_eye", - "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGJEWELEYE", - "folder": "objects" - }, - { - "index": 578, - "filename": "wizpig_hair", - "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGHAIR", - "folder": "objects" - }, - { - "index": 579, - "filename": "wizpig_ear", - "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGEAR", - "folder": "objects" - }, - { - "index": 580, - "filename": "wizpig_head_mouth", - "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGHEADMOUTH", - "folder": "objects" - }, - { - "index": 581, - "filename": "trickytops_cheek", - "build-id": "ASSET_TEX3D_OBJECTS_TRICKYTOPSCHEEK", - "folder": "objects" - }, - { - "index": 582, - "filename": "trickytops_unknown", - "build-id": "ASSET_TEX3D_UNUSED_TRICKYTOPSUNKNOWN", - "folder": "unused" - }, - { - "index": 583, - "filename": "trickytops_frill_back", - "build-id": "ASSET_TEX3D_OBJECTS_TRICKYTOPSFRILLBACK", - "folder": "objects" - }, - { - "index": 584, - "filename": "trickytops_frill_front", - "build-id": "ASSET_TEX3D_OBJECTS_TRICKYTOPSFRILLFRONT", - "folder": "objects" - }, - { - "index": 585, - "filename": "trickytops_underside", - "build-id": "ASSET_TEX3D_OBJECTS_TRICKYTOPSUNDERSIDE", - "folder": "objects" - }, - { - "index": 586, - "filename": "trickytops_back", - "build-id": "ASSET_TEX3D_OBJECTS_TRICKYTOPSBACK", - "folder": "objects" - }, - { - "index": 587, - "filename": "wizpig_skin_lines", - "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGSKINLINES", - "folder": "objects" - }, - { - "index": 588, - "filename": "trickytops_nape", - "build-id": "ASSET_TEX3D_OBJECTS_TRICKYTOPSNAPE", - "folder": "objects" - }, - { - "index": 589, - "filename": "trickytops_nose", - "build-id": "ASSET_TEX3D_OBJECTS_TRICKYTOPSNOSE", - "folder": "objects" - }, - { - "index": 590, - "filename": "wizpig_skin", - "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGSKIN", - "folder": "objects" - }, - { - "index": 591, - "filename": "char_select_hill_fence", - "build-id": "ASSET_TEX3D_COMMON_CHARSELECTHILLFENCE", - "folder": "common" - }, - { - "index": 592, - "filename": "beta_balloon_pipsy_envmap", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPIPSYENVMAP", - "folder": "unused" - }, - { - "index": 593, - "filename": "pipsy_car_envmap", - "build-id": "ASSET_TEX3D_OBJECTS_PIPSYCARENVMAP", - "folder": "objects" - }, - { - "index": 594, - "filename": "beta_taj_pad", - "build-id": "ASSET_TEX3D_UNUSED_BETATAJPAD", - "folder": "unused" - }, - { - "index": 595, - "filename": "beta_taj_pad2", - "build-id": "ASSET_TEX3D_UNUSED_BETATAJPAD2", - "folder": "unused" - }, - { - "index": 596, - "filename": "taj_skin", - "build-id": "ASSET_TEX3D_OBJECTS_TAJSKIN", - "folder": "objects" - }, - { - "index": 597, - "filename": "bluey_tusks", - "build-id": "ASSET_TEX3D_OBJECTS_BLUEYTUSKS", - "folder": "objects" - }, - { - "index": 598, - "filename": "drumstick_feathers_charselect", - "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKFEATHERSCHARSELECT", - "folder": "objects" - }, - { - "index": 599, - "filename": "beta_balloon_drumstick_envmap", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONDRUMSTICKENVMAP", - "folder": "unused" - }, - { - "index": 600, - "filename": "tt_clock_hand", - "build-id": "ASSET_TEX3D_OBJECTS_TTCLOCKHAND", - "folder": "objects" - }, - { - "index": 601, - "filename": "tt_screw", - "build-id": "ASSET_TEX3D_OBJECTS_TTSCREW", - "folder": "objects" - }, - { - "index": 602, - "filename": "pipsy_head_lowpoly", - "build-id": "ASSET_TEX3D_OBJECTS_PIPSYHEADLOWPOLY", - "folder": "objects" - }, - { - "index": 603, - "filename": "tiptup_nose", - "build-id": "ASSET_TEX3D_OBJECTS_TIPTUPNOSE", - "folder": "objects" - }, - { - "index": 604, - "filename": "tiptup_toes_charselect", - "build-id": "ASSET_TEX3D_OBJECTS_TIPTUPTOESCHARSELECT", - "folder": "objects" - }, - { - "index": 605, - "filename": "tiptup_shell_back_center", - "build-id": "ASSET_TEX3D_OBJECTS_TIPTUPSHELLBACKCENTER", - "folder": "objects" - }, - { - "index": 606, - "filename": "tiptup_front", - "build-id": "ASSET_TEX3D_OBJECTS_TIPTUPFRONT", - "folder": "objects" - }, - { - "index": 607, - "filename": "tiptup_eye", - "build-id": "ASSET_TEX3D_OBJECTS_TIPTUPEYE", - "folder": "objects" - }, - { - "index": 608, - "filename": "tiptup_neck", - "build-id": "ASSET_TEX3D_OBJECTS_TIPTUPNECK", - "folder": "objects" - }, - { - "index": 609, - "filename": "tiptup_front_frame", - "build-id": "ASSET_TEX3D_OBJECTS_TIPTUPFRONTFRAME", - "folder": "objects" - }, - { - "index": 610, - "filename": "beta_balloon_players_envmap", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYERSENVMAP", - "folder": "unused" - }, - { - "index": 611, - "filename": "conker_car_envmap", - "build-id": "ASSET_TEX3D_OBJECTS_CONKERCARENVMAP", - "folder": "objects" - }, - { - "index": 612, - "filename": "conker_back_lowpoly", - "build-id": "ASSET_TEX3D_OBJECTS_CONKERBACKLOWPOLY", - "folder": "objects" - }, - { - "index": 613, - "filename": "pipsy_back_lowpoly", - "build-id": "ASSET_TEX3D_OBJECTS_PIPSYBACKLOWPOLY", - "folder": "objects" - }, - { - "index": 614, - "filename": "racer_common_steering_wheel2", - "build-id": "ASSET_TEX3D_OBJECTS_RACERCOMMONSTEERINGWHEEL2", - "folder": "objects" - }, - { - "index": 615, - "filename": "tt_eye", - "build-id": "ASSET_TEX3D_OBJECTS_TTEYE", - "folder": "objects" - }, - { - "index": 616, - "filename": "tt_eye_still", - "build-id": "ASSET_TEX3D_UNUSED_TTEYESTILL", - "folder": "unused" - }, - { - "index": 617, - "filename": "drumstick_straps_button_lowpoly", - "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKSTRAPSBUTTONLOWPOLY", - "folder": "objects" - }, - { - "index": 618, - "filename": "drumstick_straps_button", - "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKSTRAPSBUTTON", - "folder": "objects" - }, - { - "index": 619, - "filename": "tt_crown", - "build-id": "ASSET_TEX3D_OBJECTS_TTCROWN", - "folder": "objects" - }, - { - "index": 620, - "filename": "tt_glove", - "build-id": "ASSET_TEX3D_OBJECTS_TTGLOVE", - "folder": "objects" - }, - { - "index": 621, - "filename": "tt_mouth_smile", - "build-id": "ASSET_TEX3D_OBJECTS_TTMOUTHSMILE", - "folder": "objects" - }, - { - "index": 622, - "filename": "tt_rim", - "build-id": "ASSET_TEX3D_OBJECTS_TTRIM", - "folder": "objects" - }, - { - "index": 623, - "filename": "tt_shoe", - "build-id": "ASSET_TEX3D_OBJECTS_TTSHOE", - "folder": "objects" - }, - { - "index": 624, - "filename": "bubbler_tentacles_back_side", - "build-id": "ASSET_TEX3D_OBJECTS_BUBBLERTENTACLESBACKSIDE", - "folder": "objects" - }, - { - "index": 625, - "filename": "smokey_shadow", - "build-id": "ASSET_TEX3D_OBJECTS_SMOKEYSHADOW", - "flip-tex": false, - "folder": "objects" - }, - { - "index": 626, - "filename": "yellow_dinosaur_eye", - "build-id": "ASSET_TEX3D_OBJECTS_YELLOWDINOSAUREYE", - "flip-tex": false, - "folder": "objects" - }, - { - "index": 627, - "filename": "green_dinosaur_eye", - "build-id": "ASSET_TEX3D_OBJECTS_GREENDINOSAUREYE", - "flip-tex": false, - "folder": "objects" - }, - { - "index": 628, - "filename": "racer_common_black2", - "build-id": "ASSET_TEX3D_OBJECTS_RACERCOMMONBLACK2", - "folder": "objects" - }, - { - "index": 629, - "filename": "timber_front", - "build-id": "ASSET_TEX3D_OBJECTS_TIMBERFRONT", - "folder": "objects" - }, - { - "index": 630, - "filename": "timber_mouth", - "build-id": "ASSET_TEX3D_OBJECTS_TIMBERMOUTH", - "folder": "objects" - }, - { - "index": 631, - "filename": "beta_balloon_timber_0", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONTIMBER_0", - "folder": "unused" - }, - { - "index": 632, - "filename": "beta_balloon_timber_1", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONTIMBER_1", - "folder": "unused" - }, - { - "index": 633, - "filename": "beta_balloon_timber_2", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONTIMBER_2", - "folder": "unused" - }, - { - "index": 634, - "filename": "beta_balloon_timber_3", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONTIMBER_3", - "folder": "unused" - }, - { - "index": 635, - "filename": "timber_face_white_fur", - "build-id": "ASSET_TEX3D_OBJECTS_TIMBERFACEWHITEFUR", - "folder": "objects" - }, - { - "index": 636, - "filename": "timber_eye", - "build-id": "ASSET_TEX3D_OBJECTS_TIMBEREYE", - "folder": "objects" - }, - { - "index": 637, - "filename": "trickytops_skin_limbs", - "build-id": "ASSET_TEX3D_OBJECTS_TRICKYTOPSSKINLIMBS", - "folder": "objects" - }, - { - "index": 638, - "filename": "smokey_mouth", - "build-id": "ASSET_TEX3D_OBJECTS_SMOKEYMOUTH", - "folder": "objects" - }, - { - "index": 639, - "filename": "timber_front_charselect", - "build-id": "ASSET_TEX3D_OBJECTS_TIMBERFRONTCHARSELECT", - "folder": "objects" - }, - { - "index": 640, - "filename": "timber_nose", - "build-id": "ASSET_TEX3D_OBJECTS_TIMBERNOSE", - "folder": "objects" - }, - { - "index": 641, - "filename": "timber_fur", - "build-id": "ASSET_TEX3D_OBJECTS_TIMBERFUR", - "folder": "objects" - }, - { - "index": 642, - "filename": "timber_foot", - "build-id": "ASSET_TEX3D_OBJECTS_TIMBERFOOT", - "folder": "objects" - }, - { - "index": 643, - "filename": "timber_back_lowpoly", - "build-id": "ASSET_TEX3D_OBJECTS_TIMBERBACKLOWPOLY", - "folder": "objects" - }, - { - "index": 644, - "filename": "timber_cheek", - "build-id": "ASSET_TEX3D_OBJECTS_TIMBERCHEEK", - "folder": "objects" - }, - { - "index": 645, - "filename": "timber_cheek_plane", - "build-id": "ASSET_TEX3D_OBJECTS_TIMBERCHEEKPLANE", - "folder": "objects" - }, - { - "index": 646, - "filename": "timber_cheek_charselect", - "build-id": "ASSET_TEX3D_OBJECTS_TIMBERCHEEKCHARSELECT", - "folder": "objects" - }, - { - "index": 647, - "filename": "beta_balloon_tiptup_0", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONTIPTUP_0", - "folder": "unused" - }, - { - "index": 648, - "filename": "beta_balloon_tiptup_1", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONTIPTUP_1", - "folder": "unused" - }, - { - "index": 649, - "filename": "beta_balloon_tiptup_2", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONTIPTUP_2", - "folder": "unused" - }, - { - "index": 650, - "filename": "beta_balloon_tiptup_3", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONTIPTUP_3", - "folder": "unused" - }, - { - "index": 651, - "filename": "tiptup_skin", - "build-id": "ASSET_TEX3D_OBJECTS_TIPTUPSKIN", - "folder": "objects" - }, - { - "index": 652, - "filename": "tiptup_back_lowpoly", - "build-id": "ASSET_TEX3D_OBJECTS_TIPTUPBACKLOWPOLY", - "folder": "objects" - }, - { - "index": 653, - "filename": "tiptup_nape", - "build-id": "ASSET_TEX3D_OBJECTS_TIPTUPNAPE", - "folder": "objects" - }, - { - "index": 654, - "filename": "wizpig_eye", - "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGEYE", - "folder": "objects" - }, - { - "index": 655, - "filename": "trickytops_limbs", - "build-id": "ASSET_TEX3D_OBJECTS_TRICKYTOPSLIMBS", - "folder": "objects" - }, - { - "index": 656, - "filename": "trickytops_bottom_light", - "build-id": "ASSET_TEX3D_OBJECTS_TRICKYTOPSBOTTOMLIGHT", - "folder": "objects" - }, - { - "index": 657, - "filename": "trickytops_forehead", - "build-id": "ASSET_TEX3D_OBJECTS_TRICKYTOPSFOREHEAD", - "folder": "objects" - }, - { - "index": 658, - "filename": "wizpig_rocket_unused_shadow", - "build-id": "ASSET_TEX3D_UNUSED_WIZPIGROCKETUNUSEDSHADOW", - "flip-tex": false, - "folder": "unused" - }, - { - "index": 659, - "filename": "trickytops_toes", - "build-id": "ASSET_TEX3D_OBJECTS_TRICKYTOPSTOES", - "folder": "objects" - }, - { - "index": 660, - "filename": "widescreen", - "build-id": "ASSET_TEX3D_OBJECTS_WIDESCREEN", - "folder": "objects" - }, - { - "index": 661, - "filename": "racer_common_hover_bottom", - "build-id": "ASSET_TEX3D_OBJECTS_RACERCOMMONHOVERBOTTOM", - "folder": "objects" - }, - { - "index": 662, - "filename": "bumper_hover_top_lowpoly", - "build-id": "ASSET_TEX3D_OBJECTS_BUMPERHOVERTOPLOWPOLY", - "folder": "objects" - }, - { - "index": 663, - "filename": "tiptup_hover_top", - "build-id": "ASSET_TEX3D_OBJECTS_TIPTUPHOVERTOP", - "folder": "objects" - }, - { - "index": 664, - "filename": "conker_hover_top", - "build-id": "ASSET_TEX3D_OBJECTS_CONKERHOVERTOP", - "folder": "objects" - }, - { - "index": 665, - "filename": "banjo_hover_top", - "build-id": "ASSET_TEX3D_OBJECTS_BANJOHOVERTOP", - "folder": "objects" - }, - { - "index": 666, - "filename": "diddy_hover_top", - "build-id": "ASSET_TEX3D_OBJECTS_DIDDYHOVERTOP", - "folder": "objects" - }, - { - "index": 667, - "filename": "timber_hover_top", - "build-id": "ASSET_TEX3D_OBJECTS_TIMBERHOVERTOP", - "folder": "objects" - }, - { - "index": 668, - "filename": "krunch_hover_top", - "build-id": "ASSET_TEX3D_OBJECTS_KRUNCHHOVERTOP", - "folder": "objects" - }, - { - "index": 669, - "filename": "pipsy_hover_top", - "build-id": "ASSET_TEX3D_OBJECTS_PIPSYHOVERTOP", - "folder": "objects" - }, - { - "index": 670, - "filename": "drumstick_hover_top", - "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKHOVERTOP", - "folder": "objects" - }, - { - "index": 671, - "filename": "bumper_hover_top", - "build-id": "ASSET_TEX3D_OBJECTS_BUMPERHOVERTOP", - "folder": "objects" - }, - { - "index": 672, - "filename": "taj_turban", - "build-id": "ASSET_TEX3D_OBJECTS_TAJTURBAN", - "folder": "objects" - }, - { - "index": 673, - "filename": "taj_tusks", - "build-id": "ASSET_TEX3D_OBJECTS_TAJTUSKS", - "folder": "objects" - }, - { - "index": 674, - "filename": "racer_common_red_lowpoly", - "build-id": "ASSET_TEX3D_OBJECTS_RACERCOMMONREDLOWPOLY", - "folder": "objects" - }, - { - "index": 675, - "filename": "stopwatch_frame_envmap", - "build-id": "ASSET_TEX3D_OBJECTS_STOPWATCHFRAMEENVMAP", - "folder": "objects" - }, - { - "index": 676, - "filename": "bluey_skin_envmap", - "build-id": "ASSET_TEX3D_OBJECTS_BLUEYSKINENVMAP", - "folder": "objects" - }, - { - "index": 677, - "filename": "taj_front", - "build-id": "ASSET_TEX3D_OBJECTS_TAJFRONT", - "folder": "objects" - }, - { - "index": 678, - "filename": "taj_cheek", - "build-id": "ASSET_TEX3D_OBJECTS_TAJCHEEK", - "folder": "objects" - }, - { - "index": 679, - "filename": "taj_limbs", - "build-id": "ASSET_TEX3D_OBJECTS_TAJLIMBS", - "folder": "objects" - }, - { - "index": 680, - "filename": "taj_vest", - "build-id": "ASSET_TEX3D_OBJECTS_TAJVEST", - "folder": "objects" - }, - { - "index": 681, - "filename": "taj_leg_sides", - "build-id": "ASSET_TEX3D_OBJECTS_TAJLEGSIDES", - "folder": "objects" - }, - { - "index": 682, - "filename": "bluey_cheek", - "build-id": "ASSET_TEX3D_OBJECTS_BLUEYCHEEK", - "folder": "objects" - }, - { - "index": 683, - "filename": "racer_common_white", - "build-id": "ASSET_TEX3D_OBJECTS_RACERCOMMONWHITE", - "folder": "objects" - }, - { - "index": 684, - "filename": "drumstick_wings_top", - "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKWINGSTOP", - "folder": "objects" - }, - { - "index": 685, - "filename": "tiptup_plane_wing", - "build-id": "ASSET_TEX3D_OBJECTS_TIPTUPPLANEWING", - "folder": "objects" - }, - { - "index": 686, - "filename": "conker_plane_wing", - "build-id": "ASSET_TEX3D_OBJECTS_CONKERPLANEWING", - "folder": "objects" - }, - { - "index": 687, - "filename": "banjo_plane_wing", - "build-id": "ASSET_TEX3D_OBJECTS_BANJOPLANEWING", - "folder": "objects" - }, - { - "index": 688, - "filename": "diddy_plane_wing", - "build-id": "ASSET_TEX3D_OBJECTS_DIDDYPLANEWING", - "folder": "objects" - }, - { - "index": 689, - "filename": "timber_plane_wing", - "build-id": "ASSET_TEX3D_OBJECTS_TIMBERPLANEWING", - "folder": "objects" - }, - { - "index": 690, - "filename": "krunch_plane_wing", - "build-id": "ASSET_TEX3D_OBJECTS_KRUNCHPLANEWING", - "folder": "objects" - }, - { - "index": 691, - "filename": "pipsy_plane_wing", - "build-id": "ASSET_TEX3D_OBJECTS_PIPSYPLANEWING", - "folder": "objects" - }, - { - "index": 692, - "filename": "drumstick_plane_wing", - "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKPLANEWING", - "folder": "objects" - }, - { - "index": 693, - "filename": "bumper_plane_wing", - "build-id": "ASSET_TEX3D_OBJECTS_BUMPERPLANEWING", - "folder": "objects" - }, - { - "index": 694, - "filename": "bumper_car_envmap", - "build-id": "ASSET_TEX3D_OBJECTS_BUMPERCARENVMAP", - "folder": "objects" - }, - { - "index": 695, - "filename": "beta_balloon_bumper_envmap", - "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONBUMPERENVMAP", - "folder": "unused" - }, - { - "index": 696, - "filename": "gold_balloon_stripes", - "build-id": "ASSET_TEX3D_UNUSED_GOLDBALLOONSTRIPES", - "folder": "unused" - }, - { - "index": 697, - "filename": "brown_dirt_path", - "build-id": "ASSET_TEX3D_COMMON_BROWNDIRTPATH", - "folder": "common" - }, - { - "index": 698, - "filename": "fossil_holes", - "build-id": "ASSET_TEX3D_DINO_FOSSILHOLES", - "folder": "dino" - }, - { - "index": 699, - "filename": "green_wall_with_dials", - "build-id": "ASSET_TEX3D_SPACE_GREENWALLWITHDIALS", - "folder": "space" - }, - { - "index": 700, - "filename": "dirt_wall_sandy2", - "build-id": "ASSET_TEX3D_COMMON_DIRTWALLSANDY2", - "folder": "common" - }, - { - "index": 701, - "filename": "white_wall_yellow_arrow_down", - "build-id": "ASSET_TEX3D_SPACE_WHITEWALLYELLOWARROWDOWN", - "folder": "space" - }, - { - "index": 702, - "filename": "spaceship_earth", - "build-id": "ASSET_TEX3D_SPACE_SPACESHIPEARTH", - "folder": "space" - }, - { - "index": 703, - "filename": "vent_fan_grate", - "build-id": "ASSET_TEX3D_SPACE_VENTFANGRATE", - "folder": "space" - }, - { - "index": 704, - "filename": "fan_blade", - "build-id": "ASSET_TEX3D_OBJECTS_FANBLADE", - "folder": "objects" - }, - { - "index": 705, - "filename": "dome_orange_sky_0", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEORANGESKY_0", - "folder": "objects" - }, - { - "index": 706, - "filename": "dome_orange_sky_1", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEORANGESKY_1", - "folder": "objects" - }, - { - "index": 707, - "filename": "dome_orange_sky_2", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEORANGESKY_2", - "folder": "objects" - }, - { - "index": 708, - "filename": "dome_orange_sky_3", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEORANGESKY_3", - "folder": "objects" - }, - { - "index": 709, - "filename": "glass_window", - "build-id": "ASSET_TEX3D_SPACE_GLASSWINDOW", - "folder": "space" - }, - { - "index": 710, - "filename": "blinking_light", - "build-id": "ASSET_TEX3D_SPACE_BLINKINGLIGHT", - "folder": "space" - }, - { - "index": 711, - "filename": "hanging_moss3", - "build-id": "ASSET_TEX3D_COMMON_HANGINGMOSS3", - "folder": "common" - }, - { - "index": 712, - "filename": "yellow_house_front", - "build-id": "ASSET_TEX3D_MEDIEVAL_YELLOWHOUSEFRONT", - "folder": "medieval" - }, - { - "index": 713, - "filename": "yellow_house_side", - "build-id": "ASSET_TEX3D_MEDIEVAL_YELLOWHOUSESIDE", - "folder": "medieval" - }, - { - "index": 714, - "filename": "green_wall_graph", - "build-id": "ASSET_TEX3D_SPACE_GREENWALLGRAPH", - "folder": "space" - }, - { - "index": 715, - "filename": "green_wall_tanks", - "build-id": "ASSET_TEX3D_SPACE_GREENWALLTANKS", - "folder": "space" - }, - { - "index": 716, - "filename": "blue_stone_sandy_mossy", - "build-id": "ASSET_TEX3D_COMMON_BLUESTONESANDYMOSSY", - "folder": "common" - }, - { - "index": 717, - "filename": "orange_stone_sandy", - "build-id": "ASSET_TEX3D_DINO_ORANGESTONESANDY", - "folder": "dino" - }, - { - "index": 718, - "filename": "debug_purple_hit", - "build-id": "ASSET_TEX3D_COMMON_DEBUGPURPLEHIT", - "folder": "common" - }, - { - "index": 719, - "filename": "arch_support", - "build-id": "ASSET_TEX3D_SPACE_ARCHSUPPORT", - "folder": "space" - }, - { - "index": 720, - "filename": "stars_sign", - "build-id": "ASSET_TEX3D_SPACE_STARSSIGN", - "folder": "space" - }, - { - "index": 721, - "filename": "killer_instinct_sign", - "build-id": "ASSET_TEX3D_SPACE_KILLERINSTINCTSIGN", - "folder": "space" - }, - { - "index": 722, - "filename": "dome_orange_sky2_0", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEORANGESKY2_0", - "folder": "objects" - }, - { - "index": 723, - "filename": "dome_orange_sky2_1", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEORANGESKY2_1", - "folder": "objects" - }, - { - "index": 724, - "filename": "dome_orange_sky2_2", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEORANGESKY2_2", - "folder": "objects" - }, - { - "index": 725, - "filename": "dome_orange_sky2_3", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEORANGESKY2_3", - "folder": "objects" - }, - { - "index": 726, - "filename": "blue_wall_light", - "build-id": "ASSET_TEX3D_SPACE_BLUEWALLLIGHT", - "folder": "space" - }, - { - "index": 727, - "filename": "blue_wall_light2", - "build-id": "ASSET_TEX3D_SPACE_BLUEWALLLIGHT2", - "folder": "space" - }, - { - "index": 728, - "filename": "blue_wall_stripes", - "build-id": "ASSET_TEX3D_SPACE_BLUEWALLSTRIPES", - "folder": "space" - }, - { - "index": 729, - "filename": "white_wall_bricks_details", - "build-id": "ASSET_TEX3D_SPACE_WHITEWALLBRICKSDETAILS", - "folder": "space" - }, - { - "index": 730, - "filename": "blue_tunnel_light", - "build-id": "ASSET_TEX3D_SPACE_BLUETUNNELLIGHT", - "folder": "space" - }, - { - "index": 731, - "filename": "lilypad_edge", - "build-id": "ASSET_TEX3D_DINO_LILYPADEDGE", - "folder": "dino" - }, - { - "index": 732, - "filename": "blue_wall_frame", - "build-id": "ASSET_TEX3D_MEDIEVAL_BLUEWALLFRAME", - "folder": "medieval" - }, - { - "index": 733, - "filename": "blue_wall_window_and_flags", - "build-id": "ASSET_TEX3D_MEDIEVAL_BLUEWALLWINDOWANDFLAGS", - "folder": "medieval" - }, - { - "index": 734, - "filename": "blue_wall_window_and_door", - "build-id": "ASSET_TEX3D_MEDIEVAL_BLUEWALLWINDOWANDDOOR", - "folder": "medieval" - }, - { - "index": 735, - "filename": "blue_wall_rope", - "build-id": "ASSET_TEX3D_MEDIEVAL_BLUEWALLROPE", - "folder": "medieval" - }, - { - "index": 736, - "filename": "dome_grass_0", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEGRASS_0", - "folder": "objects" - }, - { - "index": 737, - "filename": "dome_grass_1", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEGRASS_1", - "folder": "objects" - }, - { - "index": 738, - "filename": "dome_grass_2", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEGRASS_2", - "folder": "objects" - }, - { - "index": 739, - "filename": "dome_grass_3", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEGRASS_3", - "folder": "objects" - }, - { - "index": 740, - "filename": "monorail_n64_logo", - "build-id": "ASSET_TEX3D_OBJECTS_MONORAILN64LOGO", - "folder": "objects" - }, - { - "index": 741, - "filename": "temple_brick2", - "build-id": "ASSET_TEX3D_DINO_TEMPLEBRICK2", - "folder": "dino" - }, - { - "index": 742, - "filename": "white_wall_pipes", - "build-id": "ASSET_TEX3D_SPACE_WHITEWALLPIPES", - "folder": "space" - }, - { - "index": 743, - "filename": "n64_logo_ship_sail_0", - "build-id": "ASSET_TEX3D_TROPICAL_N64LOGOSHIPSAIL_0", - "folder": "tropical" - }, - { - "index": 744, - "filename": "n64_logo_ship_sail_1", - "build-id": "ASSET_TEX3D_TROPICAL_N64LOGOSHIPSAIL_1", - "folder": "tropical" - }, - { - "index": 745, - "filename": "white_wall_n64_tank", - "build-id": "ASSET_TEX3D_SPACE_WHITEWALLN64TANK", - "folder": "space" - }, - { - "index": 746, - "filename": "black_unknown", - "build-id": "ASSET_TEX3D_UNUSED_BLACKUNKNOWN", - "folder": "unused" - }, - { - "index": 747, - "filename": "n64_sign_square", - "build-id": "ASSET_TEX3D_SPACE_N64SIGNSQUARE", - "folder": "space" - }, - { - "index": 748, - "filename": "sun_neon_sign", - "build-id": "ASSET_TEX3D_SPACE_SUNNEONSIGN", - "folder": "space" - }, - { - "index": 749, - "filename": "street_road", - "build-id": "ASSET_TEX3D_SPACE_STREETROAD", - "folder": "space" - }, - { - "index": 750, - "filename": "dome_blue_sky2_0", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY2_0", - "folder": "objects" - }, - { - "index": 751, - "filename": "dome_blue_sky2_1", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY2_1", - "folder": "objects" - }, - { - "index": 752, - "filename": "dome_blue_sky2_2", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY2_2", - "folder": "objects" - }, - { - "index": 753, - "filename": "dome_blue_sky2_3", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY2_3", - "folder": "objects" - }, - { - "index": 754, - "filename": "dome_desert_0", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEDESERT_0", - "folder": "objects" - }, - { - "index": 755, - "filename": "dome_desert_1", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEDESERT_1", - "folder": "objects" - }, - { - "index": 756, - "filename": "dome_desert_2", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEDESERT_2", - "folder": "objects" - }, - { - "index": 757, - "filename": "dome_desert_3", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEDESERT_3", - "folder": "objects" - }, - { - "index": 758, - "filename": "nintendo_logo_negative_0", - "build-id": "ASSET_TEX3D_UNUSED_NINTENDOLOGONEGATIVE_0", - "folder": "unused" - }, - { - "index": 759, - "filename": "nintendo_logo_negative_1", - "build-id": "ASSET_TEX3D_UNUSED_NINTENDOLOGONEGATIVE_1", - "folder": "unused" - }, - { - "index": 760, - "filename": "nintendo_logo_negative_2", - "build-id": "ASSET_TEX3D_UNUSED_NINTENDOLOGONEGATIVE_2", - "folder": "unused" - }, - { - "index": 761, - "filename": "nintendo_logo_negative_3", - "build-id": "ASSET_TEX3D_UNUSED_NINTENDOLOGONEGATIVE_3", - "folder": "unused" - }, - { - "index": 762, - "filename": "dome_space_stars_0", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACESTARS_0", - "folder": "objects" - }, - { - "index": 763, - "filename": "dome_space_stars_1", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACESTARS_1", - "folder": "objects" - }, - { - "index": 764, - "filename": "dome_space_stars_2", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACESTARS_2", - "folder": "objects" - }, - { - "index": 765, - "filename": "dome_space_orange_sky_0", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEORANGESKY_0", - "folder": "objects" - }, - { - "index": 766, - "filename": "dome_space_orange_sky_1", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEORANGESKY_1", - "folder": "objects" - }, - { - "index": 767, - "filename": "dome_space_orange_sky_2", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEORANGESKY_2", - "folder": "objects" - }, - { - "index": 768, - "filename": "dome_space_yellow_sky_0", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEYELLOWSKY_0", - "folder": "objects" - }, - { - "index": 769, - "filename": "dome_space_yellow_sky_1", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEYELLOWSKY_1", - "folder": "objects" - }, - { - "index": 770, - "filename": "dome_space_yellow_sky_2", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEYELLOWSKY_2", - "folder": "objects" - }, - { - "index": 771, - "filename": "village_stone_wall", - "build-id": "ASSET_TEX3D_MEDIEVAL_VILLAGESTONEWALL", - "folder": "medieval" - }, - { - "index": 772, - "filename": "red_arrow_sign2", - "build-id": "ASSET_TEX3D_COMMON_REDARROWSIGN2", - "folder": "common" - }, - { - "index": 773, - "filename": "village_roof_n64_logo", - "build-id": "ASSET_TEX3D_MEDIEVAL_VILLAGEROOFN64LOGO", - "folder": "medieval" - }, - { - "index": 774, - "filename": "skyscraper_lights", - "build-id": "ASSET_TEX3D_SPACE_SKYSCRAPERLIGHTS", - "folder": "space" - }, - { - "index": 775, - "filename": "white_wall_bricks2", - "build-id": "ASSET_TEX3D_SPACE_WHITEWALLBRICKS2", - "folder": "space" - }, - { - "index": 776, - "filename": "white_wall_n64_logo", - "build-id": "ASSET_TEX3D_SPACE_WHITEWALLN64LOGO", - "folder": "space" - }, - { - "index": 777, - "filename": "wood_bridge_dark_brown", - "build-id": "ASSET_TEX3D_COMMON_WOODBRIDGEDARKBROWN", - "folder": "common" - }, - { - "index": 778, - "filename": "finish_line_flag_black_yellow", - "build-id": "ASSET_TEX3D_WINTER_FINISHLINEFLAGBLACKYELLOW", - "folder": "winter" - }, - { - "index": 779, - "filename": "dome_blue_sky3_0", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY3_0", - "folder": "objects" - }, - { - "index": 780, - "filename": "dome_blue_sky3_1", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY3_1", - "folder": "objects" - }, - { - "index": 781, - "filename": "dome_blue_sky3_2", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY3_2", - "folder": "objects" - }, - { - "index": 782, - "filename": "dome_blue_sky3_3", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY3_3", - "folder": "objects" - }, - { - "index": 783, - "filename": "space_grass", - "build-id": "ASSET_TEX3D_SPACE_SPACEGRASS", - "folder": "space" - }, - { - "index": 784, - "filename": "castle_wall_tile_mossy", - "build-id": "ASSET_TEX3D_UNUSED_CASTLEWALLTILEMOSSY", - "folder": "unused" - }, - { - "index": 785, - "filename": "vent_fan_border", - "build-id": "ASSET_TEX3D_SPACE_VENTFANBORDER", - "folder": "space" - }, - { - "index": 786, - "filename": "white_wall_blue_pipe", - "build-id": "ASSET_TEX3D_SPACE_WHITEWALLBLUEPIPE", - "folder": "space" - }, - { - "index": 787, - "filename": "dome_top_brown", - "build-id": "ASSET_TEX3D_OBJECTS_DOMETOPBROWN", - "folder": "objects" - }, - { - "index": 788, - "filename": "village_plank_fence", - "build-id": "ASSET_TEX3D_MEDIEVAL_VILLAGEPLANKFENCE", - "folder": "medieval" - }, - { - "index": 789, - "filename": "pterodactyl_underside", - "build-id": "ASSET_TEX3D_OBJECTS_PTERODACTYLUNDERSIDE", - "folder": "objects" - }, - { - "index": 790, - "filename": "pterodactyl_nose", - "build-id": "ASSET_TEX3D_OBJECTS_PTERODACTYLNOSE", - "folder": "objects" - }, - { - "index": 791, - "filename": "pterodactyl_skin", - "build-id": "ASSET_TEX3D_OBJECTS_PTERODACTYLSKIN", - "folder": "objects" - }, - { - "index": 792, - "filename": "pterodactyl_spine_head", - "build-id": "ASSET_TEX3D_OBJECTS_PTERODACTYLSPINEHEAD", - "folder": "objects" - }, - { - "index": 793, - "filename": "pterodactyl_wings", - "build-id": "ASSET_TEX3D_OBJECTS_PTERODACTYLWINGS", - "folder": "objects" - }, - { - "index": 794, - "filename": "red_wall_small_levers", - "build-id": "ASSET_TEX3D_SPACE_REDWALLSMALLLEVERS", - "folder": "space" - }, - { - "index": 795, - "filename": "red_wall_big_levers", - "build-id": "ASSET_TEX3D_SPACE_REDWALLBIGLEVERS", - "folder": "space" - }, - { - "index": 796, - "filename": "red_wall_r4300", - "build-id": "ASSET_TEX3D_SPACE_REDWALLR4300", - "folder": "space" - }, - { - "index": 797, - "filename": "red_wall_computer", - "build-id": "ASSET_TEX3D_SPACE_REDWALLCOMPUTER", - "folder": "space" - }, - { - "index": 798, - "filename": "roof_tile_shingles", - "build-id": "ASSET_TEX3D_MEDIEVAL_ROOFTILESHINGLES", - "folder": "medieval" - }, - { - "index": 799, - "filename": "colored_stone", - "build-id": "ASSET_TEX3D_SPACE_COLOREDSTONE", - "folder": "space" - }, - { - "index": 800, - "filename": "blue_castle_merlon", - "build-id": "ASSET_TEX3D_MEDIEVAL_BLUECASTLEMERLON", - "folder": "medieval" - }, - { - "index": 801, - "filename": "rare_sign_flashing", - "build-id": "ASSET_TEX3D_SPACE_RARESIGNFLASHING", - "folder": "space" - }, - { - "index": 802, - "filename": "red_ground_arrow", - "build-id": "ASSET_TEX3D_SPACE_REDGROUNDARROW", - "folder": "space" - }, - { - "index": 803, - "filename": "red_wall_big_levers2", - "build-id": "ASSET_TEX3D_SPACE_REDWALLBIGLEVERS2", - "folder": "space" - }, - { - "index": 804, - "filename": "orange_house_wall_window", - "build-id": "ASSET_TEX3D_MEDIEVAL_ORANGEHOUSEWALLWINDOW", - "folder": "medieval" - }, - { - "index": 805, - "filename": "orange_house_guard_rail", - "build-id": "ASSET_TEX3D_MEDIEVAL_ORANGEHOUSEGUARDRAIL", - "folder": "medieval" - }, - { - "index": 806, - "filename": "arch_support_base", - "build-id": "ASSET_TEX3D_SPACE_ARCHSUPPORTBASE", - "folder": "space" - }, - { - "index": 807, - "filename": "spaceship_booster", - "build-id": "ASSET_TEX3D_OBJECTS_SPACESHIPBOOSTER", - "folder": "objects" - }, - { - "index": 808, - "filename": "red_pillar_spike", - "build-id": "ASSET_TEX3D_SPACE_REDPILLARSPIKE", - "folder": "space" - }, - { - "index": 809, - "filename": "fossil_bone", - "build-id": "ASSET_TEX3D_DINO_FOSSILBONE", - "folder": "dino" - }, - { - "index": 810, - "filename": "white_wall_rare_logo", - "build-id": "ASSET_TEX3D_SPACE_WHITEWALLRARELOGO", - "folder": "space" - }, - { - "index": 811, - "filename": "roof_tile_shingles_red", - "build-id": "ASSET_TEX3D_MEDIEVAL_ROOFTILESHINGLESRED", - "folder": "medieval" - }, - { - "index": 812, - "filename": "roof_tile_shingles2", - "build-id": "ASSET_TEX3D_MEDIEVAL_ROOFTILESHINGLES2", - "folder": "medieval" - }, - { - "index": 813, - "filename": "charselect_shadow", - "build-id": "ASSET_TEX3D_OBJECTS_CHARSELECTSHADOW", - "folder": "objects" - }, - { - "index": 814, - "filename": "blue_pavement", - "build-id": "ASSET_TEX3D_SPACE_BLUEPAVEMENT", - "folder": "space" - }, - { - "index": 815, - "filename": "dome_sun_rays", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESUNRAYS", - "folder": "objects" - }, - { - "index": 816, - "filename": "dirt_road_sandy", - "build-id": "ASSET_TEX3D_COMMON_DIRTROADSANDY", - "folder": "common" - }, - { - "index": 817, - "filename": "dome_blue_sky_island", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKYISLAND", - "folder": "objects" - }, - { - "index": 818, - "filename": "dome_black_bottom", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLACKBOTTOM", - "folder": "objects" - }, - { - "index": 819, - "filename": "dome_snowy_night_0", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_0", - "folder": "objects" - }, - { - "index": 820, - "filename": "dome_snowy_night_1", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_1", - "folder": "objects" - }, - { - "index": 821, - "filename": "dome_snowy_night_2", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_2", - "folder": "objects" - }, - { - "index": 822, - "filename": "dome_snowy_night_3", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_3", - "folder": "objects" - }, - { - "index": 823, - "filename": "dome_snowy_night_4", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_4", - "folder": "objects" - }, - { - "index": 824, - "filename": "dome_snowy_night_5", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_5", - "folder": "objects" - }, - { - "index": 825, - "filename": "dome_snowy_night_6", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_6", - "folder": "objects" - }, - { - "index": 826, - "filename": "dome_snowy_night_7", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_7", - "folder": "objects" - }, - { - "index": 827, - "filename": "dome_snowy_night_8", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_8", - "folder": "objects" - }, - { - "index": 828, - "filename": "dome_snowy_night_9", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_9", - "folder": "objects" - }, - { - "index": 829, - "filename": "dome_snowy_night_10", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_10", - "folder": "objects" - }, - { - "index": 830, - "filename": "dome_snowy_night_11", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_11", - "folder": "objects" - }, - { - "index": 831, - "filename": "black_semitransparent", - "build-id": "ASSET_TEX3D_COMMON_BLACKSEMITRANSPARENT", - "folder": "common" - }, - { - "index": 832, - "filename": "spaceship_blaster", - "build-id": "ASSET_TEX3D_OBJECTS_SPACESHIPBLASTER", - "folder": "objects" - }, - { - "index": 833, - "filename": "dome_volcano_0", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEVOLCANO_0", - "folder": "objects" - }, - { - "index": 834, - "filename": "dome_volcano_1", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEVOLCANO_1", - "folder": "objects" - }, - { - "index": 835, - "filename": "dome_volcano_2", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEVOLCANO_2", - "folder": "objects" - }, - { - "index": 836, - "filename": "dome_volcano_3", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEVOLCANO_3", - "folder": "objects" - }, - { - "index": 837, - "filename": "dome_volcano_4", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEVOLCANO_4", - "folder": "objects" - }, - { - "index": 838, - "filename": "dome_volcano_5", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEVOLCANO_5", - "folder": "objects" - }, - { - "index": 839, - "filename": "dome_volcano_6", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEVOLCANO_6", - "folder": "objects" - }, - { - "index": 840, - "filename": "dome_volcano_7", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEVOLCANO_7", - "folder": "objects" - }, - { - "index": 841, - "filename": "dome_volcano_8", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEVOLCANO_8", - "folder": "objects" - }, - { - "index": 842, - "filename": "dome_volcano_9", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEVOLCANO_9", - "folder": "objects" - }, - { - "index": 843, - "filename": "dome_volcano_10", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEVOLCANO_10", - "folder": "objects" - }, - { - "index": 844, - "filename": "dome_volcano_11", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEVOLCANO_11", - "folder": "objects" - }, - { - "index": 845, - "filename": "dome_snowy_night_top", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHTTOP", - "folder": "objects" - }, - { - "index": 846, - "filename": "icy_path_snowy", - "build-id": "ASSET_TEX3D_WINTER_ICYPATHSNOWY", - "folder": "winter" - }, - { - "index": 847, - "filename": "space_wall", - "build-id": "ASSET_TEX3D_SPACE_SPACEWALL", - "folder": "space" - }, - { - "index": 848, - "filename": "dome_space_blue_0", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_0", - "folder": "objects" - }, - { - "index": 849, - "filename": "dome_space_blue_1", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_1", - "folder": "objects" - }, - { - "index": 850, - "filename": "dome_space_blue_2", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_2", - "folder": "objects" - }, - { - "index": 851, - "filename": "dome_space_blue_3", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_3", - "folder": "objects" - }, - { - "index": 852, - "filename": "dome_space_blue_4", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_4", - "folder": "objects" - }, - { - "index": 853, - "filename": "dome_space_blue_5", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_5", - "folder": "objects" - }, - { - "index": 854, - "filename": "dome_space_blue_6", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_6", - "folder": "objects" - }, - { - "index": 855, - "filename": "dome_space_blue_7", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_7", - "folder": "objects" - }, - { - "index": 856, - "filename": "dome_space_blue_8", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_8", - "folder": "objects" - }, - { - "index": 857, - "filename": "dome_space_blue_9", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_9", - "folder": "objects" - }, - { - "index": 858, - "filename": "dome_space_blue_10", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_10", - "folder": "objects" - }, - { - "index": 859, - "filename": "dome_space_blue_11", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_11", - "folder": "objects" - }, - { - "index": 860, - "filename": "dome_space_blue_12", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_12", - "folder": "objects" - }, - { - "index": 861, - "filename": "dome_space_blue_13", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_13", - "folder": "objects" - }, - { - "index": 862, - "filename": "dome_space_blue_14", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_14", - "folder": "objects" - }, - { - "index": 863, - "filename": "dome_space_blue_15", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_15", - "folder": "objects" - }, - { - "index": 864, - "filename": "dome_space_blue_16", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_16", - "folder": "objects" - }, - { - "index": 865, - "filename": "dome_space_blue_17", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_17", - "folder": "objects" - }, - { - "index": 866, - "filename": "dome_space_blue_18", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_18", - "folder": "objects" - }, - { - "index": 867, - "filename": "dome_space_blue_19", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_19", - "folder": "objects" - }, - { - "index": 868, - "filename": "finish_line_white_space_0", - "build-id": "ASSET_TEX3D_SPACE_FINISHLINEWHITESPACE_0", - "folder": "space" - }, - { - "index": 869, - "filename": "finish_line_white_space_1", - "build-id": "ASSET_TEX3D_SPACE_FINISHLINEWHITESPACE_1", - "folder": "space" - }, - { - "index": 870, - "filename": "white_wall_blocks_large", - "build-id": "ASSET_TEX3D_SPACE_WHITEWALLBLOCKSLARGE", - "folder": "space" - }, - { - "index": 871, - "filename": "fog_white", - "build-id": "ASSET_TEX3D_COMMON_FOGWHITE", - "folder": "common" - }, - { - "index": 872, - "filename": "finish_line_space2_0", - "build-id": "ASSET_TEX3D_SPACE_FINISHLINESPACE2_0", - "folder": "space" - }, - { - "index": 873, - "filename": "finish_line_space2_1", - "build-id": "ASSET_TEX3D_SPACE_FINISHLINESPACE2_1", - "folder": "space" - }, - { - "index": 874, - "filename": "stadium_lights", - "build-id": "ASSET_TEX3D_SPACE_STADIUMLIGHTS", - "folder": "space" - }, - { - "index": 875, - "filename": "dome_space_pink_0", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEPINK_0", - "folder": "objects" - }, - { - "index": 876, - "filename": "dome_space_pink_1", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEPINK_1", - "folder": "objects" - }, - { - "index": 877, - "filename": "dome_space_pink_2", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEPINK_2", - "folder": "objects" - }, - { - "index": 878, - "filename": "dome_space_pink_3", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEPINK_3", - "folder": "objects" - }, - { - "index": 879, - "filename": "dome_space_pink_top", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEPINKTOP", - "folder": "objects" - }, - { - "index": 880, - "filename": "white_wall_small_yellow_arrow", - "build-id": "ASSET_TEX3D_SPACE_WHITEWALLSMALLYELLOWARROW", - "folder": "space" - }, - { - "index": 881, - "filename": "white_wall_vent", - "build-id": "ASSET_TEX3D_SPACE_WHITEWALLVENT", - "folder": "space" - }, - { - "index": 882, - "filename": "pole", - "build-id": "ASSET_TEX3D_SPACE_POLE", - "folder": "space" - }, - { - "index": 883, - "filename": "building_edge", - "build-id": "ASSET_TEX3D_SPACE_BUILDINGEDGE", - "folder": "space" - }, - { - "index": 884, - "filename": "ancient_stone", - "build-id": "ASSET_TEX3D_DINO_ANCIENTSTONE", - "folder": "dino" - }, - { - "index": 885, - "filename": "dome_orange_sky3_0", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEORANGESKY3_0", - "folder": "objects" - }, - { - "index": 886, - "filename": "dome_orange_sky3_1", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEORANGESKY3_1", - "folder": "objects" - }, - { - "index": 887, - "filename": "dome_orange_sky3_2", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEORANGESKY3_2", - "folder": "objects" - }, - { - "index": 888, - "filename": "dome_orange_sky3_3", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEORANGESKY3_3", - "folder": "objects" - }, - { - "index": 889, - "filename": "white_wall_blue_tanks", - "build-id": "ASSET_TEX3D_SPACE_WHITEWALLBLUETANKS", - "folder": "space" - }, - { - "index": 890, - "filename": "tree_trunks_woods_0", - "build-id": "ASSET_TEX3D_MEDIEVAL_TREETRUNKSWOODS_0", - "folder": "medieval" - }, - { - "index": 891, - "filename": "tree_trunks_woods_1", - "build-id": "ASSET_TEX3D_MEDIEVAL_TREETRUNKSWOODS_1", - "folder": "medieval" - }, - { - "index": 892, - "filename": "tree_trunks_woods_2", - "build-id": "ASSET_TEX3D_MEDIEVAL_TREETRUNKSWOODS_2", - "folder": "medieval" - }, - { - "index": 893, - "filename": "thatch_roofing2", - "build-id": "ASSET_TEX3D_MEDIEVAL_THATCHROOFING2", - "folder": "medieval" - }, - { - "index": 894, - "filename": "village_door_round", - "build-id": "ASSET_TEX3D_MEDIEVAL_VILLAGEDOORROUND", - "folder": "medieval" - }, - { - "index": 895, - "filename": "white_house_wall", - "build-id": "ASSET_TEX3D_MEDIEVAL_WHITEHOUSEWALL", - "folder": "medieval" - }, - { - "index": 896, - "filename": "white_house_wall_window", - "build-id": "ASSET_TEX3D_MEDIEVAL_WHITEHOUSEWALLWINDOW", - "folder": "medieval" - }, - { - "index": 897, - "filename": "uturn", - "build-id": "ASSET_TEX3D_UNUSED_UTURN", - "folder": "unused" - }, - { - "index": 898, - "filename": "icy_waterfall", - "build-id": "ASSET_TEX3D_WINTER_ICYWATERFALL", - "folder": "winter" - }, - { - "index": 899, - "filename": "white_wall_screen", - "build-id": "ASSET_TEX3D_SPACE_WHITEWALLSCREEN", - "folder": "space" - }, - { - "index": 900, - "filename": "silver_trophy_eye", - "build-id": "ASSET_TEX3D_OBJECTS_SILVERTROPHYEYE", - "folder": "objects" - }, - { - "index": 901, - "filename": "dome_blue_sky4_0", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY4_0", - "folder": "objects" - }, - { - "index": 902, - "filename": "dome_blue_sky4_1", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY4_1", - "folder": "objects" - }, - { - "index": 903, - "filename": "village_white_wall5", - "build-id": "ASSET_TEX3D_MEDIEVAL_VILLAGEWHITEWALL5", - "folder": "medieval" - }, - { - "index": 904, - "filename": "white_wall_steel_cylinder", - "build-id": "ASSET_TEX3D_SPACE_WHITEWALLSTEELCYLINDER", - "folder": "space" - }, - { - "index": 905, - "filename": "city_lights_yellow_white", - "build-id": "ASSET_TEX3D_SPACE_CITYLIGHTSYELLOWWHITE", - "folder": "space" - }, - { - "index": 906, - "filename": "beta_bumper_icon", - "build-id": "ASSET_TEX3D_UNUSED_BETABUMPERICON", - "folder": "unused" - }, - { - "index": 907, - "filename": "log_exposed_side2", - "build-id": "ASSET_TEX3D_COMMON_LOGEXPOSEDSIDE2", - "folder": "common" - }, - { - "index": 908, - "filename": "log_bark", - "build-id": "ASSET_TEX3D_COMMON_LOGBARK", - "folder": "common" - }, - { - "index": 909, - "filename": "log_bark2", - "build-id": "ASSET_TEX3D_COMMON_LOGBARK2", - "folder": "common" - }, - { - "index": 910, - "filename": "log_exposed_side3", - "build-id": "ASSET_TEX3D_COMMON_LOGEXPOSEDSIDE3", - "folder": "common" - }, - { - "index": 911, - "filename": "dome_coast_0", - "build-id": "ASSET_TEX3D_OBJECTS_DOMECOAST_0", - "folder": "objects" - }, - { - "index": 912, - "filename": "dome_coast_1", - "build-id": "ASSET_TEX3D_OBJECTS_DOMECOAST_1", - "folder": "objects" - }, - { - "index": 913, - "filename": "dome_coast_2", - "build-id": "ASSET_TEX3D_OBJECTS_DOMECOAST_2", - "folder": "objects" - }, - { - "index": 914, - "filename": "dome_coast_3", - "build-id": "ASSET_TEX3D_OBJECTS_DOMECOAST_3", - "folder": "objects" - }, - { - "index": 915, - "filename": "dome_coast_4", - "build-id": "ASSET_TEX3D_OBJECTS_DOMECOAST_4", - "folder": "objects" - }, - { - "index": 916, - "filename": "dome_coast_5", - "build-id": "ASSET_TEX3D_OBJECTS_DOMECOAST_5", - "folder": "objects" - }, - { - "index": 917, - "filename": "dome_coast_6", - "build-id": "ASSET_TEX3D_OBJECTS_DOMECOAST_6", - "folder": "objects" - }, - { - "index": 918, - "filename": "dome_coast_7", - "build-id": "ASSET_TEX3D_OBJECTS_DOMECOAST_7", - "folder": "objects" - }, - { - "index": 919, - "filename": "red_arrow_sign3", - "build-id": "ASSET_TEX3D_COMMON_REDARROWSIGN3", - "folder": "common" - }, - { - "index": 920, - "filename": "red_spaceship", - "build-id": "ASSET_TEX3D_OBJECTS_REDSPACESHIP", - "folder": "objects" - }, - { - "index": 921, - "filename": "unknown_sign_texture", - "build-id": "ASSET_TEX3D_UNUSED_UNKNOWNSIGNTEXTURE", - "folder": "unused" - }, - { - "index": 922, - "filename": "arrow_neon_flashing", - "build-id": "ASSET_TEX3D_SPACE_ARROWNEONFLASHING", - "folder": "space" - }, - { - "index": 923, - "filename": "pirateship_trim", - "build-id": "ASSET_TEX3D_TROPICAL_PIRATESHIPTRIM", - "folder": "tropical" - }, - { - "index": 924, - "filename": "door_boss_top", - "build-id": "ASSET_TEX3D_OBJECTS_DOORBOSSTOP", - "folder": "objects" - }, - { - "index": 925, - "filename": "door_boss_bottom", - "build-id": "ASSET_TEX3D_OBJECTS_DOORBOSSBOTTOM", - "folder": "objects" - }, - { - "index": 926, - "filename": "door_boss_wizpig_deco", - "build-id": "ASSET_TEX3D_OBJECTS_DOORBOSSWIZPIGDECO", - "folder": "objects" - }, - { - "index": 927, - "filename": "water_frozen", - "build-id": "ASSET_TEX3D_WINTER_WATERFROZEN", - "folder": "winter" - }, - { - "index": 928, - "filename": "bronze_trophy_envmap", - "build-id": "ASSET_TEX3D_OBJECTS_BRONZETROPHYENVMAP", - "folder": "objects" - }, - { - "index": 929, - "filename": "brown_stone", - "build-id": "ASSET_TEX3D_COMMON_BROWNSTONE", - "folder": "common" - }, - { - "index": 930, - "filename": "magic_carpet_middle", - "build-id": "ASSET_TEX3D_OBJECTS_MAGICCARPETMIDDLE", - "folder": "objects" - }, - { - "index": 931, - "filename": "magic_carpet_edge", - "build-id": "ASSET_TEX3D_OBJECTS_MAGICCARPETEDGE", - "folder": "objects" - }, - { - "index": 932, - "filename": "rareware_logo_gold", - "build-id": "ASSET_TEX3D_OBJECTS_RAREWARELOGOGOLD", - "folder": "objects" - }, - { - "index": 933, - "filename": "beta_tt_door_top", - "build-id": "ASSET_TEX3D_UNUSED_BETATTDOORTOP", - "folder": "unused" - }, - { - "index": 934, - "filename": "beta_tt_door_botton", - "build-id": "ASSET_TEX3D_UNUSED_BETATTDOORBOTTON", - "folder": "unused" - }, - { - "index": 935, - "filename": "checkpoint", - "build-id": "ASSET_TEX3D_OBJECTS_CHECKPOINT", - "folder": "objects" - }, - { - "index": 936, - "filename": "beta_drumstick_icon", - "build-id": "ASSET_TEX3D_UNUSED_BETADRUMSTICKICON", - "folder": "unused" - }, - { - "index": 937, - "filename": "dome_sun", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESUN", - "folder": "objects" - }, - { - "index": 938, - "filename": "n64_logo_blue", - "build-id": "ASSET_TEX3D_OBJECTS_N64LOGOBLUE", - "folder": "objects" - }, - { - "index": 939, - "filename": "orange_wood", - "build-id": "ASSET_TEX3D_COMMON_ORANGEWOOD", - "folder": "common" - }, - { - "index": 940, - "filename": "n64_logo_green", - "build-id": "ASSET_TEX3D_OBJECTS_N64LOGOGREEN", - "folder": "objects" - }, - { - "index": 941, - "filename": "seamonster_eye", - "build-id": "ASSET_TEX3D_OBJECTS_SEAMONSTEREYE", - "folder": "objects" - }, - { - "index": 942, - "filename": "seamonster_unknown", - "build-id": "ASSET_TEX3D_UNUSED_SEAMONSTERUNKNOWN", - "folder": "unused" - }, - { - "index": 943, - "filename": "yellow_dinosaur_underside", - "build-id": "ASSET_TEX3D_OBJECTS_YELLOWDINOSAURUNDERSIDE", - "folder": "objects" - }, - { - "index": 944, - "filename": "seamonster_underside", - "build-id": "ASSET_TEX3D_OBJECTS_SEAMONSTERUNDERSIDE", - "folder": "objects" - }, - { - "index": 945, - "filename": "seamonster_head_bottom", - "build-id": "ASSET_TEX3D_OBJECTS_SEAMONSTERHEADBOTTOM", - "folder": "objects" - }, - { - "index": 946, - "filename": "seamonster_cheek", - "build-id": "ASSET_TEX3D_OBJECTS_SEAMONSTERCHEEK", - "folder": "objects" - }, - { - "index": 947, - "filename": "yellow_dinosaur_cheek", - "build-id": "ASSET_TEX3D_OBJECTS_YELLOWDINOSAURCHEEK", - "folder": "objects" - }, - { - "index": 948, - "filename": "seamonster_nose", - "build-id": "ASSET_TEX3D_OBJECTS_SEAMONSTERNOSE", - "folder": "objects" - }, - { - "index": 949, - "filename": "seamonster_head_top", - "build-id": "ASSET_TEX3D_OBJECTS_SEAMONSTERHEADTOP", - "folder": "objects" - }, - { - "index": 950, - "filename": "yellow_dinosaur_mouth", - "build-id": "ASSET_TEX3D_OBJECTS_YELLOWDINOSAURMOUTH", - "folder": "objects" - }, - { - "index": 951, - "filename": "yellow_dinosaur_eyebrows", - "build-id": "ASSET_TEX3D_OBJECTS_YELLOWDINOSAUREYEBROWS", - "folder": "objects" - }, - { - "index": 952, - "filename": "smokey_ears", - "build-id": "ASSET_TEX3D_OBJECTS_SMOKEYEARS", - "folder": "objects" - }, - { - "index": 953, - "filename": "smokey_nose", - "build-id": "ASSET_TEX3D_OBJECTS_SMOKEYNOSE", - "folder": "objects" - }, - { - "index": 954, - "filename": "smokey_head_top", - "build-id": "ASSET_TEX3D_OBJECTS_SMOKEYHEADTOP", - "folder": "objects" - }, - { - "index": 955, - "filename": "n64_logo_red", - "build-id": "ASSET_TEX3D_OBJECTS_N64LOGORED", - "folder": "objects" - }, - { - "index": 956, - "filename": "blue_stone_floor", - "build-id": "ASSET_TEX3D_SPACE_BLUESTONEFLOOR", - "folder": "space" - }, - { - "index": 957, - "filename": "exit_sign_small", - "build-id": "ASSET_TEX3D_OBJECTS_EXITSIGNSMALL", - "folder": "objects" - }, - { - "index": 958, - "filename": "exit_sign", - "build-id": "ASSET_TEX3D_OBJECTS_EXITSIGN", - "folder": "objects" - }, - { - "index": 959, - "filename": "wood_guardrail", - "build-id": "ASSET_TEX3D_TROPICAL_WOODGUARDRAIL", - "folder": "tropical" - }, - { - "index": 960, - "filename": "icy_pink_wall_snowy", - "build-id": "ASSET_TEX3D_WINTER_ICYPINKWALLSNOWY", - "folder": "winter" - }, - { - "index": 961, - "filename": "fog2", - "build-id": "ASSET_TEX3D_TROPICAL_FOG2", - "folder": "tropical" - }, - { - "index": 962, - "filename": "dome_yellow_sky_0", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEYELLOWSKY_0", - "folder": "objects" - }, - { - "index": 963, - "filename": "dome_yellow_sky_1", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEYELLOWSKY_1", - "folder": "objects" - }, - { - "index": 964, - "filename": "dome_yellow_sky_2", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEYELLOWSKY_2", - "folder": "objects" - }, - { - "index": 965, - "filename": "dome_yellow_sky_3", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEYELLOWSKY_3", - "folder": "objects" - }, - { - "index": 966, - "filename": "dinosaur_tracks", - "build-id": "ASSET_TEX3D_DINO_DINOSAURTRACKS", - "folder": "dino" - }, - { - "index": 967, - "filename": "sand_path_grassy", - "build-id": "ASSET_TEX3D_TROPICAL_SANDPATHGRASSY", - "folder": "tropical" - }, - { - "index": 968, - "filename": "village_house_wall", - "build-id": "ASSET_TEX3D_WINTER_VILLAGEHOUSEWALL", - "folder": "winter" - }, - { - "index": 969, - "filename": "gold_trophy_sleave", - "build-id": "ASSET_TEX3D_OBJECTS_GOLDTROPHYSLEAVE", - "folder": "objects" - }, - { - "index": 970, - "filename": "gold_silver_trophy_mouth", - "build-id": "ASSET_TEX3D_OBJECTS_GOLDSILVERTROPHYMOUTH", - "folder": "objects" - }, - { - "index": 971, - "filename": "lighthouse_brick_dark", - "build-id": "ASSET_TEX3D_OBJECTS_LIGHTHOUSEBRICKDARK", - "folder": "objects" - }, - { - "index": 972, - "filename": "lighthouse_brick", - "build-id": "ASSET_TEX3D_OBJECTS_LIGHTHOUSEBRICK", - "folder": "objects" - }, - { - "index": 973, - "filename": "dome_planets_0", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEPLANETS_0", - "folder": "objects" - }, - { - "index": 974, - "filename": "dome_planets_1", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEPLANETS_1", - "folder": "objects" - }, - { - "index": 975, - "filename": "dome_planets_2", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEPLANETS_2", - "folder": "objects" - }, - { - "index": 976, - "filename": "dome_planets_3", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEPLANETS_3", - "folder": "objects" - }, - { - "index": 977, - "filename": "dome_planets_4", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEPLANETS_4", - "folder": "objects" - }, - { - "index": 978, - "filename": "dome_planets_5", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEPLANETS_5", - "folder": "objects" - }, - { - "index": 979, - "filename": "dome_planets_6", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEPLANETS_6", - "folder": "objects" - }, - { - "index": 980, - "filename": "dome_sky_gradient", - "build-id": "ASSET_TEX3D_OBJECTS_DOMESKYGRADIENT", - "folder": "objects" - }, - { - "index": 981, - "filename": "gold_gradient_dark", - "build-id": "ASSET_TEX3D_OBJECTS_GOLDGRADIENTDARK", - "folder": "objects" - }, - { - "index": 982, - "filename": "gold_gradient", - "build-id": "ASSET_TEX3D_OBJECTS_GOLDGRADIENT", - "folder": "objects" - }, - { - "index": 983, - "filename": "gold_trophy_sign", - "build-id": "ASSET_TEX3D_OBJECTS_GOLDTROPHYSIGN", - "folder": "objects" - }, - { - "index": 984, - "filename": "grass_charselect", - "build-id": "ASSET_TEX3D_COMMON_GRASSCHARSELECT", - "folder": "common" - }, - { - "index": 985, - "filename": "dome_green_bottom", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEGREENBOTTOM", - "folder": "objects" - }, - { - "index": 986, - "filename": "spaceship_14", - "build-id": "ASSET_TEX3D_OBJECTS_SPACESHIP14", - "folder": "objects" - }, - { - "index": 987, - "filename": "small_green_lights", - "build-id": "ASSET_TEX3D_SPACE_SMALLGREENLIGHTS", - "folder": "space" - }, - { - "index": 988, - "filename": "hanging_moss4", - "build-id": "ASSET_TEX3D_COMMON_HANGINGMOSS4", - "folder": "common" - }, - { - "index": 989, - "filename": "space_pole_green", - "build-id": "ASSET_TEX3D_SPACE_SPACEPOLEGREEN", - "folder": "space" - }, - { - "index": 990, - "filename": "green_wall_module", - "build-id": "ASSET_TEX3D_SPACE_GREENWALLMODULE", - "folder": "space" - }, - { - "index": 991, - "filename": "spaceship2_side", - "build-id": "ASSET_TEX3D_OBJECTS_SPACESHIP2SIDE", - "folder": "objects" - }, - { - "index": 992, - "filename": "spaceship2_connector", - "build-id": "ASSET_TEX3D_OBJECTS_SPACESHIP2CONNECTOR", - "folder": "objects" - }, - { - "index": 993, - "filename": "red_wall_green_screen", - "build-id": "ASSET_TEX3D_SPACE_REDWALLGREENSCREEN", - "folder": "space" - }, - { - "index": 994, - "filename": "spaceship2_small_lights", - "build-id": "ASSET_TEX3D_OBJECTS_SPACESHIP2SMALLLIGHTS", - "folder": "objects" - }, - { - "index": 995, - "filename": "spaceship2_14", - "build-id": "ASSET_TEX3D_OBJECTS_SPACESHIP214", - "folder": "objects" - }, - { - "index": 996, - "filename": "grey_stone", - "build-id": "ASSET_TEX3D_COMMON_GREYSTONE", - "folder": "common" - }, - { - "index": 997, - "filename": "coloured_stone", - "build-id": "ASSET_TEX3D_SPACE_COLOUREDSTONE", - "folder": "space" - }, - { - "index": 998, - "filename": "grey_pavement", - "build-id": "ASSET_TEX3D_COMMON_GREYPAVEMENT", - "folder": "common" - }, - { - "index": 999, - "filename": "dome_unused", - "build-id": "ASSET_TEX3D_UNUSED_DOMEUNUSED", - "folder": "unused" - }, - { - "index": 1000, - "filename": "beta_air_zipper", - "build-id": "ASSET_TEX3D_UNUSED_BETAAIRZIPPER", - "folder": "unused" - }, - { - "index": 1001, - "filename": "sign_100", - "build-id": "ASSET_TEX3D_UNUSED_SIGN100", - "folder": "unused" - }, - { - "index": 1002, - "filename": "snow_wall_small", - "build-id": "ASSET_TEX3D_WINTER_SNOWWALLSMALL", - "folder": "winter" - }, - { - "index": 1003, - "filename": "snow_wall_large", - "build-id": "ASSET_TEX3D_WINTER_SNOWWALLLARGE", - "folder": "winter" - }, - { - "index": 1004, - "filename": "unknown_decal", - "build-id": "ASSET_TEX3D_UNUSED_UNKNOWNDECAL", - "folder": "unused" - }, - { - "index": 1005, - "filename": "unknown_green_dots", - "build-id": "ASSET_TEX3D_UNUSED_UNKNOWNGREENDOTS", - "folder": "unused" - }, - { - "index": 1006, - "filename": "dome_grassy_hills", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEGRASSYHILLS", - "folder": "objects" - }, - { - "index": 1007, - "filename": "dome_grass", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEGRASS", - "folder": "objects" - }, - { - "index": 1008, - "filename": "beta_krunch_icon", - "build-id": "ASSET_TEX3D_UNUSED_BETAKRUNCHICON", - "folder": "unused" - }, - { - "index": 1009, - "filename": "door_level_bottom", - "build-id": "ASSET_TEX3D_OBJECTS_DOORLEVELBOTTOM", - "folder": "objects" - }, - { - "index": 1010, - "filename": "door_level_top", - "build-id": "ASSET_TEX3D_OBJECTS_DOORLEVELTOP", - "folder": "objects" - }, - { - "index": 1011, - "filename": "door_level_top_done", - "build-id": "ASSET_TEX3D_OBJECTS_DOORLEVELTOPDONE", - "folder": "objects" - }, - { - "index": 1012, - "filename": "door_level_top_unused", - "build-id": "ASSET_TEX3D_UNUSED_DOORLEVELTOPUNUSED", - "folder": "unused" - }, - { - "index": 1013, - "filename": "door_level_bottom_done", - "build-id": "ASSET_TEX3D_OBJECTS_DOORLEVELBOTTOMDONE", - "folder": "objects" - }, - { - "index": 1014, - "filename": "door_level_bottom_unused", - "build-id": "ASSET_TEX3D_UNUSED_DOORLEVELBOTTOMUNUSED", - "folder": "unused" - }, - { - "index": 1015, - "filename": "door_level_bottom_unused_qmark", - "build-id": "ASSET_TEX3D_UNUSED_DOORLEVELBOTTOMUNUSEDQMARK", - "folder": "unused" - }, - { - "index": 1016, - "filename": "door_numbers_ones_digit", - "build-id": "ASSET_TEX3D_OBJECTS_DOORNUMBERSONESDIGIT", - "folder": "objects" - }, - { - "index": 1017, - "filename": "door_numbers_tens_digit", - "build-id": "ASSET_TEX3D_OBJECTS_DOORNUMBERSTENSDIGIT", - "folder": "objects" - }, - { - "index": 1018, - "filename": "spaceship2_front", - "build-id": "ASSET_TEX3D_OBJECTS_SPACESHIP2FRONT", - "folder": "objects" - }, - { - "index": 1019, - "filename": "lighthouse_door", - "build-id": "ASSET_TEX3D_OBJECTS_LIGHTHOUSEDOOR", - "folder": "objects" - }, - { - "index": 1020, - "filename": "lighthouse_brick2", - "build-id": "ASSET_TEX3D_OBJECTS_LIGHTHOUSEBRICK2", - "folder": "objects" - }, - { - "index": 1021, - "filename": "lighthouse_beacon_bottom", - "build-id": "ASSET_TEX3D_OBJECTS_LIGHTHOUSEBEACONBOTTOM", - "folder": "objects" - }, - { - "index": 1022, - "filename": "lighthouse_rocket_wings", - "build-id": "ASSET_TEX3D_OBJECTS_LIGHTHOUSEROCKETWINGS", - "folder": "objects" - }, - { - "index": 1023, - "filename": "lighthouse_window", - "build-id": "ASSET_TEX3D_OBJECTS_LIGHTHOUSEWINDOW", - "folder": "objects" - }, - { - "index": 1024, - "filename": "electricity_animated", - "build-id": "ASSET_TEX3D_COMMON_ELECTRICITYANIMATED", - "folder": "common" - }, - { - "index": 1025, - "filename": "lighthouse_glass_window", - "build-id": "ASSET_TEX3D_OBJECTS_LIGHTHOUSEGLASSWINDOW", - "folder": "objects" - }, - { - "index": 1026, - "filename": "glass_window2", - "build-id": "ASSET_TEX3D_SPACE_GLASSWINDOW2", - "folder": "space" - }, - { - "index": 1027, - "filename": "log_end", - "build-id": "ASSET_TEX3D_OBJECTS_LOGEND", - "folder": "objects" - }, - { - "index": 1028, - "filename": "loop_guardrail", - "build-id": "ASSET_TEX3D_SPACE_LOOPGUARDRAIL", - "folder": "space" - }, - { - "index": 1029, - "filename": "midi_fade", - "build-id": "ASSET_TEX3D_OBJECTS_MIDIFADE", - "folder": "objects" - }, - { - "index": 1030, - "filename": "missle_body", - "build-id": "ASSET_TEX3D_OBJECTS_MISSLEBODY", - "folder": "objects" - }, - { - "index": 1031, - "filename": "missle_back", - "build-id": "ASSET_TEX3D_OBJECTS_MISSLEBACK", - "folder": "objects" - }, - { - "index": 1032, - "filename": "mode2", - "build-id": "ASSET_TEX3D_UNUSED_MODE2", - "folder": "unused" - }, - { - "index": 1033, - "filename": "monorail_front", - "build-id": "ASSET_TEX3D_OBJECTS_MONORAILFRONT", - "folder": "objects" - }, - { - "index": 1034, - "filename": "monorail_rail_skirt", - "build-id": "ASSET_TEX3D_OBJECTS_MONORAILRAILSKIRT", - "folder": "objects" - }, - { - "index": 1035, - "filename": "monorail_front_top", - "build-id": "ASSET_TEX3D_OBJECTS_MONORAILFRONTTOP", - "folder": "objects" - }, - { - "index": 1036, - "filename": "beta_pipsy_icon", - "build-id": "ASSET_TEX3D_UNUSED_BETAPIPSYICON", - "folder": "unused" - }, - { - "index": 1037, - "filename": "old_forest_tree_bark", - "build-id": "ASSET_TEX3D_UNUSED_OLDFORESTTREEBARK", - "folder": "unused" - }, - { - "index": 1038, - "filename": "dome_blue_top", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUETOP", - "folder": "objects" - }, - { - "index": 1039, - "filename": "ice_tunnel_ceiling", - "build-id": "ASSET_TEX3D_WINTER_ICETUNNELCEILING", - "folder": "winter" - }, - { - "index": 1040, - "filename": "dome_green_unknown", - "build-id": "ASSET_TEX3D_UNUSED_DOMEGREENUNKNOWN", - "folder": "unused" - }, - { - "index": 1041, - "filename": "trophy_sign_qmark", - "build-id": "ASSET_TEX3D_OBJECTS_TROPHYSIGNQMARK", - "folder": "objects" - }, - { - "index": 1042, - "filename": "bubbler_head", - "build-id": "ASSET_TEX3D_OBJECTS_BUBBLERHEAD", - "folder": "objects" - }, - { - "index": 1043, - "filename": "bubbler_underside", - "build-id": "ASSET_TEX3D_OBJECTS_BUBBLERUNDERSIDE", - "folder": "objects" - }, - { - "index": 1044, - "filename": "orange_stone3", - "build-id": "ASSET_TEX3D_DINO_ORANGESTONE3", - "folder": "dino" - }, - { - "index": 1045, - "filename": "palm_tree_leaves2", - "build-id": "ASSET_TEX3D_TROPICAL_PALMTREELEAVES2", - "folder": "tropical" - }, - { - "index": 1046, - "filename": "palm_tree_barkbrown2", - "build-id": "ASSET_TEX3D_TROPICAL_PALMTREEBARKBROWN2", - "folder": "tropical" - }, - { - "index": 1047, - "filename": "palm_tree_shadow2", - "build-id": "ASSET_TEX3D_TROPICAL_PALMTREESHADOW2", - "folder": "tropical" - }, - { - "index": 1048, - "filename": "paper_center", - "build-id": "ASSET_TEX3D_UNUSED_PAPERCENTER", - "folder": "unused" - }, - { - "index": 1049, - "filename": "paper_edge", - "build-id": "ASSET_TEX3D_UNUSED_PAPEREDGE", - "folder": "unused" - }, - { - "index": 1050, - "filename": "seamonster_spine", - "build-id": "ASSET_TEX3D_OBJECTS_SEAMONSTERSPINE", - "folder": "objects" - }, - { - "index": 1051, - "filename": "door_wizpig_0", - "build-id": "ASSET_TEX3D_OBJECTS_DOORWIZPIG_0", - "folder": "objects" - },{ - "index": 1052, - "filename": "door_wizpig_1", - "build-id": "ASSET_TEX3D_OBJECTS_DOORWIZPIG_1", - "folder": "objects" - },{ - "index": 1053, - "filename": "door_wizpig_2", - "build-id": "ASSET_TEX3D_OBJECTS_DOORWIZPIG_2", - "folder": "objects" - },{ - "index": 1054, - "filename": "door_wizpig_3", - "build-id": "ASSET_TEX3D_OBJECTS_DOORWIZPIG_3", - "folder": "objects" - }, - { - "index": 1055, - "filename": "sepia_stone", - "build-id": "ASSET_TEX3D_COMMON_SEPIASTONE", - "folder": "common" - }, - { - "index": 1056, - "filename": "water_frozen2", - "build-id": "ASSET_TEX3D_WINTER_WATERFROZEN2", - "folder": "winter" - }, - { - "index": 1057, - "filename": "gold_trophy_eye", - "build-id": "ASSET_TEX3D_OBJECTS_GOLDTROPHYEYE", - "folder": "objects" - }, - { - "index": 1058, - "filename": "wizpig_mountain_eye", - "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGMOUNTAINEYE", - "folder": "objects" - }, - { - "index": 1059, - "filename": "wizpig_mountain_nose", - "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGMOUNTAINNOSE", - "folder": "objects" - }, - { - "index": 1060, - "filename": "gold_trophy_nose", - "build-id": "ASSET_TEX3D_OBJECTS_GOLDTROPHYNOSE", - "folder": "objects" - }, - { - "index": 1061, - "filename": "proam64_balloon_logo", - "build-id": "ASSET_TEX3D_UNUSED_PROAM64BALLOONLOGO", - "folder": "unused" - }, - { - "index": 1062, - "filename": "rainbow", - "build-id": "ASSET_TEX3D_COMMON_RAINBOW", - "folder": "common" - }, - { - "index": 1063, - "filename": "blue_dark", - "build-id": "ASSET_TEX3D_COMMON_BLUEDARK", - "folder": "common" - }, - { - "index": 1064, - "filename": "rare_logo_gray", - "build-id": "ASSET_TEX3D_COMMON_RARELOGOGRAY", - "folder": "common" - }, - { - "index": 1065, - "filename": "rare_logo_gold", - "build-id": "ASSET_TEX3D_COMMON_RARELOGOGOLD", - "folder": "common" - }, - { - "index": 1066, - "filename": "rareware", - "build-id": "ASSET_TEX3D_OBJECTS_RAREWARE", - "folder": "objects" - }, - { - "index": 1067, - "filename": "spaceship_5", - "build-id": "ASSET_TEX3D_OBJECTS_SPACESHIP5", - "folder": "objects" - }, - { - "index": 1068, - "filename": "red_path", - "build-id": "ASSET_TEX3D_SPACE_REDPATH", - "folder": "space" - }, - { - "index": 1069, - "filename": "red_yellow_lamp", - "build-id": "ASSET_TEX3D_COMMON_REDYELLOWLAMP", - "folder": "common" - }, - { - "index": 1070, - "filename": "red_bricks", - "build-id": "ASSET_TEX3D_SPACE_REDBRICKS", - "folder": "space" - }, - { - "index": 1071, - "filename": "spaceship_front", - "build-id": "ASSET_TEX3D_OBJECTS_SPACESHIPFRONT", - "folder": "objects" - }, - { - "index": 1072, - "filename": "eroded_canyon_rock_shadow", - "build-id": "ASSET_TEX3D_DINO_ERODEDCANYONROCKSHADOW", - "folder": "dino" - }, - { - "index": 1073, - "filename": "pirateship_rope", - "build-id": "ASSET_TEX3D_TROPICAL_PIRATESHIPROPE", - "folder": "tropical" - }, - { - "index": 1074, - "filename": "yellow_brick", - "build-id": "ASSET_TEX3D_COMMON_YELLOWBRICK", - "folder": "common" - }, - { - "index": 1075, - "filename": "yellow_stone_ground", - "build-id": "ASSET_TEX3D_COMMON_YELLOWSTONEGROUND", - "folder": "common" - }, - { - "index": 1076, - "filename": "grass_sandy_unknown", - "build-id": "ASSET_TEX3D_UNUSED_GRASSSANDYUNKNOWN", - "folder": "unused" - }, - { - "index": 1077, - "filename": "grey_pavement_edge", - "build-id": "ASSET_TEX3D_COMMON_GREYPAVEMENTEDGE", - "folder": "common" - }, - { - "index": 1078, - "filename": "yellow_brick_tile_sandy", - "build-id": "ASSET_TEX3D_TROPICAL_YELLOWBRICKTILESANDY", - "folder": "tropical" - }, - { - "index": 1079, - "filename": "dark_stone_wall", - "build-id": "ASSET_TEX3D_WINTER_DARKSTONEWALL", - "folder": "winter" - }, - { - "index": 1080, - "filename": "orange_stone4", - "build-id": "ASSET_TEX3D_DINO_ORANGESTONE4", - "folder": "dino" - }, - { - "index": 1081, - "filename": "orange_stone5", - "build-id": "ASSET_TEX3D_DINO_ORANGESTONE5", - "folder": "dino" - }, - { - "index": 1082, - "filename": "paper_unknown", - "build-id": "ASSET_TEX3D_UNUSED_PAPERUNKNOWN", - "folder": "unused" - }, - { - "index": 1083, - "filename": "shield_level1", - "build-id": "ASSET_TEX3D_OBJECTS_SHIELDLEVEL1", - "folder": "objects" - }, - { - "index": 1084, - "filename": "shield_level2", - "build-id": "ASSET_TEX3D_OBJECTS_SHIELDLEVEL2", - "folder": "objects" - }, - { - "index": 1085, - "filename": "shield_level3", - "build-id": "ASSET_TEX3D_OBJECTS_SHIELDLEVEL3", - "folder": "objects" - }, - { - "index": 1086, - "filename": "sign_balloon", - "build-id": "ASSET_TEX3D_UNUSED_SIGNBALLOON", - "folder": "unused" - }, - { - "index": 1087, - "filename": "sign_white", - "build-id": "ASSET_TEX3D_UNUSED_SIGNWHITE", - "folder": "unused" - }, - { - "index": 1088, - "filename": "sign_yellow", - "build-id": "ASSET_TEX3D_UNUSED_SIGNYELLOW", - "folder": "unused" - }, - { - "index": 1089, - "filename": "silver_trophy_envmap", - "build-id": "ASSET_TEX3D_OBJECTS_SILVERTROPHYENVMAP", - "folder": "objects" - }, - { - "index": 1090, - "filename": "sign_60", - "build-id": "ASSET_TEX3D_UNUSED_SIGN60", - "folder": "unused" - }, - { - "index": 1091, - "filename": "domebluesky5_0", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY5_0", - "folder": "objects" - },{ - "index": 1092, - "filename": "domebluesky5_1", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY5_1", - "folder": "objects" - },{ - "index": 1093, - "filename": "domebluesky5_2", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY5_2", - "folder": "objects" - },{ - "index": 1094, - "filename": "domebluesky5_3", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY5_3", - "folder": "objects" - },{ - "index": 1095, - "filename": "domebluesky5_4", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY5_4", - "folder": "objects" - },{ - "index": 1096, - "filename": "domebluesky5_5", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY5_5", - "folder": "objects" - },{ - "index": 1097, - "filename": "domebluesky5_6", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY5_6", - "folder": "objects" - },{ - "index": 1098, - "filename": "domebluesky5_7", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY5_7", - "folder": "objects" - }, - { - "index": 1099, - "filename": "wall_tile_lights2", - "build-id": "ASSET_TEX3D_SPACE_WALLTILELIGHTS2", - "folder": "space" - }, - { - "index": 1100, - "filename": "paper_decoration", - "build-id": "ASSET_TEX3D_UNUSED_PAPERDECORATION", - "folder": "unused" - }, - { - "index": 1101, - "filename": "wall_tile_lights_large", - "build-id": "ASSET_TEX3D_SPACE_WALLTILELIGHTSLARGE", - "folder": "space" - }, - { - "index": 1102, - "filename": "village_door", - "build-id": "ASSET_TEX3D_WINTER_VILLAGEDOOR", - "folder": "winter" - }, - { - "index": 1103, - "filename": "hanging_snow5", - "build-id": "ASSET_TEX3D_WINTER_HANGINGSNOW5", - "folder": "winter" - }, - { - "index": 1104, - "filename": "wooden_guardrail_snowy", - "build-id": "ASSET_TEX3D_WINTER_WOODENGUARDRAILSNOWY", - "folder": "winter" - }, - { - "index": 1105, - "filename": "dark_stone_wall_snowy3", - "build-id": "ASSET_TEX3D_WINTER_DARKSTONEWALLSNOWY3", - "folder": "winter" - }, - { - "index": 1106, - "filename": "hanging_snow6", - "build-id": "ASSET_TEX3D_WINTER_HANGINGSNOW6", - "folder": "winter" - }, - { - "index": 1107, - "filename": "snowball_face", - "build-id": "ASSET_TEX3D_OBJECTS_SNOWBALLFACE", - "folder": "objects" - }, - { - "index": 1108, - "filename": "snow5", - "build-id": "ASSET_TEX3D_WINTER_SNOW5", - "folder": "winter" - }, - { - "index": 1109, - "filename": "dome_planets2", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEPLANETS2", - "folder": "objects" - }, - { - "index": 1110, - "filename": "blue_light_stone", - "build-id": "ASSET_TEX3D_SPACE_BLUELIGHTSTONE", - "folder": "space" - }, - { - "index": 1111, - "filename": "purple_path", - "build-id": "ASSET_TEX3D_SPACE_PURPLEPATH", - "folder": "space" - }, - { - "index": 1112, - "filename": "pink_stone", - "build-id": "ASSET_TEX3D_SPACE_PINKSTONE", - "folder": "space" - }, - { - "index": 1113, - "filename": "arch_inner", - "build-id": "ASSET_TEX3D_SPACE_ARCHINNER", - "folder": "space" - }, - { - "index": 1114, - "filename": "spaceship_unknown5", - "build-id": "ASSET_TEX3D_UNUSED_SPACESHIPUNKNOWN5", - "folder": "unused" - }, - { - "index": 1115, - "filename": "spaceship_unknown6", - "build-id": "ASSET_TEX3D_UNUSED_SPACESHIPUNKNOWN6", - "folder": "unused" - }, - { - "index": 1116, - "filename": "spaceship_unknown7", - "build-id": "ASSET_TEX3D_UNUSED_SPACESHIPUNKNOWN7", - "folder": "unused" - }, - { - "index": 1117, - "filename": "moon", - "build-id": "ASSET_TEX3D_COMMON_MOON", - "folder": "common" - }, - { - "index": 1118, - "filename": "saturn", - "build-id": "ASSET_TEX3D_UNUSED_SATURN", - "folder": "unused" - }, - { - "index": 1119, - "filename": "spaceship_front_lowres", - "build-id": "ASSET_TEX3D_UNUSED_SPACESHIPFRONTLOWRES", - "folder": "unused" - }, - { - "index": 1120, - "filename": "asteroid", - "build-id": "ASSET_TEX3D_OBJECTS_ASTEROID", - "folder": "objects" - }, - { - "index": 1121, - "filename": "sun", - "build-id": "ASSET_TEX3D_COMMON_SUN", - "folder": "common" - }, - { - "index": 1122, - "filename": "sun2", - "build-id": "ASSET_TEX3D_COMMON_SUN2", - "folder": "common" - }, - { - "index": 1123, - "filename": "spaceship_unknown8", - "build-id": "ASSET_TEX3D_UNUSED_SPACESHIPUNKNOWN8", - "folder": "unused" - }, - { - "index": 1124, - "filename": "spaceship_unknown9", - "build-id": "ASSET_TEX3D_UNUSED_SPACESHIPUNKNOWN9", - "folder": "unused" - }, - { - "index": 1125, - "filename": "finish_line_flag_orange2_0", - "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGORANGE2_0", - "folder": "common" - },{ - "index": 1126, - "filename": "finish_line_flag_orange2_1", - "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGORANGE2_1", - "folder": "common" - }, - { - "index": 1127, - "filename": "finish_line_flag_snowy_0", - "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGSNOWY_0", - "folder": "common" - },{ - "index": 1128, - "filename": "finish_line_flag_snowy_1", - "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGSNOWY_1", - "folder": "common" - },{ - "index": 1129, - "filename": "finish_line_flag_snowy_2", - "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGSNOWY_2", - "folder": "common" - },{ - "index": 1130, - "filename": "finish_line_flag_snowy_3", - "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGSNOWY_3", - "folder": "common" - },{ - "index": 1131, - "filename": "finish_line_flag_snowy_4", - "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGSNOWY_4", - "folder": "common" - }, - { - "index": 1132, - "filename": "level_name_border", - "build-id": "ASSET_TEX3D_COMMON_LEVELNAMEBORDER", - "folder": "common" - }, - { - "index": 1133, - "filename": "bronze_trophy_eye", - "build-id": "ASSET_TEX3D_OBJECTS_BRONZETROPHYEYE", - "folder": "objects" - }, - { - "index": 1134, - "filename": "bronze_trophy_smile", - "build-id": "ASSET_TEX3D_OBJECTS_BRONZETROPHYSMILE", - "folder": "objects" - }, - { - "index": 1135, - "filename": "bronze_trophy_screw", - "build-id": "ASSET_TEX3D_OBJECTS_BRONZETROPHYSCREW", - "folder": "objects" - }, - { - "index": 1136, - "filename": "effect_box", - "build-id": "ASSET_TEX3D_OBJECTS_EFFECTBOX", - "folder": "objects" - }, - { - "index": 1137, - "filename": "dome_yellow_sun", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEYELLOWSUN", - "folder": "objects" - }, - { - "index": 1138, - "filename": "dome_bottom_snow", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEBOTTOMSNOW", - "folder": "objects" - }, - { - "index": 1139, - "filename": "seamonster_unknown2", - "build-id": "ASSET_TEX3D_UNUSED_SEAMONSTERUNKNOWN2", - "folder": "unused" - }, - { - "index": 1140, - "filename": "seamonster_unknown_eye", - "build-id": "ASSET_TEX3D_UNUSED_SEAMONSTERUNKNOWNEYE", - "folder": "unused" - }, - { - "index": 1141, - "filename": "dome_moon_crescent", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEMOONCRESCENT", - "folder": "objects" - }, - { - "index": 1142, - "filename": "lighthouse_rocket_booster", - "build-id": "ASSET_TEX3D_OBJECTS_LIGHTHOUSEROCKETBOOSTER", - "folder": "objects" - }, - { - "index": 1143, - "filename": "beta_tiptup_icon", - "build-id": "ASSET_TEX3D_UNUSED_BETATIPTUPICON", - "folder": "unused" - }, - { - "index": 1144, - "filename": "fallen_tree_log_shadow", - "build-id": "ASSET_TEX3D_DINO_FALLENTREELOGSHADOW", - "folder": "dino" - }, - { - "index": 1145, - "filename": "sign_30", - "build-id": "ASSET_TEX3D_UNUSED_SIGN30", - "folder": "unused" - }, - { - "index": 1146, - "filename": "trickytops_face_eye_bottom", - "build-id": "ASSET_TEX3D_OBJECTS_TRICKYTOPSFACEEYEBOTTOM", - "folder": "objects" - }, - { - "index": 1147, - "filename": "trickytops_eyesocket", - "build-id": "ASSET_TEX3D_OBJECTS_TRICKYTOPSEYESOCKET", - "folder": "objects" - }, - { - "index": 1148, - "filename": "trickytops_statue_eye", - "build-id": "ASSET_TEX3D_DINO_TRICKYTOPSSTATUEEYE", - "folder": "dino" - }, - { - "index": 1149, - "filename": "bronze_trophy_decoration", - "build-id": "ASSET_TEX3D_OBJECTS_BRONZETROPHYDECORATION", - "folder": "objects" - }, - { - "index": 1150, - "filename": "gold_trophy_decoration", - "build-id": "ASSET_TEX3D_OBJECTS_GOLDTROPHYDECORATION", - "folder": "objects" - }, - { - "index": 1151, - "filename": "gold_trophy_number", - "build-id": "ASSET_TEX3D_OBJECTS_GOLDTROPHYNUMBER", - "folder": "objects" - }, - { - "index": 1152, - "filename": "silver_trophy_number", - "build-id": "ASSET_TEX3D_OBJECTS_SILVERTROPHYNUMBER", - "folder": "objects" - }, - { - "index": 1153, - "filename": "bronze_trophy_number", - "build-id": "ASSET_TEX3D_OBJECTS_BRONZETROPHYNUMBER", - "folder": "objects" - }, - { - "index": 1154, - "filename": "silver_trophy_decoration", - "build-id": "ASSET_TEX3D_OBJECTS_SILVERTROPHYDECORATION", - "folder": "objects" - }, - { - "index": 1155, - "filename": "bluey_statue_eye", - "build-id": "ASSET_TEX3D_WINTER_BLUEYSTATUEEYE", - "folder": "winter" - }, - { - "index": 1156, - "filename": "water5", - "build-id": "ASSET_TEX3D_COMMON_WATER5", - "folder": "common" - }, - { - "index": 1157, - "filename": "dome_island_coast_0", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEISLANDCOAST_0", - "folder": "objects" - },{ - "index": 1158, - "filename": "dome_island_coast_1", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEISLANDCOAST_1", - "folder": "objects" - },{ - "index": 1159, - "filename": "dome_island_coast_2", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEISLANDCOAST_2", - "folder": "objects" - },{ - "index": 1160, - "filename": "dome_island_coast_3", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEISLANDCOAST_3", - "folder": "objects" - },{ - "index": 1161, - "filename": "dome_island_coast_4", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEISLANDCOAST_4", - "folder": "objects" - },{ - "index": 1162, - "filename": "dome_island_coast_5", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEISLANDCOAST_5", - "folder": "objects" - },{ - "index": 1163, - "filename": "dome_island_coast_6", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEISLANDCOAST_6", - "folder": "objects" - },{ - "index": 1164, - "filename": "dome_island_coast_7", - "build-id": "ASSET_TEX3D_OBJECTS_DOMEISLANDCOAST_7", - "folder": "objects" - }, - { - "index": 1165, - "filename": "door_worldgate_back_bottom", - "build-id": "ASSET_TEX3D_OBJECTS_DOORWORLDGATEBACKBOTTOM", - "folder": "objects" - }, - { - "index": 1166, - "filename": "door_worldgate_side", - "build-id": "ASSET_TEX3D_OBJECTS_DOORWORLDGATESIDE", - "folder": "objects" - }, - { - "index": 1167, - "filename": "door_worldgate_front_top", - "build-id": "ASSET_TEX3D_OBJECTS_DOORWORLDGATEFRONTTOP", - "folder": "objects" - }, - { - "index": 1168, - "filename": "door_worldgate_front_bottom", - "build-id": "ASSET_TEX3D_OBJECTS_DOORWORLDGATEFRONTBOTTOM", - "folder": "objects" - }, - { - "index": 1169, - "filename": "door_worldgate_back_top", - "build-id": "ASSET_TEX3D_OBJECTS_DOORWORLDGATEBACKTOP", - "folder": "objects" - }, - { - "index": 1170, - "filename": "whale_underside", - "build-id": "ASSET_TEX3D_OBJECTS_WHALEUNDERSIDE", - "folder": "objects" - }, - { - "index": 1171, - "filename": "whale_fin", - "build-id": "ASSET_TEX3D_OBJECTS_WHALEFIN", - "folder": "objects" - }, - { - "index": 1172, - "filename": "whale_eye", - "build-id": "ASSET_TEX3D_OBJECTS_WHALEEYE", - "folder": "objects" - }, - { - "index": 1173, - "filename": "whale_blowhole", - "build-id": "ASSET_TEX3D_OBJECTS_WHALEBLOWHOLE", - "folder": "objects" - }, - { - "index": 1174, - "filename": "whale_mouth_top", - "build-id": "ASSET_TEX3D_OBJECTS_WHALEMOUTHTOP", - "folder": "objects" - }, - { - "index": 1175, - "filename": "whale_mouth_bottom", - "build-id": "ASSET_TEX3D_OBJECTS_WHALEMOUTHBOTTOM", - "folder": "objects" - }, - { - "index": 1176, - "filename": "whale_nose", - "build-id": "ASSET_TEX3D_OBJECTS_WHALENOSE", - "folder": "objects" - }, - { - "index": 1177, - "filename": "waterfall2", - "build-id": "ASSET_TEX3D_COMMON_WATERFALL2", - "folder": "common" - }, - { - "index": 1178, - "filename": "red_glass_window", - "build-id": "ASSET_TEX3D_SPACE_REDGLASSWINDOW", - "folder": "space" - }, - { - "index": 1179, - "filename": "wood_block", - "build-id": "ASSET_TEX3D_OBJECTS_WOODBLOCK", - "folder": "objects" - }, - { - "index": 1180, - "filename": "wood_sign", - "build-id": "ASSET_TEX3D_OBJECTS_WOODSIGN", - "folder": "objects" - }, - { - "index": 1181, - "filename": "door_level_single_done_top", - "build-id": "ASSET_TEX3D_OBJECTS_DOORLEVELSINGLEDONETOP", - "folder": "objects" - }, - { - "index": 1182, - "filename": "door_level_single_done_bottom", - "build-id": "ASSET_TEX3D_OBJECTS_DOORLEVELSINGLEDONEBOTTOM", - "folder": "objects" - }, - { - "index": 1183, - "filename": "door_level_checkmark", - "build-id": "ASSET_TEX3D_UNUSED_DOORLEVELCHECKMARK", - "folder": "unused" - }, - { - "index": 1184, - "filename": "door_level_done_checkmark_top", - "build-id": "ASSET_TEX3D_UNUSED_DOORLEVELDONECHECKMARKTOP", - "folder": "unused" - }, - { - "index": 1185, - "filename": "door_level_done_checkmark_bottom", - "build-id": "ASSET_TEX3D_UNUSED_DOORLEVELDONECHECKMARKBOTTOM", - "folder": "unused" - }, - { - "index": 1186, - "filename": "wood_unknown", - "build-id": "ASSET_TEX3D_UNUSED_WOODUNKNOWN", - "folder": "unused" - }, - { - "index": 1187, - "filename": "whale_bay_programmer_art_sign", - "build-id": "ASSET_TEX3D_UNUSED_WHALEBAYPROGRAMMERARTSIGN", - "folder": "unused" - }, - { - "index": 1188, - "filename": "treasure_caves_programmer_art_sign", - "build-id": "ASSET_TEX3D_UNUSED_TREASURECAVESPROGRAMMERARTSIGN", - "folder": "unused" - }, - { - "index": 1189, - "filename": "crescent_island_programmer_art_sign", - "build-id": "ASSET_TEX3D_UNUSED_CRESCENTISLANDPROGRAMMERARTSIGN", - "folder": "unused" - }, - { - "index": 1190, - "filename": "pirate_lagoon_programmer_art_sign", - "build-id": "ASSET_TEX3D_UNUSED_PIRATELAGOONPROGRAMMERARTSIGN", - "folder": "unused" - }, - { - "index": 1191, - "filename": "wood_unknown2", - "build-id": "ASSET_TEX3D_UNUSED_WOODUNKNOWN2", - "folder": "unused" - }, - { - "index": 1192, - "filename": "volcano_stone", - "build-id": "ASSET_TEX3D_UNUSED_VOLCANOSTONE", - "folder": "unused" - }, - { - "index": 1193, - "filename": "door_tt_icon_left", - "build-id": "ASSET_TEX3D_OBJECTS_DOORTTICONLEFT", - "folder": "objects" - }, - { - "index": 1194, - "filename": "door_tt_icon_right", - "build-id": "ASSET_TEX3D_OBJECTS_DOORTTICONRIGHT", - "folder": "objects" - }, - { - "index": 1195, - "filename": "door_tt_top_right", - "build-id": "ASSET_TEX3D_OBJECTS_DOORTTTOPRIGHT", - "folder": "objects" - }, - { - "index": 1196, - "filename": "door_tt_bottom_right", - "build-id": "ASSET_TEX3D_OBJECTS_DOORTTBOTTOMRIGHT", - "folder": "objects" - }, - { - "index": 1197, - "filename": "door_tt_top_right_active", - "build-id": "ASSET_TEX3D_OBJECTS_DOORTTTOPRIGHTACTIVE", - "folder": "objects" - }, - { - "index": 1198, - "filename": "door_tt_bottom_right_top_active", - "build-id": "ASSET_TEX3D_OBJECTS_DOORTTBOTTOMRIGHTTOPACTIVE", - "folder": "objects" - }, - { - "index": 1199, - "filename": "door_tt_bottom_right_active", - "build-id": "ASSET_TEX3D_OBJECTS_DOORTTBOTTOMRIGHTACTIVE", - "folder": "objects" - }, - { - "index": 1200, - "filename": "door_boss_bottom2", - "build-id": "ASSET_TEX3D_OBJECTS_DOORBOSSBOTTOM2", - "folder": "objects" - }, - { - "index": 1201, - "filename": "roof_tile_shingles4", - "build-id": "ASSET_TEX3D_MEDIEVAL_ROOFTILESHINGLES4", - "folder": "medieval" - }, - { - "index": 1202, - "filename": "village_white_wall2", - "build-id": "ASSET_TEX3D_MEDIEVAL_VILLAGEWHITEWALL2", - "folder": "medieval" - }, - { - "index": 1203, - "filename": "taj_pad_snow", - "build-id": "ASSET_TEX3D_UNUSED_TAJPADSNOW", - "folder": "unused" - }, - { - "index": 1204, - "filename": "door_challenge_top", - "build-id": "ASSET_TEX3D_OBJECTS_DOORCHALLENGETOP", - "folder": "objects" - }, - { - "index": 1205, - "filename": "door_challenge_bottom", - "build-id": "ASSET_TEX3D_OBJECTS_DOORCHALLENGEBOTTOM", - "folder": "objects" - }, - { - "index": 1206, - "filename": "vines_on_wood", - "build-id": "ASSET_TEX3D_UNUSED_VINESONWOOD", - "folder": "unused" - }, - { - "index": 1207, - "filename": "hanging_ice2", - "build-id": "ASSET_TEX3D_WINTER_HANGINGICE2", - "folder": "winter" - }, - { - "index": 1208, - "filename": "unknown_balcony", - "build-id": "ASSET_TEX3D_UNUSED_UNKNOWNBALCONY", - "folder": "unused" - }, - { - "index": 1209, - "filename": "ground_cobble", - "build-id": "ASSET_TEX3D_UNUSED_GROUNDCOBBLE", - "folder": "unused" - }, - { - "index": 1210, - "filename": "green_brick_wall", - "build-id": "ASSET_TEX3D_UNUSED_GREENBRICKWALL", - "folder": "unused" - }, - { - "index": 1211, - "filename": "old_brick_wall", - "build-id": "ASSET_TEX3D_UNUSED_OLDBRICKWALL", - "folder": "unused" - }, - { - "index": 1212, - "filename": "orange_gate_tip", - "build-id": "ASSET_TEX3D_MEDIEVAL_ORANGEGATETIP", - "folder": "medieval" - }, - { - "index": 1213, - "filename": "sand_wet_dry_transition2", - "build-id": "ASSET_TEX3D_COMMON_SANDWETDRYTRANSITION2", - "folder": "common" - }, - { - "index": 1214, - "filename": "roof_tile_shingles3", - "build-id": "ASSET_TEX3D_MEDIEVAL_ROOFTILESHINGLES3", - "folder": "medieval" - }, - { - "index": 1215, - "filename": "steel_gate", - "build-id": "ASSET_TEX3D_MEDIEVAL_STEELGATE", - "folder": "medieval" - }, - { - "index": 1216, - "filename": "steel_gate_tip", - "build-id": "ASSET_TEX3D_MEDIEVAL_STEELGATETIP", - "folder": "medieval" - }, - { - "index": 1217, - "filename": "dirt_wall_mossy", - "build-id": "ASSET_TEX3D_COMMON_DIRTWALLMOSSY", - "folder": "common" - }, - { - "index": 1218, - "filename": "blue_lightning_bolt", - "build-id": "ASSET_TEX3D_SPACE_BLUELIGHTNINGBOLT", - "folder": "space" - }, - { - "index": 1219, - "filename": "wizpigship_eye", - "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGSHIPEYE", - "folder": "objects" - }, - { - "index": 1220, - "filename": "wizpigship_nose", - "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGSHIPNOSE", - "folder": "objects" - }, - { - "index": 1221, - "filename": "wizpigship_exhast_bottom", - "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGSHIPEXHASTBOTTOM", - "folder": "objects" - }, - { - "index": 1222, - "filename": "wizpigship_exhast_top", - "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGSHIPEXHASTTOP", - "folder": "objects" - }, - { - "index": 1223, - "filename": "red_stripes_for_spaceship", - "build-id": "ASSET_TEX3D_OBJECTS_REDSTRIPESFORSPACESHIP", - "folder": "objects" - }, - { - "index": 1224, - "filename": "party_post_0", - "build-id": "ASSET_TEX3D_OBJECTS_PARTYPOST_0", - "folder": "objects" - },{ - "index": 1225, - "filename": "party_post_1", - "build-id": "ASSET_TEX3D_OBJECTS_PARTYPOST_1", - "folder": "objects" - },{ - "index": 1226, - "filename": "party_post_2", - "build-id": "ASSET_TEX3D_OBJECTS_PARTYPOST_2", - "folder": "objects" - },{ - "index": 1227, - "filename": "party_post_3", - "build-id": "ASSET_TEX3D_OBJECTS_PARTYPOST_3", - "folder": "objects" - },{ - "index": 1228, - "filename": "party_post_4", - "build-id": "ASSET_TEX3D_OBJECTS_PARTYPOST_4", - "folder": "objects" - },{ - "index": 1229, - "filename": "party_post_5", - "build-id": "ASSET_TEX3D_OBJECTS_PARTYPOST_5", - "folder": "objects" - }, - { - "index": 1230, - "filename": "door_boss_taj_top", - "build-id": "ASSET_TEX3D_OBJECTS_DOORBOSSTAJTOP", - "folder": "objects" - }, - { - "index": 1231, - "filename": "door_boss_taj_bottom", - "build-id": "ASSET_TEX3D_OBJECTS_DOORBOSSTAJBOTTOM", - "folder": "objects" - }, - { - "index": 1232, - "filename": "door_level_gb_number_top_right", - "build-id": "ASSET_TEX3D_OBJECTS_DOORLEVELGBNUMBERTOPRIGHT", - "folder": "objects" - }, - { - "index": 1233, - "filename": "door_level_gb_number_top_left", - "build-id": "ASSET_TEX3D_OBJECTS_DOORLEVELGBNUMBERTOPLEFT", - "folder": "objects" - }, - { - "index": 1234, - "filename": "door_level_gb_number_bottom_right", - "build-id": "ASSET_TEX3D_OBJECTS_DOORLEVELGBNUMBERBOTTOMRIGHT", - "folder": "objects" - }, - { - "index": 1235, - "filename": "door_level_gb_number_bottom_left", - "build-id": "ASSET_TEX3D_OBJECTS_DOORLEVELGBNUMBERBOTTOMLEFT", - "folder": "objects" - }, - { - "index": 1236, - "filename": "forest_billboard", - "build-id": "ASSET_TEX3D_UNUSED_FORESTBILLBOARD", - "folder": "unused" - }, - { - "index": 1237, - "filename": "brown_stone2", - "build-id": "ASSET_TEX3D_COMMON_BROWNSTONE2", - "folder": "common" - }, - { - "index": 1238, - "filename": "grey_stone_large", - "build-id": "ASSET_TEX3D_UNUSED_GREYSTONELARGE", - "folder": "unused" - }, - { - "index": 1239, - "filename": "log_large_mossy", - "build-id": "ASSET_TEX3D_COMMON_LOGLARGEMOSSY", - "folder": "common" - }, - { - "index": 1240, - "filename": "log_exposed_side4", - "build-id": "ASSET_TEX3D_COMMON_LOGEXPOSEDSIDE4", - "folder": "common" - }, - { - "index": 1241, - "filename": "water_fountain", - "build-id": "ASSET_TEX3D_MEDIEVAL_WATERFOUNTAIN", - "folder": "medieval" - }, - { - "index": 1242, - "filename": "unknown_purple", - "build-id": "ASSET_TEX3D_UNUSED_UNKNOWNPURPLE", - "folder": "unused" - }, - { - "index": 1243, - "filename": "unknown_red", - "build-id": "ASSET_TEX3D_UNUSED_UNKNOWNRED", - "folder": "unused" - }, - { - "index": 1244, - "filename": "unknown_red2", - "build-id": "ASSET_TEX3D_UNUSED_UNKNOWNRED2", - "folder": "unused" - }, - { - "index": 1245, - "filename": "village_white_wall3", - "build-id": "ASSET_TEX3D_MEDIEVAL_VILLAGEWHITEWALL3", - "folder": "unused" - }, - { - "index": 1246, - "filename": "wood_guardrail_top", - "build-id": "ASSET_TEX3D_COMMON_WOODGUARDRAILTOP", - "folder": "common" - }, - { - "index": 1247, - "filename": "village_grey_wall", - "build-id": "ASSET_TEX3D_UNUSED_VILLAGEGREYWALL", - "folder": "unused" - }, - { - "index": 1248, - "filename": "village_white_wall4", - "build-id": "ASSET_TEX3D_MEDIEVAL_VILLAGEWHITEWALL4", - "folder": "medieval" - }, - { - "index": 1249, - "filename": "finish_line_red_tape", - "build-id": "ASSET_TEX3D_COMMON_FINISHLINEREDTAPE", - "folder": "common" - }, - { - "index": 1250, - "filename": "bluey_eye", - "build-id": "ASSET_TEX3D_OBJECTS_BLUEYEYE", - "folder": "objects" - }, - { - "index": 1251, - "filename": "transparent2", - "build-id": "ASSET_TEX3D_COMMON_TRANSPARENT2", - "folder": "common" - }, - { - "index": 1252, - "filename": "green_cyan_gradient", - "build-id": "ASSET_TEX3D_UNUSED_GREENCYANGRADIENT", - "folder": "unused" - }, - { - "index": 1253, - "filename": "gold_unknown", - "build-id": "ASSET_TEX3D_UNUSED_GOLDUNKNOWN", - "folder": "unused" - }, - { - "index": 1254, - "filename": "shrubbery", - "build-id": "ASSET_TEX3D_MEDIEVAL_SHRUBBERY", - "folder": "medieval" - }, - { - "index": 1255, - "filename": "cyan_yellow_arrow_sign2", - "build-id": "ASSET_TEX3D_COMMON_CYANYELLOWARROWSIGN2", - "folder": "common" - }, - { - "index": 1256, - "filename": "debug_yellow_blue_invisible", - "build-id": "ASSET_TEX3D_COMMON_DEBUGYELLOWBLUEINVISIBLE", - "folder": "common" - }, - { - "index": 1257, - "filename": "brown_stone_grassy", - "build-id": "ASSET_TEX3D_COMMON_BROWNSTONEGRASSY", - "folder": "common" - }, - { - "index": 1258, - "filename": "brown_stone_grassy2", - "build-id": "ASSET_TEX3D_COMMON_BROWNSTONEGRASSY2", - "folder": "common" - }, - { - "index": 1259, - "filename": "wizpig_mouth", - "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGMOUTH", - "folder": "objects" - }, - { - "index": 1260, - "filename": "walrus_cove_sign", - "build-id": "ASSET_TEX3D_WINTER_WALRUSCOVESIGN", - "folder": "winter" - }, - { - "index": 1261, - "filename": "everfrost_peak_sign", - "build-id": "ASSET_TEX3D_WINTER_EVERFROSTPEAKSIGN", - "folder": "winter" - }, - { - "index": 1262, - "filename": "frosty_village_sign", - "build-id": "ASSET_TEX3D_WINTER_FROSTYVILLAGESIGN", - "folder": "winter" - }, - { - "index": 1263, - "filename": "snowball_valley", - "build-id": "ASSET_TEX3D_WINTER_SNOWBALLVALLEY", - "folder": "winter" - }, - { - "index": 1264, - "filename": "wizpig_robe_lowres", - "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGROBELOWRES", - "folder": "objects" - }, - { - "index": 1265, - "filename": "wizpig_skin_lowres", - "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGSKINLOWRES", - "folder": "objects" - }, - { - "index": 1266, - "filename": "cyan_yellow_arrown_sign_with_border", - "build-id": "ASSET_TEX3D_COMMON_CYANYELLOWARROWNSIGNWITHBORDER", - "folder": "common" - }, - { - "index": 1267, - "filename": "whale_bay_sign", - "build-id": "ASSET_TEX3D_TROPICAL_WHALEBAYSIGN", - "folder": "tropical" - }, - { - "index": 1268, - "filename": "treasure_caves_sign", - "build-id": "ASSET_TEX3D_TROPICAL_TREASURECAVESSIGN", - "folder": "tropical" - }, - { - "index": 1269, - "filename": "crescent_island_sign", - "build-id": "ASSET_TEX3D_TROPICAL_CRESCENTISLANDSIGN", - "folder": "tropical" - }, - { - "index": 1270, - "filename": "pirate_lagoon_sign", - "build-id": "ASSET_TEX3D_TROPICAL_PIRATELAGOONSIGN", - "folder": "tropical" - }, - { - "index": 1271, - "filename": "rocket_envmap", - "build-id": "ASSET_TEX3D_OBJECTS_ROCKETENVMAP", - "folder": "objects" - }, - { - "index": 1272, - "filename": "wizpig_belt_lowres", - "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGBELTLOWRES", - "folder": "objects" - }, - { - "index": 1273, - "filename": "purple_wizpig_stone_dark", - "build-id": "ASSET_TEX3D_SPACE_PURPLEWIZPIGSTONEDARK", - "folder": "space" - }, - { - "index": 1274, - "filename": "purple_wizpig_stone", - "build-id": "ASSET_TEX3D_SPACE_PURPLEWIZPIGSTONE", - "folder": "space" - }, - { - "index": 1275, - "filename": "purple_wizpig_stone_wall", - "build-id": "ASSET_TEX3D_SPACE_PURPLEWIZPIGSTONEWALL", - "folder": "space" - }, - { - "index": 1276, - "filename": "purple_wizpig_sand", - "build-id": "ASSET_TEX3D_SPACE_PURPLEWIZPIGSAND", - "folder": "space" - }, - { - "index": 1277, - "filename": "wizpig_chair_seat_cushion", - "build-id": "ASSET_TEX3D_SPACE_WIZPIGCHAIRSEATCUSHION", - "folder": "space" - }, - { - "index": 1278, - "filename": "wizpig_char_seat", - "build-id": "ASSET_TEX3D_SPACE_WIZPIGCHARSEAT", - "folder": "space" - }, - { - "index": 1279, - "filename": "rocket_envmap2", - "build-id": "ASSET_TEX3D_OBJECTS_ROCKETENVMAP2", - "folder": "objects" - }, - { - "index": 1280, - "filename": "haunted_wood_sign", - "build-id": "ASSET_TEX3D_MEDIEVAL_HAUNTEDWOODSIGN", - "folder": "medieval" - }, - { - "index": 1281, - "filename": "windmill_plains_sign", - "build-id": "ASSET_TEX3D_MEDIEVAL_WINDMILLPLAINSSIGN", - "folder": "medieval" - }, - { - "index": 1282, - "filename": "boulder_canyon_sign", - "build-id": "ASSET_TEX3D_MEDIEVAL_BOULDERCANYONSIGN", - "folder": "medieval" - }, - { - "index": 1283, - "filename": "greenwood_village_sign_0", - "build-id": "ASSET_TEX3D_MEDIEVAL_GREENWOODVILLAGESIGN_0", - "folder": "medieval" - },{ - "index": 1284, - "filename": "greenwood_village_sign_1", - "build-id": "ASSET_TEX3D_MEDIEVAL_GREENWOODVILLAGESIGN_1", - "folder": "medieval" - }, - { - "index": 1285, - "filename": "spacedust_alley_sign", - "build-id": "ASSET_TEX3D_SPACE_SPACEDUSTALLEYSIGN", - "folder": "space" - }, - { - "index": 1286, - "filename": "darkmoon_caverns_sign_0", - "build-id": "ASSET_TEX3D_SPACE_DARKMOONCAVERNSSIGN_0", - "folder": "space" - },{ - "index": 1287, - "filename": "darkmoon_caverns_sign_1", - "build-id": "ASSET_TEX3D_SPACE_DARKMOONCAVERNSSIGN_1", - "folder": "space" - }, - { - "index": 1288, - "filename": "twilight_city_sign", - "build-id": "ASSET_TEX3D_UNUSED_TWILIGHTCITYSIGN", - "folder": "unused" - }, - { - "index": 1289, - "filename": "spaceport_alpha_sign", - "build-id": "ASSET_TEX3D_SPACE_SPACEPORTALPHASIGN", - "folder": "space" - }, - { - "index": 1290, - "filename": "wizpig_room_arch_side_top", - "build-id": "ASSET_TEX3D_SPACE_WIZPIGROOMARCHSIDETOP", - "folder": "space" - }, - { - "index": 1291, - "filename": "wizpig_room_arch_front", - "build-id": "ASSET_TEX3D_SPACE_WIZPIGROOMARCHFRONT", - "folder": "space" - }, - { - "index": 1292, - "filename": "wizpig_room_arch_bottom", - "build-id": "ASSET_TEX3D_SPACE_WIZPIGROOMARCHBOTTOM", - "folder": "space" - }, - { - "index": 1293, - "filename": "wizpig_room_arch_side_bottom", - "build-id": "ASSET_TEX3D_SPACE_WIZPIGROOMARCHSIDEBOTTOM", - "folder": "space" - }, - { - "index": 1294, - "filename": "keith_pig_door", - "build-id": "ASSET_TEX3D_UNUSED_KEITHPIGDOOR", - "folder": "unused" - }, - { - "index": 1295, - "filename": "keith_pig_door2", - "build-id": "ASSET_TEX3D_UNUSED_KEITHPIGDOOR2", - "folder": "unused" - }, - { - "index": 1296, - "filename": "keith_pig_door3", - "build-id": "ASSET_TEX3D_UNUSED_KEITHPIGDOOR3", - "folder": "unused" - }, - { - "index": 1297, - "filename": "spaceship_side_booster", - "build-id": "ASSET_TEX3D_OBJECTS_SPACESHIPSIDEBOOSTER", - "folder": "objects" - }, - { - "index": 1298, - "filename": "spaceship_unknown", - "build-id": "ASSET_TEX3D_UNUSED_SPACESHIPUNKNOWN", - "folder": "unused" - }, - { - "index": 1299, - "filename": "spaceship_unknown2", - "build-id": "ASSET_TEX3D_UNUSED_SPACESHIPUNKNOWN2", - "folder": "unused" - }, - { - "index": 1300, - "filename": "spaceship_unknown3", - "build-id": "ASSET_TEX3D_UNUSED_SPACESHIPUNKNOWN3", - "folder": "unused" - }, - { - "index": 1301, - "filename": "spaceship_unknown4", - "build-id": "ASSET_TEX3D_UNUSED_SPACESHIPUNKNOWN4", - "folder": "unused" - }, - { - "index": 1302, - "filename": "big_planet", - "build-id": "ASSET_TEX3D_SPACE_BIGPLANET", - "folder": "space" - }, - { - "index": 1303, - "filename": "wizpig_rocket_transparent", - "build-id": "ASSET_TEX3D_UNUSED_WIZPIGROCKETTRANSPARENT", - "folder": "unused" - }, - { - "index": 1304, - "filename": "candy_cane2", - "build-id": "ASSET_TEX3D_WINTER_CANDYCANE2", - "folder": "winter" - }, - { - "index": 1305, - "filename": "debug_red_green", - "build-id": "ASSET_TEX3D_COMMON_DEBUGREDGREEN", - "folder": "common" - }, - { - "index": 1306, - "filename": "first_place_0", - "build-id": "ASSET_TEX3D_COMMON_FIRSTPLACE_0", - "folder": "common" - },{ - "index": 1307, - "filename": "first_place_1", - "build-id": "ASSET_TEX3D_COMMON_FIRSTPLACE_1", - "folder": "common" - },{ - "index": 1308, - "filename": "first_place_2", - "build-id": "ASSET_TEX3D_COMMON_FIRSTPLACE_2", - "folder": "common" - },{ - "index": 1309, - "filename": "first_place_3", - "build-id": "ASSET_TEX3D_COMMON_FIRSTPLACE_3", - "folder": "common" - }, - { - "index": 1310, - "filename": "small_bolt", - "build-id": "ASSET_TEX3D_UNUSED_SMALLBOLT", - "folder": "unused" - }, - { - "index": 1311, - "filename": "large_bolt", - "build-id": "ASSET_TEX3D_UNUSED_LARGEBOLT", - "folder": "unused" - }, - { - "index": 1312, - "filename": "purple_path", - "build-id": "ASSET_TEX3D_UNUSED_PURPLEPATH", - "folder": "unused" - }, - { - "index": 1313, - "filename": "purple_path_edge", - "build-id": "ASSET_TEX3D_UNUSED_PURPLEPATHEDGE", - "folder": "unused" - }, - { - "index": 1314, - "filename": "yellow_brick_tile3", - "build-id": "ASSET_TEX3D_COMMON_YELLOWBRICKTILE3", - "folder": "common" - }, - { - "index": 1315, - "filename": "hanging_ice3", - "build-id": "ASSET_TEX3D_WINTER_HANGINGICE3", - "folder": "winter" - }, - { - "index": 1316, - "filename": "brown_stone_snowy", - "build-id": "ASSET_TEX3D_WINTER_BROWNSTONESNOWY", - "folder": "winter" - }, - { - "index": 1317, - "filename": "golden_taj_eye", - "build-id": "ASSET_TEX3D_OBJECTS_GOLDENTAJEYE", - "folder": "objects" - }, - { - "index": 1318, - "filename": "yellow_trickytops_toes", - "build-id": "ASSET_TEX3D_OBJECTS_YELLOWTRICKYTOPSTOES", - "folder": "objects" - }, - { - "index": 1319, - "filename": "yellow_trickytops_frill", - "build-id": "ASSET_TEX3D_OBJECTS_YELLOWTRICKYTOPSFRILL", - "folder": "objects" - }, - { - "index": 1320, - "filename": "yellow_trickytops_back", - "build-id": "ASSET_TEX3D_OBJECTS_YELLOWTRICKYTOPSBACK", - "folder": "objects" - }, - { - "index": 1321, - "filename": "pink_trickytops_toes", - "build-id": "ASSET_TEX3D_OBJECTS_PINKTRICKYTOPSTOES", - "folder": "objects" - }, - { - "index": 1322, - "filename": "pink_trickytops_underside", - "build-id": "ASSET_TEX3D_OBJECTS_PINKTRICKYTOPSUNDERSIDE", - "folder": "objects" - }, - { - "index": 1323, - "filename": "pink_trickytops_nose", - "build-id": "ASSET_TEX3D_OBJECTS_PINKTRICKYTOPSNOSE", - "folder": "objects" - }, - { - "index": 1324, - "filename": "pink_trickytops_frill", - "build-id": "ASSET_TEX3D_OBJECTS_PINKTRICKYTOPSFRILL", - "folder": "objects" - }, - { - "index": 1325, - "filename": "pink_trickytops_back", - "build-id": "ASSET_TEX3D_OBJECTS_PINKTRICKYTOPSBACK", - "folder": "objects" - }, - { - "index": 1326, - "filename": "pink_trickytops_eye", - "build-id": "ASSET_TEX3D_OBJECTS_PINKTRICKYTOPSEYE", - "folder": "objects" - }, - { - "index": 1327, - "filename": "pink_trickytops_skin", - "build-id": "ASSET_TEX3D_OBJECTS_PINKTRICKYTOPSSKIN", - "folder": "objects" - }, - { - "index": 1328, - "filename": "magnetfx", - "build-id": "ASSET_TEX3D_OBJECTS_MAGNETFX", - "folder": "objects" - }, - { - "index": 1329, - "filename": "miniship_nose", - "build-id": "ASSET_TEX3D_OBJECTS_MINISHIPNOSE", - "folder": "objects" - }, - { - "index": 1330, - "filename": "miniship_hull", - "build-id": "ASSET_TEX3D_OBJECTS_MINISHIPHULL", - "folder": "objects" - }, - { - "index": 1331, - "filename": "miniship_exhast", - "build-id": "ASSET_TEX3D_OBJECTS_MINISHIPEXHAST", - "folder": "objects" - }, - { - "index": 1332, - "filename": "miniship_booster", - "build-id": "ASSET_TEX3D_OBJECTS_MINISHIPBOOSTER", - "folder": "objects" - }, - { - "index": 1333, - "filename": "miniship_booster_exhast", - "build-id": "ASSET_TEX3D_OBJECTS_MINISHIPBOOSTEREXHAST", - "folder": "objects" - }, - { - "index": 1334, - "filename": "fan_updraft", - "build-id": "ASSET_TEX3D_SPACE_FANUPDRAFT", - "folder": "space" - }, - { - "index": 1335, - "filename": "n64_logo_yellow", - "build-id": "ASSET_TEX3D_OBJECTS_N64LOGOYELLOW", - "folder": "objects" - }, - { - "index": 1336, - "filename": "menu_tex_0", - "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_0", - "flip-tex": false, - "folder": "unused" - },{ - "index": 1337, - "filename": "menu_tex_1", - "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_1", - "flip-tex": false, - "folder": "unused" - },{ - "index": 1338, - "filename": "menu_tex_2", - "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_2", - "flip-tex": false, - "folder": "unused" - },{ - "index": 1339, - "filename": "menu_tex_3", - "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_3", - "flip-tex": false, - "folder": "unused" - },{ - "index": 1340, - "filename": "menu_tex_4", - "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_4", - "flip-tex": false, - "folder": "unused" - },{ - "index": 1341, - "filename": "menu_tex_5", - "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_5", - "flip-tex": false, - "folder": "unused" - },{ - "index": 1342, - "filename": "menu_tex_6", - "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_6", - "flip-tex": false, - "folder": "unused" - },{ - "index": 1343, - "filename": "menu_tex_7", - "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_7", - "flip-tex": false, - "folder": "unused" - },{ - "index": 1344, - "filename": "menu_tex_8", - "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_8", - "flip-tex": false, - "folder": "unused" - },{ - "index": 1345, - "filename": "menu_tex_9", - "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_9", - "flip-tex": false, - "folder": "unused" - },{ - "index": 1346, - "filename": "menu_tex_10", - "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_10", - "flip-tex": false, - "folder": "unused" - },{ - "index": 1347, - "filename": "menu_tex_11", - "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_11", - "flip-tex": false, - "folder": "unused" - },{ - "index": 1348, - "filename": "menu_tex_12", - "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_12", - "flip-tex": false, - "folder": "unused" - },{ - "index": 1349, - "filename": "menu_tex_13", - "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_13", - "flip-tex": false, - "folder": "unused" - },{ - "index": 1350, - "filename": "menu_tex_14", - "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_14", - "flip-tex": false, - "folder": "unused" - },{ - "index": 1351, - "filename": "menu_tex_15", - "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_15", - "flip-tex": false, - "folder": "unused" - },{ - "index": 1352, - "filename": "menu_tex_16", - "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_16", - "flip-tex": false, - "folder": "unused" - },{ - "index": 1353, - "filename": "menu_tex_17", - "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_17", - "flip-tex": false, - "folder": "unused" - },{ - "index": 1354, - "filename": "menu_tex_18", - "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_18", - "flip-tex": false, - "folder": "unused" - },{ - "index": 1355, - "filename": "menu_tex_19", - "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_19", - "flip-tex": false, - "folder": "unused" - },{ - "index": 1356, - "filename": "menu_tex_20", - "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_20", - "flip-tex": false, - "folder": "unused" - },{ - "index": 1357, - "filename": "menu_tex_21", - "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_21", - "flip-tex": false, - "folder": "unused" - },{ - "index": 1358, - "filename": "menu_tex_22", - "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_22", - "flip-tex": false, - "folder": "unused" - },{ - "index": 1359, - "filename": "menu_tex_23", - "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_23", - "flip-tex": false, - "folder": "unused" - },{ - "index": 1360, - "filename": "menu_tex_24", - "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_24", - "flip-tex": false, - "folder": "unused" - },{ - "index": 1361, - "filename": "menu_tex_25", - "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_25", - "flip-tex": false, - "folder": "unused" - }, - { - "index": 1362, - "filename": "plane_shadow", - "build-id": "ASSET_TEX3D_UNUSED_PLANESHADOW", - "flip-tex": false, - "folder": "unused" - }, - { - "index": 1363, - "filename": "magic_carpet_shadow", - "build-id": "ASSET_TEX3D_UNUSED_MAGICCARPETSHADOW", - "flip-tex": false, - "folder": "unused" - }, - { - "index": 1364, - "filename": "unknown_effect", - "build-id": "ASSET_TEX3D_UNUSED_UNKNOWNEFFECT", - "folder": "unused" - }, - { - "index": 1365, - "filename": "trademark", - "build-id": "ASSET_TEX3D_OBJECTS_TRADEMARK", - "folder": "objects" - }, - { - "index": 1366, - "filename": "tanstonetile", - "build-id": "ASSET_TEX3D_MEDIEVAL_TANSTONETILE", - "folder": "medieval" - }, - { - "index": 1367, - "filename": "icicle_pyramid_top_entrance_tex_unknown", - "build-id": "ASSET_TEX3D_WINTER_ICICLEPYRAMIDTOPENTRANCETEXUNKNOWN", - "folder": "winter" - }, - { - "index": 1368, - "filename": "star_city_sign", - "build-id": "ASSET_TEX3D_SPACE_STARCITYSIGN", - "folder": "space" - }, - { - "index": 1369, - "filename": "level_door_silver_balloon_top_right", - "build-id": "ASSET_TEX3D_OBJECTS_LEVELDOORSILVERBALLOONTOPRIGHT", - "folder": "objects" - }, - { - "index": 1370, - "filename": "level_door_silver_balloon_top_left", - "build-id": "ASSET_TEX3D_OBJECTS_LEVELDOORSILVERBALLOONTOPLEFT", - "folder": "objects" - }, - { - "index": 1371, - "filename": "level_door_silver_balloon_bottom_right", - "build-id": "ASSET_TEX3D_OBJECTS_LEVELDOORSILVERBALLOONBOTTOMRIGHT", - "folder": "objects" - }, - { - "index": 1372, - "filename": "level_door_silver_balloon_bottom_left", - "build-id": "ASSET_TEX3D_OBJECTS_LEVELDOORSILVERBALLOONBOTTOMLEFT", - "folder": "objects" - }, - { - "index": 1373, - "filename": "level_door_silver_balloon_bottom_fullclear", - "build-id": "ASSET_TEX3D_OBJECTS_LEVELDOORSILVERBALLOONBOTTOMFULLCLEAR", - "folder": "objects" - }, - { - "index": 1374, - "filename": "level_door_silver_balloon_top_fullclear", - "build-id": "ASSET_TEX3D_OBJECTS_LEVELDOORSILVERBALLOONTOPFULLCLEAR", - "folder": "objects" - }, - { - "index": 1375, - "filename": "silver_balloon_envmap", - "build-id": "ASSET_TEX3D_OBJECTS_SILVERBALLOONENVMAP", - "folder": "objects" - }, - { - "index": 1376, - "filename": "level_door_silver_number_top", - "build-id": "ASSET_TEX3D_OBJECTS_LEVELDOORSILVERNUMBERTOP", - "folder": "objects" - }, - { - "index": 1377, - "filename": "level_door_silver_number_bottom", - "build-id": "ASSET_TEX3D_OBJECTS_LEVELDOORSILVERNUMBERBOTTOM", - "folder": "objects" - }, - { - "index": 1378, - "filename": "spaceship3_window", - "build-id": "ASSET_TEX3D_OBJECTS_SPACESHIP3WINDOW", - "folder": "objects" - }, - { - "index": 1379, - "filename": "spaceship3_hull", - "build-id": "ASSET_TEX3D_OBJECTS_SPACESHIP3HULL", - "folder": "objects" - }, - { - "index": 1380, - "filename": "spaceship3_booster", - "build-id": "ASSET_TEX3D_OBJECTS_SPACESHIP3BOOSTER", - "folder": "objects" - }, - { - "index": 1381, - "filename": "spaceship3_front", - "build-id": "ASSET_TEX3D_OBJECTS_SPACESHIP3FRONT", - "folder": "objects" - }, - { - "index": 1382, - "filename": "yellow_brick_tile4", - "build-id": "ASSET_TEX3D_COMMON_YELLOWBRICKTILE4", - "folder": "common" - }, - { - "index": 1383, - "filename": "void", - "build-id": "ASSET_TEX3D_COMMON_VOID", - "folder": "common" - }, - { - "index": 1384, - "filename": "debug_fire_mountain_ceiling", - "build-id": "ASSET_TEX3D_COMMON_DEBUGFIREMOUNTAINCEILING", - "folder": "common" - }, - { - "index": 1385, - "filename": "yellow_arrow_sign2", - "build-id": "ASSET_TEX3D_UNUSED_YELLOWARROWSIGN2", - "folder": "unused" - }, - { - "index": 1386, - "filename": "finish_line_flag_snowy2_0", - "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGSNOWY2_0", - "folder": "common" - },{ - "index": 1387, - "filename": "finish_line_flag_snowy2_1", - "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGSNOWY2_1", - "folder": "common" - },{ - "index": 1388, - "filename": "finish_line_flag_snowy2_2", - "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGSNOWY2_2", - "folder": "common" - },{ - "index": 1389, - "filename": "finish_line_flag_snowy2_3", - "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGSNOWY2_3", - "folder": "common" - },{ - "index": 1390, - "filename": "finish_line_flag_snowy2_4", - "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGSNOWY2_4", - "folder": "common" - }, - { - "index": 1391, - "filename": "waterfall3", - "build-id": "ASSET_TEX3D_COMMON_WATERFALL3", - "folder": "common" - }, - { - "index": 1392, - "filename": "yellow_brick_tile5", - "build-id": "ASSET_TEX3D_COMMON_YELLOWBRICKTILE5", - "folder": "common" - }, - { - "index": 1393, - "filename": "red_arrow_sign4", - "build-id": "ASSET_TEX3D_COMMON_REDARROWSIGN4", - "folder": "common" - }, - { - "index": 1394, - "filename": "yellow_brick_tile6", - "build-id": "ASSET_TEX3D_COMMON_YELLOWBRICKTILE6", - "folder": "common" - }, - { - "index": 1395, - "filename": "village_grey_wall2", - "build-id": "ASSET_TEX3D_MEDIEVAL_VILLAGEGREYWALL2", - "folder": "medieval" - }, - { - "index": 1396, - "filename": "yellow_brick_tile7", - "build-id": "ASSET_TEX3D_COMMON_YELLOWBRICKTILE7", - "folder": "common" - }, - { - "index": 1397, - "filename": "sand6", - "build-id": "ASSET_TEX3D_COMMON_SAND6", - "folder": "common" - }, - { - "index": 1398, - "filename": "palm_tree_shadow_long", - "build-id": "ASSET_TEX3D_TROPICAL_PALMTREESHADOWLONG", - "folder": "tropical" - }, - { - "index": 1399, - "filename": "debug_black_white", - "build-id": "ASSET_TEX3D_COMMON_DEBUGBLACKWHITE", - "folder": "common" - }, - { - "index": 1400, - "filename": "rareware_sign_non_blinking", - "build-id": "ASSET_TEX3D_SPACE_RAREWARESIGNNONBLINKING", - "folder": "space" - } - ] - }, - { - "build-id": "ASSET_TEXTURES_3D_TABLE", - "type": "Table", - "for": "ASSET_TEXTURES_3D" - }, - { - "build-id": "ASSET_TEXTURES_2D", - "type": "Texture", - "folder": "textures/2d", - "table": 5, - "flip-textures-by-default": false, - "files-default-folder": "unlabeled", - "default-build-id-prefix": "ASSET_TEX2D_", - "files": [ - { - "index": 0, - "filename": "smallfont_0", - "build-id": "ASSET_TEX2D_SMALLFONT_0", - "folder": "font/smallfont" - }, - { - "index": 1, - "filename": "smallfont_1", - "build-id": "ASSET_TEX2D_SMALLFONT_1", - "folder": "font/smallfont" - }, - { - "index": 2, - "filename": "smallfont_2", - "build-id": "ASSET_TEX2D_SMALLFONT_2", - "folder": "font/smallfont" - }, - { - "index": 3, - "filename": "reticle_square", - "build-id": "ASSET_TEX2D_HUD_RETICLESQUARE", - "folder": "hud" - }, - { - "index": 4, - "filename": "reticle_circle", - "build-id": "ASSET_TEX2D_HUD_RETICLECIRCLE", - "folder": "hud" - }, - { - "index": 5, - "filename": "reticle_x", - "build-id": "ASSET_TEX2D_HUD_RETICLEX", - "folder": "hud" - }, - { - "index": 6, - "filename": "car_outline", - "build-id": "ASSET_TEX2D_UNUSED_CAROUTLINE", - "flip-tex": true, - "folder": "unused" - }, - { - "index": 7, - "filename": "transparent", - "build-id": "ASSET_TEX2D_UNUSED_TRANSPARENT", - "folder": "unused" - }, - { - "index": 8, - "filename": "car", - "build-id": "ASSET_TEX2D_SHADOW_CAR", - "folder": "shadow" - }, - { - "index": 9, - "filename": "circle", - "build-id": "ASSET_TEX2D_SHADOW_CIRCLE", - "folder": "shadow" - }, - { - "index": 10, - "filename": "plane", - "build-id": "ASSET_TEX2D_SHADOW_PLANE", - "folder": "shadow" - }, - { - "index": 11, - "filename": "magic_carpet", - "build-id": "ASSET_TEX2D_SHADOW_MAGICCARPET", - "folder": "shadow" - }, - { - "index": 12, - "filename": "wizpig_rocket", - "build-id": "ASSET_TEX2D_SHADOW_WIZPIGROCKET", - "folder": "shadow" - }, - { - "index": 13, - "filename": "unknown", - "build-id": "ASSET_TEX2D_SHADOW_UNKNOWN", - "folder": "shadow" - }, - { - "index": 14, - "filename": "pterodactyl", - "build-id": "ASSET_TEX2D_SHADOW_PTERODACTYL", - "folder": "shadow" - }, - { - "index": 15, - "filename": "smokey", - "build-id": "ASSET_TEX2D_SHADOW_SMOKEY", - "folder": "shadow" - }, - { - "index": 16, - "filename": "ground_zipper", - "build-id": "ASSET_TEX2D_OBJECTS_GROUNDZIPPER", - "flip-tex": true, - "folder": "objects" - }, - { - "index": 17, - "filename": "fossil_canyon", - "build-id": "ASSET_TEX2D_MINIMAP_FOSSILCANYON", - "folder": "minimap" - }, - { - "index": 18, - "filename": "ancient_lake", - "build-id": "ASSET_TEX2D_MINIMAP_ANCIENTLAKE", - "folder": "minimap" - }, - { - "index": 19, - "filename": "pirate_lagoon", - "build-id": "ASSET_TEX2D_MINIMAP_PIRATELAGOON", - "folder": "minimap" - }, - { - "index": 20, - "filename": "whale_bay", - "build-id": "ASSET_TEX2D_MINIMAP_WHALEBAY", - "folder": "minimap" - }, - { - "index": 21, - "filename": "snowball_valley", - "build-id": "ASSET_TEX2D_MINIMAP_SNOWBALLVALLEY", - "folder": "minimap" - }, - { - "index": 22, - "filename": "hot_top_volcano", - "build-id": "ASSET_TEX2D_MINIMAP_HOTTOPVOLCANO", - "folder": "minimap" - }, - { - "index": 23, - "filename": "crescent_island", - "build-id": "ASSET_TEX2D_MINIMAP_CRESCENTISLAND", - "folder": "minimap" - }, - { - "index": 24, - "filename": "unused", - "build-id": "ASSET_TEX2D_MINIMAP_UNUSED", - "folder": "minimap" - }, - { - "index": 25, - "filename": "everfrost_peak", - "build-id": "ASSET_TEX2D_MINIMAP_EVERFROSTPEAK", - "folder": "minimap" - }, - { - "index": 26, - "filename": "unused2", - "build-id": "ASSET_TEX2D_MINIMAP_UNUSED2", - "folder": "minimap" - }, - { - "index": 27, - "filename": "walrus_cove", - "build-id": "ASSET_TEX2D_MINIMAP_WALRUSCOVE", - "folder": "minimap" - }, - { - "index": 28, - "filename": "unused3", - "build-id": "ASSET_TEX2D_MINIMAP_UNUSED3", - "folder": "minimap" - }, - { - "index": 29, - "filename": "boulder_canyon", - "build-id": "ASSET_TEX2D_MINIMAP_BOULDERCANYON", - "folder": "minimap" - }, - { - "index": 30, - "filename": "smokey_castle", - "build-id": "ASSET_TEX2D_MINIMAP_SMOKEYCASTLE", - "folder": "minimap" - }, - { - "index": 31, - "filename": "central_area", - "build-id": "ASSET_TEX2D_MINIMAP_CENTRALAREA", - "folder": "minimap" - }, - { - "index": 32, - "filename": "fire_mountain", - "build-id": "ASSET_TEX2D_MINIMAP_FIREMOUNTAIN", - "folder": "minimap" - }, - { - "index": 33, - "filename": "space_port_alpha", - "build-id": "ASSET_TEX2D_MINIMAP_SPACEPORTALPHA", - "folder": "minimap" - }, - { - "index": 34, - "filename": "spacedust_alley", - "build-id": "ASSET_TEX2D_MINIMAP_SPACEDUSTALLEY", - "folder": "minimap" - }, - { - "index": 35, - "filename": "treasure_caves", - "build-id": "ASSET_TEX2D_MINIMAP_TREASURECAVES", - "folder": "minimap" - }, - { - "index": 36, - "filename": "greenwood_village", - "build-id": "ASSET_TEX2D_MINIMAP_GREENWOODVILLAGE", - "folder": "minimap" - }, - { - "index": 37, - "filename": "darkmoon_caverns", - "build-id": "ASSET_TEX2D_MINIMAP_DARKMOONCAVERNS", - "folder": "minimap" - }, - { - "index": 38, - "filename": "star_city", - "build-id": "ASSET_TEX2D_MINIMAP_STARCITY", - "folder": "minimap" - }, - { - "index": 39, - "filename": "windmill_plains", - "build-id": "ASSET_TEX2D_MINIMAP_WINDMILLPLAINS", - "folder": "minimap" - }, - { - "index": 40, - "filename": "frosty_village", - "build-id": "ASSET_TEX2D_MINIMAP_FROSTYVILLAGE", - "folder": "minimap" - }, - { - "index": 41, - "filename": "darkwater_beach", - "build-id": "ASSET_TEX2D_MINIMAP_DARKWATERBEACH", - "folder": "minimap" - }, - { - "index": 42, - "filename": "jungle_falls", - "build-id": "ASSET_TEX2D_MINIMAP_JUNGLEFALLS", - "folder": "minimap" - }, - { - "index": 43, - "filename": "icicle_pyramid", - "build-id": "ASSET_TEX2D_MINIMAP_ICICLEPYRAMID", - "folder": "minimap" - }, - { - "index": 44, - "filename": "haunted_woods", - "build-id": "ASSET_TEX2D_MINIMAP_HAUNTEDWOODS", - "folder": "minimap" - }, - { - "index": 45, - "filename": "bluey", - "build-id": "ASSET_TEX2D_MINIMAP_BLUEY", - "folder": "minimap" - }, - { - "index": 46, - "filename": "bubbler", - "build-id": "ASSET_TEX2D_MINIMAP_BUBBLER", - "folder": "minimap" - }, - { - "index": 47, - "filename": "smokey", - "build-id": "ASSET_TEX2D_MINIMAP_SMOKEY", - "folder": "minimap" - }, - { - "index": 48, - "filename": "trickytops", - "build-id": "ASSET_TEX2D_MINIMAP_TRICKYTOPS", - "folder": "minimap" - }, - { - "index": 49, - "filename": "wizpig1", - "build-id": "ASSET_TEX2D_MINIMAP_WIZPIG1", - "folder": "minimap" - }, - { - "index": 50, - "filename": "wizpig2", - "build-id": "ASSET_TEX2D_MINIMAP_WIZPIG2", - "folder": "minimap" - }, - { - "index": 51, - "filename": "snowflake", - "build-id": "ASSET_TEX2D_WEATHER_SNOWFLAKE", - "folder": "weather" - }, - { - "index": 52, - "filename": "rain", - "build-id": "ASSET_TEX2D_WEATHER_RAIN", - "folder": "weather" - }, - { - "index": 53, - "filename": "unknown", - "build-id": "ASSET_TEX2D_WEATHER_UNKNOWN", - "folder": "weather" - }, - { - "index": 54, - "filename": "rain_drop_0", - "build-id": "ASSET_TEX2D_WEATHER_RAINDROP_0", - "folder": "weather" - },{ - "index": 55, - "filename": "rain_drop_1", - "build-id": "ASSET_TEX2D_WEATHER_RAINDROP_1", - "folder": "weather" - },{ - "index": 56, - "filename": "rain_drop_2", - "build-id": "ASSET_TEX2D_WEATHER_RAINDROP_2", - "folder": "weather" - },{ - "index": 57, - "filename": "rain_drop_3", - "build-id": "ASSET_TEX2D_WEATHER_RAINDROP_3", - "folder": "weather" - },{ - "index": 58, - "filename": "rain_drop_4", - "build-id": "ASSET_TEX2D_WEATHER_RAINDROP_4", - "folder": "weather" - }, - { - "index": 59, - "filename": "snowflake2", - "build-id": "ASSET_TEX2D_WEATHER_SNOWFLAKE2", - "folder": "weather" - }, - { - "index": 60, - "filename": "smoke", - "build-id": "ASSET_TEX2D_PARTICLE_SMOKE", - "folder": "particles" - }, - { - "index": 61, - "filename": "smoke2", - "build-id": "ASSET_TEX2D_PARTICLE_SMOKE2", - "folder": "particles" - }, - { - "index": 62, - "filename": "animated_unknown", - "build-id": "ASSET_TEX2D_UNKNOWN_ANIMATEDUNKNOWN", - "folder": "unknown" - }, - { - "index": 63, - "filename": "animated_unknown2", - "build-id": "ASSET_TEX2D_UNKNOWN_ANIMATEDUNKNOWN2", - "folder": "unknown" - }, - { - "index": 64, - "filename": "lensflare_1", - "build-id": "ASSET_TEX2D_OBJECTS_LENSFLARE1", - "folder": "objects" - }, - { - "index": 65, - "filename": "lensflare_2", - "build-id": "ASSET_TEX2D_OBJECTS_LENSFLARE2", - "folder": "objects" - }, - { - "index": 66, - "filename": "lensflare_3", - "build-id": "ASSET_TEX2D_OBJECTS_LENSFLARE3", - "folder": "objects" - }, - { - "index": 67, - "filename": "waterfall", - "build-id": "ASSET_TEX2D_UNKNOWN_WATERFALL", - "folder": "unknown" - }, - { - "index": 68, - "filename": "waterfall2", - "build-id": "ASSET_TEX2D_UNKNOWN_WATERFALL2", - "folder": "unknown" - }, - { - "index": 69, - "filename": "white_clouds", - "build-id": "ASSET_TEX2D_UNKNOWN_WHITECLOUDS", - "folder": "unknown" - }, - { - "index": 70, - "filename": "tree_leaf", - "build-id": "ASSET_TEX2D_PARTICLES_TREELEAF", - "folder": "particles" - }, - { - "index": 71, - "filename": "red_green_unknown", - "build-id": "ASSET_TEX2D_UNKNOWN_REDGREENUNKNOWN", - "folder": "unknown" - }, - { - "index": 72, - "filename": "school_of_fish", - "build-id": "ASSET_TEX2D_UNKNOWN_SCHOOLOFFISH", - "folder": "unknown" - }, - { - "index": 73, - "filename": "butterfly_orange", - "build-id": "ASSET_TEX2D_UNKNOWN_BUTTERFLYORANGE", - "flip-tex": true, - "folder": "unknown" - }, - { - "index": 74, - "filename": "butterfly_purple", - "build-id": "ASSET_TEX2D_UNKNOWN_BUTTERFLYPURPLE", - "flip-tex": true, - "folder": "unknown" - }, - { - "index": 75, - "filename": "bat", - "build-id": "ASSET_TEX2D_UNKNOWN_BAT", - "flip-tex": true, - "folder": "unknown" - }, - { - "index": 76, - "filename": "fish", - "build-id": "ASSET_TEX2D_UNKNOWN_FISH", - "folder": "unknown" - }, - { - "index": 77, - "filename": "brown_egg", - "build-id": "ASSET_TEX2D_UNKNOWN_BROWNEGG", - "folder": "unknown" - }, - { - "index": 78, - "filename": "smoke3", - "build-id": "ASSET_TEX2D_PARTICLES_SMOKE3", - "folder": "particles" - }, - { - "index": 79, - "filename": "smoke4_0", - "build-id": "ASSET_TEX2D_PARTICLES_SMOKE4_0", - "folder": "particles" - }, - { - "index": 80, - "filename": "smoke4_1", - "build-id": "ASSET_TEX2D_PARTICLES_SMOKE4_1", - "folder": "particles" - }, - { - "index": 81, - "filename": "smoke4_2", - "build-id": "ASSET_TEX2D_PARTICLES_SMOKE4_2", - "folder": "particles" - }, - { - "index": 82, - "filename": "smoke4_3", - "build-id": "ASSET_TEX2D_PARTICLES_SMOKE4_3", - "folder": "particles" - }, - { - "index": 83, - "filename": "smoke4_4", - "build-id": "ASSET_TEX2D_PARTICLES_SMOKE4_4", - "folder": "particles" - }, - { - "index": 84, - "filename": "smoke4_5", - "build-id": "ASSET_TEX2D_PARTICLES_SMOKE4_5", - "folder": "particles" - }, - { - "index": 85, - "filename": "smoke4_6", - "build-id": "ASSET_TEX2D_PARTICLES_SMOKE4_6", - "folder": "particles" - }, - { - "index": 86, - "filename": "bubbles_small_0", - "build-id": "ASSET_TEX2D_PARTICLES_BUBBLESSMALL_0", - "folder": "particles" - }, - { - "index": 87, - "filename": "bubbles_small_1", - "build-id": "ASSET_TEX2D_PARTICLES_BUBBLESSMALL_1", - "folder": "particles" - }, - { - "index": 88, - "filename": "smoke5", - "build-id": "ASSET_TEX2D_PARTICLES_SMOKE5", - "folder": "particles" - }, - { - "index": 89, - "filename": "funfont_0", - "build-id": "ASSET_TEX2D_FUNFONT_0", - "folder": "font/funfont" - }, - { - "index": 90, - "filename": "funfont_1", - "build-id": "ASSET_TEX2D_FUNFONT_1", - "folder": "font/funfont" - }, - { - "index": 91, - "filename": "funfont_2", - "build-id": "ASSET_TEX2D_FUNFONT_2", - "folder": "font/funfont" - }, - { - "index": 92, - "filename": "funfont_3", - "build-id": "ASSET_TEX2D_FUNFONT_3", - "folder": "font/funfont" - }, - { - "index": 93, - "filename": "funfont_4", - "build-id": "ASSET_TEX2D_FUNFONT_4", - "folder": "font/funfont" - }, - { - "index": 94, - "filename": "funfont_5", - "build-id": "ASSET_TEX2D_FUNFONT_5", - "folder": "font/funfont" - }, - { - "index": 95, - "filename": "track_select_bg_dino_domain_0", - "build-id": "ASSET_TEX2D_MENU_TRACKSELECTBGDINODOMAIN_0", - "folder": "menu" - },{ - "index": 96, - "filename": "track_select_bg_dino_domain_1", - "build-id": "ASSET_TEX2D_MENU_TRACKSELECTBGDINODOMAIN_1", - "folder": "menu" - }, - { - "index": 97, - "filename": "track_select_bg_sherbet_island_0", - "build-id": "ASSET_TEX2D_MENU_TRACKSELECTBGSHERBETISLAND_0", - "folder": "menu" - },{ - "index": 98, - "filename": "track_select_bg_sherbet_island_1", - "build-id": "ASSET_TEX2D_MENU_TRACKSELECTBGSHERBETISLAND_1", - "folder": "menu" - }, - { - "index": 99, - "filename": "track_select_bg_snowflake_mountain_0", - "build-id": "ASSET_TEX2D_MENU_TRACKSELECTBGSNOWFLAKEMOUNTAIN_0", - "folder": "menu" - },{ - "index": 100, - "filename": "track_select_bg_snowflake_mountain_1", - "build-id": "ASSET_TEX2D_MENU_TRACKSELECTBGSNOWFLAKEMOUNTAIN_1", - "folder": "menu" - }, - { - "index": 101, - "filename": "track_select_bg_dragon_forest_0", - "build-id": "ASSET_TEX2D_MENU_TRACKSELECTBGDRAGONFOREST_0", - "folder": "menu" - },{ - "index": 102, - "filename": "track_select_bg_dragon_forest_1", - "build-id": "ASSET_TEX2D_MENU_TRACKSELECTBGDRAGONFOREST_1", - "folder": "menu" - }, - { - "index": 103, - "filename": "track_select_bg_future_fun_land_0", - "build-id": "ASSET_TEX2D_MENU_TRACKSELECTBGFUTUREFUNLAND_0", - "folder": "menu" - },{ - "index": 104, - "filename": "track_select_bg_future_fun_land_1", - "build-id": "ASSET_TEX2D_MENU_TRACKSELECTBGFUTUREFUNLAND_1", - "folder": "menu" - }, - { - "index": 105, - "filename": "unk_white_tex", - "build-id": "ASSET_TEX2D_UNKNOWN_UNKWHITETEX", - "folder": "unknown" - }, - { - "index": 106, - "filename": "track_select_locked_0", - "build-id": "ASSET_TEX2D_MENU_TRACKSELECTLOCKED_0", - "folder": "menu" - },{ - "index": 107, - "filename": "track_select_locked_1", - "build-id": "ASSET_TEX2D_MENU_TRACKSELECTLOCKED_1", - "folder": "menu" - },{ - "index": 108, - "filename": "track_select_locked_2", - "build-id": "ASSET_TEX2D_MENU_TRACKSELECTLOCKED_2", - "folder": "menu" - }, - { - "index": 109, - "filename": "track_select_unlocked_0", - "build-id": "ASSET_TEX2D_MENU_TRACKSELECTUNLOCKED_0", - "folder": "menu" - },{ - "index": 110, - "filename": "track_select_unlocked_1", - "build-id": "ASSET_TEX2D_MENU_TRACKSELECTUNLOCKED_1", - "folder": "menu" - },{ - "index": 111, - "filename": "track_select_unlocked_2", - "build-id": "ASSET_TEX2D_MENU_TRACKSELECTUNLOCKED_2", - "folder": "menu" - }, - { - "index": 112, - "filename": "arrow_blue_right", - "build-id": "ASSET_TEX2D_MENU_ARROWBLUERIGHT", - "folder": "menu" - }, - { - "index": 113, - "filename": "arrow_blue_up", - "build-id": "ASSET_TEX2D_MENU_ARROWBLUEUP", - "folder": "menu" - }, - { - "index": 114, - "filename": "arrow_blue_left", - "build-id": "ASSET_TEX2D_MENU_ARROWBLUELEFT", - "folder": "menu" - }, - { - "index": 115, - "filename": "arrow_blue_down", - "build-id": "ASSET_TEX2D_MENU_ARROWBLUEDOWN", - "folder": "menu" - }, - { - "index": 116, - "filename": "bubble_weapon_0", - "build-id": "ASSET_TEX2D_OBJECTS_BUBBLEWEAPON_0", - "folder": "objects" - },{ - "index": 117, - "filename": "bubble_weapon_1", - "build-id": "ASSET_TEX2D_OBJECTS_BUBBLEWEAPON_1", - "folder": "objects" - },{ - "index": 118, - "filename": "bubble_weapon_2", - "build-id": "ASSET_TEX2D_OBJECTS_BUBBLEWEAPON_2", - "folder": "objects" - },{ - "index": 119, - "filename": "bubble_weapon_3", - "build-id": "ASSET_TEX2D_OBJECTS_BUBBLEWEAPON_3", - "folder": "objects" - }, - { - "index": 120, - "filename": "tt_beaten_icon", - "build-id": "ASSET_TEX2D_MENU_TTBEATENICON", - "folder": "menu" - }, - { - "index": 121, - "filename": "egg_icon", - "build-id": "ASSET_TEX2D_HUD_EGGICON", - "folder": "hud" - }, - { - "index": 122, - "filename": "krunch_icon", - "build-id": "ASSET_TEX2D_HUD_KRUNCHICON", - "folder": "hud" - }, - { - "index": 123, - "filename": "bumper_icon", - "build-id": "ASSET_TEX2D_HUD_BUMPERICON", - "folder": "hud" - }, - { - "index": 124, - "filename": "tiptup_icon", - "build-id": "ASSET_TEX2D_HUD_TIPTUPICON", - "folder": "hud" - }, - { - "index": 125, - "filename": "timber_icon", - "build-id": "ASSET_TEX2D_HUD_TIMBERICON", - "folder": "hud" - }, - { - "index": 126, - "filename": "conker_icon", - "build-id": "ASSET_TEX2D_HUD_CONKERICON", - "folder": "hud" - }, - { - "index": 127, - "filename": "banjo_icon", - "build-id": "ASSET_TEX2D_HUD_BANJOICON", - "folder": "hud" - }, - { - "index": 128, - "filename": "drumstick_icon", - "build-id": "ASSET_TEX2D_HUD_DRUMSTICKICON", - "folder": "hud" - }, - { - "index": 129, - "filename": "pipsy_icon", - "build-id": "ASSET_TEX2D_HUD_PIPSYICON", - "folder": "hud" - }, - { - "index": 130, - "filename": "tt_icon", - "build-id": "ASSET_TEX2D_HUD_TTICON", - "folder": "hud" - }, - { - "index": 131, - "filename": "diddy_icon", - "build-id": "ASSET_TEX2D_HUD_DIDDYICON", - "folder": "hud" - }, - { - "index": 132, - "filename": "small_gold_cap", - "build-id": "ASSET_TEX2D_UNKNOWN_SMALLGOLDCAP", - "folder": "unknown" - }, - { - "index": 133, - "filename": "car_icon_0", - "build-id": "ASSET_TEX2D_MENU_CARICON_0", - "folder": "menu" - },{ - "index": 134, - "filename": "car_icon_1", - "build-id": "ASSET_TEX2D_MENU_CARICON_1", - "folder": "menu" - }, - { - "index": 135, - "filename": "hover_icon_0", - "build-id": "ASSET_TEX2D_MENU_HOVERICON_0", - "folder": "menu" - },{ - "index": 136, - "filename": "hover_icon_1", - "build-id": "ASSET_TEX2D_MENU_HOVERICON_1", - "folder": "menu" - }, - { - "index": 137, - "filename": "plane_icon_0", - "build-id": "ASSET_TEX2D_MENU_PLANEICON_0", - "folder": "menu" - },{ - "index": 138, - "filename": "plane_icon_1", - "build-id": "ASSET_TEX2D_MENU_PLANEICON_1", - "folder": "menu" - }, - { - "index": 139, - "filename": "label_car_option_nonselected", - "build-id": "ASSET_TEX2D_MENU_LABELCAROPTIONNONSELECTED", - "folder": "menu" - }, - { - "index": 140, - "filename": "label_car_option_selected", - "build-id": "ASSET_TEX2D_MENU_LABELCAROPTIONSELECTED", - "folder": "menu" - }, - { - "index": 141, - "filename": "label_hover_option_nonselected", - "build-id": "ASSET_TEX2D_MENU_LABELHOVEROPTIONNONSELECTED", - "folder": "menu" - }, - { - "index": 142, - "filename": "label_hover_option_selected", - "build-id": "ASSET_TEX2D_MENU_LABELHOVEROPTIONSELECTED", - "folder": "menu" - }, - { - "index": 143, - "filename": "label_plane_option_nonselected", - "build-id": "ASSET_TEX2D_MENU_LABELPLANEOPTIONNONSELECTED", - "folder": "menu" - }, - { - "index": 144, - "filename": "label_plane_option_selected", - "build-id": "ASSET_TEX2D_MENU_LABELPLANEOPTIONSELECTED", - "folder": "menu" - }, - { - "index": 145, - "filename": "time_trial_on_icon_0", - "build-id": "ASSET_TEX2D_MENU_TIMETRIALONICON_0", - "folder": "menu" - },{ - "index": 146, - "filename": "time_trial_on_icon_1", - "build-id": "ASSET_TEX2D_MENU_TIMETRIALONICON_1", - "folder": "menu" - }, - { - "index": 147, - "filename": "time_trial_off_icon_0", - "build-id": "ASSET_TEX2D_MENU_TIMETRIALOFFICON_0", - "folder": "menu" - },{ - "index": 148, - "filename": "time_trial_off_icon_1", - "build-id": "ASSET_TEX2D_MENU_TIMETRIALOFFICON_1", - "folder": "menu" - }, - { - "index": 149, - "filename": "label_on_option_nonselected", - "build-id": "ASSET_TEX2D_MENU_LABELONOPTIONNONSELECTED", - "folder": "menu" - }, - { - "index": 150, - "filename": "label_on_option_selected", - "build-id": "ASSET_TEX2D_MENU_LABELONOPTIONSELECTED", - "folder": "menu" - }, - { - "index": 151, - "filename": "label_off_option_nonselected", - "build-id": "ASSET_TEX2D_MENU_LABELOFFOPTIONNONSELECTED", - "folder": "menu" - }, - { - "index": 152, - "filename": "label_off_option_selected", - "build-id": "ASSET_TEX2D_MENU_LABELOFFOPTIONSELECTED", - "folder": "menu" - }, - { - "index": 153, - "filename": "label_player1", - "build-id": "ASSET_TEX2D_MENU_LABELPLAYER1", - "folder": "menu" - }, - { - "index": 154, - "filename": "label_player2", - "build-id": "ASSET_TEX2D_MENU_LABELPLAYER2", - "folder": "menu" - }, - { - "index": 155, - "filename": "label_player3", - "build-id": "ASSET_TEX2D_MENU_LABELPLAYER3", - "folder": "menu" - }, - { - "index": 156, - "filename": "label_player4", - "build-id": "ASSET_TEX2D_MENU_LABELPLAYER4", - "folder": "menu" - }, - { - "index": 157, - "filename": "label_tt", - "build-id": "ASSET_TEX2D_MENU_LABELTT", - "folder": "menu" - }, - { - "index": 158, - "filename": "label_vehicle", - "build-id": "ASSET_TEX2D_MENU_LABELVEHICLE", - "folder": "menu" - }, - { - "index": 159, - "filename": "subtitlefont_0", - "build-id": "ASSET_TEX2D_SUBTITLEFONT_0", - "folder": "font/subtitlefont" - }, - { - "index": 160, - "filename": "subtitlefont_1", - "build-id": "ASSET_TEX2D_SUBTITLEFONT_1", - "folder": "font/subtitlefont" - }, - { - "index": 161, - "filename": "subtitlefont_2", - "build-id": "ASSET_TEX2D_SUBTITLEFONT_2", - "folder": "font/subtitlefont" - }, - { - "index": 162, - "filename": "bigfont_a", - "build-id": "ASSET_TEX2D_BIGFONT_A", - "folder": "font/bigfont" - }, - { - "index": 163, - "filename": "bigfont_b", - "build-id": "ASSET_TEX2D_BIGFONT_B", - "folder": "font/bigfont" - }, - { - "index": 164, - "filename": "bigfont_c", - "build-id": "ASSET_TEX2D_BIGFONT_C", - "folder": "font/bigfont" - }, - { - "index": 165, - "filename": "bigfont_d", - "build-id": "ASSET_TEX2D_BIGFONT_D", - "folder": "font/bigfont" - }, - { - "index": 166, - "filename": "bigfont_e", - "build-id": "ASSET_TEX2D_BIGFONT_E", - "folder": "font/bigfont" - }, - { - "index": 167, - "filename": "bigfont_f", - "build-id": "ASSET_TEX2D_BIGFONT_F", - "folder": "font/bigfont" - }, - { - "index": 168, - "filename": "bigfont_g", - "build-id": "ASSET_TEX2D_BIGFONT_G", - "folder": "font/bigfont" - }, - { - "index": 169, - "filename": "bigfont_h", - "build-id": "ASSET_TEX2D_BIGFONT_H", - "folder": "font/bigfont" - }, - { - "index": 170, - "filename": "bigfont_i", - "build-id": "ASSET_TEX2D_BIGFONT_I", - "folder": "font/bigfont" - }, - { - "index": 171, - "filename": "bigfont_j", - "build-id": "ASSET_TEX2D_BIGFONT_J", - "folder": "font/bigfont" - }, - { - "index": 172, - "filename": "bigfont_k", - "build-id": "ASSET_TEX2D_BIGFONT_K", - "folder": "font/bigfont" - }, - { - "index": 173, - "filename": "bigfont_l", - "build-id": "ASSET_TEX2D_BIGFONT_L", - "folder": "font/bigfont" - }, - { - "index": 174, - "filename": "bigfont_m", - "build-id": "ASSET_TEX2D_BIGFONT_M", - "folder": "font/bigfont" - }, - { - "index": 175, - "filename": "bigfont_n", - "build-id": "ASSET_TEX2D_BIGFONT_N", - "folder": "font/bigfont" - }, - { - "index": 176, - "filename": "bigfont_o", - "build-id": "ASSET_TEX2D_BIGFONT_O", - "folder": "font/bigfont" - }, - { - "index": 177, - "filename": "bigfont_p", - "build-id": "ASSET_TEX2D_BIGFONT_P", - "folder": "font/bigfont" - }, - { - "index": 178, - "filename": "bigfont_q", - "build-id": "ASSET_TEX2D_BIGFONT_Q", - "folder": "font/bigfont" - }, - { - "index": 179, - "filename": "bigfont_r", - "build-id": "ASSET_TEX2D_BIGFONT_R", - "folder": "font/bigfont" - }, - { - "index": 180, - "filename": "bigfont_s", - "build-id": "ASSET_TEX2D_BIGFONT_S", - "folder": "font/bigfont" - }, - { - "index": 181, - "filename": "bigfont_t", - "build-id": "ASSET_TEX2D_BIGFONT_T", - "folder": "font/bigfont" - }, - { - "index": 182, - "filename": "bigfont_u", - "build-id": "ASSET_TEX2D_BIGFONT_U", - "folder": "font/bigfont" - }, - { - "index": 183, - "filename": "bigfont_v", - "build-id": "ASSET_TEX2D_BIGFONT_V", - "folder": "font/bigfont" - }, - { - "index": 184, - "filename": "bigfont_w", - "build-id": "ASSET_TEX2D_BIGFONT_W", - "folder": "font/bigfont" - }, - { - "index": 185, - "filename": "bigfont_x", - "build-id": "ASSET_TEX2D_BIGFONT_X", - "folder": "font/bigfont" - }, - { - "index": 186, - "filename": "bigfont_y", - "build-id": "ASSET_TEX2D_BIGFONT_Y", - "folder": "font/bigfont" - }, - { - "index": 187, - "filename": "bigfont_z", - "build-id": "ASSET_TEX2D_BIGFONT_Z", - "folder": "font/bigfont" - }, - { - "index": 188, - "filename": "bigfont_questionmark", - "build-id": "ASSET_TEX2D_BIGFONT_QUESTIONMARK", - "folder": "font/bigfont" - }, - { - "index": 189, - "filename": "bigfont_period", - "build-id": "ASSET_TEX2D_BIGFONT_PERIOD", - "folder": "font/bigfont" - }, - { - "index": 190, - "filename": "sparkle_0", - "build-id": "ASSET_TEX2D_OBJECTS_SPARKLE_0", - "folder": "objects" - }, - { - "index": 191, - "filename": "sparkle_1", - "build-id": "ASSET_TEX2D_OBJECTS_SPARKLE_1", - "folder": "objects" - }, - { - "index": 192, - "filename": "sparkle_2", - "build-id": "ASSET_TEX2D_OBJECTS_SPARKLE_2", - "folder": "objects" - }, - { - "index": 193, - "filename": "sparkle_3", - "build-id": "ASSET_TEX2D_OBJECTS_SPARKLE_3", - "folder": "objects" - }, - { - "index": 194, - "filename": "sparkle_4", - "build-id": "ASSET_TEX2D_OBJECTS_SPARKLE_4", - "folder": "objects" - }, - { - "index": 195, - "filename": "sparkle_5", - "build-id": "ASSET_TEX2D_OBJECTS_SPARKLE_5", - "folder": "objects" - }, - { - "index": 196, - "filename": "sparkle_6", - "build-id": "ASSET_TEX2D_OBJECTS_SPARKLE_6", - "folder": "objects" - }, - { - "index": 197, - "filename": "bomb_explosion_blue", - "build-id": "ASSET_TEX2D_OBJECTS_BOMBEXPLOSIONBLUE", - "folder": "objects" - }, - { - "index": 198, - "filename": "bomb_explosion_yellow", - "build-id": "ASSET_TEX2D_OBJECTS_BOMBEXPLOSIONYELLOW", - "folder": "objects" - }, - { - "index": 199, - "filename": "bomb_explosion_red", - "build-id": "ASSET_TEX2D_OBJECTS_BOMBEXPLOSIONRED", - "folder": "objects" - }, - { - "index": 200, - "filename": "bomb_explosion_green", - "build-id": "ASSET_TEX2D_OBJECTS_BOMBEXPLOSIONGREEN", - "folder": "objects" - }, - { - "index": 201, - "filename": "bomb_explosion_cyan", - "build-id": "ASSET_TEX2D_OBJECTS_BOMBEXPLOSIONCYAN", - "folder": "objects" - }, - { - "index": 202, - "filename": "bomb_explosion_white", - "build-id": "ASSET_TEX2D_OBJECTS_BOMBEXPLOSIONWHITE", - "folder": "objects" - }, - { - "index": 203, - "filename": "bomb_explosion_orange", - "build-id": "ASSET_TEX2D_OBJECTS_BOMBEXPLOSIONORANGE", - "folder": "objects" - }, - { - "index": 204, - "filename": "bomb_explosion_purple", - "build-id": "ASSET_TEX2D_OBJECTS_BOMBEXPLOSIONPURPLE", - "folder": "objects" - }, - { - "index": 205, - "filename": "white_grey_checkboard", - "build-id": "ASSET_TEX2D_UNKNOWN_WHITEGREYCHECKBOARD", - "folder": "unknown" - }, - { - "index": 206, - "filename": "negative_red", - "build-id": "ASSET_TEX2D_UNKNOWN_NEGATIVERED", - "folder": "unknown" - }, - { - "index": 207, - "filename": "negative_blue", - "build-id": "ASSET_TEX2D_UNKNOWN_NEGATIVEBLUE", - "folder": "unknown" - }, - { - "index": 208, - "filename": "negative_green", - "build-id": "ASSET_TEX2D_UNKNOWN_NEGATIVEGREEN", - "folder": "unknown" - }, - { - "index": 209, - "filename": "negative_purple", - "build-id": "ASSET_TEX2D_UNKNOWN_NEGATIVEPURPLE", - "folder": "unknown" - }, - { - "index": 210, - "filename": "rainbow_0", - "build-id": "ASSET_TEX2D_OBJECTS_RAINBOW_0", - "folder": "objects" - }, - { - "index": 211, - "filename": "rainbow_1", - "build-id": "ASSET_TEX2D_OBJECTS_RAINBOW_1", - "folder": "objects" - }, - { - "index": 212, - "filename": "egg_0", - "build-id": "ASSET_TEX2D_OBJECTS_EGG_0", - "folder": "objects" - }, - { - "index": 213, - "filename": "egg_1", - "build-id": "ASSET_TEX2D_OBJECTS_EGG_1", - "folder": "objects" - }, - { - "index": 214, - "filename": "egg_2", - "build-id": "ASSET_TEX2D_OBJECTS_EGG_2", - "folder": "objects" - }, - { - "index": 215, - "filename": "egg_3", - "build-id": "ASSET_TEX2D_OBJECTS_EGG_3", - "folder": "objects" - }, - { - "index": 216, - "filename": "wood_panel", - "build-id": "ASSET_TEX2D_MENU_WOODPANEL", - "folder": "menu" - }, - { - "index": 217, - "filename": "cobble_panel", - "build-id": "ASSET_TEX2D_MENU_COBBLEPANEL", - "folder": "menu" - }, - { - "index": 218, - "filename": "portal_panel", - "build-id": "ASSET_TEX2D_MENU_PORTALPANEL", - "folder": "menu" - }, - { - "index": 219, - "filename": "icon_rubbishbin", - "build-id": "ASSET_TEX2D_MENU_ICONRUBBISHBIN", - "folder": "menu" - }, - { - "index": 220, - "filename": "icon_n64", - "build-id": "ASSET_TEX2D_MENU_ICONN64", - "folder": "menu" - }, - { - "index": 221, - "filename": "icon_times", - "build-id": "ASSET_TEX2D_MENU_ICONTIMES", - "folder": "menu" - }, - { - "index": 222, - "filename": "icon_controller_pak", - "build-id": "ASSET_TEX2D_MENU_ICONCONTROLLERPAK", - "folder": "menu" - }, - { - "index": 223, - "filename": "icon_external_data", - "build-id": "ASSET_TEX2D_MENU_ICONEXTERNALDATA", - "folder": "menu" - }, - { - "index": 224, - "filename": "icon_ghosts", - "build-id": "ASSET_TEX2D_MENU_ICONGHOSTS", - "folder": "menu" - }, - { - "index": 225, - "filename": "bomb_0", - "build-id": "ASSET_TEX2D_OBJECTS_BOMB_0", - "folder": "objects" - }, - { - "index": 226, - "filename": "bomb_1", - "build-id": "ASSET_TEX2D_OBJECTS_BOMB_1", - "folder": "objects" - }, - { - "index": 227, - "filename": "oil_puddle", - "build-id": "ASSET_TEX2D_PARTICLES_OILPUDDLE", - "folder": "particles" - }, - { - "index": 228, - "filename": "oil_slick", - "build-id": "ASSET_TEX2D_OBJECTS_OILSLICK", - "folder": "objects" - }, - { - "index": 229, - "filename": "eyes_in_dark", - "build-id": "ASSET_TEX2D_UNKNOWN_EYESINDARK", - "folder": "unknown" - }, - { - "index": 230, - "filename": "colon", - "build-id": "ASSET_TEX2D_HUD_COLON", - "folder": "hud" - }, - { - "index": 231, - "filename": "retical_homing_0", - "build-id": "ASSET_TEX2D_HUD_RETICALHOMING_0", - "folder": "hud" - }, - { - "index": 232, - "filename": "retical_homing_1", - "build-id": "ASSET_TEX2D_HUD_RETICALHOMING_1", - "folder": "hud" - }, - { - "index": 233, - "filename": "debug_red_sphere", - "build-id": "ASSET_TEX2D_OBJECTS_DEBUGREDSPHERE", - "folder": "objects" - }, - { - "index": 234, - "filename": "finish_0", - "build-id": "ASSET_TEX2D_HUD_FINISH_0", - "folder": "hud" - }, - { - "index": 235, - "filename": "finish_1", - "build-id": "ASSET_TEX2D_HUD_FINISH_1", - "folder": "hud" - }, - { - "index": 236, - "filename": "finish_2", - "build-id": "ASSET_TEX2D_HUD_FINISH_2", - "folder": "hud" - }, - { - "index": 237, - "filename": "get_ready_0", - "build-id": "ASSET_TEX2D_HUD_GETREADY_0", - "folder": "hud" - }, - { - "index": 238, - "filename": "get_ready_1", - "build-id": "ASSET_TEX2D_HUD_GETREADY_1", - "folder": "hud" - }, - { - "index": 239, - "filename": "get_ready_2", - "build-id": "ASSET_TEX2D_HUD_GETREADY_2", - "folder": "hud" - }, - { - "index": 240, - "filename": "go_0", - "build-id": "ASSET_TEX2D_HUD_GO_0", - "folder": "hud" - }, - { - "index": 241, - "filename": "go_1", - "build-id": "ASSET_TEX2D_HUD_GO_1", - "folder": "hud" - }, - { - "index": 242, - "filename": "lap", - "build-id": "ASSET_TEX2D_HUD_LAP", - "folder": "hud" - }, - { - "index": 243, - "filename": "forward_slash", - "build-id": "ASSET_TEX2D_HUD_FORWARDSLASH", - "folder": "hud" - }, - { - "index": 244, - "filename": "time", - "build-id": "ASSET_TEX2D_HUD_TIME", - "folder": "hud" - }, - { - "index": 245, - "filename": "place_number_0", - "build-id": "ASSET_TEX2D_HUD_PLACENUMBER_0", - "folder": "hud" - }, - { - "index": 246, - "filename": "place_number_1", - "build-id": "ASSET_TEX2D_HUD_PLACENUMBER_1", - "folder": "hud" - }, - { - "index": 247, - "filename": "place_number_2", - "build-id": "ASSET_TEX2D_HUD_PLACENUMBER_2", - "folder": "hud" - }, - { - "index": 248, - "filename": "place_number_3", - "build-id": "ASSET_TEX2D_HUD_PLACENUMBER_3", - "folder": "hud" - }, - { - "index": 249, - "filename": "place_number_4", - "build-id": "ASSET_TEX2D_HUD_PLACENUMBER_4", - "folder": "hud" - }, - { - "index": 250, - "filename": "place_number_5", - "build-id": "ASSET_TEX2D_HUD_PLACENUMBER_5", - "folder": "hud" - }, - { - "index": 251, - "filename": "place_number_6", - "build-id": "ASSET_TEX2D_HUD_PLACENUMBER_6", - "folder": "hud" - }, - { - "index": 252, - "filename": "place_number_7", - "build-id": "ASSET_TEX2D_HUD_PLACENUMBER_7", - "folder": "hud" - }, - { - "index": 253, - "filename": "timer_number_0", - "build-id": "ASSET_TEX2D_HUD_TIMERNUMBER_0", - "folder": "hud" - }, - { - "index": 254, - "filename": "timer_number_1", - "build-id": "ASSET_TEX2D_HUD_TIMERNUMBER_1", - "folder": "hud" - }, - { - "index": 255, - "filename": "timer_number_2", - "build-id": "ASSET_TEX2D_HUD_TIMERNUMBER_2", - "folder": "hud" - }, - { - "index": 256, - "filename": "timer_number_3", - "build-id": "ASSET_TEX2D_HUD_TIMERNUMBER_3", - "folder": "hud" - }, - { - "index": 257, - "filename": "timer_number_4", - "build-id": "ASSET_TEX2D_HUD_TIMERNUMBER_4", - "folder": "hud" - }, - { - "index": 258, - "filename": "timer_number_5", - "build-id": "ASSET_TEX2D_HUD_TIMERNUMBER_5", - "folder": "hud" - }, - { - "index": 259, - "filename": "timer_number_6", - "build-id": "ASSET_TEX2D_HUD_TIMERNUMBER_6", - "folder": "hud" - }, - { - "index": 260, - "filename": "timer_number_7", - "build-id": "ASSET_TEX2D_HUD_TIMERNUMBER_7", - "folder": "hud" - }, - { - "index": 261, - "filename": "timer_number_8", - "build-id": "ASSET_TEX2D_HUD_TIMERNUMBER_8", - "folder": "hud" - }, - { - "index": 262, - "filename": "timer_number_9", - "build-id": "ASSET_TEX2D_HUD_TIMERNUMBER_9", - "folder": "hud" - }, - { - "index": 263, - "filename": "colon_small", - "build-id": "ASSET_TEX2D_HUD_COLONSMALL", - "folder": "hud" - }, - { - "index": 264, - "filename": "timer_number_small_0", - "build-id": "ASSET_TEX2D_HUD_TIMERNUMBERSMALL_0", - "folder": "hud" - }, - { - "index": 265, - "filename": "timer_number_small_1", - "build-id": "ASSET_TEX2D_HUD_TIMERNUMBERSMALL_1", - "folder": "hud" - }, - { - "index": 266, - "filename": "timer_number_small_2", - "build-id": "ASSET_TEX2D_HUD_TIMERNUMBERSMALL_2", - "folder": "hud" - }, - { - "index": 267, - "filename": "timer_number_small_3", - "build-id": "ASSET_TEX2D_HUD_TIMERNUMBERSMALL_3", - "folder": "hud" - }, - { - "index": 268, - "filename": "timer_number_small_4", - "build-id": "ASSET_TEX2D_HUD_TIMERNUMBERSMALL_4", - "folder": "hud" - }, - { - "index": 269, - "filename": "timer_number_small_5", - "build-id": "ASSET_TEX2D_HUD_TIMERNUMBERSMALL_5", - "folder": "hud" - }, - { - "index": 270, - "filename": "timer_number_small_6", - "build-id": "ASSET_TEX2D_HUD_TIMERNUMBERSMALL_6", - "folder": "hud" - }, - { - "index": 271, - "filename": "timer_number_small_7", - "build-id": "ASSET_TEX2D_HUD_TIMERNUMBERSMALL_7", - "folder": "hud" - }, - { - "index": 272, - "filename": "timer_number_small_8", - "build-id": "ASSET_TEX2D_HUD_TIMERNUMBERSMALL_8", - "folder": "hud" - }, - { - "index": 273, - "filename": "timer_number_small_9", - "build-id": "ASSET_TEX2D_HUD_TIMERNUMBERSMALL_9", - "folder": "hud" - }, - { - "index": 274, - "filename": "go_small", - "build-id": "ASSET_TEX2D_HUD_GOSMALL", - "folder": "hud" - }, - { - "index": 275, - "filename": "lap_small", - "build-id": "ASSET_TEX2D_HUD_LAPSMALL", - "folder": "hud" - }, - { - "index": 276, - "filename": "get_ready_small", - "build-id": "ASSET_TEX2D_HUD_GETREADYSMALL", - "folder": "hud" - }, - { - "index": 277, - "filename": "final_small", - "build-id": "ASSET_TEX2D_HUD_FINALSMALL", - "folder": "hud" - }, - { - "index": 278, - "filename": "finish_small", - "build-id": "ASSET_TEX2D_HUD_FINISHSMALL", - "folder": "hud" - }, - { - "index": 279, - "filename": "lap_2_small", - "build-id": "ASSET_TEX2D_HUD_LAP2SMALL", - "folder": "hud" - }, - { - "index": 280, - "filename": "way_small", - "build-id": "ASSET_TEX2D_HUD_WAYSMALL", - "folder": "hud" - }, - { - "index": 281, - "filename": "wrong_small", - "build-id": "ASSET_TEX2D_HUD_WRONGSMALL", - "folder": "hud" - }, - { - "index": 282, - "filename": "position_arrow_0", - "build-id": "ASSET_TEX2D_OBJECTS_POSITIONARROW_0", - "folder": "objects" - }, - { - "index": 283, - "filename": "position_arrow_1", - "build-id": "ASSET_TEX2D_OBJECTS_POSITIONARROW_1", - "folder": "objects" - }, - { - "index": 284, - "filename": "position_arrow_2", - "build-id": "ASSET_TEX2D_OBJECTS_POSITIONARROW_2", - "folder": "objects" - }, - { - "index": 285, - "filename": "timer_numbers_singletex", - "build-id": "ASSET_TEX2D_HUD_TIMERNUMBERSSINGLETEX", - "folder": "hud" - }, - { - "index": 286, - "filename": "timer_numbers_small_singletex", - "build-id": "ASSET_TEX2D_HUD_TIMERNUMBERSSMALLSINGLETEX", - "folder": "hud" - }, - { - "index": 287, - "filename": "colon2", - "build-id": "ASSET_TEX2D_HUD_COLON2", - "folder": "hud" - }, - { - "index": 288, - "filename": "color_small2", - "build-id": "ASSET_TEX2D_HUD_COLORSMALL2", - "folder": "hud" - }, - { - "index": 289, - "filename": "lap2", - "build-id": "ASSET_TEX2D_HUD_LAP2", - "folder": "hud" - }, - { - "index": 290, - "filename": "time2", - "build-id": "ASSET_TEX2D_HUD_TIME2", - "folder": "hud" - }, - { - "index": 291, - "filename": "forward_slash_small", - "build-id": "ASSET_TEX2D_HUD_FORWARDSLASHSMALL", - "folder": "hud" - }, - { - "index": 292, - "filename": "forward_slash2", - "build-id": "ASSET_TEX2D_HUD_FORWARDSLASH2", - "folder": "hud" - }, - { - "index": 293, - "filename": "x", - "build-id": "ASSET_TEX2D_HUD_X", - "folder": "hud" - }, - { - "index": 294, - "filename": "place_numbers_singletex", - "build-id": "ASSET_TEX2D_HUD_PLACENUMBERSSINGLETEX", - "folder": "hud" - }, - { - "index": 295, - "filename": "place_number_suffixes", - "build-id": "ASSET_TEX2D_HUD_PLACENUMBERSUFFIXES", - "folder": "hud" - }, - { - "index": 296, - "filename": "x_small", - "build-id": "ASSET_TEX2D_HUD_XSMALL", - "folder": "hud" - }, - { - "index": 297, - "filename": "silver_coin_collected", - "build-id": "ASSET_TEX2D_HUD_SILVERCOINCOLLECTED", - "folder": "hud" - }, - { - "index": 298, - "filename": "golden_balloon_icon", - "build-id": "ASSET_TEX2D_HUD_GOLDENBALLOONICON", - "folder": "hud" - }, - { - "index": 299, - "filename": "silver_balloon_icon", - "build-id": "ASSET_TEX2D_HUD_SILVERBALLOONICON", - "folder": "hud" - }, - { - "index": 300, - "filename": "level_name", - "build-id": "ASSET_TEX2D_OBJECTS_LEVELNAME", - "folder": "objects" - }, - { - "index": 301, - "filename": "npc", - "build-id": "ASSET_TEX2D_MINIMAP_NPC", - "folder": "minimap" - }, - { - "index": 302, - "filename": "player", - "build-id": "ASSET_TEX2D_MINIMAP_PLAYER", - "folder": "minimap" - }, - { - "index": 303, - "filename": "weapon_icon_boost_0", - "build-id": "ASSET_TEX2D_HUD_WEAPONICONBOOST_0", - "folder": "hud" - }, - { - "index": 304, - "filename": "weapon_icon_boost_1", - "build-id": "ASSET_TEX2D_HUD_WEAPONICONBOOST_1", - "folder": "hud" - }, - { - "index": 305, - "filename": "weapon_icon_boost_2", - "build-id": "ASSET_TEX2D_HUD_WEAPONICONBOOST_2", - "folder": "hud" - }, - { - "index": 306, - "filename": "weapon_icon_rocket_0", - "build-id": "ASSET_TEX2D_HUD_WEAPONICONROCKET_0", - "folder": "hud" - }, - { - "index": 307, - "filename": "weapon_icon_rocket_1", - "build-id": "ASSET_TEX2D_HUD_WEAPONICONROCKET_1", - "folder": "hud" - }, - { - "index": 308, - "filename": "weapon_icon_rocket_2", - "build-id": "ASSET_TEX2D_HUD_WEAPONICONROCKET_2", - "folder": "hud" - }, - { - "index": 309, - "filename": "weapon_icon_trap_0", - "build-id": "ASSET_TEX2D_HUD_WEAPONICONTRAP_0", - "folder": "hud" - }, - { - "index": 310, - "filename": "weapon_icon_trap_1", - "build-id": "ASSET_TEX2D_HUD_WEAPONICONTRAP_1", - "folder": "hud" - }, - { - "index": 311, - "filename": "weapon_icon_trap_2", - "build-id": "ASSET_TEX2D_HUD_WEAPONICONTRAP_2", - "folder": "hud" - }, - { - "index": 312, - "filename": "weapon_icon_shield_0", - "build-id": "ASSET_TEX2D_HUD_WEAPONICONSHIELD_0", - "folder": "hud" - }, - { - "index": 313, - "filename": "weapon_icon_shield_1", - "build-id": "ASSET_TEX2D_HUD_WEAPONICONSHIELD_1", - "folder": "hud" - }, - { - "index": 314, - "filename": "weapon_icon_shield_2", - "build-id": "ASSET_TEX2D_HUD_WEAPONICONSHIELD_2", - "folder": "hud" - }, - { - "index": 315, - "filename": "weapon_icon_magnet_0", - "build-id": "ASSET_TEX2D_HUD_WEAPONICONMAGNET_0", - "folder": "hud" - }, - { - "index": 316, - "filename": "weapon_icon_magnet_1", - "build-id": "ASSET_TEX2D_HUD_WEAPONICONMAGNET_1", - "folder": "hud" - }, - { - "index": 317, - "filename": "weapon_icon_magnet_2", - "build-id": "ASSET_TEX2D_HUD_WEAPONICONMAGNET_2", - "folder": "hud" - }, - { - "index": 318, - "filename": "weapon_icon_rocket_numbers_0", - "build-id": "ASSET_TEX2D_HUD_WEAPONICONROCKETNUMBERS_0", - "folder": "hud" - }, - { - "index": 319, - "filename": "weapon_icon_rocket_numbers_1", - "build-id": "ASSET_TEX2D_HUD_WEAPONICONROCKETNUMBERS_1", - "folder": "hud" - }, - { - "index": 320, - "filename": "weapon_icon_rocket_numbers_2", - "build-id": "ASSET_TEX2D_HUD_WEAPONICONROCKETNUMBERS_2", - "folder": "hud" - }, - { - "index": 321, - "filename": "weapon_icon_rocket_numbers_3", - "build-id": "ASSET_TEX2D_HUD_WEAPONICONROCKETNUMBERS_3", - "folder": "hud" - }, - { - "index": 322, - "filename": "weapon_icon_rocket_numbers_4", - "build-id": "ASSET_TEX2D_HUD_WEAPONICONROCKETNUMBERS_4", - "folder": "hud" - }, - { - "index": 323, - "filename": "weapon_icon_rocket_numbers_5", - "build-id": "ASSET_TEX2D_HUD_WEAPONICONROCKETNUMBERS_5", - "folder": "hud" - }, - { - "index": 324, - "filename": "weapon_icon_rocket_numbers_6", - "build-id": "ASSET_TEX2D_HUD_WEAPONICONROCKETNUMBERS_6", - "folder": "hud" - }, - { - "index": 325, - "filename": "weapon_icon_rocket_numbers_7", - "build-id": "ASSET_TEX2D_HUD_WEAPONICONROCKETNUMBERS_7", - "folder": "hud" - }, - { - "index": 326, - "filename": "weapon_icon_rocket_numbers_8", - "build-id": "ASSET_TEX2D_HUD_WEAPONICONROCKETNUMBERS_8", - "folder": "hud" - }, - { - "index": 327, - "filename": "weapon_icon_rocket_numbers_9", - "build-id": "ASSET_TEX2D_HUD_WEAPONICONROCKETNUMBERS_9", - "folder": "hud" - }, - { - "index": 328, - "filename": "beta_icon_krunch", - "build-id": "ASSET_TEX2D_UNUSED_BETAICONKRUNCH", - "folder": "unused" - }, - { - "index": 329, - "filename": "beta_icon_bumper", - "build-id": "ASSET_TEX2D_UNUSED_BETAICONBUMPER", - "folder": "unused" - }, - { - "index": 330, - "filename": "beta_icon_tiptup", - "build-id": "ASSET_TEX2D_UNUSED_BETAICONTIPTUP", - "folder": "unused" - }, - { - "index": 331, - "filename": "beta_icon_conker", - "build-id": "ASSET_TEX2D_UNUSED_BETAICONCONKER", - "folder": "unused" - }, - { - "index": 332, - "filename": "beta_icon_timber", - "build-id": "ASSET_TEX2D_UNUSED_BETAICONTIMBER", - "folder": "unused" - }, - { - "index": 333, - "filename": "beta_icon_banjo", - "build-id": "ASSET_TEX2D_UNUSED_BETAICONBANJO", - "folder": "unused" - }, - { - "index": 334, - "filename": "beta_icon_drumstick", - "build-id": "ASSET_TEX2D_UNUSED_BETAICONDRUMSTICK", - "folder": "unused" - }, - { - "index": 335, - "filename": "beta_icon_pipsy", - "build-id": "ASSET_TEX2D_UNUSED_BETAICONPIPSY", - "folder": "unused" - }, - { - "index": 336, - "filename": "final_lap_0", - "build-id": "ASSET_TEX2D_HUD_FINALLAP_0", - "folder": "hud" - }, - { - "index": 337, - "filename": "final_lap_1", - "build-id": "ASSET_TEX2D_HUD_FINALLAP_1", - "folder": "hud" - }, - { - "index": 338, - "filename": "final_lap_2", - "build-id": "ASSET_TEX2D_HUD_FINALLAP_2", - "folder": "hud" - }, - { - "index": 339, - "filename": "final_lap_3", - "build-id": "ASSET_TEX2D_HUD_FINALLAP_3", - "folder": "hud" - }, - { - "index": 340, - "filename": "final_lap_4", - "build-id": "ASSET_TEX2D_HUD_FINALLAP_4", - "folder": "hud" - }, - { - "index": 341, - "filename": "final_0", - "build-id": "ASSET_TEX2D_HUD_FINAL_0", - "folder": "hud" - }, - { - "index": 342, - "filename": "final_1", - "build-id": "ASSET_TEX2D_HUD_FINAL_1", - "folder": "hud" - }, - { - "index": 343, - "filename": "lap_large_0", - "build-id": "ASSET_TEX2D_HUD_LAPLARGE_0", - "folder": "hud" - }, - { - "index": 344, - "filename": "lap_large_1", - "build-id": "ASSET_TEX2D_HUD_LAPLARGE_1", - "folder": "hud" - }, - { - "index": 345, - "filename": "lap2_2", - "build-id": "ASSET_TEX2D_HUD_LAP2_2", - "folder": "hud" - }, - { - "index": 346, - "filename": "way", - "build-id": "ASSET_TEX2D_HUD_WAY", - "folder": "hud" - }, - { - "index": 347, - "filename": "wrong_0", - "build-id": "ASSET_TEX2D_HUD_WRONG_0", - "folder": "hud" - }, - { - "index": 348, - "filename": "wrong_1", - "build-id": "ASSET_TEX2D_HUD_WRONG_1", - "folder": "hud" - }, - { - "index": 349, - "filename": "proam_logo_0", - "build-id": "ASSET_TEX2D_UNUSED_PROAMLOGO_0", - "folder": "unused" - }, - { - "index": 350, - "filename": "proam_logo_1", - "build-id": "ASSET_TEX2D_UNUSED_PROAMLOGO_1", - "folder": "unused" - }, - { - "index": 351, - "filename": "proam_logo_2", - "build-id": "ASSET_TEX2D_UNUSED_PROAMLOGO_2", - "folder": "unused" - }, - { - "index": 352, - "filename": "speedometer_ticks", - "build-id": "ASSET_TEX2D_HUD_SPEEDOMETERTICKS", - "folder": "hud" - }, - { - "index": 353, - "filename": "speedometer_0", - "build-id": "ASSET_TEX2D_HUD_SPEEDOMETER0", - "folder": "hud" - }, - { - "index": 354, - "filename": "speedometer_30", - "build-id": "ASSET_TEX2D_HUD_SPEEDOMETER30", - "folder": "hud" - }, - { - "index": 355, - "filename": "speedometer_60", - "build-id": "ASSET_TEX2D_HUD_SPEEDOMETER60", - "folder": "hud" - }, - { - "index": 356, - "filename": "speedometer_90", - "build-id": "ASSET_TEX2D_HUD_SPEEDOMETER90", - "folder": "hud" - }, - { - "index": 357, - "filename": "speedometer_120", - "build-id": "ASSET_TEX2D_HUD_SPEEDOMETER120", - "folder": "hud" - }, - { - "index": 358, - "filename": "speedometer_150", - "build-id": "ASSET_TEX2D_HUD_SPEEDOMETER150", - "folder": "hud" - }, - { - "index": 359, - "filename": "speedometer_arrow", - "build-id": "ASSET_TEX2D_HUD_SPEEDOMETERARROW", - "folder": "hud" - }, - { - "index": 360, - "filename": "first_place_one_0", - "build-id": "ASSET_TEX2D_HUD_FIRSTPLACEONE_0", - "folder": "hud" - }, - { - "index": 361, - "filename": "first_place_one_1", - "build-id": "ASSET_TEX2D_HUD_FIRSTPLACEONE_1", - "folder": "hud" - }, - { - "index": 362, - "filename": "first_place_st_0", - "build-id": "ASSET_TEX2D_HUD_FIRSTPLACEST_0", - "folder": "hud" - }, - { - "index": 363, - "filename": "first_place_st_1", - "build-id": "ASSET_TEX2D_HUD_FIRSTPLACEST_1", - "folder": "hud" - }, - { - "index": 364, - "filename": "balloon_string_0", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_0", - "folder": "objects" - }, - { - "index": 365, - "filename": "balloon_string_1", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_1", - "folder": "objects" - }, - { - "index": 366, - "filename": "balloon_string_2", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_2", - "folder": "objects" - }, - { - "index": 367, - "filename": "balloon_string_3", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_3", - "folder": "objects" - }, - { - "index": 368, - "filename": "balloon_string_4", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_4", - "folder": "objects" - }, - { - "index": 369, - "filename": "balloon_string_5", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_5", - "folder": "objects" - }, - { - "index": 370, - "filename": "balloon_string_6", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_6", - "folder": "objects" - }, - { - "index": 371, - "filename": "balloon_string_7", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_7", - "folder": "objects" - }, - { - "index": 372, - "filename": "balloon_string_8", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_8", - "folder": "objects" - }, - { - "index": 373, - "filename": "balloon_string_9", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_9", - "folder": "objects" - }, - { - "index": 374, - "filename": "balloon_string_10", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_10", - "folder": "objects" - }, - { - "index": 375, - "filename": "balloon_string_11", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_11", - "folder": "objects" - }, - { - "index": 376, - "filename": "balloon_string_12", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_12", - "folder": "objects" - }, - { - "index": 377, - "filename": "balloon_string_13", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_13", - "folder": "objects" - }, - { - "index": 378, - "filename": "balloon_string_14", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_14", - "folder": "objects" - }, - { - "index": 379, - "filename": "balloon_string_15", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_15", - "folder": "objects" - }, - { - "index": 380, - "filename": "balloon_string_16", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_16", - "folder": "objects" - }, - { - "index": 381, - "filename": "balloon_string_17", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_17", - "folder": "objects" - }, - { - "index": 382, - "filename": "balloon_string_18", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_18", - "folder": "objects" - }, - { - "index": 383, - "filename": "balloon_string_19", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_19", - "folder": "objects" - }, - { - "index": 384, - "filename": "title_0", - "build-id": "ASSET_TEX2D_MENU_TITLE_0", - "folder": "menu" - }, - { - "index": 385, - "filename": "title_1", - "build-id": "ASSET_TEX2D_MENU_TITLE_1", - "folder": "menu" - }, - { - "index": 386, - "filename": "title_2", - "build-id": "ASSET_TEX2D_MENU_TITLE_2", - "folder": "menu" - }, - { - "index": 387, - "filename": "title_3", - "build-id": "ASSET_TEX2D_MENU_TITLE_3", - "folder": "menu" - }, - { - "index": 388, - "filename": "title_4", - "build-id": "ASSET_TEX2D_MENU_TITLE_4", - "folder": "menu" - }, - { - "index": 389, - "filename": "title_5", - "build-id": "ASSET_TEX2D_MENU_TITLE_5", - "folder": "menu" - }, - { - "index": 390, - "filename": "title_6", - "build-id": "ASSET_TEX2D_MENU_TITLE_6", - "folder": "menu" - }, - { - "index": 391, - "filename": "title_7", - "build-id": "ASSET_TEX2D_MENU_TITLE_7", - "folder": "menu" - }, - { - "index": 392, - "filename": "title_8", - "build-id": "ASSET_TEX2D_MENU_TITLE_8", - "folder": "menu" - }, - { - "index": 393, - "filename": "title_9", - "build-id": "ASSET_TEX2D_MENU_TITLE_9", - "folder": "menu" - }, - { - "index": 394, - "filename": "trademark_small", - "build-id": "ASSET_TEX2D_MENU_TRADEMARKSMALL", - "folder": "menu" - }, - { - "index": 395, - "filename": "fireball_unknown_0", - "build-id": "ASSET_TEX2D_UNKNOWN_FIREBALLUNKNOWN_0", - "folder": "unknown" - }, - { - "index": 396, - "filename": "fireball_unknown_1", - "build-id": "ASSET_TEX2D_UNKNOWN_FIREBALLUNKNOWN_1", - "folder": "unknown" - }, - { - "index": 397, - "filename": "fireball_unknown_2", - "build-id": "ASSET_TEX2D_UNKNOWN_FIREBALLUNKNOWN_2", - "folder": "unknown" - }, - { - "index": 398, - "filename": "fireball_unknown_3", - "build-id": "ASSET_TEX2D_UNKNOWN_FIREBALLUNKNOWN_3", - "folder": "unknown" - }, - { - "index": 399, - "filename": "fireball_0", - "build-id": "ASSET_TEX2D_OBJECTS_FIREBALL_0", - "folder": "objects" - }, - { - "index": 400, - "filename": "fireball_1", - "build-id": "ASSET_TEX2D_OBJECTS_FIREBALL_1", - "folder": "objects" - }, - { - "index": 401, - "filename": "fireball_2", - "build-id": "ASSET_TEX2D_OBJECTS_FIREBALL_2", - "folder": "objects" - }, - { - "index": 402, - "filename": "fireball_3", - "build-id": "ASSET_TEX2D_OBJECTS_FIREBALL_3", - "folder": "objects" - }, - { - "index": 403, - "filename": "fireball_4", - "build-id": "ASSET_TEX2D_OBJECTS_FIREBALL_4", - "folder": "objects" - }, - { - "index": 404, - "filename": "fireball_5", - "build-id": "ASSET_TEX2D_OBJECTS_FIREBALL_5", - "folder": "objects" - }, - { - "index": 405, - "filename": "fireball_6", - "build-id": "ASSET_TEX2D_OBJECTS_FIREBALL_6", - "folder": "objects" - }, - { - "index": 406, - "filename": "fireball_7", - "build-id": "ASSET_TEX2D_OBJECTS_FIREBALL_7", - "folder": "objects" - }, - { - "index": 407, - "filename": "fireball_8", - "build-id": "ASSET_TEX2D_OBJECTS_FIREBALL_8", - "folder": "objects" - }, - { - "index": 408, - "filename": "fireball_9", - "build-id": "ASSET_TEX2D_OBJECTS_FIREBALL_9", - "folder": "objects" - }, - { - "index": 409, - "filename": "wizghost_0", - "build-id": "ASSET_TEX2D_OBJECTS_WIZGHOST_0", - "folder": "objects" - }, - { - "index": 410, - "filename": "wizghost_1", - "build-id": "ASSET_TEX2D_OBJECTS_WIZGHOST_1", - "folder": "objects" - }, - { - "index": 411, - "filename": "wizghost_2", - "build-id": "ASSET_TEX2D_OBJECTS_WIZGHOST_2", - "folder": "objects" - }, - { - "index": 412, - "filename": "wizghost_3", - "build-id": "ASSET_TEX2D_OBJECTS_WIZGHOST_3", - "folder": "objects" - }, - { - "index": 413, - "filename": "wizghost_4", - "build-id": "ASSET_TEX2D_OBJECTS_WIZGHOST_4", - "folder": "objects" - }, - { - "index": 414, - "filename": "wizghost_5", - "build-id": "ASSET_TEX2D_OBJECTS_WIZGHOST_5", - "folder": "objects" - }, - { - "index": 415, - "filename": "wizghost_6", - "build-id": "ASSET_TEX2D_OBJECTS_WIZGHOST_6", - "folder": "objects" - }, - { - "index": 416, - "filename": "wizghost_7", - "build-id": "ASSET_TEX2D_OBJECTS_WIZGHOST_7", - "folder": "objects" - }, - { - "index": 417, - "filename": "wizghost_8", - "build-id": "ASSET_TEX2D_OBJECTS_WIZGHOST_8", - "folder": "objects" - }, - { - "index": 418, - "filename": "wizghost_9", - "build-id": "ASSET_TEX2D_OBJECTS_WIZGHOST_9", - "folder": "objects" - }, - { - "index": 419, - "filename": "wizghost_10", - "build-id": "ASSET_TEX2D_OBJECTS_WIZGHOST_10", - "folder": "objects" - }, - { - "index": 420, - "filename": "wizghost_11", - "build-id": "ASSET_TEX2D_OBJECTS_WIZGHOST_11", - "folder": "objects" - }, - { - "index": 421, - "filename": "wizghost_12", - "build-id": "ASSET_TEX2D_OBJECTS_WIZGHOST_12", - "folder": "objects" - }, - { - "index": 422, - "filename": "unknown_light_0", - "build-id": "ASSET_TEX2D_UNKNOWN_UNKNOWNLIGHT_0", - "folder": "unknown" - }, - { - "index": 423, - "filename": "unknown_light_1", - "build-id": "ASSET_TEX2D_UNKNOWN_UNKNOWNLIGHT_1", - "folder": "unknown" - }, - { - "index": 424, - "filename": "small_star", - "build-id": "ASSET_TEX2D_UNKNOWN_SMALLSTAR", - "folder": "unknown" - }, - { - "index": 425, - "filename": "buoy_0", - "build-id": "ASSET_TEX2D_OBJECTS_BUOY_0", - "folder": "objects" - }, - { - "index": 426, - "filename": "buoy_1", - "build-id": "ASSET_TEX2D_OBJECTS_BUOY_1", - "folder": "objects" - }, - { - "index": 427, - "filename": "buoy_2", - "build-id": "ASSET_TEX2D_OBJECTS_BUOY_2", - "folder": "objects" - }, - { - "index": 428, - "filename": "buoy_3", - "build-id": "ASSET_TEX2D_OBJECTS_BUOY_3", - "folder": "objects" - }, - { - "index": 429, - "filename": "smartie_tree_0", - "build-id": "ASSET_TEX2D_OBJECTS_SMARTIETREE_0", - "folder": "objects" - }, - { - "index": 430, - "filename": "smartie_tree_1", - "build-id": "ASSET_TEX2D_OBJECTS_SMARTIETREE_1", - "folder": "objects" - }, - { - "index": 431, - "filename": "smartie_tree_2", - "build-id": "ASSET_TEX2D_OBJECTS_SMARTIETREE_2", - "folder": "objects" - }, - { - "index": 432, - "filename": "smartie_tree_3", - "build-id": "ASSET_TEX2D_OBJECTS_SMARTIETREE_3", - "folder": "objects" - }, - { - "index": 433, - "filename": "beach_tree_0", - "build-id": "ASSET_TEX2D_OBJECTS_BEACHTREE_0", - "folder": "objects" - }, - { - "index": 434, - "filename": "beach_tree_1", - "build-id": "ASSET_TEX2D_OBJECTS_BEACHTREE_1", - "folder": "objects" - }, - { - "index": 435, - "filename": "beach_tree_2", - "build-id": "ASSET_TEX2D_OBJECTS_BEACHTREE_2", - "folder": "objects" - }, - { - "index": 436, - "filename": "blue_berry_bush_0", - "build-id": "ASSET_TEX2D_OBJECTS_BLUEBERRYBUSH_0", - "folder": "objects" - }, - { - "index": 437, - "filename": "blue_berry_bush_1", - "build-id": "ASSET_TEX2D_OBJECTS_BLUEBERRYBUSH_1", - "folder": "objects" - }, - { - "index": 438, - "filename": "blue_berry_bush_2", - "build-id": "ASSET_TEX2D_OBJECTS_BLUEBERRYBUSH_2", - "folder": "objects" - }, - { - "index": 439, - "filename": "blue_berry_bush_3", - "build-id": "ASSET_TEX2D_OBJECTS_BLUEBERRYBUSH_3", - "folder": "objects" - }, - { - "index": 440, - "filename": "blue_berry_bush_4", - "build-id": "ASSET_TEX2D_OBJECTS_BLUEBERRYBUSH_4", - "folder": "objects" - }, - { - "index": 441, - "filename": "blue_berry_bush_5", - "build-id": "ASSET_TEX2D_OBJECTS_BLUEBERRYBUSH_5", - "folder": "objects" - }, - { - "index": 442, - "filename": "rubber_snow_tree_0", - "build-id": "ASSET_TEX2D_OBJECTS_RUBBERSNOWTREE_0", - "folder": "objects" - }, - { - "index": 443, - "filename": "rubber_snow_tree_1", - "build-id": "ASSET_TEX2D_OBJECTS_RUBBERSNOWTREE_1", - "folder": "objects" - }, - { - "index": 444, - "filename": "rubber_snow_tree_2", - "build-id": "ASSET_TEX2D_OBJECTS_RUBBERSNOWTREE_2", - "folder": "objects" - }, - { - "index": 445, - "filename": "rubber_snow_tree_3", - "build-id": "ASSET_TEX2D_OBJECTS_RUBBERSNOWTREE_3", - "folder": "objects" - }, - { - "index": 446, - "filename": "skinny_snow_tree_0", - "build-id": "ASSET_TEX2D_OBJECTS_SKINNYSNOWTREE_0", - "folder": "objects" - }, - { - "index": 447, - "filename": "skinny_snow_tree_1", - "build-id": "ASSET_TEX2D_OBJECTS_SKINNYSNOWTREE_1", - "folder": "objects" - }, - { - "index": 448, - "filename": "skinny_snow_tree_2", - "build-id": "ASSET_TEX2D_OBJECTS_SKINNYSNOWTREE_2", - "folder": "objects" - }, - { - "index": 449, - "filename": "skinny_snow_tree_3", - "build-id": "ASSET_TEX2D_OBJECTS_SKINNYSNOWTREE_3", - "folder": "objects" - }, - { - "index": 450, - "filename": "xmas_tree_0", - "build-id": "ASSET_TEX2D_OBJECTS_XMASTREE_0", - "folder": "objects" - }, - { - "index": 451, - "filename": "xmas_tree_1", - "build-id": "ASSET_TEX2D_OBJECTS_XMASTREE_1", - "folder": "objects" - }, - { - "index": 452, - "filename": "xmas_tree_2", - "build-id": "ASSET_TEX2D_OBJECTS_XMASTREE_2", - "folder": "objects" - }, - { - "index": 453, - "filename": "xmas_tree_3", - "build-id": "ASSET_TEX2D_OBJECTS_XMASTREE_3", - "folder": "objects" - }, - { - "index": 454, - "filename": "alpine_snow_tree_0", - "build-id": "ASSET_TEX2D_OBJECTS_ALPINESNOWTREE_0", - "folder": "objects" - }, - { - "index": 455, - "filename": "alpine_snow_tree_1", - "build-id": "ASSET_TEX2D_OBJECTS_ALPINESNOWTREE_1", - "folder": "objects" - }, - { - "index": 456, - "filename": "alpine_snow_tree_2", - "build-id": "ASSET_TEX2D_OBJECTS_ALPINESNOWTREE_2", - "folder": "objects" - }, - { - "index": 457, - "filename": "alpine_snow_tree_3", - "build-id": "ASSET_TEX2D_OBJECTS_ALPINESNOWTREE_3", - "folder": "objects" - }, - { - "index": 458, - "filename": "rubber_tree_0", - "build-id": "ASSET_TEX2D_OBJECTS_RUBBERTREE_0", - "folder": "objects" - }, - { - "index": 459, - "filename": "rubber_tree_1", - "build-id": "ASSET_TEX2D_OBJECTS_RUBBERTREE_1", - "folder": "objects" - }, - { - "index": 460, - "filename": "rubber_tree_2", - "build-id": "ASSET_TEX2D_OBJECTS_RUBBERTREE_2", - "folder": "objects" - }, - { - "index": 461, - "filename": "rubber_tree_3", - "build-id": "ASSET_TEX2D_OBJECTS_RUBBERTREE_3", - "folder": "objects" - }, - { - "index": 462, - "filename": "palm_tree_top_0", - "build-id": "ASSET_TEX2D_OBJECTS_PALMTREETOP_0", - "folder": "objects" - }, - { - "index": 463, - "filename": "palm_tree_top_1", - "build-id": "ASSET_TEX2D_OBJECTS_PALMTREETOP_1", - "folder": "objects" - }, - { - "index": 464, - "filename": "palm_tree_top_2", - "build-id": "ASSET_TEX2D_OBJECTS_PALMTREETOP_2", - "folder": "objects" - }, - { - "index": 465, - "filename": "palm_tree_top_3", - "build-id": "ASSET_TEX2D_OBJECTS_PALMTREETOP_3", - "folder": "objects" - }, - { - "index": 466, - "filename": "palm_tree_top_4", - "build-id": "ASSET_TEX2D_OBJECTS_PALMTREETOP_4", - "folder": "objects" - }, - { - "index": 467, - "filename": "palm_plant_0", - "build-id": "ASSET_TEX2D_OBJECTS_PALMPLANT_0", - "folder": "objects" - }, - { - "index": 468, - "filename": "palm_plant_1", - "build-id": "ASSET_TEX2D_OBJECTS_PALMPLANT_1", - "folder": "objects" - }, - { - "index": 469, - "filename": "palm_plant_2", - "build-id": "ASSET_TEX2D_OBJECTS_PALMPLANT_2", - "folder": "objects" - }, - { - "index": 470, - "filename": "palm_tree_top_chea_0", - "build-id": "ASSET_TEX2D_OBJECTS_PALMTREETOPCHEA_0", - "folder": "objects" - }, - { - "index": 471, - "filename": "palm_tree_top_chea_1", - "build-id": "ASSET_TEX2D_OBJECTS_PALMTREETOPCHEA_1", - "folder": "objects" - }, - { - "index": 472, - "filename": "fir_tree_0", - "build-id": "ASSET_TEX2D_OBJECTS_FIRTREE_0", - "folder": "objects" - }, - { - "index": 473, - "filename": "fir_tree_1", - "build-id": "ASSET_TEX2D_OBJECTS_FIRTREE_1", - "folder": "objects" - }, - { - "index": 474, - "filename": "fir_tree_2", - "build-id": "ASSET_TEX2D_OBJECTS_FIRTREE_2", - "folder": "objects" - }, - { - "index": 475, - "filename": "fir_tree_3", - "build-id": "ASSET_TEX2D_OBJECTS_FIRTREE_3", - "folder": "objects" - }, - { - "index": 476, - "filename": "space_tree_0", - "build-id": "ASSET_TEX2D_OBJECTS_SPACETREE_0", - "folder": "objects" - }, - { - "index": 477, - "filename": "space_tree_1", - "build-id": "ASSET_TEX2D_OBJECTS_SPACETREE_1", - "folder": "objects" - }, - { - "index": 478, - "filename": "lamp_post_0", - "build-id": "ASSET_TEX2D_OBJECTS_LAMPPOST_0", - "folder": "objects" - }, - { - "index": 479, - "filename": "lamp_post_1", - "build-id": "ASSET_TEX2D_OBJECTS_LAMPPOST_1", - "folder": "objects" - }, - { - "index": 480, - "filename": "lamp_post_2", - "build-id": "ASSET_TEX2D_OBJECTS_LAMPPOST_2", - "folder": "objects" - }, - { - "index": 481, - "filename": "lamp_post_3", - "build-id": "ASSET_TEX2D_OBJECTS_LAMPPOST_3", - "folder": "objects" - }, - { - "index": 482, - "filename": "white_buttercup_0", - "build-id": "ASSET_TEX2D_OBJECTS_FLOWERS_WHITEBUTTERCUP_0", - "folder": "objects/flowers" - }, - { - "index": 483, - "filename": "white_buttercup_1", - "build-id": "ASSET_TEX2D_OBJECTS_FLOWERS_WHITEBUTTERCUP_1", - "folder": "objects/flowers" - }, - { - "index": 484, - "filename": "yellow_bellflower_0", - "build-id": "ASSET_TEX2D_OBJECTS_FLOWERS_YELLOWBELLFLOWER_0", - "folder": "objects/flowers" - }, - { - "index": 485, - "filename": "yellow_bellflower_1", - "build-id": "ASSET_TEX2D_OBJECTS_FLOWERS_YELLOWBELLFLOWER_1", - "folder": "objects/flowers" - }, - { - "index": 486, - "filename": "yellow_buttercup_0", - "build-id": "ASSET_TEX2D_OBJECTS_FLOWERS_YELLOWBUTTERCUP_0", - "folder": "objects/flowers" - }, - { - "index": 487, - "filename": "yellow_buttercup_1", - "build-id": "ASSET_TEX2D_OBJECTS_FLOWERS_YELLOWBUTTERCUP_1", - "folder": "objects/flowers" - }, - { - "index": 488, - "filename": "blue_buttercup_0", - "build-id": "ASSET_TEX2D_OBJECTS_FLOWERS_BLUEBUTTERCUP_0", - "folder": "objects/flowers" - }, - { - "index": 489, - "filename": "blue_buttercup_1", - "build-id": "ASSET_TEX2D_OBJECTS_FLOWERS_BLUEBUTTERCUP_1", - "folder": "objects/flowers" - }, - { - "index": 490, - "filename": "waterlily_0", - "build-id": "ASSET_TEX2D_OBJECTS_FLOWERS_WATERLILY_0", - "folder": "objects/flowers" - }, - { - "index": 491, - "filename": "waterlily_1", - "build-id": "ASSET_TEX2D_OBJECTS_FLOWERS_WATERLILY_1", - "folder": "objects/flowers" - }, - { - "index": 492, - "filename": "reed_no_leaf_0", - "build-id": "ASSET_TEX2D_OBJECTS_REEDNOLEAF_0", - "folder": "objects" - }, - { - "index": 493, - "filename": "reed_no_leaf_1", - "build-id": "ASSET_TEX2D_OBJECTS_REEDNOLEAF_1", - "folder": "objects" - }, - { - "index": 494, - "filename": "reed_leaves_0", - "build-id": "ASSET_TEX2D_OBJECTS_REEDLEAVES_0", - "folder": "objects" - }, - { - "index": 495, - "filename": "reed_leaves_1", - "build-id": "ASSET_TEX2D_OBJECTS_REEDLEAVES_1", - "folder": "objects" - }, - { - "index": 496, - "filename": "reed_leaves_2", - "build-id": "ASSET_TEX2D_OBJECTS_REEDLEAVES_2", - "folder": "objects" - }, - { - "index": 497, - "filename": "reed_one_leaf_0", - "build-id": "ASSET_TEX2D_OBJECTS_REEDONELEAF_0", - "folder": "objects" - }, - { - "index": 498, - "filename": "reed_one_leaf_1", - "build-id": "ASSET_TEX2D_OBJECTS_REEDONELEAF_1", - "folder": "objects" - }, - { - "index": 499, - "filename": "reed_one_leaf_2", - "build-id": "ASSET_TEX2D_OBJECTS_REEDONELEAF_2", - "folder": "objects" - }, - { - "index": 500, - "filename": "snowman_tophat_0", - "build-id": "ASSET_TEX2D_OBJECTS_SNOWMANTOPHAT_0", - "folder": "objects" - }, - { - "index": 501, - "filename": "snowman_tophat_1", - "build-id": "ASSET_TEX2D_OBJECTS_SNOWMANTOPHAT_1", - "folder": "objects" - }, - { - "index": 502, - "filename": "snowman_tophat_2", - "build-id": "ASSET_TEX2D_OBJECTS_SNOWMANTOPHAT_2", - "folder": "objects" - }, - { - "index": 503, - "filename": "snowman_tophat_3", - "build-id": "ASSET_TEX2D_OBJECTS_SNOWMANTOPHAT_3", - "folder": "objects" - }, - { - "index": 504, - "filename": "bell", - "build-id": "ASSET_TEX2D_OBJECTS_BELL", - "folder": "objects" - }, - { - "index": 505, - "filename": "snowman_0", - "build-id": "ASSET_TEX2D_OBJECTS_SNOWMAN_0", - "folder": "objects" - }, - { - "index": 506, - "filename": "snowman_1", - "build-id": "ASSET_TEX2D_OBJECTS_SNOWMAN_1", - "folder": "objects" - }, - { - "index": 507, - "filename": "snowman_2", - "build-id": "ASSET_TEX2D_OBJECTS_SNOWMAN_2", - "folder": "objects" - }, - { - "index": 508, - "filename": "snowman_3", - "build-id": "ASSET_TEX2D_OBJECTS_SNOWMAN_3", - "folder": "objects" - }, - { - "index": 509, - "filename": "torch_with_eyes", - "build-id": "ASSET_TEX2D_UNUSED_TORCHWITHEYES", - "folder": "unused" - }, - { - "index": 510, - "filename": "debug_orb_red", - "build-id": "ASSET_TEX2D_OBJECTS_DEBUGORBRED", - "folder": "objects" - }, - { - "index": 511, - "filename": "debug_orb_yellow", - "build-id": "ASSET_TEX2D_OBJECTS_DEBUGORBYELLOW", - "folder": "objects" - }, - { - "index": 512, - "filename": "beta_ancient_lake_sign_0", - "build-id": "ASSET_TEX2D_UNUSED_BETAANCIENTLAKESIGN_0", - "folder": "unused" - }, - { - "index": 513, - "filename": "beta_ancient_lake_sign_1", - "build-id": "ASSET_TEX2D_UNUSED_BETAANCIENTLAKESIGN_1", - "folder": "unused" - }, - { - "index": 514, - "filename": "beta_ancient_lake_sign_2", - "build-id": "ASSET_TEX2D_UNUSED_BETAANCIENTLAKESIGN_2", - "folder": "unused" - }, - { - "index": 515, - "filename": "beta_ancient_lake_sign_3", - "build-id": "ASSET_TEX2D_UNUSED_BETAANCIENTLAKESIGN_3", - "folder": "unused" - }, - { - "index": 516, - "filename": "beta_ancient_lake_sign_4", - "build-id": "ASSET_TEX2D_UNUSED_BETAANCIENTLAKESIGN_4", - "folder": "unused" - }, - { - "index": 517, - "filename": "debug_fog_changer", - "build-id": "ASSET_TEX2D_OBJECTS_DEBUGFOGCHANGER", - "folder": "objects" - }, - { - "index": 518, - "filename": "debug_anim_car", - "build-id": "ASSET_TEX2D_OBJECTS_DEBUGANIMCAR", - "folder": "objects" - }, - { - "index": 519, - "filename": "debug_sky_control", - "build-id": "ASSET_TEX2D_OBJECTS_DEBUGSKYCONTROL", - "folder": "objects" - }, - { - "index": 520, - "filename": "debug_camera_control", - "build-id": "ASSET_TEX2D_OBJECTS_DEBUGCAMERACONTROL", - "folder": "objects" - }, - { - "index": 521, - "filename": "debug_unknown_exit", - "build-id": "ASSET_TEX2D_UNUSED_DEBUGUNKNOWNEXIT", - "folder": "unused" - }, - { - "index": 522, - "filename": "debug_unknown_traffic_light", - "build-id": "ASSET_TEX2D_UNUSED_DEBUGUNKNOWNTRAFFICLIGHT", - "folder": "unused" - }, - { - "index": 523, - "filename": "debug_animator", - "build-id": "ASSET_TEX2D_OBJECTS_DEBUGANIMATOR", - "folder": "objects" - }, - { - "index": 524, - "filename": "debug_audio", - "build-id": "ASSET_TEX2D_OBJECTS_DEBUGAUDIO", - "folder": "objects" - }, - { - "index": 525, - "filename": "debug_audio_line", - "build-id": "ASSET_TEX2D_OBJECTS_DEBUGAUDIOLINE", - "folder": "objects" - }, - { - "index": 526, - "filename": "debug_audio_seq_line", - "build-id": "ASSET_TEX2D_OBJECTS_DEBUGAUDIOSEQLINE", - "folder": "objects" - }, - { - "index": 527, - "filename": "debug_audio_seq", - "build-id": "ASSET_TEX2D_OBJECTS_DEBUGAUDIOSEQ", - "folder": "objects" - }, - { - "index": 528, - "filename": "debug_audio_reverb_0", - "build-id": "ASSET_TEX2D_OBJECTS_DEBUGAUDIOREVERB_0", - "folder": "objects" - }, - { - "index": 529, - "filename": "debug_audio_reverb_1", - "build-id": "ASSET_TEX2D_OBJECTS_DEBUGAUDIOREVERB_1", - "folder": "objects" - }, - { - "index": 530, - "filename": "balloon_boost_0", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONBOOST_0", - "folder": "objects" - }, - { - "index": 531, - "filename": "balloon_boost_1", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONBOOST_1", - "folder": "objects" - }, - { - "index": 532, - "filename": "balloon_boost_2", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONBOOST_2", - "folder": "objects" - }, - { - "index": 533, - "filename": "balloon_missile_0", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONMISSILE_0", - "folder": "objects" - }, - { - "index": 534, - "filename": "balloon_missile_1", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONMISSILE_1", - "folder": "objects" - }, - { - "index": 535, - "filename": "balloon_missile_2", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONMISSILE_2", - "folder": "objects" - }, - { - "index": 536, - "filename": "balloon_trap_0", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONTRAP_0", - "folder": "objects" - }, - { - "index": 537, - "filename": "balloon_trap_1", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONTRAP_1", - "folder": "objects" - }, - { - "index": 538, - "filename": "balloon_trap_2", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONTRAP_2", - "folder": "objects" - }, - { - "index": 539, - "filename": "balloon_shield_0", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSHIELD_0", - "folder": "objects" - }, - { - "index": 540, - "filename": "balloon_shield_1", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSHIELD_1", - "folder": "objects" - }, - { - "index": 541, - "filename": "balloon_shield_2", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSHIELD_2", - "folder": "objects" - }, - { - "index": 542, - "filename": "balloon_magnet_0", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONMAGNET_0", - "folder": "objects" - }, - { - "index": 543, - "filename": "balloon_magnet_1", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONMAGNET_1", - "folder": "objects" - }, - { - "index": 544, - "filename": "balloon_magnet_2", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONMAGNET_2", - "folder": "objects" - }, - { - "index": 545, - "filename": "balloon_missile_gift_0", - "build-id": "ASSET_TEX2D_UNUSED_BALLOONMISSILEGIFT_0", - "folder": "unused" - }, - { - "index": 546, - "filename": "balloon_missile_gift_1", - "build-id": "ASSET_TEX2D_UNUSED_BALLOONMISSILEGIFT_1", - "folder": "unused" - }, - { - "index": 547, - "filename": "balloon_missile_gift_2", - "build-id": "ASSET_TEX2D_UNUSED_BALLOONMISSILEGIFT_2", - "folder": "unused" - }, - { - "index": 548, - "filename": "balloon_boost_gift_0", - "build-id": "ASSET_TEX2D_UNUSED_BALLOONBOOSTGIFT_0", - "folder": "unused" - }, - { - "index": 549, - "filename": "balloon_boost_gift_1", - "build-id": "ASSET_TEX2D_UNUSED_BALLOONBOOSTGIFT_1", - "folder": "unused" - }, - { - "index": 550, - "filename": "balloon_boost_gift_2", - "build-id": "ASSET_TEX2D_UNUSED_BALLOONBOOSTGIFT_2", - "folder": "unused" - }, - { - "index": 551, - "filename": "balloon_gold_0", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONGOLD_0", - "folder": "objects" - }, - { - "index": 552, - "filename": "balloon_gold_1", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONGOLD_1", - "folder": "objects" - }, - { - "index": 553, - "filename": "balloon_gold_2", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONGOLD_2", - "folder": "objects" - }, - { - "index": 554, - "filename": "balloon_silver_0", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSILVER_0", - "folder": "objects" - }, - { - "index": 555, - "filename": "balloon_silver_1", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSILVER_1", - "folder": "objects" - }, - { - "index": 556, - "filename": "balloon_silver_2", - "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSILVER_2", - "folder": "objects" - }, - { - "index": 557, - "filename": "banana_0", - "build-id": "ASSET_TEX2D_OBJECTS_BANANA_0", - "folder": "objects" - }, - { - "index": 558, - "filename": "banana_1", - "build-id": "ASSET_TEX2D_OBJECTS_BANANA_1", - "folder": "objects" - }, - { - "index": 559, - "filename": "banana_2", - "build-id": "ASSET_TEX2D_OBJECTS_BANANA_2", - "folder": "objects" - }, - { - "index": 560, - "filename": "banana_3", - "build-id": "ASSET_TEX2D_OBJECTS_BANANA_3", - "folder": "objects" - }, - { - "index": 561, - "filename": "banana_4", - "build-id": "ASSET_TEX2D_OBJECTS_BANANA_4", - "folder": "objects" - }, - { - "index": 562, - "filename": "banana_5", - "build-id": "ASSET_TEX2D_OBJECTS_BANANA_5", - "folder": "objects" - }, - { - "index": 563, - "filename": "banana_6", - "build-id": "ASSET_TEX2D_OBJECTS_BANANA_6", - "folder": "objects" - }, - { - "index": 564, - "filename": "banana_7", - "build-id": "ASSET_TEX2D_OBJECTS_BANANA_7", - "folder": "objects" - }, - { - "index": 565, - "filename": "silver_coin_0", - "build-id": "ASSET_TEX2D_OBJECTS_SILVERCOIN_0", - "folder": "objects" - }, - { - "index": 566, - "filename": "silver_coin_1", - "build-id": "ASSET_TEX2D_OBJECTS_SILVERCOIN_1", - "folder": "objects" - }, - { - "index": 567, - "filename": "silver_coin_2", - "build-id": "ASSET_TEX2D_OBJECTS_SILVERCOIN_2", - "folder": "objects" - }, - { - "index": 568, - "filename": "silver_coin_3", - "build-id": "ASSET_TEX2D_OBJECTS_SILVERCOIN_3", - "folder": "objects" - }, - { - "index": 569, - "filename": "silver_coin_4", - "build-id": "ASSET_TEX2D_OBJECTS_SILVERCOIN_4", - "folder": "objects" - }, - { - "index": 570, - "filename": "silver_coin_5", - "build-id": "ASSET_TEX2D_OBJECTS_SILVERCOIN_5", - "folder": "objects" - }, - { - "index": 571, - "filename": "silver_coin_6", - "build-id": "ASSET_TEX2D_OBJECTS_SILVERCOIN_6", - "folder": "objects" - }, - { - "index": 572, - "filename": "silver_coin_7", - "build-id": "ASSET_TEX2D_OBJECTS_SILVERCOIN_7", - "folder": "objects" - }, - { - "index": 573, - "filename": "silver_coin_8", - "build-id": "ASSET_TEX2D_OBJECTS_SILVERCOIN_8", - "folder": "objects" - }, - { - "index": 574, - "filename": "silver_coin_9", - "build-id": "ASSET_TEX2D_OBJECTS_SILVERCOIN_9", - "folder": "objects" - }, - { - "index": 575, - "filename": "silver_coin_10", - "build-id": "ASSET_TEX2D_OBJECTS_SILVERCOIN_10", - "folder": "objects" - }, - { - "index": 576, - "filename": "checkpoint_flag_0", - "build-id": "ASSET_TEX2D_OBJECTS_CHECKPOINTFLAG_0", - "folder": "objects" - }, - { - "index": 577, - "filename": "checkpoint_flag_1", - "build-id": "ASSET_TEX2D_OBJECTS_CHECKPOINTFLAG_1", - "folder": "objects" - }, - { - "index": 578, - "filename": "checkpoint_flag_2", - "build-id": "ASSET_TEX2D_OBJECTS_CHECKPOINTFLAG_2", - "folder": "objects" - }, - { - "index": 579, - "filename": "checkpoint_flag_3", - "build-id": "ASSET_TEX2D_OBJECTS_CHECKPOINTFLAG_3", - "folder": "objects" - }, - { - "index": 580, - "filename": "checkpoint_flag_4", - "build-id": "ASSET_TEX2D_OBJECTS_CHECKPOINTFLAG_4", - "folder": "objects" - }, - { - "index": 581, - "filename": "checkpoint_flag_5", - "build-id": "ASSET_TEX2D_OBJECTS_CHECKPOINTFLAG_5", - "folder": "objects" - }, - { - "index": 582, - "filename": "checkpoint_flag_6", - "build-id": "ASSET_TEX2D_OBJECTS_CHECKPOINTFLAG_6", - "folder": "objects" - }, - { - "index": 583, - "filename": "checkpoint_flag_7", - "build-id": "ASSET_TEX2D_OBJECTS_CHECKPOINTFLAG_7", - "folder": "objects" - }, - { - "index": 584, - "filename": "checkpoint_flag_8", - "build-id": "ASSET_TEX2D_OBJECTS_CHECKPOINTFLAG_8", - "folder": "objects" - }, - { - "index": 585, - "filename": "rareware_coin_0", - "build-id": "ASSET_TEX2D_UNUSED_RAREWARECOIN_0", - "folder": "unused" - }, - { - "index": 586, - "filename": "rareware_coin_1", - "build-id": "ASSET_TEX2D_UNUSED_RAREWARECOIN_1", - "folder": "unused" - }, - { - "index": 587, - "filename": "rareware_coin_2", - "build-id": "ASSET_TEX2D_UNUSED_RAREWARECOIN_2", - "folder": "unused" - }, - { - "index": 588, - "filename": "rareware_coin_3", - "build-id": "ASSET_TEX2D_UNUSED_RAREWARECOIN_3", - "folder": "unused" - }, - { - "index": 589, - "filename": "rareware_coin_4", - "build-id": "ASSET_TEX2D_UNUSED_RAREWARECOIN_4", - "folder": "unused" - }, - { - "index": 590, - "filename": "rareware_coin_5", - "build-id": "ASSET_TEX2D_UNUSED_RAREWARECOIN_5", - "folder": "unused" - }, - { - "index": 591, - "filename": "rareware_coin_6", - "build-id": "ASSET_TEX2D_UNUSED_RAREWARECOIN_6", - "folder": "unused" - }, - { - "index": 592, - "filename": "rareware_coin_7", - "build-id": "ASSET_TEX2D_UNUSED_RAREWARECOIN_7", - "folder": "unused" - }, - { - "index": 593, - "filename": "rareware_coin_8", - "build-id": "ASSET_TEX2D_UNUSED_RAREWARECOIN_8", - "folder": "unused" - }, - { - "index": 594, - "filename": "rareware_coin_9", - "build-id": "ASSET_TEX2D_UNUSED_RAREWARECOIN_9", - "folder": "unused" - }, - { - "index": 595, - "filename": "rareware_coin_10", - "build-id": "ASSET_TEX2D_UNUSED_RAREWARECOIN_10", - "folder": "unused" - }, - { - "index": 596, - "filename": "silver_coin_vertical", - "build-id": "ASSET_TEX2D_UNUSED_SILVERCOINVERTICAL", - "folder": "unused" - }, - { - "index": 597, - "filename": "banana_icon_0", - "build-id": "ASSET_TEX2D_HUD_BANANAICON_0", - "folder": "hud" - }, - { - "index": 598, - "filename": "banana_icon_1", - "build-id": "ASSET_TEX2D_HUD_BANANAICON_1", - "folder": "hud" - }, - { - "index": 599, - "filename": "sparkle_0", - "build-id": "ASSET_TEX2D_PARTICLES_SPARKLE_0", - "folder": "particles" - }, - { - "index": 600, - "filename": "sparkle_1", - "build-id": "ASSET_TEX2D_PARTICLES_SPARKLE_1", - "folder": "particles" - }, - { - "index": 601, - "filename": "sparkle_2", - "build-id": "ASSET_TEX2D_PARTICLES_SPARKLE_2", - "folder": "particles" - }, - { - "index": 602, - "filename": "sparkle_3", - "build-id": "ASSET_TEX2D_PARTICLES_SPARKLE_3", - "folder": "particles" - }, - { - "index": 603, - "filename": "sparkle_4", - "build-id": "ASSET_TEX2D_PARTICLES_SPARKLE_4", - "folder": "particles" - }, - { - "index": 604, - "filename": "debug_egg_creator_0", - "build-id": "ASSET_TEX2D_OBJECTS_DEBUGEGGCREATOR_0", - "folder": "objects" - }, - { - "index": 605, - "filename": "debug_egg_creator_1", - "build-id": "ASSET_TEX2D_OBJECTS_DEBUGEGGCREATOR_1", - "folder": "objects" - }, - { - "index": 606, - "filename": "debug_egg_creator_2", - "build-id": "ASSET_TEX2D_OBJECTS_DEBUGEGGCREATOR_2", - "folder": "objects" - }, - { - "index": 607, - "filename": "debug_egg_creator_3", - "build-id": "ASSET_TEX2D_OBJECTS_DEBUGEGGCREATOR_3", - "folder": "objects" - }, - { - "index": 608, - "filename": "debug_egg_creator_4", - "build-id": "ASSET_TEX2D_OBJECTS_DEBUGEGGCREATOR_4", - "folder": "objects" - }, - { - "index": 609, - "filename": "debug_egg_creator_5", - "build-id": "ASSET_TEX2D_OBJECTS_DEBUGEGGCREATOR_5", - "folder": "objects" - }, - { - "index": 610, - "filename": "bonus_gem_0", - "build-id": "ASSET_TEX2D_UNUSED_BONUSGEM_0", - "folder": "unused" - }, - { - "index": 611, - "filename": "bonus_gem_1", - "build-id": "ASSET_TEX2D_UNUSED_BONUSGEM_1", - "folder": "unused" - }, - { - "index": 612, - "filename": "bonus_gem_2", - "build-id": "ASSET_TEX2D_UNUSED_BONUSGEM_2", - "folder": "unused" - }, - { - "index": 613, - "filename": "bonus_gem_3", - "build-id": "ASSET_TEX2D_UNUSED_BONUSGEM_3", - "folder": "unused" - }, - { - "index": 614, - "filename": "bonus_gem_4", - "build-id": "ASSET_TEX2D_UNUSED_BONUSGEM_4", - "folder": "unused" - }, - { - "index": 615, - "filename": "bonus_gem_5", - "build-id": "ASSET_TEX2D_UNUSED_BONUSGEM_5", - "folder": "unused" - }, - { - "index": 616, - "filename": "bonus_gem_6", - "build-id": "ASSET_TEX2D_UNUSED_BONUSGEM_6", - "folder": "unused" - }, - { - "index": 617, - "filename": "bonus_gem_7", - "build-id": "ASSET_TEX2D_UNUSED_BONUSGEM_7", - "folder": "unused" - }, - { - "index": 618, - "filename": "indicatoricon_caution", - "build-id": "ASSET_TEX2D_HUD_INDICATORICONCAUTION", - "folder": "hud" - }, - { - "index": 619, - "filename": "indicatoricon_down", - "build-id": "ASSET_TEX2D_HUD_INDICATORICONDOWN", - "folder": "hud" - }, - { - "index": 620, - "filename": "indicatoricon_uturn", - "build-id": "ASSET_TEX2D_HUD_INDICATORICONUTURN", - "folder": "hud" - }, - { - "index": 621, - "filename": "indicatoricon_turn", - "build-id": "ASSET_TEX2D_HUD_INDICATORICONTURN", - "folder": "hud" - }, - { - "index": 622, - "filename": "indicatoricon_slight_turn", - "build-id": "ASSET_TEX2D_HUD_INDICATORICONSLIGHTTURN", - "folder": "hud" - }, - { - "index": 623, - "filename": "smoke_object_0", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKEOBJECT_0", - "folder": "objects" - }, - { - "index": 624, - "filename": "smoke_object_1", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKEOBJECT_1", - "folder": "objects" - }, - { - "index": 625, - "filename": "smoke_object_2", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKEOBJECT_2", - "folder": "objects" - }, - { - "index": 626, - "filename": "smoke_object_3", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKEOBJECT_3", - "folder": "objects" - }, - { - "index": 627, - "filename": "smoke_object_4", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKEOBJECT_4", - "folder": "objects" - }, - { - "index": 628, - "filename": "smoke_object_5", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKEOBJECT_5", - "folder": "objects" - }, - { - "index": 629, - "filename": "smoke_object_6", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKEOBJECT_6", - "folder": "objects" - }, - { - "index": 630, - "filename": "smoke_object_7", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKEOBJECT_7", - "folder": "objects" - }, - { - "index": 631, - "filename": "smoke_object_8", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKEOBJECT_8", - "folder": "objects" - }, - { - "index": 632, - "filename": "smoke_object_9", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKEOBJECT_9", - "folder": "objects" - }, - { - "index": 633, - "filename": "smoke_object_10", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKEOBJECT_10", - "folder": "objects" - }, - { - "index": 634, - "filename": "smoke_object_11", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKEOBJECT_11", - "folder": "objects" - }, - { - "index": 635, - "filename": "smoke_object_12", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKEOBJECT_12", - "folder": "objects" - }, - { - "index": 636, - "filename": "smoke_object_13", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKEOBJECT_13", - "folder": "objects" - }, - { - "index": 637, - "filename": "smoke_object_14", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKEOBJECT_14", - "folder": "objects" - }, - { - "index": 638, - "filename": "smoke_object_15", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKEOBJECT_15", - "folder": "objects" - }, - { - "index": 639, - "filename": "smoke_cloud_0", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKECLOUD_0", - "folder": "objects" - }, - { - "index": 640, - "filename": "smoke_cloud_1", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKECLOUD_1", - "folder": "objects" - }, - { - "index": 641, - "filename": "smoke_cloud_2", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKECLOUD_2", - "folder": "objects" - }, - { - "index": 642, - "filename": "smoke_cloud_3", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKECLOUD_3", - "folder": "objects" - }, - { - "index": 643, - "filename": "smoke_cloud_4", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKECLOUD_4", - "folder": "objects" - }, - { - "index": 644, - "filename": "smoke_cloud_5", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKECLOUD_5", - "folder": "objects" - }, - { - "index": 645, - "filename": "smoke_cloud_6", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKECLOUD_6", - "folder": "objects" - }, - { - "index": 646, - "filename": "smoke_cloud_7", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKECLOUD_7", - "folder": "objects" - }, - { - "index": 647, - "filename": "smoke_cloud_8", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKECLOUD_8", - "folder": "objects" - }, - { - "index": 648, - "filename": "smoke_grass_0", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKEGRASS_0", - "folder": "objects" - }, - { - "index": 649, - "filename": "smoke_grass_1", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKEGRASS_1", - "folder": "objects" - }, - { - "index": 650, - "filename": "smoke_grass_2", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKEGRASS_2", - "folder": "objects" - }, - { - "index": 651, - "filename": "smoke_grass_3", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKEGRASS_3", - "folder": "objects" - }, - { - "index": 652, - "filename": "smoke_grass_4", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKEGRASS_4", - "folder": "objects" - }, - { - "index": 653, - "filename": "smoke_grass_5", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKEGRASS_5", - "folder": "objects" - }, - { - "index": 654, - "filename": "smoke_grass_6", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKEGRASS_6", - "folder": "objects" - }, - { - "index": 655, - "filename": "smoke_grass_7", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKEGRASS_7", - "folder": "objects" - }, - { - "index": 656, - "filename": "smoke_grass_8", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKEGRASS_8", - "folder": "objects" - }, - { - "index": 657, - "filename": "smoke_grass_9", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKEGRASS_9", - "folder": "objects" - }, - { - "index": 658, - "filename": "smoke_grass_10", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKEGRASS_10", - "folder": "objects" - }, - { - "index": 659, - "filename": "smoke_grass_11", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKEGRASS_11", - "folder": "objects" - }, - { - "index": 660, - "filename": "smoke_grass_12", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKEGRASS_12", - "folder": "objects" - }, - { - "index": 661, - "filename": "smoke_grass_13", - "build-id": "ASSET_TEX2D_OBJECTS_SMOKEGRASS_13", - "folder": "objects" - }, - { - "index": 662, - "filename": "mist_0", - "build-id": "ASSET_TEX2D_OBJECTS_MIST_0", - "folder": "objects" - }, - { - "index": 663, - "filename": "mist_1", - "build-id": "ASSET_TEX2D_OBJECTS_MIST_1", - "folder": "objects" - }, - { - "index": 664, - "filename": "mist_2", - "build-id": "ASSET_TEX2D_OBJECTS_MIST_2", - "folder": "objects" - }, - { - "index": 665, - "filename": "mist_3", - "build-id": "ASSET_TEX2D_OBJECTS_MIST_3", - "folder": "objects" - }, - { - "index": 666, - "filename": "mist_4", - "build-id": "ASSET_TEX2D_OBJECTS_MIST_4", - "folder": "objects" - }, - { - "index": 667, - "filename": "mist_5", - "build-id": "ASSET_TEX2D_OBJECTS_MIST_5", - "folder": "objects" - }, - { - "index": 668, - "filename": "mist_6", - "build-id": "ASSET_TEX2D_OBJECTS_MIST_6", - "folder": "objects" - }, - { - "index": 669, - "filename": "mist_7", - "build-id": "ASSET_TEX2D_OBJECTS_MIST_7", - "folder": "objects" - }, - { - "index": 670, - "filename": "mist_8", - "build-id": "ASSET_TEX2D_OBJECTS_MIST_8", - "folder": "objects" - }, - { - "index": 671, - "filename": "mist_9", - "build-id": "ASSET_TEX2D_OBJECTS_MIST_9", - "folder": "objects" - }, - { - "index": 672, - "filename": "mist_10", - "build-id": "ASSET_TEX2D_OBJECTS_MIST_10", - "folder": "objects" - }, - { - "index": 673, - "filename": "flaming_torch_0", - "build-id": "ASSET_TEX2D_OBJECTS_FLAMINGTORCH_0", - "folder": "objects" - }, - { - "index": 674, - "filename": "flaming_torch_1", - "build-id": "ASSET_TEX2D_OBJECTS_FLAMINGTORCH_1", - "folder": "objects" - }, - { - "index": 675, - "filename": "flaming_torch_2", - "build-id": "ASSET_TEX2D_OBJECTS_FLAMINGTORCH_2", - "folder": "objects" - }, - { - "index": 676, - "filename": "flaming_torch_3", - "build-id": "ASSET_TEX2D_OBJECTS_FLAMINGTORCH_3", - "folder": "objects" - }, - { - "index": 677, - "filename": "flaming_torch_4", - "build-id": "ASSET_TEX2D_OBJECTS_FLAMINGTORCH_4", - "folder": "objects" - }, - { - "index": 678, - "filename": "flaming_torch_5", - "build-id": "ASSET_TEX2D_OBJECTS_FLAMINGTORCH_5", - "folder": "objects" - }, - { - "index": 679, - "filename": "flaming_torch_6", - "build-id": "ASSET_TEX2D_OBJECTS_FLAMINGTORCH_6", - "folder": "objects" - }, - { - "index": 680, - "filename": "flaming_torch_7", - "build-id": "ASSET_TEX2D_OBJECTS_FLAMINGTORCH_7", - "folder": "objects" - }, - { - "index": 681, - "filename": "flaming_torch_8", - "build-id": "ASSET_TEX2D_OBJECTS_FLAMINGTORCH_8", - "folder": "objects" - }, - { - "index": 682, - "filename": "flaming_torch_9", - "build-id": "ASSET_TEX2D_OBJECTS_FLAMINGTORCH_9", - "folder": "objects" - }, - { - "index": 683, - "filename": "flaming_torch_10", - "build-id": "ASSET_TEX2D_OBJECTS_FLAMINGTORCH_10", - "folder": "objects" - }, - { - "index": 684, - "filename": "flaming_torch_11", - "build-id": "ASSET_TEX2D_OBJECTS_FLAMINGTORCH_11", - "folder": "objects" - }, - { - "index": 685, - "filename": "splash_0", - "build-id": "ASSET_TEX2D_UNUSED_SPLASH_0", - "folder": "unused" - }, - { - "index": 686, - "filename": "splash_1", - "build-id": "ASSET_TEX2D_UNUSED_SPLASH_1", - "folder": "unused" - }, - { - "index": 687, - "filename": "splash_2", - "build-id": "ASSET_TEX2D_UNUSED_SPLASH_2", - "folder": "unused" - }, - { - "index": 688, - "filename": "splash_3", - "build-id": "ASSET_TEX2D_UNUSED_SPLASH_3", - "folder": "unused" - }, - { - "index": 689, - "filename": "splash_4", - "build-id": "ASSET_TEX2D_UNUSED_SPLASH_4", - "folder": "unused" - }, - { - "index": 690, - "filename": "splash_5", - "build-id": "ASSET_TEX2D_UNUSED_SPLASH_5", - "folder": "unused" - }, - { - "index": 691, - "filename": "splash_6", - "build-id": "ASSET_TEX2D_UNUSED_SPLASH_6", - "folder": "unused" - }, - { - "index": 692, - "filename": "splash_7", - "build-id": "ASSET_TEX2D_UNUSED_SPLASH_7", - "folder": "unused" - }, - { - "index": 693, - "filename": "splash_8", - "build-id": "ASSET_TEX2D_UNUSED_SPLASH_8", - "folder": "unused" - }, - { - "index": 694, - "filename": "splash_9", - "build-id": "ASSET_TEX2D_UNUSED_SPLASH_9", - "folder": "unused" - }, - { - "index": 695, - "filename": "splash_10", - "build-id": "ASSET_TEX2D_UNUSED_SPLASH_10", - "folder": "unused" - }, - { - "index": 696, - "filename": "splash_11", - "build-id": "ASSET_TEX2D_UNUSED_SPLASH_11", - "folder": "unused" - }, - { - "index": 697, - "filename": "splash_12", - "build-id": "ASSET_TEX2D_UNUSED_SPLASH_12", - "folder": "unused" - }, - { - "index": 698, - "filename": "splash_13", - "build-id": "ASSET_TEX2D_UNUSED_SPLASH_13", - "folder": "unused" - }, - { - "index": 699, - "filename": "splash_14", - "build-id": "ASSET_TEX2D_UNUSED_SPLASH_14", - "folder": "unused" - }, - { - "index": 700, - "filename": "splash_15", - "build-id": "ASSET_TEX2D_UNUSED_SPLASH_15", - "folder": "unused" - }, - { - "index": 701, - "filename": "splash_16", - "build-id": "ASSET_TEX2D_UNUSED_SPLASH_16", - "folder": "unused" - }, - { - "index": 702, - "filename": "splash_17", - "build-id": "ASSET_TEX2D_UNUSED_SPLASH_17", - "folder": "unused" - }, - { - "index": 703, - "filename": "splash_18", - "build-id": "ASSET_TEX2D_UNUSED_SPLASH_18", - "folder": "unused" - }, - { - "index": 704, - "filename": "splash_19", - "build-id": "ASSET_TEX2D_UNUSED_SPLASH_19", - "folder": "unused" - }, - { - "index": 705, - "filename": "splash_20", - "build-id": "ASSET_TEX2D_UNUSED_SPLASH_20", - "folder": "unused" - }, - { - "index": 706, - "filename": "splash_21", - "build-id": "ASSET_TEX2D_UNUSED_SPLASH_21", - "folder": "unused" - }, - { - "index": 707, - "filename": "splash_22", - "build-id": "ASSET_TEX2D_UNUSED_SPLASH_22", - "folder": "unused" - }, - { - "index": 708, - "filename": "splash_23", - "build-id": "ASSET_TEX2D_UNUSED_SPLASH_23", - "folder": "unused" - }, - { - "index": 709, - "filename": "weapon_balloon_pop_0", - "build-id": "ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_0", - "folder": "unused" - }, - { - "index": 710, - "filename": "weapon_balloon_pop_1", - "build-id": "ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_1", - "folder": "unused" - }, - { - "index": 711, - "filename": "weapon_balloon_pop_2", - "build-id": "ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_2", - "folder": "unused" - }, - { - "index": 712, - "filename": "weapon_balloon_pop_3", - "build-id": "ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_3", - "folder": "unused" - }, - { - "index": 713, - "filename": "weapon_balloon_pop_4", - "build-id": "ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_4", - "folder": "unused" - }, - { - "index": 714, - "filename": "weapon_balloon_pop_5", - "build-id": "ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_5", - "folder": "unused" - }, - { - "index": 715, - "filename": "weapon_balloon_pop_6", - "build-id": "ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_6", - "folder": "unused" - }, - { - "index": 716, - "filename": "weapon_balloon_pop_7", - "build-id": "ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_7", - "folder": "unused" - }, - { - "index": 717, - "filename": "weapon_balloon_pop_8", - "build-id": "ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_8", - "folder": "unused" - }, - { - "index": 718, - "filename": "weapon_balloon_pop_9", - "build-id": "ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_9", - "folder": "unused" - }, - { - "index": 719, - "filename": "weapon_balloon_pop_10", - "build-id": "ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_10", - "folder": "unused" - }, - { - "index": 720, - "filename": "weapon_balloon_pop_11", - "build-id": "ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_11", - "folder": "unused" - }, - { - "index": 721, - "filename": "weapon_balloon_pop_12", - "build-id": "ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_12", - "folder": "unused" - }, - { - "index": 722, - "filename": "lava_spurt_0", - "build-id": "ASSET_TEX2D_OBJECTS_LAVASPURT_0", - "folder": "objects" - }, - { - "index": 723, - "filename": "lava_spurt_1", - "build-id": "ASSET_TEX2D_OBJECTS_LAVASPURT_1", - "folder": "objects" - }, - { - "index": 724, - "filename": "lava_spurt_2", - "build-id": "ASSET_TEX2D_OBJECTS_LAVASPURT_2", - "folder": "objects" - }, - { - "index": 725, - "filename": "lava_spurt_3", - "build-id": "ASSET_TEX2D_OBJECTS_LAVASPURT_3", - "folder": "objects" - }, - { - "index": 726, - "filename": "lava_spurt_4", - "build-id": "ASSET_TEX2D_OBJECTS_LAVASPURT_4", - "folder": "objects" - }, - { - "index": 727, - "filename": "lava_spurt_5", - "build-id": "ASSET_TEX2D_OBJECTS_LAVASPURT_5", - "folder": "objects" - }, - { - "index": 728, - "filename": "lava_spurt_6", - "build-id": "ASSET_TEX2D_OBJECTS_LAVASPURT_6", - "folder": "objects" - }, - { - "index": 729, - "filename": "lava_spurt_7", - "build-id": "ASSET_TEX2D_OBJECTS_LAVASPURT_7", - "folder": "objects" - }, - { - "index": 730, - "filename": "lava_spurt_8", - "build-id": "ASSET_TEX2D_OBJECTS_LAVASPURT_8", - "folder": "objects" - }, - { - "index": 731, - "filename": "lava_spurt_9", - "build-id": "ASSET_TEX2D_OBJECTS_LAVASPURT_9", - "folder": "objects" - }, - { - "index": 732, - "filename": "lava_spurt_10", - "build-id": "ASSET_TEX2D_OBJECTS_LAVASPURT_10", - "folder": "objects" - }, - { - "index": 733, - "filename": "lava_spurt_11", - "build-id": "ASSET_TEX2D_OBJECTS_LAVASPURT_11", - "folder": "objects" - }, - { - "index": 734, - "filename": "lava_spurt_12", - "build-id": "ASSET_TEX2D_OBJECTS_LAVASPURT_12", - "folder": "objects" - }, - { - "index": 735, - "filename": "unknown_small_pop_0", - "build-id": "ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_0", - "folder": "unknown" - }, - { - "index": 736, - "filename": "unknown_small_pop_1", - "build-id": "ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_1", - "folder": "unknown" - }, - { - "index": 737, - "filename": "unknown_small_pop_2", - "build-id": "ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_2", - "folder": "unknown" - }, - { - "index": 738, - "filename": "unknown_small_pop_3", - "build-id": "ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_3", - "folder": "unknown" - }, - { - "index": 739, - "filename": "unknown_small_pop_4", - "build-id": "ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_4", - "folder": "unknown" - }, - { - "index": 740, - "filename": "unknown_small_pop_5", - "build-id": "ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_5", - "folder": "unknown" - }, - { - "index": 741, - "filename": "unknown_small_pop_6", - "build-id": "ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_6", - "folder": "unknown" - }, - { - "index": 742, - "filename": "unknown_small_pop_7", - "build-id": "ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_7", - "folder": "unknown" - }, - { - "index": 743, - "filename": "unknown_small_pop_8", - "build-id": "ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_8", - "folder": "unknown" - }, - { - "index": 744, - "filename": "unknown_small_pop_9", - "build-id": "ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_9", - "folder": "unknown" - }, - { - "index": 745, - "filename": "unknown_small_pop_10", - "build-id": "ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_10", - "folder": "unknown" - }, - { - "index": 746, - "filename": "unknown_small_pop_11", - "build-id": "ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_11", - "folder": "unknown" - }, - { - "index": 747, - "filename": "unknown_small_pop_12", - "build-id": "ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_12", - "folder": "unknown" - }, - { - "index": 748, - "filename": "unknown_small_pop_13", - "build-id": "ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_13", - "folder": "unknown" - }, - { - "index": 749, - "filename": "tyre0_0", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE0_0", - "folder": "vehicle_parts" - }, - { - "index": 750, - "filename": "tyre0_1", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE0_1", - "folder": "vehicle_parts" - }, - { - "index": 751, - "filename": "tyre0_2", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE0_2", - "folder": "vehicle_parts" - }, - { - "index": 752, - "filename": "tyre0_3", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE0_3", - "folder": "vehicle_parts" - }, - { - "index": 753, - "filename": "tyre0_4", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE0_4", - "folder": "vehicle_parts" - }, - { - "index": 754, - "filename": "tyre0_5", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE0_5", - "folder": "vehicle_parts" - }, - { - "index": 755, - "filename": "tyre0_6", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE0_6", - "folder": "vehicle_parts" - }, - { - "index": 756, - "filename": "tyre0_7", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE0_7", - "folder": "vehicle_parts" - }, - { - "index": 757, - "filename": "tyre0_8", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE0_8", - "folder": "vehicle_parts" - }, - { - "index": 758, - "filename": "tyre0_9", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE0_9", - "folder": "vehicle_parts" - }, - { - "index": 759, - "filename": "tyre0_10", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE0_10", - "folder": "vehicle_parts" - }, - { - "index": 760, - "filename": "tyre0_11", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE0_11", - "folder": "vehicle_parts" - }, - { - "index": 761, - "filename": "tyre0_12", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE0_12", - "folder": "vehicle_parts" - }, - { - "index": 762, - "filename": "tyre0_13", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE0_13", - "folder": "vehicle_parts" - }, - { - "index": 763, - "filename": "tyre0_14", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE0_14", - "folder": "vehicle_parts" - }, - { - "index": 764, - "filename": "tyre0_15", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE0_15", - "folder": "vehicle_parts" - }, - { - "index": 765, - "filename": "tyre1_0", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE1_0", - "folder": "vehicle_parts" - }, - { - "index": 766, - "filename": "tyre1_1", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE1_1", - "folder": "vehicle_parts" - }, - { - "index": 767, - "filename": "tyre1_2", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE1_2", - "folder": "vehicle_parts" - }, - { - "index": 768, - "filename": "tyre1_3", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE1_3", - "folder": "vehicle_parts" - }, - { - "index": 769, - "filename": "tyre1_4", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE1_4", - "folder": "vehicle_parts" - }, - { - "index": 770, - "filename": "tyre1_5", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE1_5", - "folder": "vehicle_parts" - }, - { - "index": 771, - "filename": "tyre1_6", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE1_6", - "folder": "vehicle_parts" - }, - { - "index": 772, - "filename": "tyre1_7", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE1_7", - "folder": "vehicle_parts" - }, - { - "index": 773, - "filename": "tyre1_8", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE1_8", - "folder": "vehicle_parts" - }, - { - "index": 774, - "filename": "tyre1_9", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE1_9", - "folder": "vehicle_parts" - }, - { - "index": 775, - "filename": "tyre1_10", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE1_10", - "folder": "vehicle_parts" - }, - { - "index": 776, - "filename": "tyre1_11", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE1_11", - "folder": "vehicle_parts" - }, - { - "index": 777, - "filename": "tyre1_12", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE1_12", - "folder": "vehicle_parts" - }, - { - "index": 778, - "filename": "tyre1_13", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE1_13", - "folder": "vehicle_parts" - }, - { - "index": 779, - "filename": "tyre1_14", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE1_14", - "folder": "vehicle_parts" - }, - { - "index": 780, - "filename": "tyre1_15", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE1_15", - "folder": "vehicle_parts" - }, - { - "index": 781, - "filename": "tyre2_0", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE2_0", - "folder": "vehicle_parts" - }, - { - "index": 782, - "filename": "tyre2_1", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE2_1", - "folder": "vehicle_parts" - }, - { - "index": 783, - "filename": "tyre2_2", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE2_2", - "folder": "vehicle_parts" - }, - { - "index": 784, - "filename": "tyre2_3", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE2_3", - "folder": "vehicle_parts" - }, - { - "index": 785, - "filename": "tyre2_4", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE2_4", - "folder": "vehicle_parts" - }, - { - "index": 786, - "filename": "tyre2_5", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE2_5", - "folder": "vehicle_parts" - }, - { - "index": 787, - "filename": "tyre2_6", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE2_6", - "folder": "vehicle_parts" - }, - { - "index": 788, - "filename": "tyre2_7", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE2_7", - "folder": "vehicle_parts" - }, - { - "index": 789, - "filename": "tyre2_8", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE2_8", - "folder": "vehicle_parts" - }, - { - "index": 790, - "filename": "tyre2_9", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE2_9", - "folder": "vehicle_parts" - }, - { - "index": 791, - "filename": "tyre2_10", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE2_10", - "folder": "vehicle_parts" - }, - { - "index": 792, - "filename": "tyre2_11", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE2_11", - "folder": "vehicle_parts" - }, - { - "index": 793, - "filename": "tyre2_12", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE2_12", - "folder": "vehicle_parts" - }, - { - "index": 794, - "filename": "tyre2_13", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE2_13", - "folder": "vehicle_parts" - }, - { - "index": 795, - "filename": "tyre2_14", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE2_14", - "folder": "vehicle_parts" - }, - { - "index": 796, - "filename": "tyre2_15", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE2_15", - "folder": "vehicle_parts" - }, - { - "index": 797, - "filename": "tyre3_0", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE3_0", - "folder": "vehicle_parts" - }, - { - "index": 798, - "filename": "tyre3_1", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE3_1", - "folder": "vehicle_parts" - }, - { - "index": 799, - "filename": "tyre3_2", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE3_2", - "folder": "vehicle_parts" - }, - { - "index": 800, - "filename": "tyre3_3", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE3_3", - "folder": "vehicle_parts" - }, - { - "index": 801, - "filename": "tyre3_4", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE3_4", - "folder": "vehicle_parts" - }, - { - "index": 802, - "filename": "tyre3_5", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE3_5", - "folder": "vehicle_parts" - }, - { - "index": 803, - "filename": "tyre3_6", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE3_6", - "folder": "vehicle_parts" - }, - { - "index": 804, - "filename": "tyre3_7", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE3_7", - "folder": "vehicle_parts" - }, - { - "index": 805, - "filename": "tyre3_8", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE3_8", - "folder": "vehicle_parts" - }, - { - "index": 806, - "filename": "tyre3_9", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE3_9", - "folder": "vehicle_parts" - }, - { - "index": 807, - "filename": "tyre3_10", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE3_10", - "folder": "vehicle_parts" - }, - { - "index": 808, - "filename": "tyre3_11", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE3_11", - "folder": "vehicle_parts" - }, - { - "index": 809, - "filename": "tyre3_12", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE3_12", - "folder": "vehicle_parts" - }, - { - "index": 810, - "filename": "tyre3_13", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE3_13", - "folder": "vehicle_parts" - }, - { - "index": 811, - "filename": "tyre3_14", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE3_14", - "folder": "vehicle_parts" - }, - { - "index": 812, - "filename": "tyre3_15", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE3_15", - "folder": "vehicle_parts" - }, - { - "index": 813, - "filename": "fan0_0", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN0_0", - "folder": "vehicle_parts" - }, - { - "index": 814, - "filename": "fan0_1", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN0_1", - "folder": "vehicle_parts" - }, - { - "index": 815, - "filename": "fan0_2", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN0_2", - "folder": "vehicle_parts" - }, - { - "index": 816, - "filename": "fan0_3", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN0_3", - "folder": "vehicle_parts" - }, - { - "index": 817, - "filename": "fan0_4", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN0_4", - "folder": "vehicle_parts" - }, - { - "index": 818, - "filename": "fan0_5", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN0_5", - "folder": "vehicle_parts" - }, - { - "index": 819, - "filename": "fan0_6", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN0_6", - "folder": "vehicle_parts" - }, - { - "index": 820, - "filename": "fan0_7", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN0_7", - "folder": "vehicle_parts" - }, - { - "index": 821, - "filename": "fan0_8", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN0_8", - "folder": "vehicle_parts" - }, - { - "index": 822, - "filename": "fan0_9", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN0_9", - "folder": "vehicle_parts" - }, - { - "index": 823, - "filename": "fan0_10", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN0_10", - "folder": "vehicle_parts" - }, - { - "index": 824, - "filename": "fan0_11", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN0_11", - "folder": "vehicle_parts" - }, - { - "index": 825, - "filename": "fan0_12", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN0_12", - "folder": "vehicle_parts" - }, - { - "index": 826, - "filename": "fan0_13", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN0_13", - "folder": "vehicle_parts" - }, - { - "index": 827, - "filename": "fan0_14", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN0_14", - "folder": "vehicle_parts" - }, - { - "index": 828, - "filename": "fan0_15", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN0_15", - "folder": "vehicle_parts" - }, - { - "index": 829, - "filename": "fan1_0", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN1_0", - "folder": "vehicle_parts" - }, - { - "index": 830, - "filename": "fan1_1", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN1_1", - "folder": "vehicle_parts" - }, - { - "index": 831, - "filename": "fan1_2", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN1_2", - "folder": "vehicle_parts" - }, - { - "index": 832, - "filename": "fan1_3", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN1_3", - "folder": "vehicle_parts" - }, - { - "index": 833, - "filename": "fan1_4", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN1_4", - "folder": "vehicle_parts" - }, - { - "index": 834, - "filename": "fan1_5", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN1_5", - "folder": "vehicle_parts" - }, - { - "index": 835, - "filename": "fan1_6", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN1_6", - "folder": "vehicle_parts" - }, - { - "index": 836, - "filename": "fan1_7", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN1_7", - "folder": "vehicle_parts" - }, - { - "index": 837, - "filename": "fan1_8", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN1_8", - "folder": "vehicle_parts" - }, - { - "index": 838, - "filename": "fan1_9", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN1_9", - "folder": "vehicle_parts" - }, - { - "index": 839, - "filename": "fan1_10", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN1_10", - "folder": "vehicle_parts" - }, - { - "index": 840, - "filename": "fan1_11", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN1_11", - "folder": "vehicle_parts" - }, - { - "index": 841, - "filename": "fan1_12", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN1_12", - "folder": "vehicle_parts" - }, - { - "index": 842, - "filename": "fan1_13", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN1_13", - "folder": "vehicle_parts" - }, - { - "index": 843, - "filename": "fan1_14", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN1_14", - "folder": "vehicle_parts" - }, - { - "index": 844, - "filename": "fan1_15", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN1_15", - "folder": "vehicle_parts" - }, - { - "index": 845, - "filename": "propeller0_0", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_0", - "folder": "vehicle_parts" - }, - { - "index": 846, - "filename": "propeller0_1", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_1", - "folder": "vehicle_parts" - }, - { - "index": 847, - "filename": "propeller0_2", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_2", - "folder": "vehicle_parts" - }, - { - "index": 848, - "filename": "propeller0_3", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_3", - "folder": "vehicle_parts" - }, - { - "index": 849, - "filename": "propeller0_4", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_4", - "folder": "vehicle_parts" - }, - { - "index": 850, - "filename": "propeller0_5", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_5", - "folder": "vehicle_parts" - }, - { - "index": 851, - "filename": "propeller0_6", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_6", - "folder": "vehicle_parts" - }, - { - "index": 852, - "filename": "propeller0_7", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_7", - "folder": "vehicle_parts" - }, - { - "index": 853, - "filename": "propeller0_8", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_8", - "folder": "vehicle_parts" - }, - { - "index": 854, - "filename": "propeller0_9", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_9", - "folder": "vehicle_parts" - }, - { - "index": 855, - "filename": "propeller0_10", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_10", - "folder": "vehicle_parts" - }, - { - "index": 856, - "filename": "propeller0_11", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_11", - "folder": "vehicle_parts" - }, - { - "index": 857, - "filename": "propeller0_12", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_12", - "folder": "vehicle_parts" - }, - { - "index": 858, - "filename": "propeller0_13", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_13", - "folder": "vehicle_parts" - }, - { - "index": 859, - "filename": "propeller0_14", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_14", - "folder": "vehicle_parts" - }, - { - "index": 860, - "filename": "propeller0_15", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_15", - "folder": "vehicle_parts" - }, - { - "index": 861, - "filename": "propeller1_0", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_0", - "folder": "vehicle_parts" - }, - { - "index": 862, - "filename": "propeller1_1", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_1", - "folder": "vehicle_parts" - }, - { - "index": 863, - "filename": "propeller1_2", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_2", - "folder": "vehicle_parts" - }, - { - "index": 864, - "filename": "propeller1_3", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_3", - "folder": "vehicle_parts" - }, - { - "index": 865, - "filename": "propeller1_4", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_4", - "folder": "vehicle_parts" - }, - { - "index": 866, - "filename": "propeller1_5", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_5", - "folder": "vehicle_parts" - }, - { - "index": 867, - "filename": "propeller1_6", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_6", - "folder": "vehicle_parts" - }, - { - "index": 868, - "filename": "propeller1_7", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_7", - "folder": "vehicle_parts" - }, - { - "index": 869, - "filename": "propeller1_8", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_8", - "folder": "vehicle_parts" - }, - { - "index": 870, - "filename": "propeller1_9", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_9", - "folder": "vehicle_parts" - }, - { - "index": 871, - "filename": "propeller1_10", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_10", - "folder": "vehicle_parts" - }, - { - "index": 872, - "filename": "propeller1_11", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_11", - "folder": "vehicle_parts" - }, - { - "index": 873, - "filename": "propeller1_12", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_12", - "folder": "vehicle_parts" - }, - { - "index": 874, - "filename": "propeller1_13", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_13", - "folder": "vehicle_parts" - }, - { - "index": 875, - "filename": "propeller1_14", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_14", - "folder": "vehicle_parts" - }, - { - "index": 876, - "filename": "propeller1_15", - "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_15", - "folder": "vehicle_parts" - }, - { - "index": 877, - "filename": "rare_letters_0", - "build-id": "ASSET_TEX2D_UNUSED_RARELETTERS_0", - "folder": "unused" - }, - { - "index": 878, - "filename": "rare_letters_1", - "build-id": "ASSET_TEX2D_UNUSED_RARELETTERS_1", - "folder": "unused" - }, - { - "index": 879, - "filename": "rare_letters_2", - "build-id": "ASSET_TEX2D_UNUSED_RARELETTERS_2", - "folder": "unused" - }, - { - "index": 880, - "filename": "bolt_glow_0", - "build-id": "ASSET_TEX2D_OBJECTS_BOLTGLOW_0", - "folder": "objects" - }, - { - "index": 881, - "filename": "bolt_glow_1", - "build-id": "ASSET_TEX2D_OBJECTS_BOLTGLOW_1", - "folder": "objects" - }, - { - "index": 882, - "filename": "icon_trophy_not_collected", - "build-id": "ASSET_TEX2D_MENU_ICONTROPHYNOTCOLLECTED", - "folder": "menu" - }, - { - "index": 883, - "filename": "icon_trophy_collected", - "build-id": "ASSET_TEX2D_MENU_ICONTROPHYCOLLECTED", - "folder": "menu" - }, - { - "index": 884, - "filename": "icon_key_not_collected", - "build-id": "ASSET_TEX2D_MENU_ICONKEYNOTCOLLECTED", - "folder": "menu" - }, - { - "index": 885, - "filename": "icon_key_collected", - "build-id": "ASSET_TEX2D_MENU_ICONKEYCOLLECTED", - "folder": "menu" - }, - { - "index": 886, - "filename": "icon_wizpig_amulet0_0", - "build-id": "ASSET_TEX2D_MENU_ICONWIZPIGAMULET0_0", - "folder": "menu" - }, - { - "index": 887, - "filename": "icon_wizpig_amulet0_1", - "build-id": "ASSET_TEX2D_MENU_ICONWIZPIGAMULET0_1", - "folder": "menu" - }, - { - "index": 888, - "filename": "icon_wizpig_amulet1_0", - "build-id": "ASSET_TEX2D_MENU_ICONWIZPIGAMULET1_0", - "folder": "menu" - }, - { - "index": 889, - "filename": "icon_wizpig_amulet1_1", - "build-id": "ASSET_TEX2D_MENU_ICONWIZPIGAMULET1_1", - "folder": "menu" - }, - { - "index": 890, - "filename": "icon_wizpig_amulet2_0", - "build-id": "ASSET_TEX2D_MENU_ICONWIZPIGAMULET2_0", - "folder": "menu" - }, - { - "index": 891, - "filename": "icon_wizpig_amulet2_1", - "build-id": "ASSET_TEX2D_MENU_ICONWIZPIGAMULET2_1", - "folder": "menu" - }, - { - "index": 892, - "filename": "icon_wizpig_amulet3_0", - "build-id": "ASSET_TEX2D_MENU_ICONWIZPIGAMULET3_0", - "folder": "menu" - }, - { - "index": 893, - "filename": "icon_wizpig_amulet3_1", - "build-id": "ASSET_TEX2D_MENU_ICONWIZPIGAMULET3_1", - "folder": "menu" - }, - { - "index": 894, - "filename": "icon_wizpig_amulet4_0", - "build-id": "ASSET_TEX2D_MENU_ICONWIZPIGAMULET4_0", - "folder": "menu" - }, - { - "index": 895, - "filename": "icon_wizpig_amulet4_1", - "build-id": "ASSET_TEX2D_MENU_ICONWIZPIGAMULET4_1", - "folder": "menu" - }, - { - "index": 896, - "filename": "icon_tt_amulet0_0", - "build-id": "ASSET_TEX2D_MENU_ICONTTAMULET0_0", - "folder": "menu" - }, - { - "index": 897, - "filename": "icon_tt_amulet0_1", - "build-id": "ASSET_TEX2D_MENU_ICONTTAMULET0_1", - "folder": "menu" - }, - { - "index": 898, - "filename": "icon_tt_amulet1_0", - "build-id": "ASSET_TEX2D_MENU_ICONTTAMULET1_0", - "folder": "menu" - }, - { - "index": 899, - "filename": "icon_tt_amulet1_1", - "build-id": "ASSET_TEX2D_MENU_ICONTTAMULET1_1", - "folder": "menu" - }, - { - "index": 900, - "filename": "icon_tt_amulet2_0", - "build-id": "ASSET_TEX2D_MENU_ICONTTAMULET2_0", - "folder": "menu" - }, - { - "index": 901, - "filename": "icon_tt_amulet2_1", - "build-id": "ASSET_TEX2D_MENU_ICONTTAMULET2_1", - "folder": "menu" - }, - { - "index": 902, - "filename": "icon_tt_amulet3_0", - "build-id": "ASSET_TEX2D_MENU_ICONTTAMULET3_0", - "folder": "menu" - }, - { - "index": 903, - "filename": "icon_tt_amulet3_1", - "build-id": "ASSET_TEX2D_MENU_ICONTTAMULET3_1", - "folder": "menu" - }, - { - "index": 904, - "filename": "icon_tt_amulet4_0", - "build-id": "ASSET_TEX2D_MENU_ICONTTAMULET4_0", - "folder": "menu" - }, - { - "index": 905, - "filename": "icon_tt_amulet4_1", - "build-id": "ASSET_TEX2D_MENU_ICONTTAMULET4_1", - "folder": "menu" - } - - ] - }, - { - "build-id": "ASSET_TEXTURES_2D_TABLE", - "type": "Table", - "for": "ASSET_TEXTURES_2D" - }, - { - "build-id": "ASSET_GAME_TEXT", - "type": "GameText", - "folder": "text/game", - "table": 7, - "group": 1 - }, - { - "build-id": "ASSET_GAME_TEXT_TABLE", - "type": "Table", - "for": "ASSET_GAME_TEXT" - }, - { - "build-id": "ASSET_MENU_TEXT", - "type": "MenuText", - "folder": "text/menu", - "table": 9, - "files": [ - { - "index": 0, - "filename": "english_menu_text", - "build-id": "ASSET_MENU_TEXT_ENGLISH" - }, - { - "index": 1, - "filename": "french_menu_text", - "build-id": "ASSET_MENU_TEXT_FRENCH" - }, - { - "index": 2, - "filename": "german_menu_text", - "build-id": "ASSET_MENU_TEXT_GERMAN" - }, - { - "index": 3, - "filename": "japanese_menu_text", - "build-id": "ASSET_MENU_TEXT_JAPANESE" - } - ], - "language-order": [ - "LANGUAGE_ENGLISH", - "LANGUAGE_FRENCH", - "LANGUAGE_GERMAN", - "LANGUAGE_JAPANESE" - ], - "menu-text-build-ids": [ - "ASSET_MENU_TEXT_STEREO", - "ASSET_MENU_TEXT_MONO", - "ASSET_MENU_TEXT_HEADPHONES", - "ASSET_MENU_TEXT_SFXVOLUME", - "ASSET_MENU_TEXT_MUSICVOLUME", - "ASSET_MENU_TEXT_RETURN", - "ASSET_MENU_TEXT_AUDIOOPTIONS", - "ASSET_MENU_TEXT_MUSICTEST", - "ASSET_MENU_TEXT_ENTERINITIALS", - "ASSET_MENU_TEXT_BESTTIME", - "ASSET_MENU_TEXT_BESTLAP", - "ASSET_MENU_TEXT_SILVERCOIN", - "ASSET_MENU_TEXT_GOLDCOIN", - "ASSET_MENU_TEXT_CHALLENGE", - "ASSET_MENU_TEXT_ENTERCODE", - "ASSET_MENU_TEXT_CLEARALLCODES", - "ASSET_MENU_TEXT_CODELIST", - "ASSET_MENU_TEXT_MAGICCODES", - "ASSET_MENU_TEXT_BADCODE", - "ASSET_MENU_TEXT_ALLCODESDELETED", - "ASSET_MENU_TEXT_MAGICCODESLIST", - "ASSET_MENU_TEXT_ON", - "ASSET_MENU_TEXT_OFF", - "ASSET_MENU_TEXT_TRYAGAIN", - "ASSET_MENU_TEXT_SELECTTRACK", - "ASSET_MENU_TEXT_RETURNTOLOBBY", - "ASSET_MENU_TEXT_SELECTCHARACTER", - "ASSET_MENU_TEXT_SAVEGHOST", - "ASSET_MENU_TEXT_QUIT", - "ASSET_MENU_TEXT_LAPTIMES", - "ASSET_MENU_TEXT_OVERALLTIME", - "ASSET_MENU_TEXT_RACEORDER", - "ASSET_MENU_TEXT_RECORDTIMES", - "ASSET_MENU_TEXT_RANKINGS", - "ASSET_MENU_TEXT_LANGUAGE", - "ASSET_MENU_TEXT_CONTPAK", - "ASSET_MENU_TEXT_OPTIONS", - "ASSET_MENU_TEXT_CHANGEVEHICLE", - "ASSET_MENU_TEXT_HELP", - "ASSET_MENU_TEXT_CHALLENGES", - "ASSET_MENU_TEXT_VEHICLESELECT", - "ASSET_MENU_TEXT_CAR", - "ASSET_MENU_TEXT_HOVERCRAFT", - "ASSET_MENU_TEXT_PLANE", - "ASSET_MENU_TEXT_MAINMENU", - "ASSET_MENU_TEXT_CHALLENGESELECT", - "ASSET_MENU_TEXT_CARCHALLENGE", - "ASSET_MENU_TEXT_HOVERCHALLENGE", - "ASSET_MENU_TEXT_PLANECHALLENGE", - "ASSET_MENU_TEXT_LOSETOTAJ_0", - "ASSET_MENU_TEXT_LOSETOTAJ_1", - "ASSET_MENU_TEXT_EXIT", - "ASSET_MENU_TEXT_TTINTRO_0", - "ASSET_MENU_TEXT_TTINTRO_1", - "ASSET_MENU_TEXT_TTINTRO_2", - "ASSET_MENU_TEXT_TTINTRO_3", - "ASSET_MENU_TEXT_TTINTRO_4", - "ASSET_MENU_TEXT_TTINTRO_5", - "ASSET_MENU_TEXT_TTINTRO_6", - "ASSET_MENU_TEXT_TTINTRO_7", - "ASSET_MENU_TEXT_TTINTRO_8", - "ASSET_MENU_TEXT_TTINTRO_9", - "ASSET_MENU_TEXT_TTINTRO_10", - "ASSET_MENU_TEXT_TTINTRO_11", - "ASSET_MENU_TEXT_PAKERROR", - "ASSET_MENU_TEXT_TIMETRIALON", - "ASSET_MENU_TEXT_TIMETRIALOFF", - "ASSET_MENU_TEXT_NOCONTPAK", - "ASSET_MENU_TEXT_CONTPAKFULL", - "ASSET_MENU_TEXT_BADCONTPAK", - "ASSET_MENU_TEXT_TROPHYRACE", - "ASSET_MENU_TEXT_STATUS", - "ASSET_MENU_TEXT_GAMEA", - "ASSET_MENU_TEXT_GAMEB", - "ASSET_MENU_TEXT_GAMEC", - "ASSET_MENU_TEXT_NEW", - "ASSET_MENU_TEXT_GAMESELECT", - "ASSET_MENU_TEXT_GAMETOCOPY", - "ASSET_MENU_TEXT_GAMETOCOPYTO", - "ASSET_MENU_TEXT_GAMETOERASE", - "ASSET_MENU_TEXT_COPY", - "ASSET_MENU_TEXT_ERASE", - "ASSET_MENU_TEXT_GHOSTDATA", - "ASSET_MENU_TEXT_NOGHOSTSSAVED", - "ASSET_MENU_TEXT_ERASEGHOST", - "ASSET_MENU_TEXT_CANCEL", - "ASSET_MENU_TEXT_CONTPAK1", - "ASSET_MENU_TEXT_CONTPAK2", - "ASSET_MENU_TEXT_CONTPAK3", - "ASSET_MENU_TEXT_CONTPAK4", - "ASSET_MENU_TEXT_CONTPAKX", - "ASSET_MENU_TEXT_CONTPAKNOTPRESENT", - "ASSET_MENU_TEXT_CONTPAKTRYAGAIN", - "ASSET_MENU_TEXT_CONTPAKHASCORRUPTDATA_0", - "ASSET_MENU_TEXT_CONTPAKHASCORRUPTDATA_1", - "ASSET_MENU_TEXT_CONTPAKISDAMAGED_0", - "ASSET_MENU_TEXT_CONTPAKISDAMAGED_1", - "ASSET_MENU_TEXT_CONTPAKISFULL", - "ASSET_MENU_TEXT_CONTINUE", - "ASSET_MENU_TEXT_CONTPAKDIFFERENT_0", - "ASSET_MENU_TEXT_CONTPAKDIFFERENT_1", - "ASSET_MENU_TEXT_CONTPAKRETRY", - "ASSET_MENU_TEXT_CANNOTSTOREANYMOREGHOSTS_0", - "ASSET_MENU_TEXT_CANNOTSTOREANYMOREGHOSTS_1", - "ASSET_MENU_TEXT_ADVTWOLOADERROR_0", - "ASSET_MENU_TEXT_ADVTWOLOADERROR_1", - "ASSET_MENU_TEXT_ADVTWOLOADERROR_2", - "ASSET_MENU_TEXT_ADVTWOLOADERROR_3", - "ASSET_MENU_TEXT_ADVTWOLOADERROR_4", - "ASSET_MENU_TEXT_ADVTWOLOADERROR_5", - "ASSET_MENU_TEXT_PAKNOTES", - "ASSET_MENU_TEXT_DELETENOTEX", - "ASSET_MENU_TEXT_DELETE", - "ASSET_MENU_TEXT_CANCELDELETE", - "ASSET_MENU_TEXT_FREEPAGESX", - "ASSET_MENU_TEXT_NOTE", - "ASSET_MENU_TEXT_FILENAME", - "ASSET_MENU_TEXT_PAGES", - "ASSET_MENU_TEXT_MORE", - "ASSET_MENU_TEXT_GAMEPAK", - "ASSET_MENU_TEXT_TIMES", - "ASSET_MENU_TEXT_GHOSTS", - "ASSET_MENU_TEXT_EMPTYSLOT", - "ASSET_MENU_TEXT_VIEWGHOSTS", - "ASSET_MENU_TEXT_PLEASEWAIT", - "ASSET_MENU_TEXT_GAMEERROR", - "ASSET_MENU_TEXT_RESTARTRACE", - "ASSET_MENU_TEXT_RESTARTCHALLENGE", - "ASSET_MENU_TEXT_ABANDONCHALLENGE", - "ASSET_MENU_TEXT_QUITTROPHYRACE", - "ASSET_MENU_TEXT_QUITTROPHYRACETITLE", - "ASSET_MENU_TEXT_QUITGAME", - "ASSET_MENU_TEXT_QUITGAMETITLE", - "ASSET_MENU_TEXT_PAUSEOPTIONS", - "ASSET_MENU_TEXT_OK", - "ASSET_MENU_TEXT_PLAYERSELECT", - "ASSET_MENU_TEXT_NUMBEROFRACERS", - "ASSET_MENU_TEXT_START", - "ASSET_MENU_TEXT_ROUNDONE", - "ASSET_MENU_TEXT_ROUNDTWO", - "ASSET_MENU_TEXT_ROUNDTHREE", - "ASSET_MENU_TEXT_ROUNDFOUR", - "ASSET_MENU_TEXT_ADVENTURE", - "ASSET_MENU_TEXT_ADVENTURETWO", - "ASSET_MENU_TEXT_TRACKS", - "ASSET_MENU_TEXT_TROPHYCEREMONY", - "ASSET_MENU_TEXT_ADVENTURE2", - "ASSET_MENU_TEXT_ADVENTURETWO2", - "ASSET_MENU_TEXT_CLEARALLCODESTITLE", - "ASSET_MENU_TEXT_CLEARALLCODESCONFIRM", - "ASSET_MENU_TEXT_CLEARALLCODESCANCEL", - "ASSET_MENU_TEXT_CONTROLLERNOTCONNECTED", - "ASSET_MENU_TEXT_CAUTION", - "ASSET_MENU_TEXT_RUMBLEPAKDETECTED_0", - "ASSET_MENU_TEXT_RUMBLEPAKDETECTED_1", - "ASSET_MENU_TEXT_RUMBLEPAKDETECTED_2", - "ASSET_MENU_TEXT_INSERTDEVICE_0", - "ASSET_MENU_TEXT_INSERTDEVICE_1", - "ASSET_MENU_TEXT_INSERTDEVICE_2", - "ASSET_MENU_TEXT_INSERTDEVICE_3", - "ASSET_MENU_TEXT_INSERTDEVICE_4", - "ASSET_MENU_TEXT_INSERTDEVICE_5", - "ASSET_MENU_TEXT_INSERTDEVICE_6", - "ASSET_MENU_TEXT_TURNOFFN64_0", - "ASSET_MENU_TEXT_TURNOFFN64_1", - "ASSET_MENU_TEXT_SAVEOPTIONS", - "ASSET_MENU_TEXT_CAUTIONMESSAGE_0", - "ASSET_MENU_TEXT_CAUTIONMESSAGE_1", - "ASSET_MENU_TEXT_CAUTIONMESSAGE_2", - "ASSET_MENU_TEXT_CAUTIONMESSAGE_3", - "ASSET_MENU_TEXT_CAUTIONMESSAGE_4", - "ASSET_MENU_TEXT_CAUTIONMESSAGE_5", - "ASSET_MENU_TEXT_CAUTIONMESSAGE_6", - "ASSET_MENU_TEXT_CAUTIONMESSAGE_7", - "ASSET_MENU_TEXT_CAUTIONMESSAGE_8", - "ASSET_MENU_TEXT_CAUTIONMESSAGE_9", - "ASSET_MENU_TEXT_CAUTIONMESSAGE_10", - "ASSET_MENU_TEXT_CANNOTSAVEGHOSTDATA_0", - "ASSET_MENU_TEXT_CANNOTSAVEGHOSTDATA_1", - "ASSET_MENU_TEXT_CANNOTSAVEGHOSTDATA_2", - "ASSET_MENU_TEXT_ENTERTROPHYRACE", - "ASSET_MENU_TEXT_GAMEPAKBONUSES", - "ASSET_MENU_TEXT_SUBTITLESON", - "ASSET_MENU_TEXT_SUBTITLESOFF", - "ASSET_MENU_TEXT_CORRUPTDATA_0", - "ASSET_MENU_TEXT_CORRUPTDATA_1" - ] - }, - { - "build-id": "ASSET_MENU_TEXT_TABLE", - "type": "Table", - "for": "ASSET_MENU_TEXT" - }, - { - "build-id": "ASSET_SCREENS", - "type": "Binary", - "folder": "screens", - "table": 11 - }, - { - "build-id": "ASSET_SCREENS_TABLE", - "type": "Table", - "for": "ASSET_SCREENS" - }, - { - "build-id": "ASSET_SPRITES", - "type": "Sprite", - "folder": "sprites", - "table": 13, - "files-default-folder": "unlabeled", - "default-build-id-prefix": "ASSET_SPRITE_", - "files": [ - { - "index": 0, - "filename": "fossil_canyon", - "build-id": "ASSET_SPRITE_MINIMAP_FOSSILCANYON", - "folder": "minimap" - }, - { - "index": 1, - "filename": "ancient_lake", - "build-id": "ASSET_SPRITE_MINIMAP_ANCIENTLAKE", - "folder": "minimap" - }, - { - "index": 2, - "filename": "pirate_lagoon", - "build-id": "ASSET_SPRITE_MINIMAP_PIRATELAGOON", - "folder": "minimap" - }, - { - "index": 3, - "filename": "whale_bay", - "build-id": "ASSET_SPRITE_MINIMAP_WHALEBAY", - "folder": "minimap" - }, - { - "index": 4, - "filename": "snowball_valley", - "build-id": "ASSET_SPRITE_MINIMAP_SNOWBALLVALLEY", - "folder": "minimap" - }, - { - "index": 5, - "filename": "hot_top_volcano", - "build-id": "ASSET_SPRITE_MINIMAP_HOTTOPVOLCANO", - "folder": "minimap" - }, - { - "index": 6, - "filename": "crescent_island", - "build-id": "ASSET_SPRITE_MINIMAP_CRESCENTISLAND", - "folder": "minimap" - }, - { - "index": 7, - "filename": "unused", - "build-id": "ASSET_SPRITE_MINIMAP_UNUSED", - "folder": "minimap" - }, - { - "index": 8, - "filename": "everfrost_peak", - "build-id": "ASSET_SPRITE_MINIMAP_EVERFROSTPEAK", - "folder": "minimap" - }, - { - "index": 9, - "filename": "unused2", - "build-id": "ASSET_SPRITE_MINIMAP_UNUSED2", - "folder": "minimap" - }, - { - "index": 10, - "filename": "walrus_cove", - "build-id": "ASSET_SPRITE_MINIMAP_WALRUSCOVE", - "folder": "minimap" - }, - { - "index": 11, - "filename": "unused3", - "build-id": "ASSET_SPRITE_MINIMAP_UNUSED3", - "folder": "minimap" - }, - { - "index": 12, - "filename": "boulder_canyon", - "build-id": "ASSET_SPRITE_MINIMAP_BOULDERCANYON", - "folder": "minimap" - }, - { - "index": 13, - "filename": "smokey_castle", - "build-id": "ASSET_SPRITE_MINIMAP_SMOKEYCASTLE", - "folder": "minimap" - }, - { - "index": 14, - "filename": "central_area", - "build-id": "ASSET_SPRITE_MINIMAP_CENTRALAREA", - "folder": "minimap" - }, - { - "index": 15, - "filename": "fire_mountain", - "build-id": "ASSET_SPRITE_MINIMAP_FIREMOUNTAIN", - "folder": "minimap" - }, - { - "index": 16, - "filename": "space_port_alpha", - "build-id": "ASSET_SPRITE_MINIMAP_SPACEPORTALPHA", - "folder": "minimap" - }, - { - "index": 17, - "filename": "spacedust_alley", - "build-id": "ASSET_SPRITE_MINIMAP_SPACEDUSTALLEY", - "folder": "minimap" - }, - { - "index": 18, - "filename": "treasure_caves", - "build-id": "ASSET_SPRITE_MINIMAP_TREASURECAVES", - "folder": "minimap" - }, - { - "index": 19, - "filename": "greenwood_village", - "build-id": "ASSET_SPRITE_MINIMAP_GREENWOODVILLAGE", - "folder": "minimap" - }, - { - "index": 20, - "filename": "darkmoon_caverns", - "build-id": "ASSET_SPRITE_MINIMAP_DARKMOONCAVERNS", - "folder": "minimap" - }, - { - "index": 21, - "filename": "star_city", - "build-id": "ASSET_SPRITE_MINIMAP_STARCITY", - "folder": "minimap" - }, - { - "index": 22, - "filename": "windmill_plains", - "build-id": "ASSET_SPRITE_MINIMAP_WINDMILLPLAINS", - "folder": "minimap" - }, - { - "index": 23, - "filename": "frosty_village", - "build-id": "ASSET_SPRITE_MINIMAP_FROSTYVILLAGE", - "folder": "minimap" - }, - { - "index": 24, - "filename": "darkwater_beach", - "build-id": "ASSET_SPRITE_MINIMAP_DARKWATERBEACH", - "folder": "minimap" - }, - { - "index": 25, - "filename": "jungle_falls", - "build-id": "ASSET_SPRITE_MINIMAP_JUNGLEFALLS", - "folder": "minimap" - }, - { - "index": 26, - "filename": "icicle_pyramid", - "build-id": "ASSET_SPRITE_MINIMAP_ICICLEPYRAMID", - "folder": "minimap" - }, - { - "index": 27, - "filename": "haunted_woods", - "build-id": "ASSET_SPRITE_MINIMAP_HAUNTEDWOODS", - "folder": "minimap" - }, - { - "index": 28, - "filename": "bluey", - "build-id": "ASSET_SPRITE_MINIMAP_BLUEY", - "folder": "minimap" - }, - { - "index": 29, - "filename": "bubbler", - "build-id": "ASSET_SPRITE_MINIMAP_BUBBLER", - "folder": "minimap" - }, - { - "index": 30, - "filename": "smokey", - "build-id": "ASSET_SPRITE_MINIMAP_SMOKEY", - "folder": "minimap" - }, - { - "index": 31, - "filename": "trickytops", - "build-id": "ASSET_SPRITE_MINIMAP_TRICKYTOPS", - "folder": "minimap" - }, - { - "index": 32, - "filename": "wizpig1", - "build-id": "ASSET_SPRITE_MINIMAP_WIZPIG1", - "folder": "minimap" - }, - { - "index": 33, - "filename": "wizpig2", - "build-id": "ASSET_SPRITE_MINIMAP_WIZPIG2", - "folder": "minimap" - }, - { - "index": 34, - "filename": "rain_drop", - "build-id": "ASSET_SPRITE_WEATHER_RAINDROP", - "folder": "weather" - }, - { - "index": 35, - "filename": "snowflake", - "build-id": "ASSET_SPRITE_WEATHER_SNOWFLAKE", - "folder": "weather" - }, - { - "index": 36, - "filename": "lensflare1", - "build-id": "ASSET_SPRITE_OBJECTS_LENSFLARE1", - "folder": "objects" - }, - { - "index": 37, - "filename": "lensflare2", - "build-id": "ASSET_SPRITE_OBJECTS_LENSFLARE2", - "folder": "objects" - }, - { - "index": 38, - "filename": "lensflare3", - "build-id": "ASSET_SPRITE_OBJECTS_LENSFLARE3", - "folder": "objects" - }, - { - "index": 39, - "filename": "brown_egg", - "build-id": "ASSET_SPRITE_UNKNOWN_BROWNEGG", - "folder": "unknown" - }, - { - "index": 40, - "filename": "smoke", - "build-id": "ASSET_SPRITE_PARTICLES_SMOKE", - "folder": "particles" - }, - { - "index": 41, - "filename": "smoke2", - "build-id": "ASSET_SPRITE_PARTICLES_SMOKE2", - "folder": "particles" - }, - { - "index": 42, - "filename": "bubbles_small", - "build-id": "ASSET_SPRITE_PARTICLES_BUBBLESSMALL", - "folder": "particles" - }, - { - "index": 43, - "filename": "smoke3", - "build-id": "ASSET_SPRITE_PARTICLES_SMOKE3", - "folder": "particles" - }, - { - "index": 44, - "filename": "bubble_weapon", - "build-id": "ASSET_SPRITE_OBJECTS_BUBBLEWEAPON", - "folder": "objects" - }, - { - "index": 45, - "filename": "sparkle", - "build-id": "ASSET_SPRITE_OBJECTS_SPARKLE", - "folder": "objects" - }, - { - "index": 46, - "filename": "bomb_explosion_blue", - "build-id": "ASSET_SPRITE_OBJECTS_BOMBEXPLOSIONBLUE", - "folder": "objects" - }, - { - "index": 47, - "filename": "bomb_explosion_yellow", - "build-id": "ASSET_SPRITE_OBJECTS_BOMBEXPLOSIONYELLOW", - "folder": "objects" - }, - { - "index": 48, - "filename": "bomb_explosion_red", - "build-id": "ASSET_SPRITE_OBJECTS_BOMBEXPLOSIONRED", - "folder": "objects" - }, - { - "index": 49, - "filename": "bomb_explosion_green", - "build-id": "ASSET_SPRITE_OBJECTS_BOMBEXPLOSIONGREEN", - "folder": "objects" - }, - { - "index": 50, - "filename": "bomb_explosion_cyan", - "build-id": "ASSET_SPRITE_OBJECTS_BOMBEXPLOSIONCYAN", - "folder": "objects" - }, - { - "index": 51, - "filename": "bomb_explosion_white", - "build-id": "ASSET_SPRITE_OBJECTS_BOMBEXPLOSIONWHITE", - "folder": "objects" - }, - { - "index": 52, - "filename": "bomb_explosion_orange", - "build-id": "ASSET_SPRITE_OBJECTS_BOMBEXPLOSIONORANGE", - "folder": "objects" - }, - { - "index": 53, - "filename": "bomb_explosion_purple", - "build-id": "ASSET_SPRITE_OBJECTS_BOMBEXPLOSIONPURPLE", - "folder": "objects" - }, - { - "index": 54, - "filename": "rainbow", - "build-id": "ASSET_SPRITE_OBJECTS_RAINBOW", - "folder": "objects" - }, - { - "index": 55, - "filename": "egg", - "build-id": "ASSET_SPRITE_OBJECTS_EGG", - "folder": "objects" - }, - { - "index": 56, - "filename": "bomb", - "build-id": "ASSET_SPRITE_OBJECTS_BOMB", - "folder": "objects" - }, - { - "index": 57, - "filename": "oil_slick", - "build-id": "ASSET_SPRITE_OBJECTS_OILSLICK", - "folder": "objects" - }, - { - "index": 58, - "filename": "eyes_in_dark", - "build-id": "ASSET_SPRITE_OBJECTS_EYESINDARK", - "folder": "objects" - }, - { - "index": 59, - "filename": "timer_colon", - "build-id": "ASSET_SPRITE_HUD_TIMERCOLON", - "folder": "hud" - }, - { - "index": 60, - "filename": "retical_homing", - "build-id": "ASSET_SPRITE_HUD_RETICALHOMING", - "folder": "hud" - }, - { - "index": 61, - "filename": "debug_red_sphere", - "build-id": "ASSET_SPRITE_OBJECTS_DEBUGREDSPHERE", - "folder": "objects" - }, - { - "index": 62, - "filename": "finish", - "build-id": "ASSET_SPRITE_HUD_FINISH", - "folder": "hud" - }, - { - "index": 63, - "filename": "get_ready", - "build-id": "ASSET_SPRITE_HUD_GETREADY", - "folder": "hud" - }, - { - "index": 64, - "filename": "go", - "build-id": "ASSET_SPRITE_HUD_GO", - "folder": "hud" - }, - { - "index": 65, - "filename": "lap", - "build-id": "ASSET_SPRITE_HUD_LAP", - "folder": "hud" - }, - { - "index": 66, - "filename": "forward_slash", - "build-id": "ASSET_SPRITE_HUD_FORWARDSLASH", - "folder": "hud" - }, - { - "index": 67, - "filename": "time", - "build-id": "ASSET_SPRITE_HUD_TIME", - "folder": "hud" - }, - { - "index": 68, - "filename": "place_numbers", - "build-id": "ASSET_SPRITE_HUD_PLACENUMBERS", - "folder": "hud" - }, - { - "index": 69, - "filename": "timer_numbers", - "build-id": "ASSET_SPRITE_HUD_TIMERNUMBERS", - "folder": "hud" - }, - { - "index": 70, - "filename": "timer_color_small", - "build-id": "ASSET_SPRITE_HUD_TIMERCOLORSMALL", - "folder": "hud" - }, - { - "index": 71, - "filename": "timer_numbers_small", - "build-id": "ASSET_SPRITE_HUD_TIMERNUMBERSSMALL", - "folder": "hud" - }, - { - "index": 72, - "filename": "go_small", - "build-id": "ASSET_SPRITE_HUD_GOSMALL", - "folder": "hud" - }, - { - "index": 73, - "filename": "lap_small", - "build-id": "ASSET_SPRITE_HUD_LAPSMALL", - "folder": "hud" - }, - { - "index": 74, - "filename": "get_ready2", - "build-id": "ASSET_SPRITE_HUD_GETREADY2", - "folder": "hud" - }, - { - "index": 75, - "filename": "final_small", - "build-id": "ASSET_SPRITE_HUD_FINALSMALL", - "folder": "hud" - }, - { - "index": 76, - "filename": "finish_small", - "build-id": "ASSET_SPRITE_HUD_FINISHSMALL", - "folder": "hud" - }, - { - "index": 77, - "filename": "lap2_small", - "build-id": "ASSET_SPRITE_HUD_LAP2SMALL", - "folder": "hud" - }, - { - "index": 78, - "filename": "way_small", - "build-id": "ASSET_SPRITE_HUD_WAYSMALL", - "folder": "hud" - }, - { - "index": 79, - "filename": "wrong_small", - "build-id": "ASSET_SPRITE_HUD_WRONGSMALL", - "folder": "hud" - }, - { - "index": 80, - "filename": "position_arrow", - "build-id": "ASSET_SPRITE_OBJECTS_POSITIONARROW", - "folder": "objects" - }, - { - "index": 81, - "filename": "golden_balloon_icon", - "build-id": "ASSET_SPRITE_HUD_GOLDENBALLOONICON", - "folder": "hud" - }, - { - "index": 82, - "filename": "silver_balloon_icon", - "build-id": "ASSET_SPRITE_HUD_SILVERBALLOONICON", - "folder": "hud" - }, - { - "index": 83, - "filename": "level_name", - "build-id": "ASSET_SPRITE_OBJECTS_LEVELNAME", - "folder": "objects" - }, - { - "index": 84, - "filename": "npc", - "build-id": "ASSET_SPRITE_MINIMAP_NPC", - "folder": "minimap" - }, - { - "index": 85, - "filename": "player", - "build-id": "ASSET_SPRITE_MINIMAP_PLAYER", - "folder": "minimap" - }, - { - "index": 86, - "filename": "weapon_icons", - "build-id": "ASSET_SPRITE_HUD_WEAPONICONS", - "folder": "hud" - }, - { - "index": 87, - "filename": "weapon_icon_numbers", - "build-id": "ASSET_SPRITE_HUD_WEAPONICONNUMBERS", - "folder": "hud" - }, - { - "index": 88, - "filename": "beta_character_icon", - "build-id": "ASSET_SPRITE_UNUSED_BETACHARACTERICON", - "folder": "unused" - }, - { - "index": 89, - "filename": "final_lap_flag", - "build-id": "ASSET_SPRITE_HUD_FINALLAPFLAG", - "folder": "hud" - }, - { - "index": 90, - "filename": "final", - "build-id": "ASSET_SPRITE_HUD_FINAL", - "folder": "hud" - }, - { - "index": 91, - "filename": "lap_large", - "build-id": "ASSET_SPRITE_HUD_LAPLARGE", - "folder": "hud" - }, - { - "index": 92, - "filename": "lap2_2", - "build-id": "ASSET_SPRITE_HUD_LAP22", - "folder": "hud" - }, - { - "index": 93, - "filename": "way", - "build-id": "ASSET_SPRITE_HUD_WAY", - "folder": "hud" - }, - { - "index": 94, - "filename": "wrong", - "build-id": "ASSET_SPRITE_HUD_WRONG", - "folder": "hud" - }, - { - "index": 95, - "filename": "pro_am_logo", - "build-id": "ASSET_SPRITE_UNUSED_PROAMLOGO", - "folder": "unused" - }, - { - "index": 96, - "filename": "speedometer_arrow", - "build-id": "ASSET_SPRITE_HUD_SPEEDOMETERARROW", - "folder": "hud" - }, - { - "index": 97, - "filename": "first_place_one", - "build-id": "ASSET_SPRITE_HUD_FIRSTPLACEONE", - "folder": "hud" - }, - { - "index": 98, - "filename": "first_place_st", - "build-id": "ASSET_SPRITE_HUD_FIRSTPLACEST", - "folder": "hud" - }, - { - "index": 99, - "filename": "balloon_string", - "build-id": "ASSET_SPRITE_OBJECTS_BALLOONSTRING", - "folder": "objects" - }, - { - "index": 100, - "filename": "fireball_unknown", - "build-id": "ASSET_SPRITE_UNKNOWN_FIREBALLUNKNOWN", - "folder": "unknown" - }, - { - "index": 101, - "filename": "fireball", - "build-id": "ASSET_SPRITE_OBJECTS_FIREBALL", - "folder": "objects" - }, - { - "index": 102, - "filename": "wizghost", - "build-id": "ASSET_SPRITE_OBJECTS_WIZGHOST", - "folder": "objects" - }, - { - "index": 103, - "filename": "unknown_light", - "build-id": "ASSET_SPRITE_UNKNOWN_UNKNOWNLIGHT", - "folder": "unknown" - }, - { - "index": 104, - "filename": "small_star", - "build-id": "ASSET_SPRITE_UNKNOWN_SMALLSTAR", - "folder": "unknown" - }, - { - "index": 105, - "filename": "buoy", - "build-id": "ASSET_SPRITE_OBJECTS_BUOY", - "folder": "objects" - }, - { - "index": 106, - "filename": "smartie_tree", - "build-id": "ASSET_SPRITE_OBJECTS_SMARTIETREE", - "folder": "objects" - }, - { - "index": 107, - "filename": "beach_tree", - "build-id": "ASSET_SPRITE_OBJECTS_BEACHTREE", - "folder": "objects" - }, - { - "index": 108, - "filename": "blue_berry_bush", - "build-id": "ASSET_SPRITE_OBJECTS_BLUEBERRYBUSH", - "folder": "objects" - }, - { - "index": 109, - "filename": "rubber_snow_tree", - "build-id": "ASSET_SPRITE_OBJECTS_RUBBERSNOWTREE", - "folder": "objects" - }, - { - "index": 110, - "filename": "skinny_snow_tree", - "build-id": "ASSET_SPRITE_OBJECTS_SKINNYSNOWTREE", - "folder": "objects" - }, - { - "index": 111, - "filename": "xmas_tree", - "build-id": "ASSET_SPRITE_OBJECTS_XMASTREE", - "folder": "objects" - }, - { - "index": 112, - "filename": "alpine_snow_tree", - "build-id": "ASSET_SPRITE_OBJECTS_ALPINESNOWTREE", - "folder": "objects" - }, - { - "index": 113, - "filename": "rubber_tree", - "build-id": "ASSET_SPRITE_OBJECTS_RUBBERTREE", - "folder": "objects" - }, - { - "index": 114, - "filename": "palm_tree_top", - "build-id": "ASSET_SPRITE_OBJECTS_PALMTREETOP", - "folder": "objects" - }, - { - "index": 115, - "filename": "palm_plant", - "build-id": "ASSET_SPRITE_OBJECTS_PALMPLANT", - "folder": "objects" - }, - { - "index": 116, - "filename": "palm_tree_top_chea", - "build-id": "ASSET_SPRITE_OBJECTS_PALMTREETOPCHEA", - "folder": "objects" - }, - { - "index": 117, - "filename": "fir_tree", - "build-id": "ASSET_SPRITE_OBJECTS_FIRTREE", - "folder": "objects" - }, - { - "index": 118, - "filename": "space_tree", - "build-id": "ASSET_SPRITE_OBJECTS_SPACETREE", - "folder": "objects" - }, - { - "index": 119, - "filename": "lamp_post", - "build-id": "ASSET_SPRITE_OBJECTS_LAMPPOST", - "folder": "objects" - }, - { - "index": 120, - "filename": "white_buttercup", - "build-id": "ASSET_SPRITE_FLOWERS_WHITEBUTTERCUP", - "folder": "flowers" - }, - { - "index": 121, - "filename": "yellow_bellflower", - "build-id": "ASSET_SPRITE_FLOWERS_YELLOWBELLFLOWER", - "folder": "flowers" - }, - { - "index": 122, - "filename": "yellow_buttercup", - "build-id": "ASSET_SPRITE_FLOWERS_YELLOWBUTTERCUP", - "folder": "flowers" - }, - { - "index": 123, - "filename": "blue_buttercup", - "build-id": "ASSET_SPRITE_FLOWERS_BLUEBUTTERCUP", - "folder": "flowers" - }, - { - "index": 124, - "filename": "water_lily", - "build-id": "ASSET_SPRITE_FLOWERS_WATERLILY", - "folder": "flowers" - }, - { - "index": 125, - "filename": "reed_no_leaf", - "build-id": "ASSET_SPRITE_OBJECTS_REEDNOLEAF", - "folder": "objects" - }, - { - "index": 126, - "filename": "reed_leaves", - "build-id": "ASSET_SPRITE_OBJECTS_REEDLEAVES", - "folder": "objects" - }, - { - "index": 127, - "filename": "read_one_leaf", - "build-id": "ASSET_SPRITE_OBJECTS_READONELEAF", - "folder": "objects" - }, - { - "index": 128, - "filename": "snowman_tophat", - "build-id": "ASSET_SPRITE_OBJECTS_SNOWMANTOPHAT", - "folder": "objects" - }, - { - "index": 129, - "filename": "bell", - "build-id": "ASSET_SPRITE_OBJECTS_BELL", - "folder": "objects" - }, - { - "index": 130, - "filename": "snowman", - "build-id": "ASSET_SPRITE_OBJECTS_SNOWMAN", - "folder": "objects" - }, - { - "index": 131, - "filename": "torch_with_eyes", - "build-id": "ASSET_SPRITE_UNUSED_TORCHWITHEYES", - "folder": "unused" - }, - { - "index": 132, - "filename": "debug_orb_red", - "build-id": "ASSET_SPRITE_OBJECTS_DEBUGORBRED", - "folder": "objects" - }, - { - "index": 133, - "filename": "debug_orb_yellow", - "build-id": "ASSET_SPRITE_OBJECTS_DEBUGORBYELLOW", - "folder": "objects" - }, - { - "index": 134, - "filename": "beta_ancient_lake_sign", - "build-id": "ASSET_SPRITE_UNUSED_BETAANCIENTLAKESIGN", - "folder": "unused" - }, - { - "index": 135, - "filename": "debug_fog_changer", - "build-id": "ASSET_SPRITE_OBJECTS_DEBUGFOGCHANGER", - "folder": "objects" - }, - { - "index": 136, - "filename": "debug_anim_car", - "build-id": "ASSET_SPRITE_OBJECTS_DEBUGANIMCAR", - "folder": "objects" - }, - { - "index": 137, - "filename": "debug_sky_control", - "build-id": "ASSET_SPRITE_OBJECTS_DEBUGSKYCONTROL", - "folder": "objects" - }, - { - "index": 138, - "filename": "debug_camera_control", - "build-id": "ASSET_SPRITE_OBJECTS_DEBUGCAMERACONTROL", - "folder": "objects" - }, - { - "index": 139, - "filename": "debug_unknown_exit", - "build-id": "ASSET_SPRITE_UNUSED_DEBUGUNKNOWNEXIT", - "folder": "unused" - }, - { - "index": 140, - "filename": "debug_unknown_traffic_light", - "build-id": "ASSET_SPRITE_UNUSED_DEBUGUNKNOWNTRAFFICLIGHT", - "folder": "unused" - }, - { - "index": 141, - "filename": "debug_animator", - "build-id": "ASSET_SPRITE_OBJECTS_DEBUGANIMATOR", - "folder": "objects" - }, - { - "index": 142, - "filename": "debug_audio", - "build-id": "ASSET_SPRITE_OBJECTS_DEBUGAUDIO", - "folder": "objects" - }, - { - "index": 143, - "filename": "debug_audio_line", - "build-id": "ASSET_SPRITE_OBJECTS_DEBUGAUDIOLINE", - "folder": "objects" - }, - { - "index": 144, - "filename": "debug_audio_seq_line", - "build-id": "ASSET_SPRITE_OBJECTS_DEBUGAUDIOSEQLINE", - "folder": "objects" - }, - { - "index": 145, - "filename": "debug_audio_seq", - "build-id": "ASSET_SPRITE_OBJECTS_DEBUGAUDIOSEQ", - "folder": "objects" - }, - { - "index": 146, - "filename": "debug_audio_reverb", - "build-id": "ASSET_SPRITE_OBJECTS_DEBUGAUDIOREVERB", - "folder": "objects" - }, - { - "index": 147, - "filename": "balloon_boost", - "build-id": "ASSET_SPRITE_OBJECTS_BALLOONBOOST", - "folder": "objects" - }, - { - "index": 148, - "filename": "balloon_missle", - "build-id": "ASSET_SPRITE_OBJECTS_BALLOONMISSLE", - "folder": "objects" - }, - { - "index": 149, - "filename": "balloon_trap", - "build-id": "ASSET_SPRITE_OBJECTS_BALLOONTRAP", - "folder": "objects" - }, - { - "index": 150, - "filename": "balloon_shield", - "build-id": "ASSET_SPRITE_OBJECTS_BALLOONSHIELD", - "folder": "objects" - }, - { - "index": 151, - "filename": "balloon_magnet", - "build-id": "ASSET_SPRITE_OBJECTS_BALLOONMAGNET", - "folder": "objects" - }, - { - "index": 152, - "filename": "balloon_missle_gift", - "build-id": "ASSET_SPRITE_UNUSED_BALLOONMISSLEGIFT", - "folder": "unused" - }, - { - "index": 153, - "filename": "balloon_boost_gift", - "build-id": "ASSET_SPRITE_UNUSED_BALLOONBOOSTGIFT", - "folder": "unused" - }, - { - "index": 154, - "filename": "balloon_gold", - "build-id": "ASSET_SPRITE_OBJECTS_BALLOONGOLD", - "folder": "objects" - }, - { - "index": 155, - "filename": "balloon_silver", - "build-id": "ASSET_SPRITE_OBJECTS_BALLOONSILVER", - "folder": "objects" - }, - { - "index": 156, - "filename": "banana", - "build-id": "ASSET_SPRITE_OBJECTS_BANANA", - "folder": "objects" - }, - { - "index": 157, - "filename": "silver_coin", - "build-id": "ASSET_SPRITE_OBJECTS_SILVERCOIN", - "folder": "objects" - }, - { - "index": 158, - "filename": "checkpoint_flag", - "build-id": "ASSET_SPRITE_OBJECTS_CHECKPOINTFLAG", - "folder": "objects" - }, - { - "index": 159, - "filename": "rareware_coin", - "build-id": "ASSET_SPRITE_UNUSED_RAREWARECOIN", - "folder": "unused" - }, - { - "index": 160, - "filename": "silver_coin_vertical", - "build-id": "ASSET_SPRITE_UNUSED_SILVERCOINVERTICAL", - "folder": "unused" - }, - { - "index": 161, - "filename": "banana_icon", - "build-id": "ASSET_SPRITE_HUD_BANANAICON", - "folder": "hud" - }, - { - "index": 162, - "filename": "sparkle", - "build-id": "ASSET_SPRITE_PARTICLES_SPARKLE", - "folder": "particles" - }, - { - "index": 163, - "filename": "debug_egg_creator", - "build-id": "ASSET_SPRITE_OBJECTS_DEBUGEGGCREATOR", - "folder": "objects" - }, - { - "index": 164, - "filename": "bonus_gem", - "build-id": "ASSET_SPRITE_UNUSED_BONUSGEM", - "folder": "unused" - }, - { - "index": 165, - "filename": "indicator_icon_caution", - "build-id": "ASSET_SPRITE_HUD_INDICATORICONCAUTION", - "folder": "hud" - }, - { - "index": 166, - "filename": "indicator_icon_down", - "build-id": "ASSET_SPRITE_HUD_INDICATORICONDOWN", - "folder": "hud" - }, - { - "index": 167, - "filename": "indicator_icon_uturn", - "build-id": "ASSET_SPRITE_HUD_INDICATORICONUTURN", - "folder": "hud" - }, - { - "index": 168, - "filename": "indicator_icon_turn", - "build-id": "ASSET_SPRITE_HUD_INDICATORICONTURN", - "folder": "hud" - }, - { - "index": 169, - "filename": "indicator_icon_slight_turn", - "build-id": "ASSET_SPRITE_HUD_INDICATORICONSLIGHTTURN", - "folder": "hud" - }, - { - "index": 170, - "filename": "smoke_object", - "build-id": "ASSET_SPRITE_OBJECTS_SMOKEOBJECT", - "folder": "objects" - }, - { - "index": 171, - "filename": "smoke_cloud", - "build-id": "ASSET_SPRITE_OBJECTS_SMOKECLOUD", - "folder": "objects" - }, - { - "index": 172, - "filename": "smoke_grass", - "build-id": "ASSET_SPRITE_OBJECTS_SMOKEGRASS", - "folder": "objects" - }, - { - "index": 173, - "filename": "mist", - "build-id": "ASSET_SPRITE_OBJECTS_MIST", - "folder": "objects" - }, - { - "index": 174, - "filename": "flaming_torch", - "build-id": "ASSET_SPRITE_OBJECTS_FLAMINGTORCH", - "folder": "objects" - }, - { - "index": 175, - "filename": "splash", - "build-id": "ASSET_SPRITE_UNUSED_SPLASH", - "folder": "unused" - }, - { - "index": 176, - "filename": "weapon_balloon_pop", - "build-id": "ASSET_SPRITE_UNUSED_WEAPONBALLOONPOP", - "folder": "unused" - }, - { - "index": 177, - "filename": "lava_spurt", - "build-id": "ASSET_SPRITE_OBJECTS_LAVASPURT", - "folder": "objects" - }, - { - "index": 178, - "filename": "unknown_small_pop", - "build-id": "ASSET_SPRITE_UNKNOWN_UNKNOWNSMALLPOP", - "folder": "unknown" - }, - { - "index": 179, - "filename": "tyre0", - "build-id": "ASSET_SPRITE_VEHICLE_PARTS_TYRE0", - "folder": "vehicle_parts" - }, - { - "index": 180, - "filename": "tyre1", - "build-id": "ASSET_SPRITE_VEHICLE_PARTS_TYRE1", - "folder": "vehicle_parts" - }, - { - "index": 181, - "filename": "tyre2", - "build-id": "ASSET_SPRITE_VEHICLE_PARTS_TYRE2", - "folder": "vehicle_parts" - }, - { - "index": 182, - "filename": "tyre3", - "build-id": "ASSET_SPRITE_VEHICLE_PARTS_TYRE3", - "folder": "vehicle_parts" - }, - { - "index": 183, - "filename": "fan0", - "build-id": "ASSET_SPRITE_VEHICLE_PARTS_FAN0", - "folder": "vehicle_parts" - }, - { - "index": 184, - "filename": "fan1", - "build-id": "ASSET_SPRITE_VEHICLE_PARTS_FAN1", - "folder": "vehicle_parts" - }, - { - "index": 185, - "filename": "propeller0", - "build-id": "ASSET_SPRITE_VEHICLE_PARTS_PROPELLER0", - "folder": "vehicle_parts" - }, - { - "index": 186, - "filename": "propeller1", - "build-id": "ASSET_SPRITE_VEHICLE_PARTS_PROPELLER1", - "folder": "vehicle_parts" - }, - { - "index": 187, - "filename": "rare_letters", - "build-id": "ASSET_SPRITE_UNUSED_RARELETTERS", - "folder": "unused" - }, - { - "index": 188, - "filename": "bolt_glow", - "build-id": "ASSET_SPRITE_OBJECTS_BOLTGLOW", - "folder": "objects" - }, - { - "index": 189, - "filename": "icon_trophy", - "build-id": "ASSET_SPRITE_MENU_ICONTROPHY", - "folder": "menu" - }, - { - "index": 190, - "filename": "icon_key", - "build-id": "ASSET_SPRITE_MENU_ICONKEY", - "folder": "menu" - }, - { - "index": 191, - "filename": "icon_wizpig_amulet", - "build-id": "ASSET_SPRITE_MENU_ICONWIZPIGAMULET", - "folder": "menu" - }, - { - "index": 192, - "filename": "icon_tt_amulet", - "build-id": "ASSET_SPRITE_MENU_ICONTTAMULET", - "folder": "menu" - } - ] - }, - { - "build-id": "ASSET_SPRITES_TABLE", - "type": "Table", - "for": "ASSET_SPRITES" - }, - { - "build-id": "ASSET_EMPTY_14", - "type": "Empty" - }, - { - "build-id": "ASSET_MISC", - "type": "Miscellaneous", - "folder": "misc", - "table": 16, - "files-default-folder": "unlabeled", - "default-build-id-prefix": "ASSET_MISC_", - "files": [ - { - "index": 9, - "filename": "racer_weight_data", - "build-id": "ASSET_MISC_RACER_WEIGHT", - "misc-type": "RacerStat", - "folder": "racer_stats" - }, - { - "index": 10, - "filename": "racer_handling_data", - "build-id": "ASSET_MISC_RACER_HANDLING", - "misc-type": "RacerStat", - "folder": "racer_stats" - }, - { - "index": 11, - "filename": "racer_unused_11_data", - "build-id": "ASSET_MISC_RACER_UNUSED_11", - "misc-type": "RacerStat", - "folder": "racer_stats" - }, - { - "index": 12, - "filename": "balloon_data", - "build-id": "ASSET_MISC_BALLOON_DATA" - }, - { - "index": 19, - "filename": "rumble_data", - "build-id": "ASSET_MISC_RUMBLE_DATA" - }, - { - "index": 21, - "filename": "shield_data", - "build-id": "ASSET_MISC_SHIELD_DATA" - }, - { - "index": 22, - "filename": "magnet_data", - "build-id": "ASSET_MISC_MAGNET_DATA" - }, - { - "index": 24, - "filename": "ghost_unlock_times", - "build-id": "ASSET_MISC_GHOST_UNLOCK_TIMES" - }, - { - "index": 25, - "filename": "cinematic_race", - "build-id": "ASSET_MISC_CINEMATIC_RACE" - }, - { - "index": 26, - "filename": "tracks_menu_ids", - "build-id": "ASSET_MISC_TRACKS_MENU_IDS", - "misc-type": "TrackIds", - "folder": "track_ids" - }, - { - "index": 27, - "filename": "hub_area_ids", - "build-id": "ASSET_MISC_HUB_AREA_IDS", - "misc-type": "TrackIds", - "folder": "track_ids" - }, - { - "index": 28, - "filename": "main_tracks_ids", - "build-id": "ASSET_MISC_MAIN_TRACKS_IDS", - "misc-type": "TrackIds", - "folder": "track_ids" - }, - { - "index": 29, - "filename": "battle_tracks_ids", - "build-id": "ASSET_MISC_BATTLE_TRACKS_IDS", - "misc-type": "TrackIds", - "folder": "track_ids" - }, - { - "index": 30, - "filename": "boss_tracks_ids", - "build-id": "ASSET_MISC_BOSS_TRACKS_IDS", - "misc-type": "TrackIds", - "folder": "track_ids" - }, - { - "index": 31, - "filename": "cinematic_trophy", - "build-id": "ASSET_MISC_CINEMATIC_TROPHY" - }, - { - "index": 33, - "filename": "RacerAcceleration_Unknown0", - "build-id": "ASSET_MISC_RACERACCELERATION_UNKNOWN0", - "misc-type": "RacerAcceleration", - "folder": "racer_stats" - }, - { - "index": 34, - "filename": "RacerAcceleration_Diddy", - "build-id": "ASSET_MISC_RACERACCELERATION_DIDDY", - "misc-type": "RacerAcceleration", - "folder": "racer_stats" - }, - { - "index": 35, - "filename": "RacerAcceleration_TT", - "build-id": "ASSET_MISC_RACERACCELERATION_TT", - "misc-type": "RacerAcceleration", - "folder": "racer_stats" - }, - { - "index": 36, - "filename": "RacerAcceleration_Unknown1", - "build-id": "ASSET_MISC_RACERACCELERATION_UNKNOWN1", - "misc-type": "RacerAcceleration", - "folder": "racer_stats" - }, - { - "index": 37, - "filename": "RacerAcceleration_Krunch", - "build-id": "ASSET_MISC_RACERACCELERATION_KRUNCH", - "misc-type": "RacerAcceleration", - "folder": "racer_stats" - }, - { - "index": 38, - "filename": "RacerAcceleration_Bumper", - "build-id": "ASSET_MISC_RACERACCELERATION_BUMPER", - "misc-type": "RacerAcceleration", - "folder": "racer_stats" - }, - { - "index": 39, - "filename": "RacerAcceleration_Tiptup", - "build-id": "ASSET_MISC_RACERACCELERATION_TIPTUP", - "misc-type": "RacerAcceleration", - "folder": "racer_stats" - }, - { - "index": 40, - "filename": "RacerAcceleration_Conker", - "build-id": "ASSET_MISC_RACERACCELERATION_CONKER", - "misc-type": "RacerAcceleration", - "folder": "racer_stats" - }, - { - "index": 41, - "filename": "RacerAcceleration_Timber", - "build-id": "ASSET_MISC_RACERACCELERATION_TIMBER", - "misc-type": "RacerAcceleration", - "folder": "racer_stats" - }, - { - "index": 42, - "filename": "RacerAcceleration_Banjo", - "build-id": "ASSET_MISC_RACERACCELERATION_BANJO", - "misc-type": "RacerAcceleration", - "folder": "racer_stats" - }, - { - "index": 43, - "filename": "RacerAcceleration_Drumstick", - "build-id": "ASSET_MISC_RACERACCELERATION_DRUMSTICK", - "misc-type": "RacerAcceleration", - "folder": "racer_stats" - }, - { - "index": 44, - "filename": "RacerAcceleration_Pipsy", - "build-id": "ASSET_MISC_RACERACCELERATION_PIPSY", - "misc-type": "RacerAcceleration", - "folder": "racer_stats" - }, - { - "index": 45, - "filename": "RacerAcceleration_Unknown2", - "build-id": "ASSET_MISC_RACERACCELERATION_UNKNOWN2", - "misc-type": "RacerAcceleration", - "folder": "racer_stats" - }, - { - "index": 56, - "filename": "racer_hitbox_size", - "build-id": "ASSET_MISC_RACER_HITBOX_SIZE" - }, - { - "index": 65, - "filename": "magic_codes", - "build-id": "ASSET_MISC_MAGIC_CODES", - "misc-type": "MagicCodes", - "folder": "cheats" - }, - { - "index": 66, - "filename": "title_screen_demo_ids", - "build-id": "ASSET_MISC_TITLE_SCREEN_DEMO_IDS", - "misc-type": "TitleScreenDemos", - "folder": "title_screen" - } - ] - }, - { - "build-id": "ASSET_MISC_TABLE", - "type": "Table", - "for": "ASSET_MISC" - }, - { - "build-id": "ASSET_HUD_ELEMENT_IDS", - "type": "Binary", - "folder": "ids", - "files": [ - { - "filename": "hud_element_ids" - } - ] - }, - { - "build-id": "ASSET_MENU_ELEMENT_IDS", - "type": "Binary", - "folder": "ids", - "files": [ - { - "filename": "menu_element_ids" - } - ] - }, - { - "build-id": "ASSET_WEATHER_PARTICLES", - "type": "Binary", - "folder": "levels", - "files": [ - { - "filename": "weather_particles" - } - ] - }, - { - "build-id": "ASSET_LEVEL_OBJECT_MAPS_TABLE", - "type": "Table", - "for": "ASSET_LEVEL_OBJECT_MAPS" - }, - { - "build-id": "ASSET_LEVEL_OBJECT_MAPS", - "type": "LevelObjectMap", - "folder": "levels/objectMaps", - "table": 20, - "group": 1 - }, - { - "build-id": "ASSET_LEVEL_HEADERS_TABLE", - "type": "Table", - "for": "ASSET_LEVEL_HEADERS" - }, - { - "build-id": "ASSET_LEVEL_HEADERS", - "type": "LevelHeader", - "folder": "levels/headers", - "table": 22, - "files": [ - { - "index": 0, - "filename": "CentralAreaHub", - "build-id": "ASSET_LEVEL_CENTRALAREAHUB" - }, - { - "index": 1, - "filename": "Bluey1", - "build-id": "ASSET_LEVEL_BLUEY1" - }, - { - "index": 2, - "filename": "DragonForestHub", - "build-id": "ASSET_LEVEL_DRAGONFORESTHUB" - }, - { - "index": 3, - "filename": "FossilCanyon", - "build-id": "ASSET_LEVEL_FOSSILCANYON" - }, - { - "index": 4, - "filename": "PirateLagoon", - "build-id": "ASSET_LEVEL_PIRATELAGOON" - }, - { - "index": 5, - "filename": "AncientLake", - "build-id": "ASSET_LEVEL_ANCIENTLAKE" - }, - { - "index": 6, - "filename": "WalrusCove", - "build-id": "ASSET_LEVEL_WALRUSCOVE" - }, - { - "index": 7, - "filename": "HotTopVolcano", - "build-id": "ASSET_LEVEL_HOTTOPVOLCANO" - }, - { - "index": 8, - "filename": "WhaleBay", - "build-id": "ASSET_LEVEL_WHALEBAY" - }, - { - "index": 9, - "filename": "SnowballValley", - "build-id": "ASSET_LEVEL_SNOWBALLVALLEY" - }, - { - "index": 10, - "filename": "CrescentIsland", - "build-id": "ASSET_LEVEL_CRESCENTISLAND" - }, - { - "index": 11, - "filename": "FireMountain", - "build-id": "ASSET_LEVEL_FIREMOUNTAIN" - }, - { - "index": 12, - "filename": "DinoDomainHub", - "build-id": "ASSET_LEVEL_DINODOMAINHUB" - }, - { - "index": 13, - "filename": "EverfrostPeak", - "build-id": "ASSET_LEVEL_EVERFROSTPEAK" - }, - { - "index": 14, - "filename": "SherbetIslandHub", - "build-id": "ASSET_LEVEL_SHERBETISLANDHUB" - }, - { - "index": 15, - "filename": "SpaceportAlpha", - "build-id": "ASSET_LEVEL_SPACEPORTALPHA" - }, - { - "index": 16, - "filename": "HorseshoeGulch", - "build-id": "ASSET_LEVEL_HORSESHOEGULCH" - }, - { - "index": 17, - "filename": "SpacedustAlley", - "build-id": "ASSET_LEVEL_SPACEDUSTALLEY" - }, - { - "index": 18, - "filename": "GreenwoodVillage", - "build-id": "ASSET_LEVEL_GREENWOODVILLAGE" - }, - { - "index": 19, - "filename": "BoulderCanyon", - "build-id": "ASSET_LEVEL_BOULDERCANYON" - }, - { - "index": 20, - "filename": "WindmillPlains", - "build-id": "ASSET_LEVEL_WINDMILLPLAINS" - }, - { - "index": 21, - "filename": "FrontEnd", - "build-id": "ASSET_LEVEL_FRONTEND" - }, - { - "index": 22, - "filename": "CharacterSelect", - "build-id": "ASSET_LEVEL_CHARACTERSELECT" - }, - { - "index": 23, - "filename": "TitleScreenSequence", - "build-id": "ASSET_LEVEL_TITLESCREENSEQUENCE" - }, - { - "index": 24, - "filename": "SnowflakeMountainHub", - "build-id": "ASSET_LEVEL_SNOWFLAKEMOUNTAINHUB" - }, - { - "index": 25, - "filename": "SmokeyCastle", - "build-id": "ASSET_LEVEL_SMOKEYCASTLE" - }, - { - "index": 26, - "filename": "DarkwaterBeach", - "build-id": "ASSET_LEVEL_DARKWATERBEACH" - }, - { - "index": 27, - "filename": "IciclePyramid", - "build-id": "ASSET_LEVEL_ICICLEPYRAMID" - }, - { - "index": 28, - "filename": "FrostyVillage", - "build-id": "ASSET_LEVEL_FROSTYVILLAGE" - }, - { - "index": 29, - "filename": "JungleFalls", - "build-id": "ASSET_LEVEL_JUNGLEFALLS" - }, - { - "index": 30, - "filename": "TreasureCaves", - "build-id": "ASSET_LEVEL_TREASURECAVES" - }, - { - "index": 31, - "filename": "HauntedWoods", - "build-id": "ASSET_LEVEL_HAUNTEDWOODS" - }, - { - "index": 32, - "filename": "DarkmoonCaverns", - "build-id": "ASSET_LEVEL_DARKMOONCAVERNS" - }, - { - "index": 33, - "filename": "StarCity", - "build-id": "ASSET_LEVEL_STARCITY" - }, - { - "index": 34, - "filename": "TrophyRace", - "build-id": "ASSET_LEVEL_TROPHYRACE" - }, - { - "index": 35, - "filename": "FutureFunLandHub", - "build-id": "ASSET_LEVEL_FUTUREFUNLANDHUB" - }, - { - "index": 36, - "filename": "OpeningSequence", - "build-id": "ASSET_LEVEL_OPENINGSEQUENCE" - }, - { - "index": 37, - "filename": "Wizpig1", - "build-id": "ASSET_LEVEL_WIZPIG1" - }, - { - "index": 38, - "filename": "Trickytops1", - "build-id": "ASSET_LEVEL_TRICKYTOPS1" - }, - { - "index": 39, - "filename": "OptionsBackground", - "build-id": "ASSET_LEVEL_OPTIONSBACKGROUND" - }, - { - "index": 40, - "filename": "Bubbler1", - "build-id": "ASSET_LEVEL_BUBBLER1" - }, - { - "index": 41, - "filename": "Smokey1", - "build-id": "ASSET_LEVEL_SMOKEY1" - }, - { - "index": 42, - "filename": "WizpigMouthSequence", - "build-id": "ASSET_LEVEL_WIZPIGMOUTHSEQUENCE" - }, - { - "index": 43, - "filename": "WizpigAmuletSequence", - "build-id": "ASSET_LEVEL_WIZPIGAMULETSEQUENCE" - }, - { - "index": 44, - "filename": "TTAmuletSequence", - "build-id": "ASSET_LEVEL_TTAMULETSEQUENCE" - }, - { - "index": 45, - "filename": "RocketSequence", - "build-id": "ASSET_LEVEL_ROCKETSEQUENCE" - }, - { - "index": 46, - "filename": "Trickytops2", - "build-id": "ASSET_LEVEL_TRICKYTOPS2" - }, - { - "index": 47, - "filename": "DinoDomainTrophyAnim", - "build-id": "ASSET_LEVEL_DINODOMAINTROPHYANIM" - }, - { - "index": 48, - "filename": "SnowflakeMountainTrophyAnim", - "build-id": "ASSET_LEVEL_SNOWFLAKEMOUNTAINTROPHYANIM" - }, - { - "index": 49, - "filename": "SherbetIslandTrophyAnim", - "build-id": "ASSET_LEVEL_SHERBETISLANDTROPHYANIM" - }, - { - "index": 50, - "filename": "DragonForestTrophyAnim", - "build-id": "ASSET_LEVEL_DRAGONFORESTTROPHYANIM" - }, - { - "index": 51, - "filename": "FutureFunLandTrophyAnim", - "build-id": "ASSET_LEVEL_FUTUREFUNLANDTROPHYANIM" - }, - { - "index": 52, - "filename": "Bluey2", - "build-id": "ASSET_LEVEL_BLUEY2" - }, - { - "index": 53, - "filename": "Bubbler2", - "build-id": "ASSET_LEVEL_BUBBLER2" - }, - { - "index": 54, - "filename": "Smokey2", - "build-id": "ASSET_LEVEL_SMOKEY2" - }, - { - "index": 55, - "filename": "Wizpig2", - "build-id": "ASSET_LEVEL_WIZPIG2" - }, - { - "index": 56, - "filename": "PartySequence", - "build-id": "ASSET_LEVEL_PARTYSEQUENCE" - }, - { - "index": 57, - "filename": "TricktopsAnim", - "build-id": "ASSET_LEVEL_TRICKTOPSANIM" - }, - { - "index": 58, - "filename": "SmokeyAnim", - "build-id": "ASSET_LEVEL_SMOKEYANIM" - }, - { - "index": 59, - "filename": "BlueyAnim", - "build-id": "ASSET_LEVEL_BLUEYANIM" - }, - { - "index": 60, - "filename": "Wizpig1Anim", - "build-id": "ASSET_LEVEL_WIZPIG1ANIM" - }, - { - "index": 61, - "filename": "BubblerAnim", - "build-id": "ASSET_LEVEL_BUBBLERANIM" - }, - { - "index": 62, - "filename": "Wizpig2Anim", - "build-id": "ASSET_LEVEL_WIZPIG2ANIM" - }, - { - "index": 63, - "filename": "LastBit", - "build-id": "ASSET_LEVEL_LASTBIT" - }, - { - "index": 64, - "filename": "LastBitB", - "build-id": "ASSET_LEVEL_LASTBITB" - } - ] - }, - { - "build-id": "ASSET_LEVEL_NAMES_TABLE", - "type": "Table", - "for": "ASSET_LEVEL_NAMES" - }, - { - "build-id": "ASSET_LEVEL_NAMES", - "defer": true, - "defer-info": { - "from-section": "ASSET_LEVEL_HEADERS", - "id-postfix": "_NAME", - "output-path": "../names" - }, - "type": "LevelName", - "folder": "levels/names", - "table": 24, - "files": [ - { - "index": 0, - "filename": "CentralAreaHubName", - "build-id": "ASSET_LEVELNAME_CENTRALAREAHUB" - }, - { - "index": 1, - "filename": "Bluey1Name", - "build-id": "ASSET_LEVELNAME_BLUEY1" - }, - { - "index": 2, - "filename": "DragonForestHubName", - "build-id": "ASSET_LEVELNAME_DRAGONFORESTHUB" - }, - { - "index": 3, - "filename": "FossilCanyonName", - "build-id": "ASSET_LEVELNAME_FOSSILCANYON" - }, - { - "index": 4, - "filename": "PirateLagoonName", - "build-id": "ASSET_LEVELNAME_PIRATELAGOON" - }, - { - "index": 5, - "filename": "AncientLakeName", - "build-id": "ASSET_LEVELNAME_ANCIENTLAKE" - }, - { - "index": 6, - "filename": "WalrusCoveName", - "build-id": "ASSET_LEVELNAME_WALRUSCOVE" - }, - { - "index": 7, - "filename": "HotTopVolcanoName", - "build-id": "ASSET_LEVELNAME_HOTTOPVOLCANO" - }, - { - "index": 8, - "filename": "WhaleBayName", - "build-id": "ASSET_LEVELNAME_WHALEBAY" - }, - { - "index": 9, - "filename": "SnowballValleyName", - "build-id": "ASSET_LEVELNAME_SNOWBALLVALLEY" - }, - { - "index": 10, - "filename": "CrescentIslandName", - "build-id": "ASSET_LEVELNAME_CRESCENTISLAND" - }, - { - "index": 11, - "filename": "FireMountainName", - "build-id": "ASSET_LEVELNAME_FIREMOUNTAIN" - }, - { - "index": 12, - "filename": "DinoDomainHubName", - "build-id": "ASSET_LEVELNAME_DINODOMAINHUB" - }, - { - "index": 13, - "filename": "EverfrostPeakName", - "build-id": "ASSET_LEVELNAME_EVERFROSTPEAK" - }, - { - "index": 14, - "filename": "SherbetIslandHubName", - "build-id": "ASSET_LEVELNAME_SHERBETISLANDHUB" - }, - { - "index": 15, - "filename": "SpaceportAlphaName", - "build-id": "ASSET_LEVELNAME_SPACEPORTALPHA" - }, - { - "index": 16, - "filename": "HorseshoeGulchName", - "build-id": "ASSET_LEVELNAME_HORSESHOEGULCH" - }, - { - "index": 17, - "filename": "SpacedustAlleyName", - "build-id": "ASSET_LEVELNAME_SPACEDUSTALLEY" - }, - { - "index": 18, - "filename": "GreenwoodVillageName", - "build-id": "ASSET_LEVELNAME_GREENWOODVILLAGE" - }, - { - "index": 19, - "filename": "BoulderCanyonName", - "build-id": "ASSET_LEVELNAME_BOULDERCANYON" - }, - { - "index": 20, - "filename": "WindmillPlainsName", - "build-id": "ASSET_LEVELNAME_WINDMILLPLAINS" - }, - { - "index": 21, - "filename": "FrontEndName", - "build-id": "ASSET_LEVELNAME_FRONTEND" - }, - { - "index": 22, - "filename": "CharacterSelectName", - "build-id": "ASSET_LEVELNAME_CHARACTERSELECT" - }, - { - "index": 23, - "filename": "TitleScreenSequenceName", - "build-id": "ASSET_LEVELNAME_TITLESCREENSEQUENCE" - }, - { - "index": 24, - "filename": "SnowflakeMountainHubName", - "build-id": "ASSET_LEVELNAME_SNOWFLAKEMOUNTAINHUB" - }, - { - "index": 25, - "filename": "SmokeyCastleName", - "build-id": "ASSET_LEVELNAME_SMOKEYCASTLE" - }, - { - "index": 26, - "filename": "DarkwaterBeachName", - "build-id": "ASSET_LEVELNAME_DARKWATERBEACH" - }, - { - "index": 27, - "filename": "IciclePyramidName", - "build-id": "ASSET_LEVELNAME_ICICLEPYRAMID" - }, - { - "index": 28, - "filename": "FrostyVillageName", - "build-id": "ASSET_LEVELNAME_FROSTYVILLAGE" - }, - { - "index": 29, - "filename": "JungleFallsName", - "build-id": "ASSET_LEVELNAME_JUNGLEFALLS" - }, - { - "index": 30, - "filename": "TreasureCavesName", - "build-id": "ASSET_LEVELNAME_TREASURECAVES" - }, - { - "index": 31, - "filename": "HauntedWoodsName", - "build-id": "ASSET_LEVELNAME_HAUNTEDWOODS" - }, - { - "index": 32, - "filename": "DarkmoonCavernsName", - "build-id": "ASSET_LEVELNAME_DARKMOONCAVERNS" - }, - { - "index": 33, - "filename": "StarCityName", - "build-id": "ASSET_LEVELNAME_STARCITY" - }, - { - "index": 34, - "filename": "TrophyRaceName", - "build-id": "ASSET_LEVELNAME_TROPHYRACE" - }, - { - "index": 35, - "filename": "FutureFunLandHubName", - "build-id": "ASSET_LEVELNAME_FUTUREFUNLANDHUB" - }, - { - "index": 36, - "filename": "OpeningSequenceName", - "build-id": "ASSET_LEVELNAME_OPENINGSEQUENCE" - }, - { - "index": 37, - "filename": "Wizpig1Name", - "build-id": "ASSET_LEVELNAME_WIZPIG1" - }, - { - "index": 38, - "filename": "Trickytops1Name", - "build-id": "ASSET_LEVELNAME_TRICKYTOPS1" - }, - { - "index": 39, - "filename": "OptionsBackgroundName", - "build-id": "ASSET_LEVELNAME_OPTIONSBACKGROUND" - }, - { - "index": 40, - "filename": "Bubbler1Name", - "build-id": "ASSET_LEVELNAME_BUBBLER1" - }, - { - "index": 41, - "filename": "Smokey1Name", - "build-id": "ASSET_LEVELNAME_SMOKEY1" - }, - { - "index": 42, - "filename": "WizpigMouthSequenceName", - "build-id": "ASSET_LEVELNAME_WIZPIGMOUTHSEQUENCE" - }, - { - "index": 43, - "filename": "WizpigAmuletSequenceName", - "build-id": "ASSET_LEVELNAME_WIZPIGAMULETSEQUENCE" - }, - { - "index": 44, - "filename": "TTAmuletSequenceName", - "build-id": "ASSET_LEVELNAME_TTAMULETSEQUENCE" - }, - { - "index": 45, - "filename": "RocketSequenceName", - "build-id": "ASSET_LEVELNAME_ROCKETSEQUENCE" - }, - { - "index": 46, - "filename": "Trickytops2Name", - "build-id": "ASSET_LEVELNAME_TRICKYTOPS2" - }, - { - "index": 47, - "filename": "DinoDomainTrophyAnimName", - "build-id": "ASSET_LEVELNAME_DINODOMAINTROPHYANIM" - }, - { - "index": 48, - "filename": "SnowflakeMountainTrophyAnimName", - "build-id": "ASSET_LEVELNAME_SNOWFLAKEMOUNTAINTROPHYANIM" - }, - { - "index": 49, - "filename": "SherbetIslandTrophyAnimName", - "build-id": "ASSET_LEVELNAME_SHERBETISLANDTROPHYANIM" - }, - { - "index": 50, - "filename": "DragonForestTrophyAnimName", - "build-id": "ASSET_LEVELNAME_DRAGONFORESTTROPHYANIM" - }, - { - "index": 51, - "filename": "FutureFunLandTrophyAnimName", - "build-id": "ASSET_LEVELNAME_FUTUREFUNLANDTROPHYANIM" - }, - { - "index": 52, - "filename": "Bluey2Name", - "build-id": "ASSET_LEVELNAME_BLUEY2" - }, - { - "index": 53, - "filename": "Bubbler2Name", - "build-id": "ASSET_LEVELNAME_BUBBLER2" - }, - { - "index": 54, - "filename": "Smokey2Name", - "build-id": "ASSET_LEVELNAME_SMOKEY2" - }, - { - "index": 55, - "filename": "Wizpig2Name", - "build-id": "ASSET_LEVELNAME_WIZPIG2" - }, - { - "index": 56, - "filename": "PartySequenceName", - "build-id": "ASSET_LEVELNAME_PARTYSEQUENCE" - }, - { - "index": 57, - "filename": "TricktopsAnimName", - "build-id": "ASSET_LEVELNAME_TRICKTOPSANIM" - }, - { - "index": 58, - "filename": "SmokeyAnimName", - "build-id": "ASSET_LEVELNAME_SMOKEYANIM" - }, - { - "index": 59, - "filename": "BlueyAnimName", - "build-id": "ASSET_LEVELNAME_BLUEYANIM" - }, - { - "index": 60, - "filename": "Wizpig1AnimName", - "build-id": "ASSET_LEVELNAME_WIZPIG1ANIM" - }, - { - "index": 61, - "filename": "BubblerAnimName", - "build-id": "ASSET_LEVELNAME_BUBBLERANIM" - }, - { - "index": 62, - "filename": "Wizpig2AnimName", - "build-id": "ASSET_LEVELNAME_WIZPIG2ANIM" - }, - { - "index": 63, - "filename": "LastBitName", - "build-id": "ASSET_LEVELNAME_LASTBIT" - }, - { - "index": 64, - "filename": "LastBitBName", - "build-id": "ASSET_LEVELNAME_LASTBITB" - } - ] - }, - { - "build-id": "ASSET_LEVEL_MODELS_TABLE", - "type": "Table", - "for": "ASSET_LEVEL_MODELS" - }, - { - "build-id": "ASSET_LEVEL_MODELS", - "type": "LevelModel", - "folder": "levels/models", - "table": 26, - "default-build-id-prefix": "ASSET_LEVELMODEL_", - "files": [ - { - "index": 0, - "filename": "central_area_hub", - "build-id": "ASSET_LEVELMODEL_CENTRALAREAHUB", - "folder": "central_area" - }, - { - "index": 1, - "filename": "bluey", - "build-id": "ASSET_LEVELMODEL_BLUEY", - "folder": "snowflake_mountain" - }, - { - "index": 2, - "filename": "dragon_forest_hub", - "build-id": "ASSET_LEVELMODEL_DRAGONFORESTHUB", - "folder": "dragon_forest" - }, - { - "index": 3, - "filename": "fossil_canyon", - "build-id": "ASSET_LEVELMODEL_FOSSILCANYON", - "folder": "dino_domain" - }, - { - "index": 4, - "filename": "pirate_lagoon", - "build-id": "ASSET_LEVELMODEL_PIRATELAGOON", - "folder": "sherbet_island" - }, - { - "index": 5, - "filename": "ancient_lake", - "build-id": "ASSET_LEVELMODEL_ANCIENTLAKE", - "folder": "dino_domain" - }, - { - "index": 6, - "filename": "walrus_cove", - "build-id": "ASSET_LEVELMODEL_WALRUSCOVE", - "folder": "snowflake_mountain" - }, - { - "index": 7, - "filename": "hot_top_volcano", - "build-id": "ASSET_LEVELMODEL_HOTTOPVOLCANO", - "folder": "dino_domain" - }, - { - "index": 8, - "filename": "whale_bay", - "build-id": "ASSET_LEVELMODEL_WHALEBAY", - "folder": "sherbet_island" - }, - { - "index": 9, - "filename": "snowball_valley", - "build-id": "ASSET_LEVELMODEL_SNOWBALLVALLEY", - "folder": "snowflake_mountain" - }, - { - "index": 10, - "filename": "temple_track", - "build-id": "ASSET_LEVELMODEL_TEMPLETRACK", - "folder": "unused" - }, - { - "index": 11, - "filename": "crescent_island", - "build-id": "ASSET_LEVELMODEL_CRESCENTISLAND", - "folder": "sherbet_island" - }, - { - "index": 12, - "filename": "fire_mountain", - "build-id": "ASSET_LEVELMODEL_FIREMOUNTAIN", - "folder": "dino_domain" - }, - { - "index": 13, - "filename": "dino_domain_hub", - "build-id": "ASSET_LEVELMODEL_DINODOMAINHUB", - "folder": "dino_domain" - }, - { - "index": 14, - "filename": "everfrost_peak", - "build-id": "ASSET_LEVELMODEL_EVERFROSTPEAK", - "folder": "snowflake_mountain" - }, - { - "index": 15, - "filename": "sherbet_island_hub", - "build-id": "ASSET_LEVELMODEL_SHERBETISLANDHUB", - "folder": "sherbet_island" - }, - { - "index": 16, - "filename": "front_end", - "build-id": "ASSET_LEVELMODEL_FRONTEND", - "folder": "menu" - }, - { - "index": 17, - "filename": "character_select", - "build-id": "ASSET_LEVELMODEL_CHARACTERSELECT", - "folder": "menu" - }, - { - "index": 18, - "filename": "spaceport_alpha", - "build-id": "ASSET_LEVELMODEL_SPACEPORTALPHA", - "folder": "future_fun_land" - }, - { - "index": 19, - "filename": "horseshoe_gulch", - "build-id": "ASSET_LEVELMODEL_HORSESHOEGULCH", - "folder": "unused" - }, - { - "index": 20, - "filename": "greenwood_village", - "build-id": "ASSET_LEVELMODEL_GREENWOODVILLAGE", - "folder": "dragon_forest" - }, - { - "index": 21, - "filename": "spacedust_alley", - "build-id": "ASSET_LEVELMODEL_SPACEDUSTALLEY", - "folder": "future_fun_land" - }, - { - "index": 22, - "filename": "title_screen", - "build-id": "ASSET_LEVELMODEL_TITLESCREEN", - "folder": "menu" - }, - { - "index": 23, - "filename": "boulder_canyon", - "build-id": "ASSET_LEVELMODEL_BOULDERCANYON", - "folder": "dragon_forest" - }, - { - "index": 24, - "filename": "windmill_plains", - "build-id": "ASSET_LEVELMODEL_WINDMILLPLAINS", - "folder": "dragon_forest" - }, - { - "index": 25, - "filename": "snowflake_mountain_hub", - "build-id": "ASSET_LEVELMODEL_SNOWFLAKEMOUNTAINHUB", - "folder": "snowflake_mountain" - }, - { - "index": 26, - "filename": "smokey_castle", - "build-id": "ASSET_LEVELMODEL_SMOKEYCASTLE", - "folder": "dragon_forest" - }, - { - "index": 27, - "filename": "darkwater_beach", - "build-id": "ASSET_LEVELMODEL_DARKWATERBEACH", - "folder": "sherbet_island" - }, - { - "index": 28, - "filename": "icicle_pyramid", - "build-id": "ASSET_LEVELMODEL_ICICLEPYRAMID", - "folder": "snowflake_mountain" - }, - { - "index": 29, - "filename": "frosty_village", - "build-id": "ASSET_LEVELMODEL_FROSTYVILLAGE", - "folder": "snowflake_mountain" - }, - { - "index": 30, - "filename": "jungle_falls", - "build-id": "ASSET_LEVELMODEL_JUNGLEFALLS", - "folder": "dino_domain" - }, - { - "index": 31, - "filename": "treasure_caves", - "build-id": "ASSET_LEVELMODEL_TREASURECAVES", - "folder": "sherbet_island" - }, - { - "index": 32, - "filename": "haunted_woods", - "build-id": "ASSET_LEVELMODEL_HAUNTEDWOODS", - "folder": "dragon_forest" - }, - { - "index": 33, - "filename": "darkmoon_caverns", - "build-id": "ASSET_LEVELMODEL_DARKMOONCAVERNS", - "folder": "future_fun_land" - }, - { - "index": 34, - "filename": "star_city", - "build-id": "ASSET_LEVELMODEL_STARCITY", - "folder": "future_fun_land" - }, - { - "index": 35, - "filename": "trophy_race", - "build-id": "ASSET_LEVELMODEL_TROPHYRACE", - "folder": "menu" - }, - { - "index": 36, - "filename": "future_fun_land_hub", - "build-id": "ASSET_LEVELMODEL_FUTUREFUNLANDHUB", - "folder": "future_fun_land" - }, - { - "index": 37, - "filename": "intro_sequence", - "build-id": "ASSET_LEVELMODEL_INTROSEQUENCE", - "folder": "cutscene" - }, - { - "index": 38, - "filename": "smokey", - "build-id": "ASSET_LEVELMODEL_SMOKEY", - "folder": "dragon_forest" - }, - { - "index": 39, - "filename": "trickytops", - "build-id": "ASSET_LEVELMODEL_TRICKYTOPS", - "folder": "dino_domain" - }, - { - "index": 40, - "filename": "wizpig_mouth_sequence", - "build-id": "ASSET_LEVELMODEL_WIZPIGMOUTHSEQUENCE", - "folder": "cutscene" - }, - { - "index": 41, - "filename": "rocket_sequence", - "build-id": "ASSET_LEVELMODEL_ROCKETSEQUENCE", - "folder": "cutscene" - }, - { - "index": 42, - "filename": "wizpig1", - "build-id": "ASSET_LEVELMODEL_WIZPIG1", - "folder": "central_area" - }, - { - "index": 43, - "filename": "ocean_track", - "build-id": "ASSET_LEVELMODEL_OCEANTRACK", - "folder": "unused" - }, - { - "index": 44, - "filename": "volcano_track", - "build-id": "ASSET_LEVELMODEL_VOLCANOTRACK", - "folder": "unused" - }, - { - "index": 45, - "filename": "snow_mountain_track", - "build-id": "ASSET_LEVELMODEL_SNOWMOUNTAINTRACK", - "folder": "unused" - }, - { - "index": 46, - "filename": "party_sequence", - "build-id": "ASSET_LEVELMODEL_PARTYSEQUENCE", - "folder": "cutscene" - }, - { - "index": 47, - "filename": "bluey_animation", - "build-id": "ASSET_LEVELMODEL_BLUEYANIMATION", - "folder": "cutscene" - }, - { - "index": 48, - "filename": "wizpig1_animation", - "build-id": "ASSET_LEVELMODEL_WIZPIG1ANIMATION", - "folder": "cutscene" - }, - { - "index": 49, - "filename": "bubbler", - "build-id": "ASSET_LEVELMODEL_BUBBLER", - "folder": "sherbet_island" - }, - { - "index": 50, - "filename": "bubbler_animation", - "build-id": "ASSET_LEVELMODEL_BUBBLERANIMATION", - "folder": "cutscene" - }, - { - "index": 51, - "filename": "wizpig2_animation", - "build-id": "ASSET_LEVELMODEL_WIZPIG2ANIMATION", - "folder": "cutscene" - }, - { - "index": 52, - "filename": "wizpig2", - "build-id": "ASSET_LEVELMODEL_WIZPIG2", - "folder": "future_fun_land" - }, - { - "index": 53, - "filename": "ending_part1", - "build-id": "ASSET_LEVELMODEL_ENDINGPART1", - "folder": "cutscene" - }, - { - "index": 54, - "filename": "ending_part2", - "build-id": "ASSET_LEVELMODEL_ENDINGPART2", - "folder": "cutscene" - } - ] - }, - { - "build-id": "ASSET_OBJECT_MODELS_TABLE", - "type": "Table", - "for": "ASSET_OBJECT_MODELS" - }, - { - "build-id": "ASSET_OBJECT_MODELS", - "type": "ObjectModel", - "folder": "objects/models", - "table": 28, - "files": [ - { - "index": 0, - "filename": "dome", - "build-id": "ASSET_OBJECTMODEL_DOME" - }, - { - "index": 1, - "filename": "dome1", - "build-id": "ASSET_OBJECTMODEL_DOME1" - }, - { - "index": 2, - "filename": "dome2", - "build-id": "ASSET_OBJECTMODEL_DOME2" - }, - { - "index": 3, - "filename": "dome3", - "build-id": "ASSET_OBJECTMODEL_DOME3" - }, - { - "index": 4, - "filename": "dome4", - "build-id": "ASSET_OBJECTMODEL_DOME4" - }, - { - "index": 5, - "filename": "dome5", - "build-id": "ASSET_OBJECTMODEL_DOME5" - }, - { - "index": 6, - "filename": "dome6", - "build-id": "ASSET_OBJECTMODEL_DOME6" - }, - { - "index": 7, - "filename": "dome7", - "build-id": "ASSET_OBJECTMODEL_DOME7" - }, - { - "index": 8, - "filename": "dome8", - "build-id": "ASSET_OBJECTMODEL_DOME8" - }, - { - "index": 9, - "filename": "dome9", - "build-id": "ASSET_OBJECTMODEL_DOME9" - }, - { - "index": 10, - "filename": "dome10", - "build-id": "ASSET_OBJECTMODEL_DOME10" - }, - { - "index": 11, - "filename": "dome11", - "build-id": "ASSET_OBJECTMODEL_DOME11" - }, - { - "index": 12, - "filename": "dome12", - "build-id": "ASSET_OBJECTMODEL_DOME12" - }, - { - "index": 13, - "filename": "dome13", - "build-id": "ASSET_OBJECTMODEL_DOME13" - }, - { - "index": 14, - "filename": "dome14", - "build-id": "ASSET_OBJECTMODEL_DOME14" - }, - { - "index": 15, - "filename": "dome15", - "build-id": "ASSET_OBJECTMODEL_DOME15" - }, - { - "index": 16, - "filename": "dome16", - "build-id": "ASSET_OBJECTMODEL_DOME16" - }, - { - "index": 17, - "filename": "dome17", - "build-id": "ASSET_OBJECTMODEL_DOME17" - }, - { - "index": 18, - "filename": "FirstPlace", - "build-id": "ASSET_OBJECTMODEL_FIRSTPLACE" - }, - { - "index": 19, - "filename": "diddycar_0", - "build-id": "ASSET_OBJECTMODEL_DIDDYCAR_0" - }, - { - "index": 20, - "filename": "diddycar_1", - "build-id": "ASSET_OBJECTMODEL_DIDDYCAR_1" - }, - { - "index": 21, - "filename": "diddycar_2", - "build-id": "ASSET_OBJECTMODEL_DIDDYCAR_2" - }, - { - "index": 22, - "filename": "diddycar_3", - "build-id": "ASSET_OBJECTMODEL_DIDDYCAR_3" - }, - { - "index": 23, - "filename": "diddycar_4", - "build-id": "ASSET_OBJECTMODEL_DIDDYCAR_4" - }, - { - "index": 24, - "filename": "diddycar_5", - "build-id": "ASSET_OBJECTMODEL_DIDDYCAR_5" - }, - { - "index": 25, - "filename": "SWcar_0", - "build-id": "ASSET_OBJECTMODEL_SWCAR_0" - }, - { - "index": 26, - "filename": "SWcar_1", - "build-id": "ASSET_OBJECTMODEL_SWCAR_1" - }, - { - "index": 27, - "filename": "SWcar_2", - "build-id": "ASSET_OBJECTMODEL_SWCAR_2" - }, - { - "index": 28, - "filename": "SWcar_3", - "build-id": "ASSET_OBJECTMODEL_SWCAR_3" - }, - { - "index": 29, - "filename": "SWcar_4", - "build-id": "ASSET_OBJECTMODEL_SWCAR_4" - }, - { - "index": 30, - "filename": "SWcar_5", - "build-id": "ASSET_OBJECTMODEL_SWCAR_5" - }, - { - "index": 31, - "filename": "BadgerCar_0", - "build-id": "ASSET_OBJECTMODEL_BADGERCAR_0" - }, - { - "index": 32, - "filename": "BadgerCar_1", - "build-id": "ASSET_OBJECTMODEL_BADGERCAR_1" - }, - { - "index": 33, - "filename": "BadgerCar_2", - "build-id": "ASSET_OBJECTMODEL_BADGERCAR_2" - }, - { - "index": 34, - "filename": "BadgerCar_3", - "build-id": "ASSET_OBJECTMODEL_BADGERCAR_3" - }, - { - "index": 35, - "filename": "BadgerCar_4", - "build-id": "ASSET_OBJECTMODEL_BADGERCAR_4" - }, - { - "index": 36, - "filename": "BadgerCar_5", - "build-id": "ASSET_OBJECTMODEL_BADGERCAR_5" - }, - { - "index": 37, - "filename": "TortCar_0", - "build-id": "ASSET_OBJECTMODEL_TORTCAR_0" - }, - { - "index": 38, - "filename": "TortCar_1", - "build-id": "ASSET_OBJECTMODEL_TORTCAR_1" - }, - { - "index": 39, - "filename": "TortCar_2", - "build-id": "ASSET_OBJECTMODEL_TORTCAR_2" - }, - { - "index": 40, - "filename": "TortCar_3", - "build-id": "ASSET_OBJECTMODEL_TORTCAR_3" - }, - { - "index": 41, - "filename": "TortCar_4", - "build-id": "ASSET_OBJECTMODEL_TORTCAR_4" - }, - { - "index": 42, - "filename": "TortCar_5", - "build-id": "ASSET_OBJECTMODEL_TORTCAR_5" - }, - { - "index": 43, - "filename": "KremCar_0", - "build-id": "ASSET_OBJECTMODEL_KREMCAR_0" - }, - { - "index": 44, - "filename": "KremCar_1", - "build-id": "ASSET_OBJECTMODEL_KREMCAR_1" - }, - { - "index": 45, - "filename": "KremCar_2", - "build-id": "ASSET_OBJECTMODEL_KREMCAR_2" - }, - { - "index": 46, - "filename": "KremCar_3", - "build-id": "ASSET_OBJECTMODEL_KREMCAR_3" - }, - { - "index": 47, - "filename": "KremCar_4", - "build-id": "ASSET_OBJECTMODEL_KREMCAR_4" - }, - { - "index": 48, - "filename": "KremCar_5", - "build-id": "ASSET_OBJECTMODEL_KREMCAR_5" - }, - { - "index": 49, - "filename": "TigerCar_0", - "build-id": "ASSET_OBJECTMODEL_TIGERCAR_0" - }, - { - "index": 50, - "filename": "TigerCar_1", - "build-id": "ASSET_OBJECTMODEL_TIGERCAR_1" - }, - { - "index": 51, - "filename": "TigerCar_2", - "build-id": "ASSET_OBJECTMODEL_TIGERCAR_2" - }, - { - "index": 52, - "filename": "TigerCar_3", - "build-id": "ASSET_OBJECTMODEL_TIGERCAR_3" - }, - { - "index": 53, - "filename": "TigerCar_4", - "build-id": "ASSET_OBJECTMODEL_TIGERCAR_4" - }, - { - "index": 54, - "filename": "TigerCar_5", - "build-id": "ASSET_OBJECTMODEL_TIGERCAR_5" - }, - { - "index": 55, - "filename": "ConkaCar_0", - "build-id": "ASSET_OBJECTMODEL_CONKACAR_0" - }, - { - "index": 56, - "filename": "ConkaCar_1", - "build-id": "ASSET_OBJECTMODEL_CONKACAR_1" - }, - { - "index": 57, - "filename": "ConkaCar_2", - "build-id": "ASSET_OBJECTMODEL_CONKACAR_2" - }, - { - "index": 58, - "filename": "ConkaCar_3", - "build-id": "ASSET_OBJECTMODEL_CONKACAR_3" - }, - { - "index": 59, - "filename": "ConkaCar_4", - "build-id": "ASSET_OBJECTMODEL_CONKACAR_4" - }, - { - "index": 60, - "filename": "ConkaCar_5", - "build-id": "ASSET_OBJECTMODEL_CONKACAR_5" - }, - { - "index": 61, - "filename": "BanjoCar_0", - "build-id": "ASSET_OBJECTMODEL_BANJOCAR_0" - }, - { - "index": 62, - "filename": "BanjoCar_1", - "build-id": "ASSET_OBJECTMODEL_BANJOCAR_1" - }, - { - "index": 63, - "filename": "BanjoCar_2", - "build-id": "ASSET_OBJECTMODEL_BANJOCAR_2" - }, - { - "index": 64, - "filename": "BanjoCar_3", - "build-id": "ASSET_OBJECTMODEL_BANJOCAR_3" - }, - { - "index": 65, - "filename": "BanjoCar_4", - "build-id": "ASSET_OBJECTMODEL_BANJOCAR_4" - }, - { - "index": 66, - "filename": "BanjoCar_5", - "build-id": "ASSET_OBJECTMODEL_BANJOCAR_5" - }, - { - "index": 67, - "filename": "ChickenCar_0", - "build-id": "ASSET_OBJECTMODEL_CHICKENCAR_0" - }, - { - "index": 68, - "filename": "ChickenCar_1", - "build-id": "ASSET_OBJECTMODEL_CHICKENCAR_1" - }, - { - "index": 69, - "filename": "ChickenCar_2", - "build-id": "ASSET_OBJECTMODEL_CHICKENCAR_2" - }, - { - "index": 70, - "filename": "ChickenCar_3", - "build-id": "ASSET_OBJECTMODEL_CHICKENCAR_3" - }, - { - "index": 71, - "filename": "ChickenCar_4", - "build-id": "ASSET_OBJECTMODEL_CHICKENCAR_4" - }, - { - "index": 72, - "filename": "ChickenCar_5", - "build-id": "ASSET_OBJECTMODEL_CHICKENCAR_5" - }, - { - "index": 73, - "filename": "MouseCar_0", - "build-id": "ASSET_OBJECTMODEL_MOUSECAR_0" - }, - { - "index": 74, - "filename": "MouseCar_1", - "build-id": "ASSET_OBJECTMODEL_MOUSECAR_1" - }, - { - "index": 75, - "filename": "MouseCar_2", - "build-id": "ASSET_OBJECTMODEL_MOUSECAR_2" - }, - { - "index": 76, - "filename": "MouseCar_3", - "build-id": "ASSET_OBJECTMODEL_MOUSECAR_3" - }, - { - "index": 77, - "filename": "MouseCar_4", - "build-id": "ASSET_OBJECTMODEL_MOUSECAR_4" - }, - { - "index": 78, - "filename": "MouseCar_5", - "build-id": "ASSET_OBJECTMODEL_MOUSECAR_5" - }, - { - "index": 79, - "filename": "ticktockhover_0", - "build-id": "ASSET_OBJECTMODEL_TICKTOCKHOVER_0" - }, - { - "index": 80, - "filename": "ticktockhover_1", - "build-id": "ASSET_OBJECTMODEL_TICKTOCKHOVER_1" - }, - { - "index": 81, - "filename": "ticktockhover_2", - "build-id": "ASSET_OBJECTMODEL_TICKTOCKHOVER_2" - }, - { - "index": 82, - "filename": "ticktockhover_3", - "build-id": "ASSET_OBJECTMODEL_TICKTOCKHOVER_3" - }, - { - "index": 83, - "filename": "ticktockhover_4", - "build-id": "ASSET_OBJECTMODEL_TICKTOCKHOVER_4" - }, - { - "index": 84, - "filename": "ticktockhover_5", - "build-id": "ASSET_OBJECTMODEL_TICKTOCKHOVER_5" - }, - { - "index": 85, - "filename": "KremlinHover_0", - "build-id": "ASSET_OBJECTMODEL_KREMLINHOVER_0" - }, - { - "index": 86, - "filename": "KremlinHover_1", - "build-id": "ASSET_OBJECTMODEL_KREMLINHOVER_1" - }, - { - "index": 87, - "filename": "KremlinHover_2", - "build-id": "ASSET_OBJECTMODEL_KREMLINHOVER_2" - }, - { - "index": 88, - "filename": "KremlinHover_3", - "build-id": "ASSET_OBJECTMODEL_KREMLINHOVER_3" - }, - { - "index": 89, - "filename": "KremlinHover_4", - "build-id": "ASSET_OBJECTMODEL_KREMLINHOVER_4" - }, - { - "index": 90, - "filename": "KremlinHover_5", - "build-id": "ASSET_OBJECTMODEL_KREMLINHOVER_5" - }, - { - "index": 91, - "filename": "BadgerHover_0", - "build-id": "ASSET_OBJECTMODEL_BADGERHOVER_0" - }, - { - "index": 92, - "filename": "BadgerHover_1", - "build-id": "ASSET_OBJECTMODEL_BADGERHOVER_1" - }, - { - "index": 93, - "filename": "BadgerHover_2", - "build-id": "ASSET_OBJECTMODEL_BADGERHOVER_2" - }, - { - "index": 94, - "filename": "BadgerHover_3", - "build-id": "ASSET_OBJECTMODEL_BADGERHOVER_3" - }, - { - "index": 95, - "filename": "BadgerHover_4", - "build-id": "ASSET_OBJECTMODEL_BADGERHOVER_4" - }, - { - "index": 96, - "filename": "BadgerHover_5", - "build-id": "ASSET_OBJECTMODEL_BADGERHOVER_5" - }, - { - "index": 97, - "filename": "ConkaHover_0", - "build-id": "ASSET_OBJECTMODEL_CONKAHOVER_0" - }, - { - "index": 98, - "filename": "ConkaHover_1", - "build-id": "ASSET_OBJECTMODEL_CONKAHOVER_1" - }, - { - "index": 99, - "filename": "ConkaHover_2", - "build-id": "ASSET_OBJECTMODEL_CONKAHOVER_2" - }, - { - "index": 100, - "filename": "ConkaHover_3", - "build-id": "ASSET_OBJECTMODEL_CONKAHOVER_3" - }, - { - "index": 101, - "filename": "ConkaHover_4", - "build-id": "ASSET_OBJECTMODEL_CONKAHOVER_4" - }, - { - "index": 102, - "filename": "ConkaHover_5", - "build-id": "ASSET_OBJECTMODEL_CONKAHOVER_5" - }, - { - "index": 103, - "filename": "TortHover_0", - "build-id": "ASSET_OBJECTMODEL_TORTHOVER_0" - }, - { - "index": 104, - "filename": "TortHover_1", - "build-id": "ASSET_OBJECTMODEL_TORTHOVER_1" - }, - { - "index": 105, - "filename": "TortHover_2", - "build-id": "ASSET_OBJECTMODEL_TORTHOVER_2" - }, - { - "index": 106, - "filename": "TortHover_3", - "build-id": "ASSET_OBJECTMODEL_TORTHOVER_3" - }, - { - "index": 107, - "filename": "TortHover_4", - "build-id": "ASSET_OBJECTMODEL_TORTHOVER_4" - }, - { - "index": 108, - "filename": "TortHover_5", - "build-id": "ASSET_OBJECTMODEL_TORTHOVER_5" - }, - { - "index": 109, - "filename": "BanjoHover_0", - "build-id": "ASSET_OBJECTMODEL_BANJOHOVER_0" - }, - { - "index": 110, - "filename": "BanjoHover_1", - "build-id": "ASSET_OBJECTMODEL_BANJOHOVER_1" - }, - { - "index": 111, - "filename": "BanjoHover_2", - "build-id": "ASSET_OBJECTMODEL_BANJOHOVER_2" - }, - { - "index": 112, - "filename": "BanjoHover_3", - "build-id": "ASSET_OBJECTMODEL_BANJOHOVER_3" - }, - { - "index": 113, - "filename": "BanjoHover_4", - "build-id": "ASSET_OBJECTMODEL_BANJOHOVER_4" - }, - { - "index": 114, - "filename": "BanjoHover_5", - "build-id": "ASSET_OBJECTMODEL_BANJOHOVER_5" - }, - { - "index": 115, - "filename": "TigerHover_0", - "build-id": "ASSET_OBJECTMODEL_TIGERHOVER_0" - }, - { - "index": 116, - "filename": "TigerHover_1", - "build-id": "ASSET_OBJECTMODEL_TIGERHOVER_1" - }, - { - "index": 117, - "filename": "TigerHover_2", - "build-id": "ASSET_OBJECTMODEL_TIGERHOVER_2" - }, - { - "index": 118, - "filename": "TigerHover_3", - "build-id": "ASSET_OBJECTMODEL_TIGERHOVER_3" - }, - { - "index": 119, - "filename": "TigerHover_4", - "build-id": "ASSET_OBJECTMODEL_TIGERHOVER_4" - }, - { - "index": 120, - "filename": "TigerHover_5", - "build-id": "ASSET_OBJECTMODEL_TIGERHOVER_5" - }, - { - "index": 121, - "filename": "ChickenHover_0", - "build-id": "ASSET_OBJECTMODEL_CHICKENHOVER_0" - }, - { - "index": 122, - "filename": "ChickenHover_1", - "build-id": "ASSET_OBJECTMODEL_CHICKENHOVER_1" - }, - { - "index": 123, - "filename": "ChickenHover_2", - "build-id": "ASSET_OBJECTMODEL_CHICKENHOVER_2" - }, - { - "index": 124, - "filename": "ChickenHover_3", - "build-id": "ASSET_OBJECTMODEL_CHICKENHOVER_3" - }, - { - "index": 125, - "filename": "ChickenHover_4", - "build-id": "ASSET_OBJECTMODEL_CHICKENHOVER_4" - }, - { - "index": 126, - "filename": "ChickenHover_5", - "build-id": "ASSET_OBJECTMODEL_CHICKENHOVER_5" - }, - { - "index": 127, - "filename": "MouseHover_0", - "build-id": "ASSET_OBJECTMODEL_MOUSEHOVER_0" - }, - { - "index": 128, - "filename": "MouseHover_1", - "build-id": "ASSET_OBJECTMODEL_MOUSEHOVER_1" - }, - { - "index": 129, - "filename": "MouseHover_2", - "build-id": "ASSET_OBJECTMODEL_MOUSEHOVER_2" - }, - { - "index": 130, - "filename": "MouseHover_3", - "build-id": "ASSET_OBJECTMODEL_MOUSEHOVER_3" - }, - { - "index": 131, - "filename": "MouseHover_4", - "build-id": "ASSET_OBJECTMODEL_MOUSEHOVER_4" - }, - { - "index": 132, - "filename": "MouseHover_5", - "build-id": "ASSET_OBJECTMODEL_MOUSEHOVER_5" - }, - { - "index": 133, - "filename": "diddyhover_0", - "build-id": "ASSET_OBJECTMODEL_DIDDYHOVER_0" - }, - { - "index": 134, - "filename": "diddyhover_1", - "build-id": "ASSET_OBJECTMODEL_DIDDYHOVER_1" - }, - { - "index": 135, - "filename": "diddyhover_2", - "build-id": "ASSET_OBJECTMODEL_DIDDYHOVER_2" - }, - { - "index": 136, - "filename": "diddyhover_3", - "build-id": "ASSET_OBJECTMODEL_DIDDYHOVER_3" - }, - { - "index": 137, - "filename": "diddyhover_4", - "build-id": "ASSET_OBJECTMODEL_DIDDYHOVER_4" - }, - { - "index": 138, - "filename": "diddyhover_5", - "build-id": "ASSET_OBJECTMODEL_DIDDYHOVER_5" - }, - { - "index": 139, - "filename": "diddyplane_0", - "build-id": "ASSET_OBJECTMODEL_DIDDYPLANE_0" - }, - { - "index": 140, - "filename": "diddyplane_1", - "build-id": "ASSET_OBJECTMODEL_DIDDYPLANE_1" - }, - { - "index": 141, - "filename": "diddyplane_2", - "build-id": "ASSET_OBJECTMODEL_DIDDYPLANE_2" - }, - { - "index": 142, - "filename": "diddyplane_3", - "build-id": "ASSET_OBJECTMODEL_DIDDYPLANE_3" - }, - { - "index": 143, - "filename": "diddyplane_4", - "build-id": "ASSET_OBJECTMODEL_DIDDYPLANE_4" - }, - { - "index": 144, - "filename": "diddyplane_5", - "build-id": "ASSET_OBJECTMODEL_DIDDYPLANE_5" - }, - { - "index": 145, - "filename": "TigerAnimPlane", - "build-id": "ASSET_OBJECTMODEL_TIGERANIMPLANE" - }, - { - "index": 146, - "filename": "ticktockplane_0", - "build-id": "ASSET_OBJECTMODEL_TICKTOCKPLANE_0" - }, - { - "index": 147, - "filename": "ticktockplane_1", - "build-id": "ASSET_OBJECTMODEL_TICKTOCKPLANE_1" - }, - { - "index": 148, - "filename": "ticktockplane_2", - "build-id": "ASSET_OBJECTMODEL_TICKTOCKPLANE_2" - }, - { - "index": 149, - "filename": "ticktockplane_3", - "build-id": "ASSET_OBJECTMODEL_TICKTOCKPLANE_3" - }, - { - "index": 150, - "filename": "ticktockplane_4", - "build-id": "ASSET_OBJECTMODEL_TICKTOCKPLANE_4" - }, - { - "index": 151, - "filename": "ticktockplane_5", - "build-id": "ASSET_OBJECTMODEL_TICKTOCKPLANE_5" - }, - { - "index": 152, - "filename": "KremPlane_0", - "build-id": "ASSET_OBJECTMODEL_KREMPLANE_0" - }, - { - "index": 153, - "filename": "KremPlane_1", - "build-id": "ASSET_OBJECTMODEL_KREMPLANE_1" - }, - { - "index": 154, - "filename": "KremPlane_2", - "build-id": "ASSET_OBJECTMODEL_KREMPLANE_2" - }, - { - "index": 155, - "filename": "KremPlane_3", - "build-id": "ASSET_OBJECTMODEL_KREMPLANE_3" - }, - { - "index": 156, - "filename": "KremPlane_4", - "build-id": "ASSET_OBJECTMODEL_KREMPLANE_4" - }, - { - "index": 157, - "filename": "KremPlane_5", - "build-id": "ASSET_OBJECTMODEL_KREMPLANE_5" - }, - { - "index": 158, - "filename": "BadgerPlane_0", - "build-id": "ASSET_OBJECTMODEL_BADGERPLANE_0" - }, - { - "index": 159, - "filename": "BadgerPlane_1", - "build-id": "ASSET_OBJECTMODEL_BADGERPLANE_1" - }, - { - "index": 160, - "filename": "BadgerPlane_2", - "build-id": "ASSET_OBJECTMODEL_BADGERPLANE_2" - }, - { - "index": 161, - "filename": "BadgerPlane_3", - "build-id": "ASSET_OBJECTMODEL_BADGERPLANE_3" - }, - { - "index": 162, - "filename": "BadgerPlane_4", - "build-id": "ASSET_OBJECTMODEL_BADGERPLANE_4" - }, - { - "index": 163, - "filename": "BadgerPlane_5", - "build-id": "ASSET_OBJECTMODEL_BADGERPLANE_5" - }, - { - "index": 164, - "filename": "TortPlane_0", - "build-id": "ASSET_OBJECTMODEL_TORTPLANE_0" - }, - { - "index": 165, - "filename": "TortPlane_1", - "build-id": "ASSET_OBJECTMODEL_TORTPLANE_1" - }, - { - "index": 166, - "filename": "TortPlane_2", - "build-id": "ASSET_OBJECTMODEL_TORTPLANE_2" - }, - { - "index": 167, - "filename": "TortPlane_3", - "build-id": "ASSET_OBJECTMODEL_TORTPLANE_3" - }, - { - "index": 168, - "filename": "TortPlane_4", - "build-id": "ASSET_OBJECTMODEL_TORTPLANE_4" - }, - { - "index": 169, - "filename": "TortPlane_5", - "build-id": "ASSET_OBJECTMODEL_TORTPLANE_5" - }, - { - "index": 170, - "filename": "Conka_0", - "build-id": "ASSET_OBJECTMODEL_CONKA_0" - }, - { - "index": 171, - "filename": "Conka_1", - "build-id": "ASSET_OBJECTMODEL_CONKA_1" - }, - { - "index": 172, - "filename": "Conka_2", - "build-id": "ASSET_OBJECTMODEL_CONKA_2" - }, - { - "index": 173, - "filename": "Conka_3", - "build-id": "ASSET_OBJECTMODEL_CONKA_3" - }, - { - "index": 174, - "filename": "Conka_4", - "build-id": "ASSET_OBJECTMODEL_CONKA_4" - }, - { - "index": 175, - "filename": "Conka_5", - "build-id": "ASSET_OBJECTMODEL_CONKA_5" - }, - { - "index": 176, - "filename": "TigPlane_0", - "build-id": "ASSET_OBJECTMODEL_TIGPLANE_0" - }, - { - "index": 177, - "filename": "TigPlane_1", - "build-id": "ASSET_OBJECTMODEL_TIGPLANE_1" - }, - { - "index": 178, - "filename": "TigPlane_2", - "build-id": "ASSET_OBJECTMODEL_TIGPLANE_2" - }, - { - "index": 179, - "filename": "TigPlane_3", - "build-id": "ASSET_OBJECTMODEL_TIGPLANE_3" - }, - { - "index": 180, - "filename": "TigPlane_4", - "build-id": "ASSET_OBJECTMODEL_TIGPLANE_4" - }, - { - "index": 181, - "filename": "TigPlane_5", - "build-id": "ASSET_OBJECTMODEL_TIGPLANE_5" - }, - { - "index": 182, - "filename": "BanjoPlane_0", - "build-id": "ASSET_OBJECTMODEL_BANJOPLANE_0" - }, - { - "index": 183, - "filename": "BanjoPlane_1", - "build-id": "ASSET_OBJECTMODEL_BANJOPLANE_1" - }, - { - "index": 184, - "filename": "BanjoPlane_2", - "build-id": "ASSET_OBJECTMODEL_BANJOPLANE_2" - }, - { - "index": 185, - "filename": "BanjoPlane_3", - "build-id": "ASSET_OBJECTMODEL_BANJOPLANE_3" - }, - { - "index": 186, - "filename": "BanjoPlane_4", - "build-id": "ASSET_OBJECTMODEL_BANJOPLANE_4" - }, - { - "index": 187, - "filename": "BanjoPlane_5", - "build-id": "ASSET_OBJECTMODEL_BANJOPLANE_5" - }, - { - "index": 188, - "filename": "ChickenPlane_0", - "build-id": "ASSET_OBJECTMODEL_CHICKENPLANE_0" - }, - { - "index": 189, - "filename": "ChickenPlane_1", - "build-id": "ASSET_OBJECTMODEL_CHICKENPLANE_1" - }, - { - "index": 190, - "filename": "ChickenPlane_2", - "build-id": "ASSET_OBJECTMODEL_CHICKENPLANE_2" - }, - { - "index": 191, - "filename": "ChickenPlane_3", - "build-id": "ASSET_OBJECTMODEL_CHICKENPLANE_3" - }, - { - "index": 192, - "filename": "ChickenPlane_4", - "build-id": "ASSET_OBJECTMODEL_CHICKENPLANE_4" - }, - { - "index": 193, - "filename": "ChickenPlane_5", - "build-id": "ASSET_OBJECTMODEL_CHICKENPLANE_5" - }, - { - "index": 194, - "filename": "MousePlane_0", - "build-id": "ASSET_OBJECTMODEL_MOUSEPLANE_0" - }, - { - "index": 195, - "filename": "MousePlane_1", - "build-id": "ASSET_OBJECTMODEL_MOUSEPLANE_1" - }, - { - "index": 196, - "filename": "MousePlane_2", - "build-id": "ASSET_OBJECTMODEL_MOUSEPLANE_2" - }, - { - "index": 197, - "filename": "MousePlane_3", - "build-id": "ASSET_OBJECTMODEL_MOUSEPLANE_3" - }, - { - "index": 198, - "filename": "MousePlane_4", - "build-id": "ASSET_OBJECTMODEL_MOUSEPLANE_4" - }, - { - "index": 199, - "filename": "MousePlane_5", - "build-id": "ASSET_OBJECTMODEL_MOUSEPLANE_5" - }, - { - "index": 200, - "filename": "EmptyPlane", - "build-id": "ASSET_OBJECTMODEL_EMPTYPLANE" - }, - { - "index": 201, - "filename": "EmptyCar", - "build-id": "ASSET_OBJECTMODEL_EMPTYCAR" - }, - { - "index": 202, - "filename": "EmptyHover", - "build-id": "ASSET_OBJECTMODEL_EMPTYHOVER" - }, - { - "index": 203, - "filename": "MagicCarpet", - "build-id": "ASSET_OBJECTMODEL_MAGICCARPET" - }, - { - "index": 204, - "filename": "PolyGoldBaloon_0", - "build-id": "ASSET_OBJECTMODEL_POLYGOLDBALOON_0" - }, - { - "index": 205, - "filename": "PolyGoldBaloon_1", - "build-id": "ASSET_OBJECTMODEL_POLYGOLDBALOON_1" - }, - { - "index": 206, - "filename": "Stopwatch-man", - "build-id": "ASSET_OBJECTMODEL_STOPWATCHMAN" - }, - { - "index": 207, - "filename": "stopwatchselect", - "build-id": "ASSET_OBJECTMODEL_STOPWATCHSELECT" - }, - { - "index": 208, - "filename": "Parkwarden", - "build-id": "ASSET_OBJECTMODEL_PARKWARDEN" - }, - { - "index": 209, - "filename": "AnimGenie2", - "build-id": "ASSET_OBJECTMODEL_ANIMGENIE2" - }, - { - "index": 210, - "filename": "Geniehead", - "build-id": "ASSET_OBJECTMODEL_GENIEHEAD" - }, - { - "index": 211, - "filename": "Pigboss", - "build-id": "ASSET_OBJECTMODEL_PIGBOSS" - }, - { - "index": 212, - "filename": "Pigboss2", - "build-id": "ASSET_OBJECTMODEL_PIGBOSS2" - }, - { - "index": 213, - "filename": "Wizpig", - "build-id": "ASSET_OBJECTMODEL_WIZPIG" - }, - { - "index": 214, - "filename": "PigRocketeer", - "build-id": "ASSET_OBJECTMODEL_PIGROCKETEER" - }, - { - "index": 215, - "filename": "WizpigRocket", - "build-id": "ASSET_OBJECTMODEL_WIZPIGROCKET" - }, - { - "index": 216, - "filename": "rocketbit1", - "build-id": "ASSET_OBJECTMODEL_ROCKETBIT1" - }, - { - "index": 217, - "filename": "rocketbit2", - "build-id": "ASSET_OBJECTMODEL_ROCKETBIT2" - }, - { - "index": 218, - "filename": "Pigboulder", - "build-id": "ASSET_OBJECTMODEL_PIGBOULDER" - }, - { - "index": 219, - "filename": "Pigboulder2", - "build-id": "ASSET_OBJECTMODEL_PIGBOULDER2" - }, - { - "index": 220, - "filename": "Pigboulder3", - "build-id": "ASSET_OBJECTMODEL_PIGBOULDER3" - }, - { - "index": 221, - "filename": "Pigboulder4", - "build-id": "ASSET_OBJECTMODEL_PIGBOULDER4" - }, - { - "index": 222, - "filename": "Pigboulder5", - "build-id": "ASSET_OBJECTMODEL_PIGBOULDER5" - }, - { - "index": 223, - "filename": "Bigplanet", - "build-id": "ASSET_OBJECTMODEL_BIGPLANET" - }, - { - "index": 224, - "filename": "wizpigship", - "build-id": "ASSET_OBJECTMODEL_WIZPIGSHIP" - }, - { - "index": 225, - "filename": "Trickytops", - "build-id": "ASSET_OBJECTMODEL_TRICKYTOPS" - }, - { - "index": 226, - "filename": "Trickyanim", - "build-id": "ASSET_OBJECTMODEL_TRICKYANIM" - }, - { - "index": 227, - "filename": "Trickyanim2", - "build-id": "ASSET_OBJECTMODEL_TRICKYANIM2" - }, - { - "index": 228, - "filename": "Trickyanim3", - "build-id": "ASSET_OBJECTMODEL_TRICKYANIM3" - }, - { - "index": 229, - "filename": "Dragonboss", - "build-id": "ASSET_OBJECTMODEL_DRAGONBOSS" - }, - { - "index": 230, - "filename": "DragonAnim", - "build-id": "ASSET_OBJECTMODEL_DRAGONANIM" - }, - { - "index": 231, - "filename": "Terryboss", - "build-id": "ASSET_OBJECTMODEL_TERRYBOSS" - }, - { - "index": 232, - "filename": "Walrus", - "build-id": "ASSET_OBJECTMODEL_WALRUS" - }, - { - "index": 233, - "filename": "Walrus_anim", - "build-id": "ASSET_OBJECTMODEL_WALRUS_ANIM" - }, - { - "index": 234, - "filename": "octopus", - "build-id": "ASSET_OBJECTMODEL_OCTOPUS" - }, - { - "index": 235, - "filename": "stopwatchicon", - "build-id": "ASSET_OBJECTMODEL_STOPWATCHICON" - }, - { - "index": 236, - "filename": "stopwatchhand", - "build-id": "ASSET_OBJECTMODEL_STOPWATCHHAND" - }, - { - "index": 237, - "filename": "SnowBall", - "build-id": "ASSET_OBJECTMODEL_SNOWBALL" - }, - { - "index": 238, - "filename": "SnowBall2", - "build-id": "ASSET_OBJECTMODEL_SNOWBALL2" - }, - { - "index": 239, - "filename": "Dinosaur1", - "build-id": "ASSET_OBJECTMODEL_DINOSAUR1" - }, - { - "index": 240, - "filename": "Dinosaur2", - "build-id": "ASSET_OBJECTMODEL_DINOSAUR2" - }, - { - "index": 241, - "filename": "Dinosaur3", - "build-id": "ASSET_OBJECTMODEL_DINOSAUR3" - }, - { - "index": 242, - "filename": "SeaMonster", - "build-id": "ASSET_OBJECTMODEL_SEAMONSTER" - }, - { - "index": 243, - "filename": "WoodBlock", - "build-id": "ASSET_OBJECTMODEL_WOODBLOCK" - }, - { - "index": 244, - "filename": "Whale", - "build-id": "ASSET_OBJECTMODEL_WHALE" - }, - { - "index": 245, - "filename": "LevelDoor_2", - "build-id": "ASSET_OBJECTMODEL_LEVELDOOR_2" - }, - { - "index": 246, - "filename": "LevelDoor_3", - "build-id": "ASSET_OBJECTMODEL_LEVELDOOR_3" - }, - { - "index": 247, - "filename": "LevelDoor_0", - "build-id": "ASSET_OBJECTMODEL_LEVELDOOR_0" - }, - { - "index": 248, - "filename": "LevelDoor_4", - "build-id": "ASSET_OBJECTMODEL_LEVELDOOR_4" - }, - { - "index": 249, - "filename": "LevelDoor_1", - "build-id": "ASSET_OBJECTMODEL_LEVELDOOR_1" - }, - { - "index": 250, - "filename": "LevelDoor_7", - "build-id": "ASSET_OBJECTMODEL_LEVELDOOR_7" - }, - { - "index": 251, - "filename": "LevelDoor_8", - "build-id": "ASSET_OBJECTMODEL_LEVELDOOR_8" - }, - { - "index": 252, - "filename": "LevelDoor_5", - "build-id": "ASSET_OBJECTMODEL_LEVELDOOR_5" - }, - { - "index": 253, - "filename": "LevelDoor_6", - "build-id": "ASSET_OBJECTMODEL_LEVELDOOR_6" - }, - { - "index": 254, - "filename": "Signs_0", - "build-id": "ASSET_OBJECTMODEL_SIGNS_0" - }, - { - "index": 255, - "filename": "Signs_1", - "build-id": "ASSET_OBJECTMODEL_SIGNS_1" - }, - { - "index": 256, - "filename": "Signs_2", - "build-id": "ASSET_OBJECTMODEL_SIGNS_2" - }, - { - "index": 257, - "filename": "Signs_3", - "build-id": "ASSET_OBJECTMODEL_SIGNS_3" - }, - { - "index": 258, - "filename": "log", - "build-id": "ASSET_OBJECTMODEL_LOG" - }, - { - "index": 259, - "filename": "boulder", - "build-id": "ASSET_OBJECTMODEL_BOULDER" - }, - { - "index": 260, - "filename": "AirZippers", - "build-id": "ASSET_OBJECTMODEL_AIRZIPPERS" - }, - { - "index": 261, - "filename": "WaterZippers", - "build-id": "ASSET_OBJECTMODEL_WATERZIPPERS" - }, - { - "index": 262, - "filename": "GroundZipper2", - "build-id": "ASSET_OBJECTMODEL_GROUNDZIPPER2" - }, - { - "index": 263, - "filename": "BetaAirZipper", - "build-id": "ASSET_OBJECTMODEL_BETAAIRZIPPER" - }, - { - "index": 264, - "filename": "Dinoisle", - "build-id": "ASSET_OBJECTMODEL_DINOISLE" - }, - { - "index": 265, - "filename": "BetaBumperIcon", - "build-id": "ASSET_OBJECTMODEL_BETABUMPERICON" - }, - { - "index": 266, - "filename": "BetaDrumstickIcon", - "build-id": "ASSET_OBJECTMODEL_BETADRUMSTICKICON" - }, - { - "index": 267, - "filename": "BetaKrunchIcon", - "build-id": "ASSET_OBJECTMODEL_BETAKRUNCHICON" - }, - { - "index": 268, - "filename": "BetaPipsyIcon", - "build-id": "ASSET_OBJECTMODEL_BETAPIPSYICON" - }, - { - "index": 269, - "filename": "BetaTiptupIcon", - "build-id": "ASSET_OBJECTMODEL_BETATIPTUPICON" - }, - { - "index": 270, - "filename": "BetaKrunchBalloon", - "build-id": "ASSET_OBJECTMODEL_BETAKRUNCHBALLOON" - }, - { - "index": 271, - "filename": "BetaBumperBalloon", - "build-id": "ASSET_OBJECTMODEL_BETABUMPERBALLOON" - }, - { - "index": 272, - "filename": "BetaTiptupBalloon", - "build-id": "ASSET_OBJECTMODEL_BETATIPTUPBALLOON" - }, - { - "index": 273, - "filename": "BetaTimberBalloon", - "build-id": "ASSET_OBJECTMODEL_BETATIMBERBALLOON" - }, - { - "index": 274, - "filename": "BetaBanjoBalloon", - "build-id": "ASSET_OBJECTMODEL_BETABANJOBALLOON" - }, - { - "index": 275, - "filename": "BetaDrumstickBalloon", - "build-id": "ASSET_OBJECTMODEL_BETADRUMSTICKBALLOON" - }, - { - "index": 276, - "filename": "BetaPipsyBalloon", - "build-id": "ASSET_OBJECTMODEL_BETAPIPSYBALLOON" - }, - { - "index": 277, - "filename": "selectionshadow", - "build-id": "ASSET_OBJECTMODEL_SELECTIONSHADOW" - }, - { - "index": 278, - "filename": "BetaPlayer1Balloon", - "build-id": "ASSET_OBJECTMODEL_BETAPLAYER1BALLOON" - }, - { - "index": 279, - "filename": "BetaPlayer2Balloon", - "build-id": "ASSET_OBJECTMODEL_BETAPLAYER2BALLOON" - }, - { - "index": 280, - "filename": "BetaPlayer3Balloon", - "build-id": "ASSET_OBJECTMODEL_BETAPLAYER3BALLOON" - }, - { - "index": 281, - "filename": "BetaPlayer4Balloon", - "build-id": "ASSET_OBJECTMODEL_BETAPLAYER4BALLOON" - }, - { - "index": 282, - "filename": "BadgerAnimWalk", - "build-id": "ASSET_OBJECTMODEL_BADGERANIMWALK" - }, - { - "index": 283, - "filename": "timberdancer", - "build-id": "ASSET_OBJECTMODEL_TIMBERDANCER" - }, - { - "index": 284, - "filename": "tiptupdancer", - "build-id": "ASSET_OBJECTMODEL_TIPTUPDANCER" - }, - { - "index": 285, - "filename": "rarewarelogo", - "build-id": "ASSET_OBJECTMODEL_RAREWARELOGO" - }, - { - "index": 286, - "filename": "Frog_0", - "build-id": "ASSET_OBJECTMODEL_FROG_0" - }, - { - "index": 287, - "filename": "Frog_1", - "build-id": "ASSET_OBJECTMODEL_FROG_1" - }, - { - "index": 288, - "filename": "checkpoint", - "build-id": "ASSET_OBJECTMODEL_CHECKPOINT" - }, - { - "index": 289, - "filename": "midifade", - "build-id": "ASSET_OBJECTMODEL_MIDIFADE" - }, - { - "index": 290, - "filename": "modechange", - "build-id": "ASSET_OBJECTMODEL_MODECHANGE" - }, - { - "index": 291, - "filename": "exit", - "build-id": "ASSET_OBJECTMODEL_EXIT" - }, - { - "index": 292, - "filename": "bonus", - "build-id": "ASSET_OBJECTMODEL_BONUS" - }, - { - "index": 293, - "filename": "AnimCamera", - "build-id": "ASSET_OBJECTMODEL_ANIMCAMERA" - }, - { - "index": 294, - "filename": "Animation", - "build-id": "ASSET_OBJECTMODEL_ANIMATION" - }, - { - "index": 295, - "filename": "rgbalight_0", - "build-id": "ASSET_OBJECTMODEL_RGBALIGHT_0" - }, - { - "index": 296, - "filename": "rgbalight_1", - "build-id": "ASSET_OBJECTMODEL_RGBALIGHT_1" - }, - { - "index": 297, - "filename": "rgbalight_2", - "build-id": "ASSET_OBJECTMODEL_RGBALIGHT_2" - }, - { - "index": 298, - "filename": "rgbalight_3", - "build-id": "ASSET_OBJECTMODEL_RGBALIGHT_3" - }, - { - "index": 299, - "filename": "N64logo", - "build-id": "ASSET_OBJECTMODEL_N64LOGO" - }, - { - "index": 300, - "filename": "Widescreen", - "build-id": "ASSET_OBJECTMODEL_WIDESCREEN" - }, - { - "index": 301, - "filename": "AnimDome", - "build-id": "ASSET_OBJECTMODEL_ANIMDOME" - }, - { - "index": 302, - "filename": "DiddySelect", - "build-id": "ASSET_OBJECTMODEL_DIDDYSELECT" - }, - { - "index": 303, - "filename": "Electricity", - "build-id": "ASSET_OBJECTMODEL_ELECTRICITY" - }, - { - "index": 304, - "filename": "KremSelect", - "build-id": "ASSET_OBJECTMODEL_KREMSELECT" - }, - { - "index": 305, - "filename": "BadgerSelect", - "build-id": "ASSET_OBJECTMODEL_BADGERSELECT" - }, - { - "index": 306, - "filename": "TortSelect", - "build-id": "ASSET_OBJECTMODEL_TORTSELECT" - }, - { - "index": 307, - "filename": "BanjoSelect", - "build-id": "ASSET_OBJECTMODEL_BANJOSELECT" - }, - { - "index": 308, - "filename": "TigerSelect", - "build-id": "ASSET_OBJECTMODEL_TIGERSELECT" - }, - { - "index": 309, - "filename": "ChickSelect", - "build-id": "ASSET_OBJECTMODEL_CHICKSELECT" - }, - { - "index": 310, - "filename": "MouseSelect", - "build-id": "ASSET_OBJECTMODEL_MOUSESELECT" - }, - { - "index": 311, - "filename": "ConkSelect", - "build-id": "ASSET_OBJECTMODEL_CONKSELECT" - }, - { - "index": 312, - "filename": "postforparty", - "build-id": "ASSET_OBJECTMODEL_POSTFORPARTY" - }, - { - "index": 313, - "filename": "Lighthouse", - "build-id": "ASSET_OBJECTMODEL_LIGHTHOUSE" - }, - { - "index": 314, - "filename": "lighthouse1", - "build-id": "ASSET_OBJECTMODEL_LIGHTHOUSE1" - }, - { - "index": 315, - "filename": "SelectionHill", - "build-id": "ASSET_OBJECTMODEL_SELECTIONHILL" - }, - { - "index": 316, - "filename": "Rarelogo", - "build-id": "ASSET_OBJECTMODEL_RARELOGO" - }, - { - "index": 317, - "filename": "WorldKey", - "build-id": "ASSET_OBJECTMODEL_WORLDKEY" - }, - { - "index": 318, - "filename": "AnimKey", - "build-id": "ASSET_OBJECTMODEL_ANIMKEY" - }, - { - "index": 319, - "filename": "rocketsignpost_0", - "build-id": "ASSET_OBJECTMODEL_ROCKETSIGNPOST_0" - }, - { - "index": 320, - "filename": "rocketsignpost_1", - "build-id": "ASSET_OBJECTMODEL_ROCKETSIGNPOST_1" - }, - { - "index": 321, - "filename": "rocketsignpost_2", - "build-id": "ASSET_OBJECTMODEL_ROCKETSIGNPOST_2" - }, - { - "index": 322, - "filename": "rocketsignpost_3", - "build-id": "ASSET_OBJECTMODEL_ROCKETSIGNPOST_3" - }, - { - "index": 323, - "filename": "rocketsignpost_4", - "build-id": "ASSET_OBJECTMODEL_ROCKETSIGNPOST_4" - }, - { - "index": 324, - "filename": "MagicRing", - "build-id": "ASSET_OBJECTMODEL_MAGICRING" - }, - { - "index": 325, - "filename": "Leefan", - "build-id": "ASSET_OBJECTMODEL_LEEFAN" - }, - { - "index": 326, - "filename": "SpaceShip1", - "build-id": "ASSET_OBJECTMODEL_SPACESHIP1" - }, - { - "index": 327, - "filename": "SpaceShip2", - "build-id": "ASSET_OBJECTMODEL_SPACESHIP2" - }, - { - "index": 328, - "filename": "SpaceShip3", - "build-id": "ASSET_OBJECTMODEL_SPACESHIP3" - }, - { - "index": 329, - "filename": "MonoRail", - "build-id": "ASSET_OBJECTMODEL_MONORAIL" - }, - { - "index": 330, - "filename": "bridge", - "build-id": "ASSET_OBJECTMODEL_BRIDGE" - }, - { - "index": 331, - "filename": "pirateship", - "build-id": "ASSET_OBJECTMODEL_PIRATESHIP" - }, - { - "index": 332, - "filename": "WorldGate_0", - "build-id": "ASSET_OBJECTMODEL_WORLDGATE_0" - }, - { - "index": 333, - "filename": "WorldGate_1", - "build-id": "ASSET_OBJECTMODEL_WORLDGATE_1" - }, - { - "index": 334, - "filename": "WorldGate_2", - "build-id": "ASSET_OBJECTMODEL_WORLDGATE_2" - }, - { - "index": 335, - "filename": "WorldGate_3", - "build-id": "ASSET_OBJECTMODEL_WORLDGATE_3" - }, - { - "index": 336, - "filename": "bigbossdoor_0", - "build-id": "ASSET_OBJECTMODEL_BIGBOSSDOOR_0" - }, - { - "index": 337, - "filename": "bigbossdoor_1", - "build-id": "ASSET_OBJECTMODEL_BIGBOSSDOOR_1" - }, - { - "index": 338, - "filename": "ChalDoor_0", - "build-id": "ASSET_OBJECTMODEL_CHALDOOR_0" - }, - { - "index": 339, - "filename": "ChalDoor_1", - "build-id": "ASSET_OBJECTMODEL_CHALDOOR_1" - }, - { - "index": 340, - "filename": "BossDoor_0", - "build-id": "ASSET_OBJECTMODEL_BOSSDOOR_0" - }, - { - "index": 341, - "filename": "BossDoor_1", - "build-id": "ASSET_OBJECTMODEL_BOSSDOOR_1" - }, - { - "index": 342, - "filename": "BossDoor_2", - "build-id": "ASSET_OBJECTMODEL_BOSSDOOR_2" - }, - { - "index": 343, - "filename": "SpaceColumn1", - "build-id": "ASSET_OBJECTMODEL_SPACECOLUMN1" - }, - { - "index": 344, - "filename": "SpaceColumn2", - "build-id": "ASSET_OBJECTMODEL_SPACECOLUMN2" - }, - { - "index": 345, - "filename": "SpaceColumn3", - "build-id": "ASSET_OBJECTMODEL_SPACECOLUMN3" - }, - { - "index": 346, - "filename": "TrackSelectFrame", - "build-id": "ASSET_OBJECTMODEL_TRACKSELECTFRAME" - }, - { - "index": 347, - "filename": "windsail", - "build-id": "ASSET_OBJECTMODEL_WINDSAIL" - }, - { - "index": 348, - "filename": "EffectBox", - "build-id": "ASSET_OBJECTMODEL_EFFECTBOX" - }, - { - "index": 349, - "filename": "Asteroid", - "build-id": "ASSET_OBJECTMODEL_ASTEROID" - }, - { - "index": 350, - "filename": "trophycab", - "build-id": "ASSET_OBJECTMODEL_TROPHYCAB" - }, - { - "index": 351, - "filename": "laserbolt", - "build-id": "ASSET_OBJECTMODEL_LASERBOLT" - }, - { - "index": 352, - "filename": "TrackSelectFrameUnknown", - "build-id": "ASSET_OBJECTMODEL_TRACKSELECTFRAMEUNKNOWN" - }, - { - "index": 353, - "filename": "TrackSelectFrameChallenge", - "build-id": "ASSET_OBJECTMODEL_TRACKSELECTFRAMECHALLENGE" - }, - { - "index": 354, - "filename": "TrackSelectFrameTrophyRace", - "build-id": "ASSET_OBJECTMODEL_TRACKSELECTFRAMETROPHYRACE" - }, - { - "index": 355, - "filename": "Unknown", - "build-id": "ASSET_OBJECTMODEL_UNKNOWN" - }, - { - "index": 356, - "filename": "pigheadcolours_0", - "build-id": "ASSET_OBJECTMODEL_PIGHEADCOLOURS_0" - }, - { - "index": 357, - "filename": "pigheadcolours_1", - "build-id": "ASSET_OBJECTMODEL_PIGHEADCOLOURS_1" - }, - { - "index": 358, - "filename": "pigheadcolours_2", - "build-id": "ASSET_OBJECTMODEL_PIGHEADCOLOURS_2" - }, - { - "index": 359, - "filename": "pigheadcolours_3", - "build-id": "ASSET_OBJECTMODEL_PIGHEADCOLOURS_3" - }, - { - "index": 360, - "filename": "pigheadcolours_4", - "build-id": "ASSET_OBJECTMODEL_PIGHEADCOLOURS_4" - }, - { - "index": 361, - "filename": "pterodactyl", - "build-id": "ASSET_OBJECTMODEL_PTERODACTYL" - }, - { - "index": 362, - "filename": "amuletpiece1", - "build-id": "ASSET_OBJECTMODEL_AMULETPIECE1" - }, - { - "index": 363, - "filename": "amuletpiece2", - "build-id": "ASSET_OBJECTMODEL_AMULETPIECE2" - }, - { - "index": 364, - "filename": "amuletpiece3", - "build-id": "ASSET_OBJECTMODEL_AMULETPIECE3" - }, - { - "index": 365, - "filename": "amuletpiece4", - "build-id": "ASSET_OBJECTMODEL_AMULETPIECE4" - }, - { - "index": 366, - "filename": "swamulet1", - "build-id": "ASSET_OBJECTMODEL_SWAMULET1" - }, - { - "index": 367, - "filename": "swamulet2", - "build-id": "ASSET_OBJECTMODEL_SWAMULET2" - }, - { - "index": 368, - "filename": "swamulet3", - "build-id": "ASSET_OBJECTMODEL_SWAMULET3" - }, - { - "index": 369, - "filename": "swamulet4", - "build-id": "ASSET_OBJECTMODEL_SWAMULET4" - }, - { - "index": 370, - "filename": "pigfaceanimator", - "build-id": "ASSET_OBJECTMODEL_PIGFACEANIMATOR" - }, - { - "index": 371, - "filename": "pillar", - "build-id": "ASSET_OBJECTMODEL_PILLAR" - }, - { - "index": 372, - "filename": "boulderanim", - "build-id": "ASSET_OBJECTMODEL_BOULDERANIM" - }, - { - "index": 373, - "filename": "Haystack", - "build-id": "ASSET_OBJECTMODEL_HAYSTACK" - }, - { - "index": 374, - "filename": "BetaProAM64HotAirBalloon", - "build-id": "ASSET_OBJECTMODEL_BETAPROAM64HOTAIRBALLOON" - }, - { - "index": 375, - "filename": "MiniShip", - "build-id": "ASSET_OBJECTMODEL_MINISHIP" - }, - { - "index": 376, - "filename": "GoldTrophy", - "build-id": "ASSET_OBJECTMODEL_GOLDTROPHY" - }, - { - "index": 377, - "filename": "Parktrophy", - "build-id": "ASSET_OBJECTMODEL_PARKTROPHY" - }, - { - "index": 378, - "filename": "Ticktrophy", - "build-id": "ASSET_OBJECTMODEL_TICKTROPHY" - }, - { - "index": 379, - "filename": "SpaceDome", - "build-id": "ASSET_OBJECTMODEL_SPACEDOME" - }, - { - "index": 380, - "filename": "Missile", - "build-id": "ASSET_OBJECTMODEL_MISSILE" - }, - { - "index": 381, - "filename": "Shield_1", - "build-id": "ASSET_OBJECTMODEL_SHIELD_1" - }, - { - "index": 382, - "filename": "Shield_0", - "build-id": "ASSET_OBJECTMODEL_SHIELD_0" - }, - { - "index": 383, - "filename": "Shield_2", - "build-id": "ASSET_OBJECTMODEL_SHIELD_2" - }, - { - "index": 384, - "filename": "TTDoor_0", - "build-id": "ASSET_OBJECTMODEL_TTDOOR_0" - }, - { - "index": 385, - "filename": "TTDoor_1", - "build-id": "ASSET_OBJECTMODEL_TTDOOR_1" - }, - { - "index": 386, - "filename": "TTDoor_2", - "build-id": "ASSET_OBJECTMODEL_TTDOOR_2" - }, - { - "index": 387, - "filename": "piglog", - "build-id": "ASSET_OBJECTMODEL_PIGLOG" - }, - { - "index": 388, - "filename": "KeithPigDoor", - "build-id": "ASSET_OBJECTMODEL_KEITHPIGDOOR" - }, - { - "index": 389, - "filename": "MagnetFX", - "build-id": "ASSET_OBJECTMODEL_MAGNETFX" - } - ] - }, - { - "build-id": "ASSET_ANIMATION_IDS", - "type": "Binary", - "folder": "objects", - "files": [ - { - "filename": "animation_ids" - } - ] - }, - { - "build-id": "ASSET_OBJECT_ANIMATIONS_TABLE", - "type": "Table", - "for": "ASSET_OBJECT_ANIMATIONS" - }, - { - "build-id": "ASSET_OBJECT_ANIMATIONS", - "type": "ObjectAnimation", - "folder": "objects/animations", - "table": 31 - }, - { - "build-id": "ASSET_OBJECT_HEADERS_TABLE", - "type": "Table", - "for": "ASSET_OBJECT_HEADERS" - }, - { - "build-id": "ASSET_OBJECTS", - "type": "ObjectHeader", - "folder": "objects/headers", - "table": 33, - "files": [ - { - "index": 0, - "filename": "diddycar", - "build-id": "ASSET_OBJECT_DIDDYCAR" - }, - { - "index": 1, - "filename": "SWcar", - "build-id": "ASSET_OBJECT_SWCAR" - }, - { - "index": 2, - "filename": "KremCar", - "build-id": "ASSET_OBJECT_KREMCAR" - }, - { - "index": 3, - "filename": "BadgerCar", - "build-id": "ASSET_OBJECT_BADGERCAR" - }, - { - "index": 4, - "filename": "TortCar", - "build-id": "ASSET_OBJECT_TORTCAR" - }, - { - "index": 5, - "filename": "ConkaCar", - "build-id": "ASSET_OBJECT_CONKACAR" - }, - { - "index": 6, - "filename": "TigerCar", - "build-id": "ASSET_OBJECT_TIGERCAR" - }, - { - "index": 7, - "filename": "BanjoCar", - "build-id": "ASSET_OBJECT_BANJOCAR" - }, - { - "index": 8, - "filename": "ChickenCar", - "build-id": "ASSET_OBJECT_CHICKENCAR" - }, - { - "index": 9, - "filename": "MouseCar", - "build-id": "ASSET_OBJECT_MOUSECAR" - }, - { - "index": 10, - "filename": "diddyhover", - "build-id": "ASSET_OBJECT_DIDDYHOVER" - }, - { - "index": 11, - "filename": "ticktockhover", - "build-id": "ASSET_OBJECT_TICKTOCKHOVER" - }, - { - "index": 12, - "filename": "KremlinHover", - "build-id": "ASSET_OBJECT_KREMLINHOVER" - }, - { - "index": 13, - "filename": "BadgerHover", - "build-id": "ASSET_OBJECT_BADGERHOVER" - }, - { - "index": 14, - "filename": "TortHover", - "build-id": "ASSET_OBJECT_TORTHOVER" - }, - { - "index": 15, - "filename": "ConkaHover", - "build-id": "ASSET_OBJECT_CONKAHOVER" - }, - { - "index": 16, - "filename": "TigerHover", - "build-id": "ASSET_OBJECT_TIGERHOVER" - }, - { - "index": 17, - "filename": "BanjoHover", - "build-id": "ASSET_OBJECT_BANJOHOVER" - }, - { - "index": 18, - "filename": "ChickenHover", - "build-id": "ASSET_OBJECT_CHICKENHOVER" - }, - { - "index": 19, - "filename": "MouseHover", - "build-id": "ASSET_OBJECT_MOUSEHOVER" - }, - { - "index": 20, - "filename": "diddyplane", - "build-id": "ASSET_OBJECT_DIDDYPLANE" - }, - { - "index": 21, - "filename": "ticktockplane", - "build-id": "ASSET_OBJECT_TICKTOCKPLANE" - }, - { - "index": 22, - "filename": "KremPlane", - "build-id": "ASSET_OBJECT_KREMPLANE" - }, - { - "index": 23, - "filename": "BadgerPlane", - "build-id": "ASSET_OBJECT_BADGERPLANE" - }, - { - "index": 24, - "filename": "TortPlane", - "build-id": "ASSET_OBJECT_TORTPLANE" - }, - { - "index": 25, - "filename": "Conka", - "build-id": "ASSET_OBJECT_CONKA" - }, - { - "index": 26, - "filename": "TigPlane", - "build-id": "ASSET_OBJECT_TIGPLANE" - }, - { - "index": 27, - "filename": "BanjoPlane", - "build-id": "ASSET_OBJECT_BANJOPLANE" - }, - { - "index": 28, - "filename": "ChickenPlane", - "build-id": "ASSET_OBJECT_CHICKENPLANE" - }, - { - "index": 29, - "filename": "MousePlane", - "build-id": "ASSET_OBJECT_MOUSEPLANE" - }, - { - "index": 30, - "filename": "FlyingCarpet", - "build-id": "ASSET_OBJECT_FLYINGCARPET" - }, - { - "index": 31, - "filename": "timberdancer", - "build-id": "ASSET_OBJECT_TIMBERDANCER" - }, - { - "index": 32, - "filename": "Chickencharacte", - "build-id": "ASSET_OBJECT_CHICKENCHARACTE" - }, - { - "index": 33, - "filename": "pipsydancer", - "build-id": "ASSET_OBJECT_PIPSYDANCER" - }, - { - "index": 34, - "filename": "banjodancer", - "build-id": "ASSET_OBJECT_BANJODANCER" - }, - { - "index": 35, - "filename": "ticktockdancer", - "build-id": "ASSET_OBJECT_TICKTOCKDANCER" - }, - { - "index": 36, - "filename": "wizpigship", - "build-id": "ASSET_OBJECT_WIZPIGSHIP" - }, - { - "index": 37, - "filename": "conkadancer", - "build-id": "ASSET_OBJECT_CONKADANCER" - }, - { - "index": 38, - "filename": "EmptyHover", - "build-id": "ASSET_OBJECT_EMPTYHOVER" - }, - { - "index": 39, - "filename": "Stopwatch-man", - "build-id": "ASSET_OBJECT_STOPWATCHMAN" - }, - { - "index": 40, - "filename": "stopwatchselect", - "build-id": "ASSET_OBJECT_STOPWATCHSELECT" - }, - { - "index": 41, - "filename": "Parkwarden", - "build-id": "ASSET_OBJECT_PARKWARDEN" - }, - { - "index": 42, - "filename": "SmartieTree", - "build-id": "ASSET_OBJECT_SMARTIETREE" - }, - { - "index": 43, - "filename": "BlueBerryBush", - "build-id": "ASSET_OBJECT_BLUEBERRYBUSH" - }, - { - "index": 44, - "filename": "RubberSnowTree", - "build-id": "ASSET_OBJECT_RUBBERSNOWTREE" - }, - { - "index": 45, - "filename": "SkinnySnowTree", - "build-id": "ASSET_OBJECT_SKINNYSNOWTREE" - }, - { - "index": 46, - "filename": "XmasTree", - "build-id": "ASSET_OBJECT_XMASTREE" - }, - { - "index": 47, - "filename": "AlpineSnowTree", - "build-id": "ASSET_OBJECT_ALPINESNOWTREE" - }, - { - "index": 48, - "filename": "RubberTree", - "build-id": "ASSET_OBJECT_RUBBERTREE" - }, - { - "index": 49, - "filename": "Beachtree", - "build-id": "ASSET_OBJECT_BEACHTREE" - }, - { - "index": 50, - "filename": "PalmTreeTop", - "build-id": "ASSET_OBJECT_PALMTREETOP" - }, - { - "index": 51, - "filename": "PalmPlant", - "build-id": "ASSET_OBJECT_PALMPLANT" - }, - { - "index": 52, - "filename": "PalmTreeTopChea", - "build-id": "ASSET_OBJECT_PALMTREETOPCHEA" - }, - { - "index": 53, - "filename": "FirTree", - "build-id": "ASSET_OBJECT_FIRTREE" - }, - { - "index": 54, - "filename": "SpaceTree", - "build-id": "ASSET_OBJECT_SPACETREE" - }, - { - "index": 55, - "filename": "Lamppost", - "build-id": "ASSET_OBJECT_LAMPPOST" - }, - { - "index": 56, - "filename": "Flowers", - "build-id": "ASSET_OBJECT_FLOWERS" - }, - { - "index": 57, - "filename": "Reeds", - "build-id": "ASSET_OBJECT_REEDS" - }, - { - "index": 58, - "filename": "smoke", - "build-id": "ASSET_OBJECT_SMOKE" - }, - { - "index": 59, - "filename": "Dinosaur1", - "build-id": "ASSET_OBJECT_DINOSAUR1" - }, - { - "index": 60, - "filename": "Dinosaur2", - "build-id": "ASSET_OBJECT_DINOSAUR2" - }, - { - "index": 61, - "filename": "Dinosaur3", - "build-id": "ASSET_OBJECT_DINOSAUR3" - }, - { - "index": 62, - "filename": "Whale", - "build-id": "ASSET_OBJECT_WHALE" - }, - { - "index": 63, - "filename": "Snowmen", - "build-id": "ASSET_OBJECT_SNOWMEN" - }, - { - "index": 64, - "filename": "Signs", - "build-id": "ASSET_OBJECT_SIGNS" - }, - { - "index": 65, - "filename": "FlamingTorch", - "build-id": "ASSET_OBJECT_FLAMINGTORCH" - }, - { - "index": 66, - "filename": "Mist", - "build-id": "ASSET_OBJECT_MIST" - }, - { - "index": 67, - "filename": "SnowBall", - "build-id": "ASSET_OBJECT_SNOWBALL" - }, - { - "index": 68, - "filename": "buoy", - "build-id": "ASSET_OBJECT_BUOY" - }, - { - "index": 69, - "filename": "pirateship", - "build-id": "ASSET_OBJECT_PIRATESHIP" - }, - { - "index": 70, - "filename": "log", - "build-id": "ASSET_OBJECT_LOG" - }, - { - "index": 71, - "filename": "piglog", - "build-id": "ASSET_OBJECT_PIGLOG" - }, - { - "index": 72, - "filename": "boulder", - "build-id": "ASSET_OBJECT_BOULDER" - }, - { - "index": 73, - "filename": "AirZippers", - "build-id": "ASSET_OBJECT_AIRZIPPERS" - }, - { - "index": 74, - "filename": "WaterZippers", - "build-id": "ASSET_OBJECT_WATERZIPPERS" - }, - { - "index": 75, - "filename": "LevelDoor", - "build-id": "ASSET_OBJECT_LEVELDOOR" - }, - { - "index": 76, - "filename": "KeithPigDoor", - "build-id": "ASSET_OBJECT_KEITHPIGDOOR" - }, - { - "index": 77, - "filename": "ChalDoor", - "build-id": "ASSET_OBJECT_CHALDOOR" - }, - { - "index": 78, - "filename": "BossDoor", - "build-id": "ASSET_OBJECT_BOSSDOOR" - }, - { - "index": 79, - "filename": "bigbossdoor", - "build-id": "ASSET_OBJECT_BIGBOSSDOOR" - }, - { - "index": 80, - "filename": "WorldGate", - "build-id": "ASSET_OBJECT_WORLDGATE" - }, - { - "index": 81, - "filename": "TTDoor", - "build-id": "ASSET_OBJECT_TTDOOR" - }, - { - "index": 82, - "filename": "RampSwitch", - "build-id": "ASSET_OBJECT_RAMPSWITCH" - }, - { - "index": 83, - "filename": "NoentryDoor", - "build-id": "ASSET_OBJECT_NOENTRYDOOR" - }, - { - "index": 84, - "filename": "RampWhale", - "build-id": "ASSET_OBJECT_RAMPWHALE" - }, - { - "index": 85, - "filename": "SeaMonster", - "build-id": "ASSET_OBJECT_SEAMONSTER" - }, - { - "index": 86, - "filename": "Dinoisle", - "build-id": "ASSET_OBJECT_DINOISLE" - }, - { - "index": 87, - "filename": "skycontrol", - "build-id": "ASSET_OBJECT_SKYCONTROL" - }, - { - "index": 88, - "filename": "checkpoint", - "build-id": "ASSET_OBJECT_CHECKPOINT" - }, - { - "index": 89, - "filename": "checkarrow", - "build-id": "ASSET_OBJECT_CHECKARROW" - }, - { - "index": 90, - "filename": "modechange", - "build-id": "ASSET_OBJECT_MODECHANGE" - }, - { - "index": 91, - "filename": "trigger", - "build-id": "ASSET_OBJECT_TRIGGER" - }, - { - "index": 92, - "filename": "fogchanger", - "build-id": "ASSET_OBJECT_FOGCHANGER" - }, - { - "index": 93, - "filename": "ai-node", - "build-id": "ASSET_OBJECT_AINODE" - }, - { - "index": 94, - "filename": "exit", - "build-id": "ASSET_OBJECT_EXIT" - }, - { - "index": 95, - "filename": "bonus", - "build-id": "ASSET_OBJECT_BONUS" - }, - { - "index": 96, - "filename": "camera_control", - "build-id": "ASSET_OBJECT_CAMERA_CONTROL" - }, - { - "index": 97, - "filename": "setuppoint", - "build-id": "ASSET_OBJECT_SETUPPOINT" - }, - { - "index": 98, - "filename": "animator", - "build-id": "ASSET_OBJECT_ANIMATOR" - }, - { - "index": 99, - "filename": "texscroll", - "build-id": "ASSET_OBJECT_TEXSCROLL" - }, - { - "index": 100, - "filename": "rgbalight", - "build-id": "ASSET_OBJECT_RGBALIGHT" - }, - { - "index": 101, - "filename": "introcam", - "build-id": "ASSET_OBJECT_INTROCAM" - }, - { - "index": 102, - "filename": "weather", - "build-id": "ASSET_OBJECT_WEATHER" - }, - { - "index": 103, - "filename": "lensflare", - "build-id": "ASSET_OBJECT_LENSFLARE" - }, - { - "index": 104, - "filename": "lensflareswitch", - "build-id": "ASSET_OBJECT_LENSFLARESWITCH" - }, - { - "index": 105, - "filename": "InfoPoint", - "build-id": "ASSET_OBJECT_INFOPOINT" - }, - { - "index": 106, - "filename": "wavegenerator", - "build-id": "ASSET_OBJECT_WAVEGENERATOR" - }, - { - "index": 107, - "filename": "wavepower", - "build-id": "ASSET_OBJECT_WAVEPOWER" - }, - { - "index": 108, - "filename": "RangeTrigger", - "build-id": "ASSET_OBJECT_RANGETRIGGER" - }, - { - "index": 109, - "filename": "lavaspurt", - "build-id": "ASSET_OBJECT_LAVASPURT" - }, - { - "index": 110, - "filename": "bombexplosion", - "build-id": "ASSET_OBJECT_BOMBEXPLOSION" - }, - { - "index": 111, - "filename": "wardensmoke", - "build-id": "ASSET_OBJECT_WARDENSMOKE" - }, - { - "index": 112, - "filename": "bubbler", - "build-id": "ASSET_OBJECT_BUBBLER" - }, - { - "index": 113, - "filename": "WeaponBalloon", - "build-id": "ASSET_OBJECT_WEAPONBALLOON" - }, - { - "index": 114, - "filename": "wballoonpop", - "build-id": "ASSET_OBJECT_WBALLOONPOP" - }, - { - "index": 115, - "filename": "MissileGlow", - "build-id": "ASSET_OBJECT_MISSILEGLOW" - }, - { - "index": 116, - "filename": "HomingGlow", - "build-id": "ASSET_OBJECT_HOMINGGLOW" - }, - { - "index": 117, - "filename": "Missile", - "build-id": "ASSET_OBJECT_MISSILE" - }, - { - "index": 118, - "filename": "Homing", - "build-id": "ASSET_OBJECT_HOMING" - }, - { - "index": 119, - "filename": "OilSlick", - "build-id": "ASSET_OBJECT_OILSLICK" - }, - { - "index": 120, - "filename": "SmokeCloud", - "build-id": "ASSET_OBJECT_SMOKECLOUD" - }, - { - "index": 121, - "filename": "Bomb", - "build-id": "ASSET_OBJECT_BOMB" - }, - { - "index": 122, - "filename": "BubbleWeapon", - "build-id": "ASSET_OBJECT_BUBBLEWEAPON" - }, - { - "index": 123, - "filename": "WorldKey", - "build-id": "ASSET_OBJECT_WORLDKEY" - }, - { - "index": 124, - "filename": "CoinCreator", - "build-id": "ASSET_OBJECT_COINCREATOR" - }, - { - "index": 125, - "filename": "TreasureSucker", - "build-id": "ASSET_OBJECT_TREASURESUCKER" - }, - { - "index": 126, - "filename": "Coin", - "build-id": "ASSET_OBJECT_COIN" - }, - { - "index": 127, - "filename": "SilverCoin", - "build-id": "ASSET_OBJECT_SILVERCOIN" - }, - { - "index": 128, - "filename": "GoldCoin", - "build-id": "ASSET_OBJECT_GOLDCOIN" - }, - { - "index": 129, - "filename": "BonusGem", - "build-id": "ASSET_OBJECT_BONUSGEM" - }, - { - "index": 130, - "filename": "CollectEgg", - "build-id": "ASSET_OBJECT_COLLECTEGG" - }, - { - "index": 131, - "filename": "EggCreator", - "build-id": "ASSET_OBJECT_EGGCREATOR" - }, - { - "index": 132, - "filename": "CharacterFlag", - "build-id": "ASSET_OBJECT_CHARACTERFLAG" - }, - { - "index": 133, - "filename": "Animation", - "build-id": "ASSET_OBJECT_ANIMATION" - }, - { - "index": 134, - "filename": "OverRidePos", - "build-id": "ASSET_OBJECT_OVERRIDEPOS" - }, - { - "index": 135, - "filename": "AnimCamera", - "build-id": "ASSET_OBJECT_ANIMCAMERA" - }, - { - "index": 136, - "filename": "AnimCar", - "build-id": "ASSET_OBJECT_ANIMCAR" - }, - { - "index": 137, - "filename": "AnimDome", - "build-id": "ASSET_OBJECT_ANIMDOME" - }, - { - "index": 138, - "filename": "Wizghosts", - "build-id": "ASSET_OBJECT_WIZGHOSTS" - }, - { - "index": 139, - "filename": "N64logo", - "build-id": "ASSET_OBJECT_N64LOGO" - }, - { - "index": 140, - "filename": "Asteroid", - "build-id": "ASSET_OBJECT_ASTEROID" - }, - { - "index": 141, - "filename": "pillar", - "build-id": "ASSET_OBJECT_PILLAR" - }, - { - "index": 142, - "filename": "boulderanim", - "build-id": "ASSET_OBJECT_BOULDERANIM" - }, - { - "index": 143, - "filename": "pigheadcolours", - "build-id": "ASSET_OBJECT_PIGHEADCOLOURS" - }, - { - "index": 144, - "filename": "pigfaceanimator", - "build-id": "ASSET_OBJECT_PIGFACEANIMATOR" - }, - { - "index": 145, - "filename": "pterodactyl", - "build-id": "ASSET_OBJECT_PTERODACTYL" - }, - { - "index": 146, - "filename": "amuletpiece1", - "build-id": "ASSET_OBJECT_AMULETPIECE1" - }, - { - "index": 147, - "filename": "amuletpiece2", - "build-id": "ASSET_OBJECT_AMULETPIECE2" - }, - { - "index": 148, - "filename": "amuletpiece3", - "build-id": "ASSET_OBJECT_AMULETPIECE3" - }, - { - "index": 149, - "filename": "amuletpiece4", - "build-id": "ASSET_OBJECT_AMULETPIECE4" - }, - { - "index": 150, - "filename": "swamulet1", - "build-id": "ASSET_OBJECT_SWAMULET1" - }, - { - "index": 151, - "filename": "swamulet2", - "build-id": "ASSET_OBJECT_SWAMULET2" - }, - { - "index": 152, - "filename": "swamulet3", - "build-id": "ASSET_OBJECT_SWAMULET3" - }, - { - "index": 153, - "filename": "swamulet4", - "build-id": "ASSET_OBJECT_SWAMULET4" - }, - { - "index": 154, - "filename": "AnimKey", - "build-id": "ASSET_OBJECT_ANIMKEY" - }, - { - "index": 155, - "filename": "SpaceShip1", - "build-id": "ASSET_OBJECT_SPACESHIP1" - }, - { - "index": 156, - "filename": "MiniShip", - "build-id": "ASSET_OBJECT_MINISHIP" - }, - { - "index": 157, - "filename": "MonoRail", - "build-id": "ASSET_OBJECT_MONORAIL" - }, - { - "index": 158, - "filename": "SpaceShip2", - "build-id": "ASSET_OBJECT_SPACESHIP2" - }, - { - "index": 159, - "filename": "SpaceShip3", - "build-id": "ASSET_OBJECT_SPACESHIP3" - }, - { - "index": 160, - "filename": "Lighthouse", - "build-id": "ASSET_OBJECT_LIGHTHOUSE" - }, - { - "index": 161, - "filename": "rocketsignpost", - "build-id": "ASSET_OBJECT_ROCKETSIGNPOST" - }, - { - "index": 162, - "filename": "lighthouse1", - "build-id": "ASSET_OBJECT_LIGHTHOUSE1" - }, - { - "index": 163, - "filename": "lighthouse2", - "build-id": "ASSET_OBJECT_LIGHTHOUSE2" - }, - { - "index": 164, - "filename": "SelectionHill", - "build-id": "ASSET_OBJECT_SELECTIONHILL" - }, - { - "index": 165, - "filename": "Widescreen", - "build-id": "ASSET_OBJECT_WIDESCREEN" - }, - { - "index": 166, - "filename": "TigerAnimPlane", - "build-id": "ASSET_OBJECT_TIGERANIMPLANE" - }, - { - "index": 167, - "filename": "BadgerAnimWalk", - "build-id": "ASSET_OBJECT_BADGERANIMWALK" - }, - { - "index": 168, - "filename": "Timberanimcar", - "build-id": "ASSET_OBJECT_TIMBERANIMCAR" - }, - { - "index": 169, - "filename": "KremSelect", - "build-id": "ASSET_OBJECT_KREMSELECT" - }, - { - "index": 170, - "filename": "ConkSelect", - "build-id": "ASSET_OBJECT_CONKSELECT" - }, - { - "index": 171, - "filename": "BadgerSelect", - "build-id": "ASSET_OBJECT_BADGERSELECT" - }, - { - "index": 172, - "filename": "TortSelect", - "build-id": "ASSET_OBJECT_TORTSELECT" - }, - { - "index": 173, - "filename": "TigerSelect", - "build-id": "ASSET_OBJECT_TIGERSELECT" - }, - { - "index": 174, - "filename": "DiddySelect", - "build-id": "ASSET_OBJECT_DIDDYSELECT" - }, - { - "index": 175, - "filename": "BanjoSelect", - "build-id": "ASSET_OBJECT_BANJOSELECT" - }, - { - "index": 176, - "filename": "ChickSelect", - "build-id": "ASSET_OBJECT_CHICKSELECT" - }, - { - "index": 177, - "filename": "MouseSelect", - "build-id": "ASSET_OBJECT_MOUSESELECT" - }, - { - "index": 178, - "filename": "MagicCarpet", - "build-id": "ASSET_OBJECT_MAGICCARPET" - }, - { - "index": 179, - "filename": "PolyGoldBaloon", - "build-id": "ASSET_OBJECT_POLYGOLDBALOON" - }, - { - "index": 180, - "filename": "AnimGenie", - "build-id": "ASSET_OBJECT_ANIMGENIE" - }, - { - "index": 181, - "filename": "AnimGenie3", - "build-id": "ASSET_OBJECT_ANIMGENIE3" - }, - { - "index": 182, - "filename": "ButterflyBait", - "build-id": "ASSET_OBJECT_BUTTERFLYBAIT" - }, - { - "index": 183, - "filename": "audio", - "build-id": "ASSET_OBJECT_AUDIO" - }, - { - "index": 184, - "filename": "audioline", - "build-id": "ASSET_OBJECT_AUDIOLINE" - }, - { - "index": 185, - "filename": "audioseqline", - "build-id": "ASSET_OBJECT_AUDIOSEQLINE" - }, - { - "index": 186, - "filename": "audioseq", - "build-id": "ASSET_OBJECT_AUDIOSEQ" - }, - { - "index": 187, - "filename": "audioreverb", - "build-id": "ASSET_OBJECT_AUDIOREVERB" - }, - { - "index": 188, - "filename": "fronttyre", - "build-id": "ASSET_OBJECT_FRONTTYRE" - }, - { - "index": 189, - "filename": "backtyre", - "build-id": "ASSET_OBJECT_BACKTYRE" - }, - { - "index": 190, - "filename": "planetyre", - "build-id": "ASSET_OBJECT_PLANETYRE" - }, - { - "index": 191, - "filename": "fan", - "build-id": "ASSET_OBJECT_FAN" - }, - { - "index": 192, - "filename": "jetengine", - "build-id": "ASSET_OBJECT_JETENGINE" - }, - { - "index": 193, - "filename": "glove", - "build-id": "ASSET_OBJECT_GLOVE" - }, - { - "index": 194, - "filename": "Leefan", - "build-id": "ASSET_OBJECT_LEEFAN" - }, - { - "index": 195, - "filename": "MagicRing", - "build-id": "ASSET_OBJECT_MAGICRING" - }, - { - "index": 196, - "filename": "dome", - "build-id": "ASSET_OBJECT_DOME" - }, - { - "index": 197, - "filename": "dome1", - "build-id": "ASSET_OBJECT_DOME1" - }, - { - "index": 198, - "filename": "dome2", - "build-id": "ASSET_OBJECT_DOME2" - }, - { - "index": 199, - "filename": "dome3", - "build-id": "ASSET_OBJECT_DOME3" - }, - { - "index": 200, - "filename": "dome4", - "build-id": "ASSET_OBJECT_DOME4" - }, - { - "index": 201, - "filename": "dome5", - "build-id": "ASSET_OBJECT_DOME5" - }, - { - "index": 202, - "filename": "dome6", - "build-id": "ASSET_OBJECT_DOME6" - }, - { - "index": 203, - "filename": "dome7", - "build-id": "ASSET_OBJECT_DOME7" - }, - { - "index": 204, - "filename": "dome8", - "build-id": "ASSET_OBJECT_DOME8" - }, - { - "index": 205, - "filename": "dome9", - "build-id": "ASSET_OBJECT_DOME9" - }, - { - "index": 206, - "filename": "dome10", - "build-id": "ASSET_OBJECT_DOME10" - }, - { - "index": 207, - "filename": "dome11", - "build-id": "ASSET_OBJECT_DOME11" - }, - { - "index": 208, - "filename": "dome12", - "build-id": "ASSET_OBJECT_DOME12" - }, - { - "index": 209, - "filename": "dome13", - "build-id": "ASSET_OBJECT_DOME13" - }, - { - "index": 210, - "filename": "dome14", - "build-id": "ASSET_OBJECT_DOME14" - }, - { - "index": 211, - "filename": "dome15", - "build-id": "ASSET_OBJECT_DOME15" - }, - { - "index": 212, - "filename": "dome16", - "build-id": "ASSET_OBJECT_DOME16" - }, - { - "index": 213, - "filename": "dome17", - "build-id": "ASSET_OBJECT_DOME17" - }, - { - "index": 214, - "filename": "selectionshadow", - "build-id": "ASSET_OBJECT_SELECTIONSHADOW" - }, - { - "index": 215, - "filename": "postforparty", - "build-id": "ASSET_OBJECT_POSTFORPARTY" - }, - { - "index": 216, - "filename": "Rarelogo", - "build-id": "ASSET_OBJECT_RARELOGO" - }, - { - "index": 217, - "filename": "sparklything", - "build-id": "ASSET_OBJECT_SPARKLYTHING" - }, - { - "index": 218, - "filename": "DoorOpener", - "build-id": "ASSET_OBJECT_DOOROPENER" - }, - { - "index": 219, - "filename": "AnimDinosaur2", - "build-id": "ASSET_OBJECT_ANIMDINOSAUR2" - }, - { - "index": 220, - "filename": "Timeranimhover", - "build-id": "ASSET_OBJECT_TIMERANIMHOVER" - }, - { - "index": 221, - "filename": "AnimBadgerPlane", - "build-id": "ASSET_OBJECT_ANIMBADGERPLANE" - }, - { - "index": 222, - "filename": "AnimDinosaur1", - "build-id": "ASSET_OBJECT_ANIMDINOSAUR1" - }, - { - "index": 223, - "filename": "AnimMouseCar", - "build-id": "ASSET_OBJECT_ANIMMOUSECAR" - }, - { - "index": 224, - "filename": "Animtort", - "build-id": "ASSET_OBJECT_ANIMTORT" - }, - { - "index": 225, - "filename": "ChickenAnimPlan", - "build-id": "ASSET_OBJECT_CHICKENANIMPLAN" - }, - { - "index": 226, - "filename": "EmptyHoverAnim", - "build-id": "ASSET_OBJECT_EMPTYHOVERANIM" - }, - { - "index": 227, - "filename": "KremAnim", - "build-id": "ASSET_OBJECT_KREMANIM" - }, - { - "index": 228, - "filename": "MouseHoverAnim", - "build-id": "ASSET_OBJECT_MOUSEHOVERANIM" - }, - { - "index": 229, - "filename": "TortRunner", - "build-id": "ASSET_OBJECT_TORTRUNNER" - }, - { - "index": 230, - "filename": "AnimBanjoPlane", - "build-id": "ASSET_OBJECT_ANIMBANJOPLANE" - }, - { - "index": 231, - "filename": "Conkaanimcar", - "build-id": "ASSET_OBJECT_CONKAANIMCAR" - }, - { - "index": 232, - "filename": "GBParkwarden", - "build-id": "ASSET_OBJECT_GBPARKWARDEN" - }, - { - "index": 233, - "filename": "Wizpig", - "build-id": "ASSET_OBJECT_WIZPIG" - }, - { - "index": 234, - "filename": "WizpigRocket", - "build-id": "ASSET_OBJECT_WIZPIGROCKET" - }, - { - "index": 235, - "filename": "Pigboss", - "build-id": "ASSET_OBJECT_PIGBOSS" - }, - { - "index": 236, - "filename": "Pigboss2", - "build-id": "ASSET_OBJECT_PIGBOSS2" - }, - { - "index": 237, - "filename": "PigRocketeer", - "build-id": "ASSET_OBJECT_PIGROCKETEER" - }, - { - "index": 238, - "filename": "Particles2", - "build-id": "ASSET_OBJECT_PARTICLES2" - }, - { - "index": 239, - "filename": "Pigboulder", - "build-id": "ASSET_OBJECT_PIGBOULDER" - }, - { - "index": 240, - "filename": "Bigplanet", - "build-id": "ASSET_OBJECT_BIGPLANET" - }, - { - "index": 241, - "filename": "rocketbit1", - "build-id": "ASSET_OBJECT_ROCKETBIT1" - }, - { - "index": 242, - "filename": "rocketbit2", - "build-id": "ASSET_OBJECT_ROCKETBIT2" - }, - { - "index": 243, - "filename": "Geniehead", - "build-id": "ASSET_OBJECT_GENIEHEAD" - }, - { - "index": 244, - "filename": "Pigboulder2", - "build-id": "ASSET_OBJECT_PIGBOULDER2" - }, - { - "index": 245, - "filename": "Pigboulder3", - "build-id": "ASSET_OBJECT_PIGBOULDER3" - }, - { - "index": 246, - "filename": "Pigboulder4", - "build-id": "ASSET_OBJECT_PIGBOULDER4" - }, - { - "index": 247, - "filename": "Pigboulder5", - "build-id": "ASSET_OBJECT_PIGBOULDER5" - }, - { - "index": 248, - "filename": "Trickytops", - "build-id": "ASSET_OBJECT_TRICKYTOPS" - }, - { - "index": 249, - "filename": "Trickyanim", - "build-id": "ASSET_OBJECT_TRICKYANIM" - }, - { - "index": 250, - "filename": "Trickyanim2", - "build-id": "ASSET_OBJECT_TRICKYANIM2" - }, - { - "index": 251, - "filename": "Trickyanim3", - "build-id": "ASSET_OBJECT_TRICKYANIM3" - }, - { - "index": 252, - "filename": "Walrus_anim", - "build-id": "ASSET_OBJECT_WALRUS_ANIM" - }, - { - "index": 253, - "filename": "Terryboss", - "build-id": "ASSET_OBJECT_TERRYBOSS" - }, - { - "index": 254, - "filename": "Dragonboss", - "build-id": "ASSET_OBJECT_DRAGONBOSS" - }, - { - "index": 255, - "filename": "DragonAnim", - "build-id": "ASSET_OBJECT_DRAGONANIM" - }, - { - "index": 256, - "filename": "Walrus", - "build-id": "ASSET_OBJECT_WALRUS" - }, - { - "index": 257, - "filename": "SnowballBoss", - "build-id": "ASSET_OBJECT_SNOWBALLBOSS" - }, - { - "index": 258, - "filename": "animocto", - "build-id": "ASSET_OBJECT_ANIMOCTO" - }, - { - "index": 259, - "filename": "octopus", - "build-id": "ASSET_OBJECT_OCTOPUS" - }, - { - "index": 260, - "filename": "GoldBaloonSprit", - "build-id": "ASSET_OBJECT_GOLDBALOONSPRIT" - }, - { - "index": 261, - "filename": "SpaceColumn1", - "build-id": "ASSET_OBJECT_SPACECOLUMN1" - }, - { - "index": 262, - "filename": "SpaceColumn2", - "build-id": "ASSET_OBJECT_SPACECOLUMN2" - }, - { - "index": 263, - "filename": "SpaceColumn3", - "build-id": "ASSET_OBJECT_SPACECOLUMN3" - }, - { - "index": 264, - "filename": "Haystack", - "build-id": "ASSET_OBJECT_HAYSTACK" - }, - { - "index": 265, - "filename": "AnimGenie2", - "build-id": "ASSET_OBJECT_ANIMGENIE2" - }, - { - "index": 266, - "filename": "Brightstar", - "build-id": "ASSET_OBJECT_BRIGHTSTAR" - }, - { - "index": 267, - "filename": "Butterfly", - "build-id": "ASSET_OBJECT_BUTTERFLY" - }, - { - "index": 268, - "filename": "Fish", - "build-id": "ASSET_OBJECT_FISH" - }, - { - "index": 269, - "filename": "Frog", - "build-id": "ASSET_OBJECT_FROG" - }, - { - "index": 270, - "filename": "Boost", - "build-id": "ASSET_OBJECT_BOOST" - }, - { - "index": 271, - "filename": "MagnetFX", - "build-id": "ASSET_OBJECT_MAGNETFX" - }, - { - "index": 272, - "filename": "stillfrog", - "build-id": "ASSET_OBJECT_STILLFROG" - }, - { - "index": 273, - "filename": "stopwatchicon", - "build-id": "ASSET_OBJECT_STOPWATCHICON" - }, - { - "index": 274, - "filename": "stopwatchhand", - "build-id": "ASSET_OBJECT_STOPWATCHHAND" - }, - { - "index": 275, - "filename": "bridge", - "build-id": "ASSET_OBJECT_BRIDGE" - }, - { - "index": 276, - "filename": "posarrow", - "build-id": "ASSET_OBJECT_POSARROW" - }, - { - "index": 277, - "filename": "hittester", - "build-id": "ASSET_OBJECT_HITTESTER" - }, - { - "index": 278, - "filename": "midifade", - "build-id": "ASSET_OBJECT_MIDIFADE" - }, - { - "index": 279, - "filename": "windsail", - "build-id": "ASSET_OBJECT_WINDSAIL" - }, - { - "index": 280, - "filename": "EffectBox", - "build-id": "ASSET_OBJECT_EFFECTBOX" - }, - { - "index": 281, - "filename": "trophycab", - "build-id": "ASSET_OBJECT_TROPHYCAB" - }, - { - "index": 282, - "filename": "FlyCoin", - "build-id": "ASSET_OBJECT_FLYCOIN" - }, - { - "index": 283, - "filename": "GoldenBalloon", - "build-id": "ASSET_OBJECT_GOLDENBALLOON" - }, - { - "index": 284, - "filename": "laserbolt", - "build-id": "ASSET_OBJECT_LASERBOLT" - }, - { - "index": 285, - "filename": "lasergun", - "build-id": "ASSET_OBJECT_LASERGUN" - }, - { - "index": 286, - "filename": "boltglow", - "build-id": "ASSET_OBJECT_BOLTGLOW" - }, - { - "index": 287, - "filename": "GroundZipper", - "build-id": "ASSET_OBJECT_GROUNDZIPPER" - }, - { - "index": 288, - "filename": "PWSafeTelepoint", - "build-id": "ASSET_OBJECT_PWSAFETELEPOINT" - }, - { - "index": 289, - "filename": "HeadForPoint", - "build-id": "ASSET_OBJECT_HEADFORPOINT" - }, - { - "index": 290, - "filename": "FireballAttract", - "build-id": "ASSET_OBJECT_FIREBALLATTRACT" - }, - { - "index": 291, - "filename": "Fireball", - "build-id": "ASSET_OBJECT_FIREBALL" - }, - { - "index": 292, - "filename": "OctoBubble", - "build-id": "ASSET_OBJECT_OCTOBUBBLE" - }, - { - "index": 293, - "filename": "OctoBomb", - "build-id": "ASSET_OBJECT_OCTOBOMB" - }, - { - "index": 294, - "filename": "GoldTrophy", - "build-id": "ASSET_OBJECT_GOLDTROPHY" - }, - { - "index": 295, - "filename": "Parktrophy", - "build-id": "ASSET_OBJECT_PARKTROPHY" - }, - { - "index": 296, - "filename": "Ticktrophy", - "build-id": "ASSET_OBJECT_TICKTROPHY" - }, - { - "index": 297, - "filename": "Trophy", - "build-id": "ASSET_OBJECT_TROPHY" - }, - { - "index": 298, - "filename": "Teleport", - "build-id": "ASSET_OBJECT_TELEPORT" - }, - { - "index": 299, - "filename": "Shield", - "build-id": "ASSET_OBJECT_SHIELD" - }, - { - "index": 300, - "filename": "Lightning", - "build-id": "ASSET_OBJECT_LIGHTNING" - }, - { - "index": 301, - "filename": "midifadepoint", - "build-id": "ASSET_OBJECT_MIDIFADEPOINT" - }, - { - "index": 302, - "filename": "levelname", - "build-id": "ASSET_OBJECT_LEVELNAME" - }, - { - "index": 303, - "filename": "midichset", - "build-id": "ASSET_OBJECT_MIDICHSET" - } - ] - }, - { - "build-id": "ASSET_LEVEL_OBJECT_TRANSLATION_TABLE", - "type": "LevelObjectTranslationTable", - "folder": "objects", - "files": [ - { - "filename": "level_object_translation_table" - } - ] - }, - { - "build-id": "ASSET_EMPTY_37_TABLE", - "type": "Table", - "for": "ASSET_EMPTY_37" - }, - { - "build-id": "ASSET_EMPTY_37", - "type": "Empty", - "table": 36 - }, - { - "build-id": "ASSET_AUDIO_TABLE", - "type": "Table", - "for": "ASSET_AUDIO" - }, - { - "build-id": "ASSET_AUDIO", - "type": "Audio", - "folder": "audio", - "table": 38 - }, - { - "build-id": "ASSET_PARTICLES_TABLE", - "type": "Table", - "for": "ASSET_PARTICLES" - }, - { - "build-id": "ASSET_PARTICLES", - "type": "Particle", - "folder": "particles/particles", - "table": 40 - }, - { - "build-id": "ASSET_PARTICLE_BEHAVIORS_TABLE", - "type": "Table", - "for": "ASSET_PARTICLE_BEHAVIORS" - }, - { - "build-id": "ASSET_PARTICLE_BEHAVIORS", - "type": "ParticleBehavior", - "folder": "particles/behaviors", - "table": 42 - }, - { - "build-id": "ASSET_FONTS", - "type": "Fonts", - "folder": "fonts", - "files": [ - { - "filename": "fonts" - } - ], - "font-names": [ - "FunFont", - "SmallFont", - "BigFont", - "SubtitleFont" - ] - }, - { - "build-id": "ASSET_BINARY_45", - "type": "Binary", - "folder": "fonts" - }, - { - "build-id": "ASSET_BINARY_46", - "type": "Binary", - "folder": "fonts" - }, - { - "build-id": "ASSET_BINARY_47", - "type": "Binary", - "folder": "ids" - }, - { - "build-id": "ASSET_TTGHOSTS_TABLE", - "type": "Table", - "for": "ASSET_TTGHOSTS" - }, - { - "build-id": "ASSET_TTGHOSTS", - "type": "TTGhost", - "folder": "tt_ghosts", - "table": 48, - "files": [ - { - "index": 0, - "filename": "FossilCanyonGhost", - "build-id": "ASSET_TTGHOSTS_FOSSILCANYON" - }, - { - "index": 1, - "filename": "PirateLagoonGhost", - "build-id": "ASSET_TTGHOSTS_PIRATELAGOON" - }, - { - "index": 2, - "filename": "AncientLakeGhost", - "build-id": "ASSET_TTGHOSTS_ANCIENTLAKE" - }, - { - "index": 3, - "filename": "WalrusCoveGhost", - "build-id": "ASSET_TTGHOSTS_WALRUSCOVE" - }, - { - "index": 4, - "filename": "HotTopVolcanoGhost", - "build-id": "ASSET_TTGHOSTS_HOTTOPVOLCANO" - }, - { - "index": 5, - "filename": "WhaleBayGhost", - "build-id": "ASSET_TTGHOSTS_WHALEBAY" - }, - { - "index": 6, - "filename": "SnowballValleyGhost", - "build-id": "ASSET_TTGHOSTS_SNOWBALLVALLEY" - }, - { - "index": 7, - "filename": "CrescentIslandGhost", - "build-id": "ASSET_TTGHOSTS_CRESCENTISLAND" - }, - { - "index": 8, - "filename": "EverfrostPeakGhost", - "build-id": "ASSET_TTGHOSTS_EVERFROSTPEAK" - }, - { - "index": 9, - "filename": "SpaceportAlphaGhost", - "build-id": "ASSET_TTGHOSTS_SPACEPORTALPHA" - }, - { - "index": 10, - "filename": "SpacedustAlleyGhost", - "build-id": "ASSET_TTGHOSTS_SPACEDUSTALLEY" - }, - { - "index": 11, - "filename": "GreenwoodVillageGhost", - "build-id": "ASSET_TTGHOSTS_GREENWOODVILLAGE" - }, - { - "index": 12, - "filename": "BoulderCanyonGhost", - "build-id": "ASSET_TTGHOSTS_BOULDERCANYON" - }, - { - "index": 13, - "filename": "WindmillPlainsGhost", - "build-id": "ASSET_TTGHOSTS_WINDMILLPLAINS" - }, - { - "index": 14, - "filename": "FrostyVillageGhost", - "build-id": "ASSET_TTGHOSTS_FROSTYVILLAGE" - }, - { - "index": 15, - "filename": "JungleFallsGhost", - "build-id": "ASSET_TTGHOSTS_JUNGLEFALLS" - }, - { - "index": 16, - "filename": "TreasureCavesGhost", - "build-id": "ASSET_TTGHOSTS_TREASURECAVES" - }, - { - "index": 17, - "filename": "HauntedWoodsGhost", - "build-id": "ASSET_TTGHOSTS_HAUNTEDWOODS" - }, - { - "index": 18, - "filename": "DarkmoonCavernsGhost", - "build-id": "ASSET_TTGHOSTS_DARKMOONCAVERNS" - }, - { - "index": 19, - "filename": "StarCityGhost", - "build-id": "ASSET_TTGHOSTS_STARCITY" - } - ] - } - ], - "misc": { - "default-object-entries-order": [ - "LevelObjectEntryCommon", - "LevelObjectEntry_Racer", - "LevelObjectEntry_Scenery", - "LevelObjectEntry_Fish", - "LevelObjectEntry_Animator", - "LevelObjectEntry_Weapon", - "LevelObjectEntry_Smoke", - "LevelObjectEntry_Exit", - "LevelObjectEntry_Audio", - "LevelObjectEntry_AudioLine", - "LevelObjectEntry_CameraControl", - "LevelObjectEntry_SetupPoint", - "LevelObjectEntry_Dino_Whale", - "LevelObjectEntry_Checkpoint", - "LevelObjectEntry_Door", - "LevelObjectEntry_FogChanger", - "LevelObjectEntry_AiNode", - "LevelObjectEntry_WeaponBalloon", - "LevelObjectEntry_Weapon", - "LevelObjectEntry_AudioSeqLine", - "LevelObjectEntry_Unknown20", - "LevelObjectEntry_Unknown21", - "LevelObjectEntry_BombExplosion", - "LevelObjectEntryCommon", - "LevelObjectEntry_Unknown24", - "LevelObjectEntry_Unknown25", - "LevelObjectEntry_SkyControl", - "LevelObjectEntry_AudioReverb", - "LevelObjectEntry_Torch_Mist", - "LevelObjectEntry_TexScroll", - "LevelObjectEntry_ModeChange", - "LevelObjectEntry_StopWatchMan", - "LevelObjectEntry_Banana", - "LevelObjectEntry_RgbaLight", - "LevelObjectEntry_Unknown34", - "LevelObjectEntry_Unknown35", - "LevelObjectEntry_Buoy_PirateShip", - "LevelObjectEntry_Weather", - "LevelObjectEntry_Bridge_WhaleRamp", - "LevelObjectEntry_RampSwitch", - "LevelObjectEntry_SeaMonster", - "LevelObjectEntry_Bonus", - "LevelObjectEntry_Unknown42", - "LevelObjectEntry_LensFlare", - "LevelObjectEntry_LensFlareSwitch", - "LevelObjectEntry_CollectEgg", - "LevelObjectEntry_EggCreator", - "LevelObjectEntry_CharacterFlag", - "LevelObjectEntry_Unknown48", - "LevelObjectEntry_Animation", - "LevelObjectEntry_AnimatedObject", - "LevelObjectEntry_CameraAnimation", - "LevelObjectEntry_InfoPoint", - "LevelObjectEntryCommon", - "LevelObjectEntry_CharacterSelect", - "LevelObjectEntry_Trigger", - "LevelObjectEntryCommon", - "LevelObjectEntry_AirZippers_WaterZippers", - "LevelObjectEntry_TimeTrial_Ghost", - "LevelObjectEntry_WaveGenerator", - "LevelObjectEntry_WavePower", - "LevelObjectEntry_Butterfly", - "LevelObjectEntry_Parkwarden", - "LevelObjectEntry_Unknown63", - "LevelObjectEntry_WorldKey", - "LevelObjectEntry_BananaCreator", - "LevelObjectEntry_TreasureSucker", - "LevelObjectEntry_Log", - "LevelObjectEntry_LavaSpurt", - "LevelObjectEntry_PosArrow", - "LevelObjectEntry_HitTester", - "LevelObjectEntry_MidiFade", - "LevelObjectEntry_HitTester", - "LevelObjectEntry_EffectBox", - "LevelObjectEntry_TrophyCab", - "LevelObjectEntry_Bubbler", - "LevelObjectEntry_FlyCoin", - "LevelObjectEntry_GoldenBalloon", - "LevelObjectEntry_Laserbolt", - "LevelObjectEntry_Lasergun", - "LevelObjectEntry_ParkWarden", - "LevelObjectEntry_AnimatedObject", - "LevelObjectEntry_GroundZipper", - "LevelObjectEntry_OverridePos", - "LevelObjectEntry_WizpigShip", - "LevelObjectEntry_AnimatedObject", - "LevelObjectEntry_AnimatedObject", - "LevelObjectEntry_TajTelepoint", - "LevelObjectEntry_SilverCoin", - "LevelObjectEntry_Boost", - "LevelObjectEntry_WardenSmoke", - "LevelObjectEntry_Unknown91", - "LevelObjectEntry_Unknown92", - "LevelObjectEntry_AirZippers_WaterZippers", - "LevelObjectEntry_Unknown94", - "LevelObjectEntry_DynamicLightObject2", - "LevelObjectEntry_Snowball", - "LevelObjectEntry_Snowball", - "LevelObjectEntry_Teleport", - "LevelObjectEntry_Lighthouse_RocketSignpost", - "LevelObjectEntry_Lighthouse_RocketSignpost", - "LevelObjectEntry_Snowball", - "LevelObjectEntry_Snowball", - "LevelObjectEntry_HitTester", - "LevelObjectEntry_HitTester", - "LevelObjectEntry_RangeTrigger", - "LevelObjectEntry_Unknown106", - "LevelObjectEntry_BossHazardTrigger", - "LevelObjectEntry_Fireball_Octoweapon", - "LevelObjectEntry_Frog", - "LevelObjectEntry_SilverCoinAdv2", - "LevelObjectEntry_TTDoor", - "LevelObjectEntry_MidiFadePoint", - "LevelObjectEntry_DoorOpener", - "LevelObjectEntry_Unknown114", - "LevelObjectEntry_PigRocketeer", - "LevelObjectEntry_Fireball_Octoweapon", - "LevelObjectEntry_LevelName", - "LevelObjectEntry_Midichset", - "LevelObjectEntry_WizpigGhosts", - "LevelObjectEntry_Unknown120", - "LevelObjectEntry_Unknown121", - "LevelObjectEntry_Unknown122", - "LevelObjectEntry_Unknown123", - "LevelObjectEntry_Unknown124", - "LevelObjectEntry_Unknown125", - "LevelObjectEntry_Unknown126", - "LevelObjectEntry_Unknown127" - ] - } - } -} \ No newline at end of file diff --git a/extract-ver/us_1.1.config.json b/extract-ver/us_1.1.config.json deleted file mode 100644 index 65f3dfff..00000000 --- a/extract-ver/us_1.1.config.json +++ /dev/null @@ -1,416 +0,0 @@ -{ - "config-name" : "Diddy Kong Racing (USA v1.1)", - "checksum-md5" : "b31f8cca50f31acc9b999ed5b779d6ed", - "subfolder" : "us_1.1", - "code" : { - "sections" : [ - { - "type": "NoExtract", - "folder" : "", - "files" : [ - { "filename": "work-in-progress", "length" : "0xED0E0" } - ] - } - ] - }, - "assets" : { - "sections": [ - { - "type": "Binary", - "folder": "ai-racers", - "table": 1 - }, - { "type": "Table" }, - { - "type": "Textures", - "folder": "textures/3d", - "table": 3, - "flip-textures": [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] - }, - { "type": "Table" }, - { - "type": "Textures", - "folder": "textures/2d", - "table": 5, - "flip-textures" : [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] - }, - { "type": "Table" }, - { - "type": "GameText", - "folder": "text/game", - "table": 7 - }, - { "type": "Table" }, - { - "type": "MenuText", - "folder": "text/menu", - "table": 9, - "filenames": [ - "english_menu_text", - "german_menu_text", - "french_menu_text", - "japanese_menu_text" - ] - }, - { "type": "Table" }, - { "type": "Empty", "table": 11}, - { "type": "Table" }, - { - "type": "Sprites", - "folder": "sprites", - "table": 13 - }, - { "type": "Table" }, - { "type": "Empty" }, - { - "type": "Miscellaneous", - "folder": "misc", - "table": 16, - "filenames": [ - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "tracks_menu_ids", - "hub_area_ids", - "main_tracks_ids", - "battle_tracks_ids", - "boss_tracks_ids", - "", - "", - "RacerStats_Unknown0", - "RacerStats_Diddy", - "RacerStats_TT", - "RacerStats_Unknown1", - "RacerStats_Krunch", - "RacerStats_Bumper", - "RacerStats_Tiptup", - "RacerStats_Conker", - "RacerStats_Timber", - "RacerStats_Banjo", - "RacerStats_Drumstick", - "RacerStats_Pipsy", - "RacerStats_Unknown2", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "magic_codes", - "title_screen_demo_ids", - "", - "", - "", - "" - ] - }, - { "type": "Table" }, - { - "type": "Binary", - "folder": "ids", - "filenames": [ "hud_element_ids" ] - }, - { - "type": "Binary", - "folder": "ids", - "filenames": [ "menu_element_ids" ] - }, - { - "type": "Binary", - "folder": "bin", - "filenames": [ "unknown_table" ] - }, - { "type": "Table" }, - { - "type": "LevelObjectMap", - "folder": "levels/objectMaps", - "table": 20 - }, - { "type": "Table" }, - { - "type": "LevelHeaders", - "folder": "levels/headers", - "table": 22, - "filenames": [ - "CentralAreaHub", - "Bluey1", - "DragonForestHub", - "FossilCanyon", - "PirateLagoon", - "AncientLake", - "WalrusCove", - "HotTopVolcano", - "WhaleBay", - "SnowballValley", - "CrescentIsland", - "FireMountain", - "DinoDomainHub", - "EverfrostPeak", - "SherbetIslandHub", - "SpaceportAlpha", - "HorseshoeGulch", - "SpacedustAlley", - "GreenwoodVillage", - "BoulderCanyon", - "WindmillPlains", - "FrontEnd", - "CharacterSelect", - "TitleScreenSequence", - "SnowflakeMountainHub", - "SmokeyCastle", - "DarkwaterBeach", - "IciclePyramid", - "FrostyVillage", - "JungleFalls", - "TreasureCaves", - "HauntedWoods", - "DarkmoonCaverns", - "StarCity", - "TrophyRace", - "FutureFunLandHub", - "OpeningSequence", - "Wizpig1", - "Trickytops1", - "OptionsBackground", - "Bubbler1", - "Smokey1", - "WizpigMouthSequence", - "WizpigAmuletSequence", - "TTAmuletSequence", - "RocketSequence", - "Trickytops2", - "DinoDomainTrophyAnim", - "SnowflakeMountainTrophyAnim", - "SherbetIslandTrophyAnim", - "DragonForestTrophyAnim", - "FutureFunLandTrophyAnim", - "Bluey2", - "Bubbler2", - "Smokey2", - "Wizpig2", - "PartySequence", - "TricktopsAnim", - "SmokeyAnim", - "BlueyAnim", - "Wizpig1Anim", - "BubblerAnim", - "Wizpig2Anim", - "LastBit", - "LastBitB" - ] - }, - { "type": "Table" }, - { - "type": "LevelNames", - "folder": "levels/names", - "table": 24, - "filenames": [ - "CentralAreaHub", - "Bluey1", - "DragonForestHub", - "FossilCanyon", - "PirateLagoon", - "AncientLake", - "WalrusCove", - "HotTopVolcano", - "WhaleBay", - "SnowballValley", - "CrescentIsland", - "FireMountain", - "DinoDomainHub", - "EverfrostPeak", - "SherbetIslandHub", - "SpaceportAlpha", - "HorseshoeGulch", - "SpacedustAlley", - "GreenwoodVillage", - "BoulderCanyon", - "WindmillPlains", - "FrontEnd", - "CharacterSelect", - "TitleScreenSequence", - "SnowflakeMountainHub", - "SmokeyCastle", - "DarkwaterBeach", - "IciclePyramid", - "FrostyVillage", - "JungleFalls", - "TreasureCaves", - "HauntedWoods", - "DarkmoonCaverns", - "StarCity", - "TrophyRace", - "FutureFunLandHub", - "OpeningSequence", - "Wizpig1", - "Trickytops1", - "OptionsBackground", - "Bubbler1", - "Smokey1", - "WizpigMouthSequence", - "WizpigAmuletSequence", - "TTAmuletSequence", - "RocketSequence", - "Trickytops2", - "DinoDomainTrophyAnim", - "SnowflakeMountainTrophyAnim", - "SherbetIslandTrophyAnim", - "DragonForestTrophyAnim", - "FutureFunLandTrophyAnim", - "Bluey2", - "Bubbler2", - "Smokey2", - "Wizpig2", - "PartySequence", - "TricktopsAnim", - "SmokeyAnim", - "BlueyAnim", - "Wizpig1Anim", - "BubblerAnim", - "Wizpig2Anim", - "LastBit", - "LastBitB" - ] - }, - { "type": "Table" }, - { - "type": "LevelModels", - "folder": "levels/models", - "table": 26 - }, - { "type": "Table" }, - { - "type": "ObjectModels", - "folder": "objects/models", - "table": 28 - }, - { - "type": "Binary", - "folder": "objects", - "filenames": [ "animation_ids" ] - }, - { "type": "Table" }, - { - "type": "ObjectAnimations", - "folder": "objects/animations", - "table": 31 - }, - { "type": "Table" }, - { - "type": "ObjectHeaders", - "folder": "objects/headers", - "table": 33 - }, - { - "type": "Binary", - "folder": "objects", - "filenames": [ "level_object_translation_table" ] - }, - { "type": "Table" }, - { "type": "Empty", "table": 36 }, - { "type": "Table" }, - { - "type": "Audio", - "folder": "audio", - "table": 38 - }, - { "type": "Table" }, - { - "type": "Particles", - "folder": "particles/particles", - "table": 40 - }, - { "type": "Table" }, - { - "type": "ParticleBehaviors", - "folder": "particles/behaviors", - "table": 42 - }, - { - "type": "Binary", - "folder": "fonts" - }, - { - "type": "Binary", - "folder": "fonts" - }, - { - "type": "Binary", - "folder": "fonts" - }, - { - "type": "Binary", - "folder": "ids" - }, - { "type": "Table" }, - { - "type": "TTGhosts", - "folder": "tt_ghosts", - "table": 48, - "filenames": [ - "FossilCanyon", - "PirateLagoon", - "AncientLake", - "WalrusCove", - "HotTopVolcano", - "WhaleBay", - "SnowballValley", - "CrescentIsland", - "EverfrostPeak", - "SpaceportAlpha", - "SpacedustAlley", - "GreenwoodVillage", - "BoulderCanyon", - "WindmillPlains", - "FrostyVillage", - "JungleFalls", - "TreasureCaves", - "HauntedWoods", - "DarkmoonCaverns", - "StarCity" - ] - } - ] - } -} - - - - - diff --git a/include/asset_enums.h b/include/asset_enums.h deleted file mode 100644 index 0ee4cb34..00000000 --- a/include/asset_enums.h +++ /dev/null @@ -1,5205 +0,0 @@ -// This file is automatically generated. Any changes you make to this file will get overwritten. - -#ifndef _ASSET_ENUMS_H -#define _ASSET_ENUMS_H - -/********** Asset Sections **********/ - -typedef enum AssetSectionsEnum { - ASSET_AI_BEHAVIOUR, - ASSET_AI_BEHAVIOUR_TABLE, - ASSET_TEXTURES_3D, - ASSET_TEXTURES_3D_TABLE, - ASSET_TEXTURES_2D, - ASSET_TEXTURES_2D_TABLE, - ASSET_GAME_TEXT, - ASSET_GAME_TEXT_TABLE, - ASSET_MENU_TEXT, - ASSET_MENU_TEXT_TABLE, - ASSET_SCREENS, - ASSET_SCREENS_TABLE, - ASSET_SPRITES, - ASSET_SPRITES_TABLE, - ASSET_EMPTY_14, - ASSET_MISC, - ASSET_MISC_TABLE, - ASSET_HUD_ELEMENT_IDS, - ASSET_MENU_ELEMENT_IDS, - ASSET_WEATHER_PARTICLES, - ASSET_LEVEL_OBJECT_MAPS_TABLE, - ASSET_LEVEL_OBJECT_MAPS, - ASSET_LEVEL_HEADERS_TABLE, - ASSET_LEVEL_HEADERS, - ASSET_LEVEL_NAMES_TABLE, - ASSET_LEVEL_NAMES, - ASSET_LEVEL_MODELS_TABLE, - ASSET_LEVEL_MODELS, - ASSET_OBJECT_MODELS_TABLE, - ASSET_OBJECT_MODELS, - ASSET_ANIMATION_IDS, - ASSET_OBJECT_ANIMATIONS_TABLE, - ASSET_OBJECT_ANIMATIONS, - ASSET_OBJECT_HEADERS_TABLE, - ASSET_OBJECTS, - ASSET_LEVEL_OBJECT_TRANSLATION_TABLE, - ASSET_EMPTY_37_TABLE, - ASSET_EMPTY_37, - ASSET_AUDIO_TABLE, - ASSET_AUDIO, - ASSET_PARTICLES_TABLE, - ASSET_PARTICLES, - ASSET_PARTICLE_BEHAVIORS_TABLE, - ASSET_PARTICLE_BEHAVIORS, - ASSET_FONTS, - ASSET_BINARY_45, - ASSET_BINARY_46, - ASSET_BINARY_47, - ASSET_TTGHOSTS_TABLE, - ASSET_TTGHOSTS, - - ASSET_SECTIONS_COUNT -} AssetSectionsEnum; - -/********** ASSET_AI_BEHAVIOUR **********/ - -typedef enum AssetAiBehaviourEnum { - ASSET_AI_BEHAVIOUR_0, - ASSET_AI_BEHAVIOUR_1, - ASSET_AI_BEHAVIOUR_2, - ASSET_AI_BEHAVIOUR_3, - ASSET_AI_BEHAVIOUR_4, - ASSET_AI_BEHAVIOUR_5, - ASSET_AI_BEHAVIOUR_6, - ASSET_AI_BEHAVIOUR_7, - ASSET_AI_BEHAVIOUR_8, - ASSET_AI_BEHAVIOUR_9, - - ASSET_AI_BEHAVIOUR_COUNT -} AssetAiBehaviourEnum; - -/********** ASSET_TEXTURES_3D **********/ - -typedef enum AssetTextures3dEnum { - ASSET_TEX3D_SPACE_WHITEWALL200496, - ASSET_TEX3D_SPACE_GREENWALL337, - ASSET_TEX3D_SPACE_WHITEWALL, - ASSET_TEX3D_SPACE_WHITEWALLWITHARROW, - ASSET_TEX3D_SPACE_NEONROCKETSIGN, - ASSET_TEX3D_COMMON_WATER, - ASSET_TEX3D_COMMON_WATER2, - ASSET_TEX3D_OBJECTS_ZIPPER, - ASSET_TEX3D_SPACE_CEILINGLIGHTS, - ASSET_TEX3D_SPACE_WHITEWALLALPHA_0, - ASSET_TEX3D_SPACE_WHITEWALLALPHA_1, - ASSET_TEX3D_SPACE_WHITEWALLBLUELINE, - ASSET_TEX3D_COMMON_WATER3, - ASSET_TEX3D_COMMON_WATERSTILL, - ASSET_TEX3D_COMMON_REDARROWSIGN, - ASSET_TEX3D_COMMON_WATER4, - ASSET_TEX3D_COMMON_LAVA, - ASSET_TEX3D_OBJECTS_ZIPPER2, - ASSET_TEX3D_TROPICAL_PIRATESHIPTAFFRAIL, - ASSET_TEX3D_COMMON_YELLOWARROWSIGN, - ASSET_TEX3D_COMMON_FLOORTILE, - ASSET_TEX3D_WINTER_ICE, - ASSET_TEX3D_WINTER_ICE2, - ASSET_TEX3D_WINTER_SNOWYWALL, - ASSET_TEX3D_WINTER_CANDYCANE, - ASSET_TEX3D_WINTER_IGLOOBRICK, - ASSET_TEX3D_COMMON_SAND, - ASSET_TEX3D_SPACE_BOOSTLOOP, - ASSET_TEX3D_TROPICAL_DIRTWALLSANDY, - ASSET_TEX3D_TROPICAL_DIRTWALL, - ASSET_TEX3D_TROPICAL_ROCKGUARDRAIL, - ASSET_TEX3D_COMMON_BLUEYELLOWARROWS, - ASSET_TEX3D_MEDIEVAL_CASTLEWINDOW, - ASSET_TEX3D_MEDIEVAL_CASTLEBRIDGE, - ASSET_TEX3D_MEDIEVAL_YELLOWSTONE, - ASSET_TEX3D_MEDIEVAL_YELLOWSTONEHILLSIDE, - ASSET_TEX3D_UNUSED_BETADKRLOGO, - ASSET_TEX3D_SPACE_FINISHLINE_0, - ASSET_TEX3D_SPACE_FINISHLINE_1, - ASSET_TEX3D_SPACE_FINISHLINE_2, - ASSET_TEX3D_SPACE_FINISHLINE_3, - ASSET_TEX3D_SPACE_FINISHLINE_4, - ASSET_TEX3D_SPACE_CAVEWALL, - ASSET_TEX3D_MEDIEVAL_SMOKEYFENCE, - ASSET_TEX3D_COMMON_COBBLESTONEFLOOR, - ASSET_TEX3D_MEDIEVAL_HAY, - ASSET_TEX3D_MEDIEVAL_HAYEYE, - ASSET_TEX3D_TROPICAL_SUNKINSHIPFLOORBOARD, - ASSET_TEX3D_WINTER_ICYFLOOR, - ASSET_TEX3D_MEDIEVAL_WINDMILLBASE, - ASSET_TEX3D_MEDIEVAL_DIRTTRANSITION, - ASSET_TEX3D_MEDIEVAL_WHEATFIELD, - ASSET_TEX3D_MEDIEVAL_CASTLEWALLSWITHSHADOW, - ASSET_TEX3D_MEDIEVAL_CASTLEWALLS, - ASSET_TEX3D_MEDIEVAL_CASTLEMERLON, - ASSET_TEX3D_DINO_ORANGEWALL, - ASSET_TEX3D_SPACE_WHITEWALLBRICKS, - ASSET_TEX3D_UNUSED_PROAM64BALLOONREDLINE, - ASSET_TEX3D_TROPICAL_FOG, - ASSET_TEX3D_MEDIEVAL_WINDSAIL, - ASSET_TEX3D_WINTER_SNOWYREDARROWDOWN, - ASSET_TEX3D_MEDIEVAL_GARDENFENCE, - ASSET_TEX3D_MEDIEVAL_VILLAGEWHITEWALL, - ASSET_TEX3D_COMMON_HANGINGMOSS, - ASSET_TEX3D_COMMON_HANGINGMOSS2, - ASSET_TEX3D_COMMON_GRASS, - ASSET_TEX3D_COMMON_GRASS2, - ASSET_TEX3D_WINTER_UNKNOWNROCKYTEXTURE, - ASSET_TEX3D_TROPICAL_MOSSYROCK, - ASSET_TEX3D_TROPICAL_MOSSYROCK2, - ASSET_TEX3D_WINTER_SNOWYWALL2, - ASSET_TEX3D_COMMON_DEBUGREDYELLOW, - ASSET_TEX3D_COMMON_DEBUGPURPLE, - ASSET_TEX3D_WINTER_ICE3, - ASSET_TEX3D_WINTER_SEMITRANSICE, - ASSET_TEX3D_WINTER_SEMITRANSICE2, - ASSET_TEX3D_WINTER_SEMITRANSICE3, - ASSET_TEX3D_MEDIEVAL_TREEBRANCH, - ASSET_TEX3D_WINTER_ICECEILING, - ASSET_TEX3D_WINTER_HANGINGICE_0, - ASSET_TEX3D_WINTER_HANGINGICE_1, - ASSET_TEX3D_WINTER_HANGINGICE_2, - ASSET_TEX3D_WINTER_CRYSTAL, - ASSET_TEX3D_WINTER_CRYSTALSHADOW, - ASSET_TEX3D_SPACE_DOCK64_0, - ASSET_TEX3D_SPACE_DOCK64_1, - ASSET_TEX3D_SPACE_DOCK64_2, - ASSET_TEX3D_SPACE_DOCK64_3, - ASSET_TEX3D_SPACE_DOCK64_4, - ASSET_TEX3D_SPACE_DOCK64_5, - ASSET_TEX3D_SPACE_DOCK64_6, - ASSET_TEX3D_SPACE_DOCK64_7, - ASSET_TEX3D_SPACE_DOCK64_8, - ASSET_TEX3D_SPACE_DOCK64_9, - ASSET_TEX3D_SPACE_DOCK64_10, - ASSET_TEX3D_SPACE_DOCK64_11, - ASSET_TEX3D_COMMON_WOOD, - ASSET_TEX3D_UNUSED_BETAN64LOGO_0, - ASSET_TEX3D_UNUSED_BETAN64LOGO_1, - ASSET_TEX3D_TROPICAL_BROWNBRICKTILE, - ASSET_TEX3D_WINTER_SNOW, - ASSET_TEX3D_WINTER_SNOW2, - ASSET_TEX3D_WINTER_SEMITRANSICE4, - ASSET_TEX3D_COMMON_PORTAL, - ASSET_TEX3D_MEDIEVAL_STONETILE, - ASSET_TEX3D_MEDIEVAL_STONETILE2, - ASSET_TEX3D_WINTER_BRICKWALLWITHSNOW, - ASSET_TEX3D_TROPICAL_BRICKWALL, - ASSET_TEX3D_COMMON_WOODPLANKS, - ASSET_TEX3D_TROPICAL_PIRATESHIPWOODPLANKS, - ASSET_TEX3D_COMMON_LIFEPRESERVERRING, - ASSET_TEX3D_TROPICAL_REDSTONE, - ASSET_TEX3D_COMMON_STONE, - ASSET_TEX3D_DINO_RARELOGOSTONE, - ASSET_TEX3D_TROPICAL_STONEWALLSANDY, - ASSET_TEX3D_COMMON_ARROWSIGNSHADOW, - ASSET_TEX3D_WINTER_ICEBRICKS, - ASSET_TEX3D_WINTER_ICEBRICKSWITHSNOW, - ASSET_TEX3D_WINTER_HANGINGSNOW, - ASSET_TEX3D_WINTER_HANGINGSNOW2, - ASSET_TEX3D_COMMON_ELEMENTGRADIENT, - ASSET_TEX3D_WINTER_SNOWTREESBILLBOARD_0, - ASSET_TEX3D_WINTER_SNOWTREESBILLBOARD_1, - ASSET_TEX3D_WINTER_ICYSNOW, - ASSET_TEX3D_WINTER_SNOWYFENCE, - ASSET_TEX3D_WINTER_ICYPATH, - ASSET_TEX3D_TROPICAL_JUNGLETREESBILLBOARD_0, - ASSET_TEX3D_TROPICAL_JUNGLETREESBILLBOARD_1, - ASSET_TEX3D_TROPICAL_MOSSYSHIPPLANKSBROKEN, - ASSET_TEX3D_TROPICAL_MOSSYSHIPPLANKS, - ASSET_TEX3D_TROPICAL_MOSSYSHIPTORNSAIL, - ASSET_TEX3D_TROPICAL_PIRATESHIPREARDECORATION, - ASSET_TEX3D_MEDIEVAL_THATCHROOFING, - ASSET_TEX3D_MEDIEVAL_HOUSEWINDOWWITHPLANTS, - ASSET_TEX3D_MEDIEVAL_HOUSEDOOR, - ASSET_TEX3D_MEDIEVAL_HOUSEROOFSUPPORT, - ASSET_TEX3D_MEDIEVAL_HOUSEWALLSUPPORT, - ASSET_TEX3D_COMMON_WHITE, - ASSET_TEX3D_COMMON_FINISHLINETAPE, - ASSET_TEX3D_WINTER_ICEBRICKS2, - ASSET_TEX3D_COMMON_WATERSTILL2, - ASSET_TEX3D_COMMON_UNUSEDTRACKSELCTFRAMETEXTURE, - ASSET_TEX3D_COMMON_SANDDRY, - ASSET_TEX3D_COMMON_SANDDRYTOWET, - ASSET_TEX3D_DINO_ANCIENTLAKESIGN, - ASSET_TEX3D_COMMON_LOGEXPOSEDSIDE, - ASSET_TEX3D_WINTER_BRICKRAILWITHSNOWEDGE, - ASSET_TEX3D_WINTER_BRICKRAILWITHSNOW, - ASSET_TEX3D_COMMON_COLOURFULARROW, - ASSET_TEX3D_SPACE_BLUEFLOORTILE, - ASSET_TEX3D_TROPICAL_PIRATESHIPUNDERSIDE, - ASSET_TEX3D_TROPICAL_PIRATESHIPSAILS, - ASSET_TEX3D_TROPICAL_PIRATESHIPBOWSPIRIT, - ASSET_TEX3D_COMMON_SAND2, - ASSET_TEX3D_OBJECTS_TRACKSELECTFRAMEGOLD, - ASSET_TEX3D_TROPICAL_PIRATESHIPCANNON, - ASSET_TEX3D_COMMON_CHAINLINK, - ASSET_TEX3D_COMMON_FINISHLINETAPE2, - ASSET_TEX3D_COMMON_FINISHLINEWATER, - ASSET_TEX3D_COMMON_FINISHLINECHEQUEREDREDWHITE, - ASSET_TEX3D_COMMON_FINISHLINECHEQUEREDREDYELLOW, - ASSET_TEX3D_COMMON_FINISHLINECHEQUEREDPURPLEYELLOW, - ASSET_TEX3D_COMMON_CYANYELLOWARROWSIGN, - ASSET_TEX3D_COMMON_BLUEYELLOWARROWS2_0, - ASSET_TEX3D_COMMON_BLUEYELLOWARROWS2_1, - ASSET_TEX3D_COMMON_BLUEYELLOWARROWS2_2, - ASSET_TEX3D_COMMON_TRANSPARENT, - ASSET_TEX3D_UNUSED_STONEWITHGRASS, - ASSET_TEX3D_DINO_ORANGESTONE, - ASSET_TEX3D_DINO_THINCLOUD, - ASSET_TEX3D_OBJECTS_DOMECLOUDS, - ASSET_TEX3D_OBJECTS_DOMECLOUDS2, - ASSET_TEX3D_DINO_TEMPLEBRICK, - ASSET_TEX3D_WINTER_SNOW3, - ASSET_TEX3D_DINO_TEMPLEBRICKTILE, - ASSET_TEX3D_TROPICAL_CASTLETOWERBLOCK, - ASSET_TEX3D_UNUSED_BRIDGE, - ASSET_TEX3D_UNUSED_BRIDGE2, - ASSET_TEX3D_COMMON_FLASHINGARROW, - ASSET_TEX3D_UNUSED_METALENVIRONMENTMAP, - ASSET_TEX3D_COMMON_GRASSTRANSITION, - ASSET_TEX3D_COMMON_GRASS3, - ASSET_TEX3D_TROPICAL_PIRATESHIPGUARDRAIL, - ASSET_TEX3D_OBJECTS_WOODBRIDGE, - ASSET_TEX3D_WINTER_SNOWYPATH, - ASSET_TEX3D_TROPICAL_MOSSYOVERLAY, - ASSET_TEX3D_DINO_FOSSILCANYONSIGN, - ASSET_TEX3D_OBJECTS_TROPHYCABBASE, - ASSET_TEX3D_COMMON_ORANGESTONEWALLHILLSIDE, - ASSET_TEX3D_TROPICAL_BLUESTONEWALLSANDYWITHMOSS, - ASSET_TEX3D_COMMON_DIRTBLUESTONETRANSITION, - ASSET_TEX3D_COMMON_BLUESTONE, - ASSET_TEX3D_COMMON_BLUESTONESANDY, - ASSET_TEX3D_DINO_HOTTOPVOLCANOSIGN, - ASSET_TEX3D_UNUSED_UNKNOWNICYTEXTURE, - ASSET_TEX3D_UNUSED_TRANSPARENT, - ASSET_TEX3D_TROPICAL_BLUESTONEWALLSANDYHEAVYMOSS, - ASSET_TEX3D_UNUSED_MOSS, - ASSET_TEX3D_DINO_JUNGLEFALLSSIGN, - ASSET_TEX3D_SPACE_BLINKINGCOMPUTERLIGHTS, - ASSET_TEX3D_MEDIEVAL_YELLOWHOUSEWALL, - ASSET_TEX3D_COMMON_COLOUREDLAMP, - ASSET_TEX3D_DINO_VOLCANOWALL, - ASSET_TEX3D_DINO_VOLCANOWALLMAGMATRANSITION, - ASSET_TEX3D_DINO_MAGMAHIGHLINETRANSITION, - ASSET_TEX3D_DINO_VOLCANOWALL2, - ASSET_TEX3D_COMMON_YELLOWBRICKTILE, - ASSET_TEX3D_COMMON_YELLOWBRICKTILE2, - ASSET_TEX3D_TROPICAL_GRASSUNCOLORED, - ASSET_TEX3D_SPACE_BLUEWALLWITHYELLOWARROWS, - ASSET_TEX3D_SPACE_BLUEWALLSMALLLIGHT, - ASSET_TEX3D_SPACE_BLUEWALL, - ASSET_TEX3D_SPACE_WALLTILELIGHTS, - ASSET_TEX3D_COMMON_GRASS4, - ASSET_TEX3D_COMMON_GRASS5, - ASSET_TEX3D_COMMON_GRASS6, - ASSET_TEX3D_OBJECTS_TROPHYCABEDGE, - ASSET_TEX3D_WINTER_STONEWALLSNOWY, - ASSET_TEX3D_WINTER_BLUESTONEWALLSNOWY, - ASSET_TEX3D_COMMON_STONEPATH, - ASSET_TEX3D_OBJECTS_DOMESUNSHINING, - ASSET_TEX3D_COMMON_SANDWATERTRANSITION, - ASSET_TEX3D_COMMON_NINTENDOLOGO, - ASSET_TEX3D_UNUSED_TANSTONETILE, - ASSET_TEX3D_DINO_ORANGESTONE2, - ASSET_TEX3D_DINO_VOLCANOWALL3, - ASSET_TEX3D_COMMON_SAND3, - ASSET_TEX3D_TROPICAL_PALMTREESBILLBOARD_0, - ASSET_TEX3D_TROPICAL_PALMTREESBILLBOARD_1, - ASSET_TEX3D_TROPICAL_PALMTREESBILLBOARD_2, - ASSET_TEX3D_TROPICAL_PALMTREESBILLBOARD2_0, - ASSET_TEX3D_TROPICAL_PALMTREESBILLBOARD2_1, - ASSET_TEX3D_TROPICAL_PALMTREESBILLBOARD2_2, - ASSET_TEX3D_TROPICAL_PALMTREESBILLBOARD2_3, - ASSET_TEX3D_TROPICAL_PALMTREESBILLBOARD2_4, - ASSET_TEX3D_TROPICAL_PALMTREELEAVES, - ASSET_TEX3D_TROPICAL_PALMTREEBARKBROWN, - ASSET_TEX3D_TROPICAL_ASSETTEX3DTROPICALPALMTREESBILLBOARD3, - ASSET_TEX3D_TROPICAL_PALMTREEBARKWHITE, - ASSET_TEX3D_TROPICAL_PALMTREESHADOW, - ASSET_TEX3D_TROPICAL_PALMTREEBARKWHITE2, - ASSET_TEX3D_COMMON_LIGHTSHAFT, - ASSET_TEX3D_COMMON_LIGHTSHAFT2, - ASSET_TEX3D_OBJECTS_SPACECOLUMNBLOCKSATURN, - ASSET_TEX3D_TROPICAL_TOWERSPIRE, - ASSET_TEX3D_TROPICAL_SHIPWOODPLANKS, - ASSET_TEX3D_COMMON_VINES, - ASSET_TEX3D_COMMON_VINES2, - ASSET_TEX3D_COMMON_TAJPADGRASS, - ASSET_TEX3D_MEDIEVAL_TREEBRANCHWITHVINES, - ASSET_TEX3D_COMMON_REDCARPET, - ASSET_TEX3D_COMMON_LARGETREELOG, - ASSET_TEX3D_DINO_TEMPLESTONEDINO, - ASSET_TEX3D_MEDIEVAL_WHITEWALLWITHFLAGS, - ASSET_TEX3D_MEDIEVAL_TOWNCASTLESPRITE, - ASSET_TEX3D_WINTER_VILLAGEVIADUCTSHADOW, - ASSET_TEX3D_DINO_DIRTPATH, - ASSET_TEX3D_UNUSED_PROAM64BALLOONROPE, - ASSET_TEX3D_OBJECTS_DOMEBLUESKY_0, - ASSET_TEX3D_OBJECTS_DOMEBLUESKY_1, - ASSET_TEX3D_OBJECTS_DOMEBLUESKY_2, - ASSET_TEX3D_OBJECTS_DOMEBLUESKY_3, - ASSET_TEX3D_TROPICAL_SHIPTORNSAIL, - ASSET_TEX3D_TROPICAL_SHIPSAILSHADOW, - ASSET_TEX3D_COMMON_SANDTRANSITION, - ASSET_TEX3D_COMMON_SANDUNDERWATER, - ASSET_TEX3D_OBJECTS_SPACECOLUMNBLOCK, - ASSET_TEX3D_DINO_VOLCANOSTONE, - ASSET_TEX3D_SPACE_MOONSTONE, - ASSET_TEX3D_TROPICAL_TOWERWINDOW, - ASSET_TEX3D_COMMON_BROWNSTONEBRICK, - ASSET_TEX3D_DINO_SANDWETDRYTRANSITION, - ASSET_TEX3D_WINTER_DARKSTONEWALLSNOWY, - ASSET_TEX3D_WINTER_SNOWTREESBILLBOARDSMALL, - ASSET_TEX3D_WINTER_SNOW4, - ASSET_TEX3D_WINTER_HANGINGSNOW3, - ASSET_TEX3D_WINTER_HANGINGSNOW4, - ASSET_TEX3D_WINTER_DARKSTONEWALLSNOWY2, - ASSET_TEX3D_WINTER_SNOWCHARBLUEEYE, - ASSET_TEX3D_WINTER_SNOWCHARYELLOWEYE, - ASSET_TEX3D_WINTER_SNOWCHARBLUEGOGGLES, - ASSET_TEX3D_WINTER_VILLAGEWINDOWLIGHTS, - ASSET_TEX3D_WINTER_VILLAGEWINDOWLIGHTSGLOW, - ASSET_TEX3D_WINTER_SNOWCHARNOSE, - ASSET_TEX3D_WINTER_CYANSTONE, - ASSET_TEX3D_WINTER_SNOWTREESBILLBOARDSMALL2, - ASSET_TEX3D_WINTER_CYANSTONESNOW, - ASSET_TEX3D_WINTER_PINKWHITESNOW, - ASSET_TEX3D_SPACE_PURPLESTONE, - ASSET_TEX3D_COMMON_FINISHLINEFLAGGREEN_0, - ASSET_TEX3D_COMMON_FINISHLINEFLAGGREEN_1, - ASSET_TEX3D_COMMON_FINISHLINEFLAGGREEN_2, - ASSET_TEX3D_COMMON_FINISHLINEFLAGGREEN_3, - ASSET_TEX3D_TROPICAL_STARFISH, - ASSET_TEX3D_COMMON_FINISHLINEFLAGORANGE_0, - ASSET_TEX3D_COMMON_FINISHLINEFLAGORANGE_1, - ASSET_TEX3D_COMMON_FINISHLINEFLAGORANGE_2, - ASSET_TEX3D_COMMON_FINISHLINEFLAGORANGE_3, - ASSET_TEX3D_COMMON_FINISHLINEFLAGORANGE_4, - ASSET_TEX3D_DINO_FINISHLINEPALMTREESSHADOW, - ASSET_TEX3D_COMMON_WATERSCROLLING, - ASSET_TEX3D_DINO_FIREMOUNTAINLAVA, - ASSET_TEX3D_DINO_FIREMOUNTAINREDBASE, - ASSET_TEX3D_DINO_FIREMOUNTAINYELLOWBASE, - ASSET_TEX3D_DINO_FIREMOUNTAINGREENBASE, - ASSET_TEX3D_DINO_FIREMOUNTAINBLUEBASE, - ASSET_TEX3D_COMMON_BROWNDIRTWALL, - ASSET_TEX3D_COMMON_BROWNDIRTWALLHILLTOP, - ASSET_TEX3D_COMMON_BROWNDIRTWALLHILLTOPSANDY, - ASSET_TEX3D_COMMON_LIGHTSHAFT3, - ASSET_TEX3D_TROPICAL_LAGOONCASTLEMERLON, - ASSET_TEX3D_MEDIEVAL_HOUSEGUARDRAILFLAGS, - ASSET_TEX3D_MEDIEVAL_BLUEFLAG, - ASSET_TEX3D_MEDIEVAL_WHITEFLAG, - ASSET_TEX3D_MEDIEVAL_YELLOWFLAG, - ASSET_TEX3D_DINO_VOLCANOCEILINGSHADOW, - ASSET_TEX3D_TROPICAL_LAGOONCASTLEMERLON2, - ASSET_TEX3D_COMMON_WATERFALL, - ASSET_TEX3D_OBJECTS_WHITEFENCE, - ASSET_TEX3D_OBJECTS_DOMEWHITE, - ASSET_TEX3D_COMMON_SANDABOVEWATER, - ASSET_TEX3D_COMMON_WOODBARK, - ASSET_TEX3D_TROPICAL_LAGOONCASTLETILE, - ASSET_TEX3D_OBJECTS_SPACECOLUMNGOLDHORN, - ASSET_TEX3D_COMMON_SAND4, - ASSET_TEX3D_COMMON_SAND5, - ASSET_TEX3D_DINO_MAGMAFALL, - ASSET_TEX3D_OBJECTS_DIDDYBROWNFUR, - ASSET_TEX3D_OBJECTS_TTPLANEWING, - ASSET_TEX3D_OBJECTS_BLUEYNOSE, - ASSET_TEX3D_OBJECTS_TAJEYE, - ASSET_TEX3D_MEDIEVAL_TOWERBELFRY, - ASSET_TEX3D_MEDIEVAL_TOWERBELFRY2, - ASSET_TEX3D_MEDIEVAL_TOWERBASE, - ASSET_TEX3D_MEDIEVAL_TOWERBASEWINDOW, - ASSET_TEX3D_OBJECTS_CARBACKLIGHTSLOWPOLY, - ASSET_TEX3D_OBJECTS_TIMBERSTRIPES, - ASSET_TEX3D_OBJECTS_BUMPERBACK, - ASSET_TEX3D_OBJECTS_BUMPERFRONT, - ASSET_TEX3D_OBJECTS_BUMPERHEADFUR, - ASSET_TEX3D_OBJECTS_BUMPERGLOVEPLUS, - ASSET_TEX3D_OBJECTS_BUMPERGOGGLESFRONT, - ASSET_TEX3D_OBJECTS_BUMPERREDPILOTCAP, - ASSET_TEX3D_OBJECTS_BUMPERSHOULDERFUR, - ASSET_TEX3D_OBJECTS_BUMPERNOSE, - ASSET_TEX3D_OBJECTS_RACERCOMMONRED, - ASSET_TEX3D_OBJECTS_BUMPERHEADFURLOWPOLY, - ASSET_TEX3D_OBJECTS_BUMPERFACELOWPOLY, - ASSET_TEX3D_OBJECTS_BUMPERBACKLOWPOLY, - ASSET_TEX3D_OBJECTS_BUMPERGOGGLESSIDE, - ASSET_TEX3D_OBJECTS_BUMPERHEADFURLIGHT, - ASSET_TEX3D_OBJECTS_BUMPERGOGGLESSIDE2, - ASSET_TEX3D_OBJECTS_BANJOBACKPACK, - ASSET_TEX3D_OBJECTS_BANJOSHORTS, - ASSET_TEX3D_OBJECTS_BANJOSHORTSCHARSELECT, - ASSET_TEX3D_OBJECTS_BANJOCHEST, - ASSET_TEX3D_OBJECTS_BANJOCHESTCHARSELECT, - ASSET_TEX3D_OBJECTS_BANJOHAIRTOPCHARSELECT, - ASSET_TEX3D_OBJECTS_BANJOWRISTANKLESCHARSELECT, - ASSET_TEX3D_OBJECTS_BANJOEARSHADOW, - ASSET_TEX3D_OBJECTS_BANJOEYES, - ASSET_TEX3D_UNUSED_BETABALLOONBANJO_0, - ASSET_TEX3D_UNUSED_BETABALLOONBANJO_1, - ASSET_TEX3D_UNUSED_BETABALLOONBANJO_2, - ASSET_TEX3D_UNUSED_BETABALLOONBANJO_3, - ASSET_TEX3D_OBJECTS_BANJOSKIN, - ASSET_TEX3D_OBJECTS_BANJOCHESTLOWPOLY, - ASSET_TEX3D_OBJECTS_BANJOHAIRFUR, - ASSET_TEX3D_OBJECTS_BANJOARMFUR, - ASSET_TEX3D_OBJECTS_BANJONECK, - ASSET_TEX3D_OBJECTS_BANJONECKFURBACK, - ASSET_TEX3D_OBJECTS_BANJOBACKLOWESTPOLY, - ASSET_TEX3D_OBJECTS_BANJOBACKPACKSTRAPS, - ASSET_TEX3D_OBJECTS_BANJOBACKLOWPOLY, - ASSET_TEX3D_OBJECTS_DIDDYNOSE, - ASSET_TEX3D_OBJECTS_RACERCOMMONBLACK, - ASSET_TEX3D_OBJECTS_TTVEHICLESILVER, - ASSET_TEX3D_OBJECTS_BUBBLERTENTACLESTOP, - ASSET_TEX3D_OBJECTS_DRUMSTICKVEHICLECYAN, - ASSET_TEX3D_OBJECTS_BETATIPTUPBALLOONENVMAP, - ASSET_TEX3D_OBJECTS_BANJOCARENVMAP, - ASSET_TEX3D_OBJECTS_TIPTUPCARENVMAP, - ASSET_TEX3D_OBJECTS_CONKERSHIRT, - ASSET_TEX3D_OBJECTS_BONUS, - ASSET_TEX3D_OBJECTS_RACERCOMMONUNDERSIDE, - ASSET_TEX3D_OBJECTS_TIMBERCAPBRIM, - ASSET_TEX3D_OBJECTS_TIMBERCAPBRIMCHARSELECT, - ASSET_TEX3D_OBJECTS_TIMBERHANDS, - ASSET_TEX3D_OBJECTS_DRUMSTICKVEST, - ASSET_TEX3D_OBJECTS_DRUMSTICKBACKLOWPOLY, - ASSET_TEX3D_OBJECTS_DRUMSTICKBEAK, - ASSET_TEX3D_OBJECTS_DRUMSTICKFEATHERS, - ASSET_TEX3D_OBJECTS_TTAMULETEYE, - ASSET_TEX3D_UNUSED_BETADRUMSTICKBALLOON_0, - ASSET_TEX3D_UNUSED_BETADRUMSTICKBALLOON_1, - ASSET_TEX3D_UNUSED_BETADRUMSTICKBALLOON_2, - ASSET_TEX3D_UNUSED_BETADRUMSTICKBALLOON_3, - ASSET_TEX3D_OBJECTS_DRUMSTICKLOWERBACK, - ASSET_TEX3D_OBJECTS_DRUMSTICKFRONTLOWPOLY, - ASSET_TEX3D_OBJECTS_DRUMSTICKFEETCHARSELECT, - ASSET_TEX3D_OBJECTS_DRUMSTICKFEATHERS2, - ASSET_TEX3D_OBJECTS_DRUMSTICKPANTSBOTTOMCHARSELECT, - ASSET_TEX3D_OBJECTS_DIDDYMOUTHCHARSELECT, - ASSET_TEX3D_OBJECTS_DRUMSTICKEYES, - ASSET_TEX3D_OBJECTS_RACERCOMMONPLANEUNDERSIDE, - ASSET_TEX3D_OBJECTS_BLUEYTUXEDOPIECE, - ASSET_TEX3D_OBJECTS_CONKERFUR, - ASSET_TEX3D_OBJECTS_CONKEREYES, - ASSET_TEX3D_OBJECTS_CONKEYMOUTH, - ASSET_TEX3D_OBJECTS_CONKERFURSOLID, - ASSET_TEX3D_OBJECTS_CONKERSHOESCHARSELECT, - ASSET_TEX3D_OBJECTS_CONKERBACK, - ASSET_TEX3D_UNUSED_BETABANJOBALLOONENVMAP, - ASSET_TEX3D_OBJECTS_RACERCOMMONBREAKLIGHT, - ASSET_TEX3D_OBJECTS_BANJOBREAKLIGHT1, - ASSET_TEX3D_OBJECTS_BANJOBREAKLIGHT2, - ASSET_TEX3D_OBJECTS_BANJOBREAKLIGHT3, - ASSET_TEX3D_OBJECTS_BANJOBREAKLIGHT4, - ASSET_TEX3D_OBJECTS_BANJOBREAKLIGHT5, - ASSET_TEX3D_UNUSED_RACERCOMMONPLANEBREAKLIGHT, - ASSET_TEX3D_OBJECTS_DRUMSTICKSTRAPS, - ASSET_TEX3D_OBJECTS_DIDDYLOWERBACK, - ASSET_TEX3D_OBJECTS_DIDDYLOWERFRONT, - ASSET_TEX3D_UNUSED_DIDDYUNKNOWN, - ASSET_TEX3D_UNUSED_DIDDYEYENOBLINK, - ASSET_TEX3D_OBJECTS_DIDDYCAPSTRAP, - ASSET_TEX3D_OBJECTS_DIDDYCAP, - ASSET_TEX3D_OBJECTS_DIDDYBACKLOWPOLY, - ASSET_TEX3D_OBJECTS_DIDDYBACKSTAR, - ASSET_TEX3D_OBJECTS_DIDDYWRIST, - ASSET_TEX3D_OBJECTS_DIDDYEYE, - ASSET_TEX3D_OBJECTS_YELLOWDINOSAURFEET, - ASSET_TEX3D_OBJECTS_GREENDINOSAURUNDERSIDE, - ASSET_TEX3D_OBJECTS_YELLOWDINOSAURNECKTRANSITION, - ASSET_TEX3D_OBJECTS_GREENDINOSAURFACESMILE, - ASSET_TEX3D_OBJECTS_YELLOWDINOSAURNOSE, - ASSET_TEX3D_OBJECTS_GREENDINOSAURNOSE, - ASSET_TEX3D_OBJECTS_GREENDINOSAURSKIN, - ASSET_TEX3D_OBJECTS_YELLOWDINOSAURNECKBACK, - ASSET_TEX3D_OBJECTS_YELLOWDINOSAURLIMBS, - ASSET_TEX3D_OBJECTS_RACERCOMMONSTEERINGWHEEL, - ASSET_TEX3D_OBJECTS_DIDDYFRONTNECKLOOP, - ASSET_TEX3D_OBJECTS_SMOKEYTRICKYTONGUE, - ASSET_TEX3D_OBJECTS_SMOKEYARMSBACKSCALES, - ASSET_TEX3D_OBJECTS_SMOKEYBACKHEADSCALES, - ASSET_TEX3D_OBJECTS_SMOKEYUNDERSIDE, - ASSET_TEX3D_OBJECTS_SMOKEYEYE, - ASSET_TEX3D_OBJECTS_SPACECOLUMNSMOKEYEYE, - ASSET_TEX3D_OBJECTS_SMOKEYFEETBOTTOM, - ASSET_TEX3D_OBJECTS_SMOKEYCHEEK, - ASSET_TEX3D_OBJECTS_DRUMSTICKSTRAPSLOWPOLY, - ASSET_TEX3D_OBJECTS_DOMEBLUESKYCLOUDS_0, - ASSET_TEX3D_OBJECTS_DOMEBLUESKYCLOUDS_1, - ASSET_TEX3D_OBJECTS_RACERCOMMONCAREXHAUST, - ASSET_TEX3D_OBJECTS_RACERCOMMONCAREXHAUSTLOWPOLY, - ASSET_TEX3D_OBJECTS_EXIT, - ASSET_TEX3D_OBJECTS_STOPWATCHEYE_0, - ASSET_TEX3D_OBJECTS_STOPWATCHEYE_1, - ASSET_TEX3D_OBJECTS_STOPWATCHEYE_2, - ASSET_TEX3D_OBJECTS_FROGBELLY, - ASSET_TEX3D_UNUSED_BLUE, - ASSET_TEX3D_OBJECTS_TIPTUPSHELLOUTLINE, - ASSET_TEX3D_UNUSED_BETABALLOONBUMPER_0, - ASSET_TEX3D_UNUSED_BETABALLOONBUMPER_1, - ASSET_TEX3D_UNUSED_BETABALLOONBUMPER_2, - ASSET_TEX3D_UNUSED_BETABALLOONBUMPER_3, - ASSET_TEX3D_OBJECTS_BUMPEREYES, - ASSET_TEX3D_OBJECTS_GOLDENVMAP, - ASSET_TEX3D_OBJECTS_GOLDENVMAP2, - ASSET_TEX3D_OBJECTS_GOLDBALLOONENVMAP, - ASSET_TEX3D_OBJECTS_GREENENVMAP, - ASSET_TEX3D_OBJECTS_DIDDYCARENVMAP, - ASSET_TEX3D_OBJECTS_RACERCOMMONPLANETAILLIGHT, - ASSET_TEX3D_OBJECTS_TIMBERCARENVMAP, - ASSET_TEX3D_COMMON_DEBUGGRAY, - ASSET_TEX3D_OBJECTS_TIMBERCAPBACK, - ASSET_TEX3D_OBJECTS_TIMBERCAPFRONT, - ASSET_TEX3D_OBJECTS_TIMBERCAPTOP, - ASSET_TEX3D_OBJECTS_TIMBERHEADFUR, - ASSET_TEX3D_OBJECTS_TIMBERSTRIPESARMSNECKBACK, - ASSET_TEX3D_OBJECTS_TIMBERSTRIPESARMSNECKBACKPLANE, - ASSET_TEX3D_OBJECTS_TIMBERSTRIPESLIMBSBACKCHARSELECT, - ASSET_TEX3D_SPACE_WHITEWALLWITHPIPES, - ASSET_TEX3D_OBJECTS_SMOKEYLEGS, - ASSET_TEX3D_SPACE_RINGSMETALENVMAP, - ASSET_TEX3D_OBJECTS_KRUNCHJACKETSIDES, - ASSET_TEX3D_OBJECTS_DOTS, - ASSET_TEX3D_OBJECTS_KRUNCHSCUTES, - ASSET_TEX3D_UNUSED_BETABALLOONKRUNCH_0, - ASSET_TEX3D_UNUSED_BETABALLOONKRUNCH_1, - ASSET_TEX3D_UNUSED_BETABALLOONKRUNCH_2, - ASSET_TEX3D_UNUSED_BETABALLOONKRUNCH_3, - ASSET_TEX3D_OBJECTS_KRUNCHUNDERSIDE, - ASSET_TEX3D_OBJECTS_KRUNCHEYE, - ASSET_TEX3D_OBJECTS_KRUNCHEYELOWPOLY, - ASSET_TEX3D_OBJECTS_KRUNCHSKULL, - ASSET_TEX3D_OBJECTS_KRUNCHTOES, - ASSET_TEX3D_OBJECTS_KRUNCHSKIN, - ASSET_TEX3D_OBJECTS_KRUNCHHEADSIDES, - ASSET_TEX3D_OBJECTS_KRUNCHHEADTOPLOWPOLY, - ASSET_TEX3D_OBJECTS_KRUNCHMOUTH, - ASSET_TEX3D_OBJECTS_KRUNCHBACKLOWPOLY, - ASSET_TEX3D_OBJECTS_EMPTYCARBREAKLIGHTS, - ASSET_TEX3D_COMMON_TROPHYRACEFLAG, - ASSET_TEX3D_OBJECTS_DIDDYSKIN, - ASSET_TEX3D_OBJECTS_TAJTRUNKTOP, - ASSET_TEX3D_OBJECTS_MODE, - ASSET_TEX3D_OBJECTS_PIPSYEARS, - ASSET_TEX3D_OBJECTS_PIPSYHEADTOP, - ASSET_TEX3D_WINTER_SNOWCHARBOW, - ASSET_TEX3D_OBJECTS_PIPSYBOW, - ASSET_TEX3D_OBJECTS_PIPSYBELLY, - ASSET_TEX3D_OBJECTS_PIPSYSAILORSUIT, - ASSET_TEX3D_OBJECTS_PIPSYEYES, - ASSET_TEX3D_OBJECTS_PTERODACTYLEYE, - ASSET_TEX3D_UNUSED_BETABALLOONPIPSY_0, - ASSET_TEX3D_UNUSED_BETABALLOONPIPSY_1, - ASSET_TEX3D_UNUSED_BETABALLOONPIPSY_2, - ASSET_TEX3D_UNUSED_BETABALLOONPIPSY_3, - ASSET_TEX3D_OBJECTS_PIPSYGLOVES, - ASSET_TEX3D_OBJECTS_PIPSYARMS, - ASSET_TEX3D_OBJECTS_PIPSYNOSEWHISKERS, - ASSET_TEX3D_OBJECTS_PIPSYHEAD, - ASSET_TEX3D_OBJECTS_PIPSYBACKCHARSELECT, - ASSET_TEX3D_OBJECTS_TIMBERMOUTHLOWPOLY, - ASSET_TEX3D_OBJECTS_GREENDINOSAURINSIDEMOUTH, - ASSET_TEX3D_OBJECTS_STOPWATCHMOUTHWORRIED, - ASSET_TEX3D_OBJECTS_STOPWATCHMOUTHHAPPY, - ASSET_TEX3D_OBJECTS_STOPWATCHMOUTHOPENMOUTH, - ASSET_TEX3D_OBJECTS_BUMPERGOGGLESFRONTCHARSELECT, - ASSET_TEX3D_OBJECTS_TIMBEREARSLOWPOLY, - ASSET_TEX3D_OBJECTS_DRUMSTICKCARENVMAP, - ASSET_TEX3D_OBJECTS_PLAYER1SELECT, - ASSET_TEX3D_OBJECTS_PLAYER2SELECT, - ASSET_TEX3D_OBJECTS_PLAYER3SELECT, - ASSET_TEX3D_OBJECTS_PLAYER4SELECT, - ASSET_TEX3D_UNUSED_BETABALLOONPLAYER1_0, - ASSET_TEX3D_UNUSED_BETABALLOONPLAYER1_1, - ASSET_TEX3D_UNUSED_BETABALLOONPLAYER1_2, - ASSET_TEX3D_UNUSED_BETABALLOONPLAYER1_3, - ASSET_TEX3D_UNUSED_BETABALLOONPLAYER2_0, - ASSET_TEX3D_UNUSED_BETABALLOONPLAYER2_1, - ASSET_TEX3D_UNUSED_BETABALLOONPLAYER2_2, - ASSET_TEX3D_UNUSED_BETABALLOONPLAYER2_3, - ASSET_TEX3D_UNUSED_BETABALLOONPLAYER3_0, - ASSET_TEX3D_UNUSED_BETABALLOONPLAYER3_1, - ASSET_TEX3D_UNUSED_BETABALLOONPLAYER3_2, - ASSET_TEX3D_UNUSED_BETABALLOONPLAYER3_3, - ASSET_TEX3D_UNUSED_BETABALLOONPLAYER4_0, - ASSET_TEX3D_UNUSED_BETABALLOONPLAYER4_1, - ASSET_TEX3D_UNUSED_BETABALLOONPLAYER4_2, - ASSET_TEX3D_UNUSED_BETABALLOONPLAYER4_3, - ASSET_TEX3D_MEDIEVAL_SIGNSHIELD, - ASSET_TEX3D_MEDIEVAL_COBBLEGROUND, - ASSET_TEX3D_MEDIEVAL_YELLOWCOBBLEGROUND, - ASSET_TEX3D_OBJECTS_BUBBLERSKINSIDESSMOOTH, - ASSET_TEX3D_OBJECTS_BUBBLEREYE, - ASSET_TEX3D_OBJECTS_BUBBLERSKINSIDESDOTS, - ASSET_TEX3D_OBJECTS_BUBBLEREYESOCKET, - ASSET_TEX3D_OBJECTS_TIPTUPSHELL, - ASSET_TEX3D_OBJECTS_KRUNCHCARENVMAP, - ASSET_TEX3D_UNUSED_BETABALLOONKRUNCHENVMAP, - ASSET_TEX3D_MEDIEVAL_TURNSIGN, - ASSET_TEX3D_OBJECTS_YELLOWDINOSAURBACK, - ASSET_TEX3D_OBJECTS_GREENDINOSAURBACK, - ASSET_TEX3D_OBJECTS_WIZPIGCAPE, - ASSET_TEX3D_OBJECTS_WIZPIGNOSESIDE, - ASSET_TEX3D_OBJECTS_WIZPIGNOSEFRONT, - ASSET_TEX3D_OBJECTS_WIZPIGHOOF, - ASSET_TEX3D_OBJECTS_SMOKEYSKIN, - ASSET_TEX3D_OBJECTS_SMOKEYWINGSOUTLINE, - ASSET_TEX3D_OBJECTS_WIZPIGAMULETNOSE, - ASSET_TEX3D_OBJECTS_WIZPIGHEADEYE, - ASSET_TEX3D_OBJECTS_TRICKYTOPSMOUTHEDGE, - ASSET_TEX3D_OBJECTS_WIZPIGHEADBELOWEARS, - ASSET_TEX3D_OBJECTS_WIZPIGFOREHEAD, - ASSET_TEX3D_OBJECTS_WIZPIGCLOTHES, - ASSET_TEX3D_OBJECTS_WIZPIGJEWELEYE, - ASSET_TEX3D_OBJECTS_WIZPIGHAIR, - ASSET_TEX3D_OBJECTS_WIZPIGEAR, - ASSET_TEX3D_OBJECTS_WIZPIGHEADMOUTH, - ASSET_TEX3D_OBJECTS_TRICKYTOPSCHEEK, - ASSET_TEX3D_UNUSED_TRICKYTOPSUNKNOWN, - ASSET_TEX3D_OBJECTS_TRICKYTOPSFRILLBACK, - ASSET_TEX3D_OBJECTS_TRICKYTOPSFRILLFRONT, - ASSET_TEX3D_OBJECTS_TRICKYTOPSUNDERSIDE, - ASSET_TEX3D_OBJECTS_TRICKYTOPSBACK, - ASSET_TEX3D_OBJECTS_WIZPIGSKINLINES, - ASSET_TEX3D_OBJECTS_TRICKYTOPSNAPE, - ASSET_TEX3D_OBJECTS_TRICKYTOPSNOSE, - ASSET_TEX3D_OBJECTS_WIZPIGSKIN, - ASSET_TEX3D_COMMON_CHARSELECTHILLFENCE, - ASSET_TEX3D_UNUSED_BETABALLOONPIPSYENVMAP, - ASSET_TEX3D_OBJECTS_PIPSYCARENVMAP, - ASSET_TEX3D_UNUSED_BETATAJPAD, - ASSET_TEX3D_UNUSED_BETATAJPAD2, - ASSET_TEX3D_OBJECTS_TAJSKIN, - ASSET_TEX3D_OBJECTS_BLUEYTUSKS, - ASSET_TEX3D_OBJECTS_DRUMSTICKFEATHERSCHARSELECT, - ASSET_TEX3D_UNUSED_BETABALLOONDRUMSTICKENVMAP, - ASSET_TEX3D_OBJECTS_TTCLOCKHAND, - ASSET_TEX3D_OBJECTS_TTSCREW, - ASSET_TEX3D_OBJECTS_PIPSYHEADLOWPOLY, - ASSET_TEX3D_OBJECTS_TIPTUPNOSE, - ASSET_TEX3D_OBJECTS_TIPTUPTOESCHARSELECT, - ASSET_TEX3D_OBJECTS_TIPTUPSHELLBACKCENTER, - ASSET_TEX3D_OBJECTS_TIPTUPFRONT, - ASSET_TEX3D_OBJECTS_TIPTUPEYE, - ASSET_TEX3D_OBJECTS_TIPTUPNECK, - ASSET_TEX3D_OBJECTS_TIPTUPFRONTFRAME, - ASSET_TEX3D_UNUSED_BETABALLOONPLAYERSENVMAP, - ASSET_TEX3D_OBJECTS_CONKERCARENVMAP, - ASSET_TEX3D_OBJECTS_CONKERBACKLOWPOLY, - ASSET_TEX3D_OBJECTS_PIPSYBACKLOWPOLY, - ASSET_TEX3D_OBJECTS_RACERCOMMONSTEERINGWHEEL2, - ASSET_TEX3D_OBJECTS_TTEYE, - ASSET_TEX3D_UNUSED_TTEYESTILL, - ASSET_TEX3D_OBJECTS_DRUMSTICKSTRAPSBUTTONLOWPOLY, - ASSET_TEX3D_OBJECTS_DRUMSTICKSTRAPSBUTTON, - ASSET_TEX3D_OBJECTS_TTCROWN, - ASSET_TEX3D_OBJECTS_TTGLOVE, - ASSET_TEX3D_OBJECTS_TTMOUTHSMILE, - ASSET_TEX3D_OBJECTS_TTRIM, - ASSET_TEX3D_OBJECTS_TTSHOE, - ASSET_TEX3D_OBJECTS_BUBBLERTENTACLESBACKSIDE, - ASSET_TEX3D_OBJECTS_SMOKEYSHADOW, - ASSET_TEX3D_OBJECTS_YELLOWDINOSAUREYE, - ASSET_TEX3D_OBJECTS_GREENDINOSAUREYE, - ASSET_TEX3D_OBJECTS_RACERCOMMONBLACK2, - ASSET_TEX3D_OBJECTS_TIMBERFRONT, - ASSET_TEX3D_OBJECTS_TIMBERMOUTH, - ASSET_TEX3D_UNUSED_BETABALLOONTIMBER_0, - ASSET_TEX3D_UNUSED_BETABALLOONTIMBER_1, - ASSET_TEX3D_UNUSED_BETABALLOONTIMBER_2, - ASSET_TEX3D_UNUSED_BETABALLOONTIMBER_3, - ASSET_TEX3D_OBJECTS_TIMBERFACEWHITEFUR, - ASSET_TEX3D_OBJECTS_TIMBEREYE, - ASSET_TEX3D_OBJECTS_TRICKYTOPSSKINLIMBS, - ASSET_TEX3D_OBJECTS_SMOKEYMOUTH, - ASSET_TEX3D_OBJECTS_TIMBERFRONTCHARSELECT, - ASSET_TEX3D_OBJECTS_TIMBERNOSE, - ASSET_TEX3D_OBJECTS_TIMBERFUR, - ASSET_TEX3D_OBJECTS_TIMBERFOOT, - ASSET_TEX3D_OBJECTS_TIMBERBACKLOWPOLY, - ASSET_TEX3D_OBJECTS_TIMBERCHEEK, - ASSET_TEX3D_OBJECTS_TIMBERCHEEKPLANE, - ASSET_TEX3D_OBJECTS_TIMBERCHEEKCHARSELECT, - ASSET_TEX3D_UNUSED_BETABALLOONTIPTUP_0, - ASSET_TEX3D_UNUSED_BETABALLOONTIPTUP_1, - ASSET_TEX3D_UNUSED_BETABALLOONTIPTUP_2, - ASSET_TEX3D_UNUSED_BETABALLOONTIPTUP_3, - ASSET_TEX3D_OBJECTS_TIPTUPSKIN, - ASSET_TEX3D_OBJECTS_TIPTUPBACKLOWPOLY, - ASSET_TEX3D_OBJECTS_TIPTUPNAPE, - ASSET_TEX3D_OBJECTS_WIZPIGEYE, - ASSET_TEX3D_OBJECTS_TRICKYTOPSLIMBS, - ASSET_TEX3D_OBJECTS_TRICKYTOPSBOTTOMLIGHT, - ASSET_TEX3D_OBJECTS_TRICKYTOPSFOREHEAD, - ASSET_TEX3D_UNUSED_WIZPIGROCKETUNUSEDSHADOW, - ASSET_TEX3D_OBJECTS_TRICKYTOPSTOES, - ASSET_TEX3D_OBJECTS_WIDESCREEN, - ASSET_TEX3D_OBJECTS_RACERCOMMONHOVERBOTTOM, - ASSET_TEX3D_OBJECTS_BUMPERHOVERTOPLOWPOLY, - ASSET_TEX3D_OBJECTS_TIPTUPHOVERTOP, - ASSET_TEX3D_OBJECTS_CONKERHOVERTOP, - ASSET_TEX3D_OBJECTS_BANJOHOVERTOP, - ASSET_TEX3D_OBJECTS_DIDDYHOVERTOP, - ASSET_TEX3D_OBJECTS_TIMBERHOVERTOP, - ASSET_TEX3D_OBJECTS_KRUNCHHOVERTOP, - ASSET_TEX3D_OBJECTS_PIPSYHOVERTOP, - ASSET_TEX3D_OBJECTS_DRUMSTICKHOVERTOP, - ASSET_TEX3D_OBJECTS_BUMPERHOVERTOP, - ASSET_TEX3D_OBJECTS_TAJTURBAN, - ASSET_TEX3D_OBJECTS_TAJTUSKS, - ASSET_TEX3D_OBJECTS_RACERCOMMONREDLOWPOLY, - ASSET_TEX3D_OBJECTS_STOPWATCHFRAMEENVMAP, - ASSET_TEX3D_OBJECTS_BLUEYSKINENVMAP, - ASSET_TEX3D_OBJECTS_TAJFRONT, - ASSET_TEX3D_OBJECTS_TAJCHEEK, - ASSET_TEX3D_OBJECTS_TAJLIMBS, - ASSET_TEX3D_OBJECTS_TAJVEST, - ASSET_TEX3D_OBJECTS_TAJLEGSIDES, - ASSET_TEX3D_OBJECTS_BLUEYCHEEK, - ASSET_TEX3D_OBJECTS_RACERCOMMONWHITE, - ASSET_TEX3D_OBJECTS_DRUMSTICKWINGSTOP, - ASSET_TEX3D_OBJECTS_TIPTUPPLANEWING, - ASSET_TEX3D_OBJECTS_CONKERPLANEWING, - ASSET_TEX3D_OBJECTS_BANJOPLANEWING, - ASSET_TEX3D_OBJECTS_DIDDYPLANEWING, - ASSET_TEX3D_OBJECTS_TIMBERPLANEWING, - ASSET_TEX3D_OBJECTS_KRUNCHPLANEWING, - ASSET_TEX3D_OBJECTS_PIPSYPLANEWING, - ASSET_TEX3D_OBJECTS_DRUMSTICKPLANEWING, - ASSET_TEX3D_OBJECTS_BUMPERPLANEWING, - ASSET_TEX3D_OBJECTS_BUMPERCARENVMAP, - ASSET_TEX3D_UNUSED_BETABALLOONBUMPERENVMAP, - ASSET_TEX3D_UNUSED_GOLDBALLOONSTRIPES, - ASSET_TEX3D_COMMON_BROWNDIRTPATH, - ASSET_TEX3D_DINO_FOSSILHOLES, - ASSET_TEX3D_SPACE_GREENWALLWITHDIALS, - ASSET_TEX3D_COMMON_DIRTWALLSANDY2, - ASSET_TEX3D_SPACE_WHITEWALLYELLOWARROWDOWN, - ASSET_TEX3D_SPACE_SPACESHIPEARTH, - ASSET_TEX3D_SPACE_VENTFANGRATE, - ASSET_TEX3D_OBJECTS_FANBLADE, - ASSET_TEX3D_OBJECTS_DOMEORANGESKY_0, - ASSET_TEX3D_OBJECTS_DOMEORANGESKY_1, - ASSET_TEX3D_OBJECTS_DOMEORANGESKY_2, - ASSET_TEX3D_OBJECTS_DOMEORANGESKY_3, - ASSET_TEX3D_SPACE_GLASSWINDOW, - ASSET_TEX3D_SPACE_BLINKINGLIGHT, - ASSET_TEX3D_COMMON_HANGINGMOSS3, - ASSET_TEX3D_MEDIEVAL_YELLOWHOUSEFRONT, - ASSET_TEX3D_MEDIEVAL_YELLOWHOUSESIDE, - ASSET_TEX3D_SPACE_GREENWALLGRAPH, - ASSET_TEX3D_SPACE_GREENWALLTANKS, - ASSET_TEX3D_COMMON_BLUESTONESANDYMOSSY, - ASSET_TEX3D_DINO_ORANGESTONESANDY, - ASSET_TEX3D_COMMON_DEBUGPURPLEHIT, - ASSET_TEX3D_SPACE_ARCHSUPPORT, - ASSET_TEX3D_SPACE_STARSSIGN, - ASSET_TEX3D_SPACE_KILLERINSTINCTSIGN, - ASSET_TEX3D_OBJECTS_DOMEORANGESKY2_0, - ASSET_TEX3D_OBJECTS_DOMEORANGESKY2_1, - ASSET_TEX3D_OBJECTS_DOMEORANGESKY2_2, - ASSET_TEX3D_OBJECTS_DOMEORANGESKY2_3, - ASSET_TEX3D_SPACE_BLUEWALLLIGHT, - ASSET_TEX3D_SPACE_BLUEWALLLIGHT2, - ASSET_TEX3D_SPACE_BLUEWALLSTRIPES, - ASSET_TEX3D_SPACE_WHITEWALLBRICKSDETAILS, - ASSET_TEX3D_SPACE_BLUETUNNELLIGHT, - ASSET_TEX3D_DINO_LILYPADEDGE, - ASSET_TEX3D_MEDIEVAL_BLUEWALLFRAME, - ASSET_TEX3D_MEDIEVAL_BLUEWALLWINDOWANDFLAGS, - ASSET_TEX3D_MEDIEVAL_BLUEWALLWINDOWANDDOOR, - ASSET_TEX3D_MEDIEVAL_BLUEWALLROPE, - ASSET_TEX3D_OBJECTS_DOMEGRASS_0, - ASSET_TEX3D_OBJECTS_DOMEGRASS_1, - ASSET_TEX3D_OBJECTS_DOMEGRASS_2, - ASSET_TEX3D_OBJECTS_DOMEGRASS_3, - ASSET_TEX3D_OBJECTS_MONORAILN64LOGO, - ASSET_TEX3D_DINO_TEMPLEBRICK2, - ASSET_TEX3D_SPACE_WHITEWALLPIPES, - ASSET_TEX3D_TROPICAL_N64LOGOSHIPSAIL_0, - ASSET_TEX3D_TROPICAL_N64LOGOSHIPSAIL_1, - ASSET_TEX3D_SPACE_WHITEWALLN64TANK, - ASSET_TEX3D_UNUSED_BLACKUNKNOWN, - ASSET_TEX3D_SPACE_N64SIGNSQUARE, - ASSET_TEX3D_SPACE_SUNNEONSIGN, - ASSET_TEX3D_SPACE_STREETROAD, - ASSET_TEX3D_OBJECTS_DOMEBLUESKY2_0, - ASSET_TEX3D_OBJECTS_DOMEBLUESKY2_1, - ASSET_TEX3D_OBJECTS_DOMEBLUESKY2_2, - ASSET_TEX3D_OBJECTS_DOMEBLUESKY2_3, - ASSET_TEX3D_OBJECTS_DOMEDESERT_0, - ASSET_TEX3D_OBJECTS_DOMEDESERT_1, - ASSET_TEX3D_OBJECTS_DOMEDESERT_2, - ASSET_TEX3D_OBJECTS_DOMEDESERT_3, - ASSET_TEX3D_UNUSED_NINTENDOLOGONEGATIVE_0, - ASSET_TEX3D_UNUSED_NINTENDOLOGONEGATIVE_1, - ASSET_TEX3D_UNUSED_NINTENDOLOGONEGATIVE_2, - ASSET_TEX3D_UNUSED_NINTENDOLOGONEGATIVE_3, - ASSET_TEX3D_OBJECTS_DOMESPACESTARS_0, - ASSET_TEX3D_OBJECTS_DOMESPACESTARS_1, - ASSET_TEX3D_OBJECTS_DOMESPACESTARS_2, - ASSET_TEX3D_OBJECTS_DOMESPACEORANGESKY_0, - ASSET_TEX3D_OBJECTS_DOMESPACEORANGESKY_1, - ASSET_TEX3D_OBJECTS_DOMESPACEORANGESKY_2, - ASSET_TEX3D_OBJECTS_DOMESPACEYELLOWSKY_0, - ASSET_TEX3D_OBJECTS_DOMESPACEYELLOWSKY_1, - ASSET_TEX3D_OBJECTS_DOMESPACEYELLOWSKY_2, - ASSET_TEX3D_MEDIEVAL_VILLAGESTONEWALL, - ASSET_TEX3D_COMMON_REDARROWSIGN2, - ASSET_TEX3D_MEDIEVAL_VILLAGEROOFN64LOGO, - ASSET_TEX3D_SPACE_SKYSCRAPERLIGHTS, - ASSET_TEX3D_SPACE_WHITEWALLBRICKS2, - ASSET_TEX3D_SPACE_WHITEWALLN64LOGO, - ASSET_TEX3D_COMMON_WOODBRIDGEDARKBROWN, - ASSET_TEX3D_WINTER_FINISHLINEFLAGBLACKYELLOW, - ASSET_TEX3D_OBJECTS_DOMEBLUESKY3_0, - ASSET_TEX3D_OBJECTS_DOMEBLUESKY3_1, - ASSET_TEX3D_OBJECTS_DOMEBLUESKY3_2, - ASSET_TEX3D_OBJECTS_DOMEBLUESKY3_3, - ASSET_TEX3D_SPACE_SPACEGRASS, - ASSET_TEX3D_UNUSED_CASTLEWALLTILEMOSSY, - ASSET_TEX3D_SPACE_VENTFANBORDER, - ASSET_TEX3D_SPACE_WHITEWALLBLUEPIPE, - ASSET_TEX3D_OBJECTS_DOMETOPBROWN, - ASSET_TEX3D_MEDIEVAL_VILLAGEPLANKFENCE, - ASSET_TEX3D_OBJECTS_PTERODACTYLUNDERSIDE, - ASSET_TEX3D_OBJECTS_PTERODACTYLNOSE, - ASSET_TEX3D_OBJECTS_PTERODACTYLSKIN, - ASSET_TEX3D_OBJECTS_PTERODACTYLSPINEHEAD, - ASSET_TEX3D_OBJECTS_PTERODACTYLWINGS, - ASSET_TEX3D_SPACE_REDWALLSMALLLEVERS, - ASSET_TEX3D_SPACE_REDWALLBIGLEVERS, - ASSET_TEX3D_SPACE_REDWALLR4300, - ASSET_TEX3D_SPACE_REDWALLCOMPUTER, - ASSET_TEX3D_MEDIEVAL_ROOFTILESHINGLES, - ASSET_TEX3D_SPACE_COLOREDSTONE, - ASSET_TEX3D_MEDIEVAL_BLUECASTLEMERLON, - ASSET_TEX3D_SPACE_RARESIGNFLASHING, - ASSET_TEX3D_SPACE_REDGROUNDARROW, - ASSET_TEX3D_SPACE_REDWALLBIGLEVERS2, - ASSET_TEX3D_MEDIEVAL_ORANGEHOUSEWALLWINDOW, - ASSET_TEX3D_MEDIEVAL_ORANGEHOUSEGUARDRAIL, - ASSET_TEX3D_SPACE_ARCHSUPPORTBASE, - ASSET_TEX3D_OBJECTS_SPACESHIPBOOSTER, - ASSET_TEX3D_SPACE_REDPILLARSPIKE, - ASSET_TEX3D_DINO_FOSSILBONE, - ASSET_TEX3D_SPACE_WHITEWALLRARELOGO, - ASSET_TEX3D_MEDIEVAL_ROOFTILESHINGLESRED, - ASSET_TEX3D_MEDIEVAL_ROOFTILESHINGLES2, - ASSET_TEX3D_OBJECTS_CHARSELECTSHADOW, - ASSET_TEX3D_SPACE_BLUEPAVEMENT, - ASSET_TEX3D_OBJECTS_DOMESUNRAYS, - ASSET_TEX3D_COMMON_DIRTROADSANDY, - ASSET_TEX3D_OBJECTS_DOMEBLUESKYISLAND, - ASSET_TEX3D_OBJECTS_DOMEBLACKBOTTOM, - ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_0, - ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_1, - ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_2, - ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_3, - ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_4, - ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_5, - ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_6, - ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_7, - ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_8, - ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_9, - ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_10, - ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_11, - ASSET_TEX3D_COMMON_BLACKSEMITRANSPARENT, - ASSET_TEX3D_OBJECTS_SPACESHIPBLASTER, - ASSET_TEX3D_OBJECTS_DOMEVOLCANO_0, - ASSET_TEX3D_OBJECTS_DOMEVOLCANO_1, - ASSET_TEX3D_OBJECTS_DOMEVOLCANO_2, - ASSET_TEX3D_OBJECTS_DOMEVOLCANO_3, - ASSET_TEX3D_OBJECTS_DOMEVOLCANO_4, - ASSET_TEX3D_OBJECTS_DOMEVOLCANO_5, - ASSET_TEX3D_OBJECTS_DOMEVOLCANO_6, - ASSET_TEX3D_OBJECTS_DOMEVOLCANO_7, - ASSET_TEX3D_OBJECTS_DOMEVOLCANO_8, - ASSET_TEX3D_OBJECTS_DOMEVOLCANO_9, - ASSET_TEX3D_OBJECTS_DOMEVOLCANO_10, - ASSET_TEX3D_OBJECTS_DOMEVOLCANO_11, - ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHTTOP, - ASSET_TEX3D_WINTER_ICYPATHSNOWY, - ASSET_TEX3D_SPACE_SPACEWALL, - ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_0, - ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_1, - ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_2, - ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_3, - ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_4, - ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_5, - ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_6, - ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_7, - ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_8, - ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_9, - ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_10, - ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_11, - ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_12, - ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_13, - ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_14, - ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_15, - ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_16, - ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_17, - ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_18, - ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_19, - ASSET_TEX3D_SPACE_FINISHLINEWHITESPACE_0, - ASSET_TEX3D_SPACE_FINISHLINEWHITESPACE_1, - ASSET_TEX3D_SPACE_WHITEWALLBLOCKSLARGE, - ASSET_TEX3D_COMMON_FOGWHITE, - ASSET_TEX3D_SPACE_FINISHLINESPACE2_0, - ASSET_TEX3D_SPACE_FINISHLINESPACE2_1, - ASSET_TEX3D_SPACE_STADIUMLIGHTS, - ASSET_TEX3D_OBJECTS_DOMESPACEPINK_0, - ASSET_TEX3D_OBJECTS_DOMESPACEPINK_1, - ASSET_TEX3D_OBJECTS_DOMESPACEPINK_2, - ASSET_TEX3D_OBJECTS_DOMESPACEPINK_3, - ASSET_TEX3D_OBJECTS_DOMESPACEPINKTOP, - ASSET_TEX3D_SPACE_WHITEWALLSMALLYELLOWARROW, - ASSET_TEX3D_SPACE_WHITEWALLVENT, - ASSET_TEX3D_SPACE_POLE, - ASSET_TEX3D_SPACE_BUILDINGEDGE, - ASSET_TEX3D_DINO_ANCIENTSTONE, - ASSET_TEX3D_OBJECTS_DOMEORANGESKY3_0, - ASSET_TEX3D_OBJECTS_DOMEORANGESKY3_1, - ASSET_TEX3D_OBJECTS_DOMEORANGESKY3_2, - ASSET_TEX3D_OBJECTS_DOMEORANGESKY3_3, - ASSET_TEX3D_SPACE_WHITEWALLBLUETANKS, - ASSET_TEX3D_MEDIEVAL_TREETRUNKSWOODS_0, - ASSET_TEX3D_MEDIEVAL_TREETRUNKSWOODS_1, - ASSET_TEX3D_MEDIEVAL_TREETRUNKSWOODS_2, - ASSET_TEX3D_MEDIEVAL_THATCHROOFING2, - ASSET_TEX3D_MEDIEVAL_VILLAGEDOORROUND, - ASSET_TEX3D_MEDIEVAL_WHITEHOUSEWALL, - ASSET_TEX3D_MEDIEVAL_WHITEHOUSEWALLWINDOW, - ASSET_TEX3D_UNUSED_UTURN, - ASSET_TEX3D_WINTER_ICYWATERFALL, - ASSET_TEX3D_SPACE_WHITEWALLSCREEN, - ASSET_TEX3D_OBJECTS_SILVERTROPHYEYE, - ASSET_TEX3D_OBJECTS_DOMEBLUESKY4_0, - ASSET_TEX3D_OBJECTS_DOMEBLUESKY4_1, - ASSET_TEX3D_MEDIEVAL_VILLAGEWHITEWALL5, - ASSET_TEX3D_SPACE_WHITEWALLSTEELCYLINDER, - ASSET_TEX3D_SPACE_CITYLIGHTSYELLOWWHITE, - ASSET_TEX3D_UNUSED_BETABUMPERICON, - ASSET_TEX3D_COMMON_LOGEXPOSEDSIDE2, - ASSET_TEX3D_COMMON_LOGBARK, - ASSET_TEX3D_COMMON_LOGBARK2, - ASSET_TEX3D_COMMON_LOGEXPOSEDSIDE3, - ASSET_TEX3D_OBJECTS_DOMECOAST_0, - ASSET_TEX3D_OBJECTS_DOMECOAST_1, - ASSET_TEX3D_OBJECTS_DOMECOAST_2, - ASSET_TEX3D_OBJECTS_DOMECOAST_3, - ASSET_TEX3D_OBJECTS_DOMECOAST_4, - ASSET_TEX3D_OBJECTS_DOMECOAST_5, - ASSET_TEX3D_OBJECTS_DOMECOAST_6, - ASSET_TEX3D_OBJECTS_DOMECOAST_7, - ASSET_TEX3D_COMMON_REDARROWSIGN3, - ASSET_TEX3D_OBJECTS_REDSPACESHIP, - ASSET_TEX3D_UNUSED_UNKNOWNSIGNTEXTURE, - ASSET_TEX3D_SPACE_ARROWNEONFLASHING, - ASSET_TEX3D_TROPICAL_PIRATESHIPTRIM, - ASSET_TEX3D_OBJECTS_DOORBOSSTOP, - ASSET_TEX3D_OBJECTS_DOORBOSSBOTTOM, - ASSET_TEX3D_OBJECTS_DOORBOSSWIZPIGDECO, - ASSET_TEX3D_WINTER_WATERFROZEN, - ASSET_TEX3D_OBJECTS_BRONZETROPHYENVMAP, - ASSET_TEX3D_COMMON_BROWNSTONE, - ASSET_TEX3D_OBJECTS_MAGICCARPETMIDDLE, - ASSET_TEX3D_OBJECTS_MAGICCARPETEDGE, - ASSET_TEX3D_OBJECTS_RAREWARELOGOGOLD, - ASSET_TEX3D_UNUSED_BETATTDOORTOP, - ASSET_TEX3D_UNUSED_BETATTDOORBOTTON, - ASSET_TEX3D_OBJECTS_CHECKPOINT, - ASSET_TEX3D_UNUSED_BETADRUMSTICKICON, - ASSET_TEX3D_OBJECTS_DOMESUN, - ASSET_TEX3D_OBJECTS_N64LOGOBLUE, - ASSET_TEX3D_COMMON_ORANGEWOOD, - ASSET_TEX3D_OBJECTS_N64LOGOGREEN, - ASSET_TEX3D_OBJECTS_SEAMONSTEREYE, - ASSET_TEX3D_UNUSED_SEAMONSTERUNKNOWN, - ASSET_TEX3D_OBJECTS_YELLOWDINOSAURUNDERSIDE, - ASSET_TEX3D_OBJECTS_SEAMONSTERUNDERSIDE, - ASSET_TEX3D_OBJECTS_SEAMONSTERHEADBOTTOM, - ASSET_TEX3D_OBJECTS_SEAMONSTERCHEEK, - ASSET_TEX3D_OBJECTS_YELLOWDINOSAURCHEEK, - ASSET_TEX3D_OBJECTS_SEAMONSTERNOSE, - ASSET_TEX3D_OBJECTS_SEAMONSTERHEADTOP, - ASSET_TEX3D_OBJECTS_YELLOWDINOSAURMOUTH, - ASSET_TEX3D_OBJECTS_YELLOWDINOSAUREYEBROWS, - ASSET_TEX3D_OBJECTS_SMOKEYEARS, - ASSET_TEX3D_OBJECTS_SMOKEYNOSE, - ASSET_TEX3D_OBJECTS_SMOKEYHEADTOP, - ASSET_TEX3D_OBJECTS_N64LOGORED, - ASSET_TEX3D_SPACE_BLUESTONEFLOOR, - ASSET_TEX3D_OBJECTS_EXITSIGNSMALL, - ASSET_TEX3D_OBJECTS_EXITSIGN, - ASSET_TEX3D_TROPICAL_WOODGUARDRAIL, - ASSET_TEX3D_WINTER_ICYPINKWALLSNOWY, - ASSET_TEX3D_TROPICAL_FOG2, - ASSET_TEX3D_OBJECTS_DOMEYELLOWSKY_0, - ASSET_TEX3D_OBJECTS_DOMEYELLOWSKY_1, - ASSET_TEX3D_OBJECTS_DOMEYELLOWSKY_2, - ASSET_TEX3D_OBJECTS_DOMEYELLOWSKY_3, - ASSET_TEX3D_DINO_DINOSAURTRACKS, - ASSET_TEX3D_TROPICAL_SANDPATHGRASSY, - ASSET_TEX3D_WINTER_VILLAGEHOUSEWALL, - ASSET_TEX3D_OBJECTS_GOLDTROPHYSLEAVE, - ASSET_TEX3D_OBJECTS_GOLDSILVERTROPHYMOUTH, - ASSET_TEX3D_OBJECTS_LIGHTHOUSEBRICKDARK, - ASSET_TEX3D_OBJECTS_LIGHTHOUSEBRICK, - ASSET_TEX3D_OBJECTS_DOMEPLANETS_0, - ASSET_TEX3D_OBJECTS_DOMEPLANETS_1, - ASSET_TEX3D_OBJECTS_DOMEPLANETS_2, - ASSET_TEX3D_OBJECTS_DOMEPLANETS_3, - ASSET_TEX3D_OBJECTS_DOMEPLANETS_4, - ASSET_TEX3D_OBJECTS_DOMEPLANETS_5, - ASSET_TEX3D_OBJECTS_DOMEPLANETS_6, - ASSET_TEX3D_OBJECTS_DOMESKYGRADIENT, - ASSET_TEX3D_OBJECTS_GOLDGRADIENTDARK, - ASSET_TEX3D_OBJECTS_GOLDGRADIENT, - ASSET_TEX3D_OBJECTS_GOLDTROPHYSIGN, - ASSET_TEX3D_COMMON_GRASSCHARSELECT, - ASSET_TEX3D_OBJECTS_DOMEGREENBOTTOM, - ASSET_TEX3D_OBJECTS_SPACESHIP14, - ASSET_TEX3D_SPACE_SMALLGREENLIGHTS, - ASSET_TEX3D_COMMON_HANGINGMOSS4, - ASSET_TEX3D_SPACE_SPACEPOLEGREEN, - ASSET_TEX3D_SPACE_GREENWALLMODULE, - ASSET_TEX3D_OBJECTS_SPACESHIP2SIDE, - ASSET_TEX3D_OBJECTS_SPACESHIP2CONNECTOR, - ASSET_TEX3D_SPACE_REDWALLGREENSCREEN, - ASSET_TEX3D_OBJECTS_SPACESHIP2SMALLLIGHTS, - ASSET_TEX3D_OBJECTS_SPACESHIP214, - ASSET_TEX3D_COMMON_GREYSTONE, - ASSET_TEX3D_SPACE_COLOUREDSTONE, - ASSET_TEX3D_COMMON_GREYPAVEMENT, - ASSET_TEX3D_UNUSED_DOMEUNUSED, - ASSET_TEX3D_UNUSED_BETAAIRZIPPER, - ASSET_TEX3D_UNUSED_SIGN100, - ASSET_TEX3D_WINTER_SNOWWALLSMALL, - ASSET_TEX3D_WINTER_SNOWWALLLARGE, - ASSET_TEX3D_UNUSED_UNKNOWNDECAL, - ASSET_TEX3D_UNUSED_UNKNOWNGREENDOTS, - ASSET_TEX3D_OBJECTS_DOMEGRASSYHILLS, - ASSET_TEX3D_OBJECTS_DOMEGRASS, - ASSET_TEX3D_UNUSED_BETAKRUNCHICON, - ASSET_TEX3D_OBJECTS_DOORLEVELBOTTOM, - ASSET_TEX3D_OBJECTS_DOORLEVELTOP, - ASSET_TEX3D_OBJECTS_DOORLEVELTOPDONE, - ASSET_TEX3D_UNUSED_DOORLEVELTOPUNUSED, - ASSET_TEX3D_OBJECTS_DOORLEVELBOTTOMDONE, - ASSET_TEX3D_UNUSED_DOORLEVELBOTTOMUNUSED, - ASSET_TEX3D_UNUSED_DOORLEVELBOTTOMUNUSEDQMARK, - ASSET_TEX3D_OBJECTS_DOORNUMBERSONESDIGIT, - ASSET_TEX3D_OBJECTS_DOORNUMBERSTENSDIGIT, - ASSET_TEX3D_OBJECTS_SPACESHIP2FRONT, - ASSET_TEX3D_OBJECTS_LIGHTHOUSEDOOR, - ASSET_TEX3D_OBJECTS_LIGHTHOUSEBRICK2, - ASSET_TEX3D_OBJECTS_LIGHTHOUSEBEACONBOTTOM, - ASSET_TEX3D_OBJECTS_LIGHTHOUSEROCKETWINGS, - ASSET_TEX3D_OBJECTS_LIGHTHOUSEWINDOW, - ASSET_TEX3D_COMMON_ELECTRICITYANIMATED, - ASSET_TEX3D_OBJECTS_LIGHTHOUSEGLASSWINDOW, - ASSET_TEX3D_SPACE_GLASSWINDOW2, - ASSET_TEX3D_OBJECTS_LOGEND, - ASSET_TEX3D_SPACE_LOOPGUARDRAIL, - ASSET_TEX3D_OBJECTS_MIDIFADE, - ASSET_TEX3D_OBJECTS_MISSLEBODY, - ASSET_TEX3D_OBJECTS_MISSLEBACK, - ASSET_TEX3D_UNUSED_MODE2, - ASSET_TEX3D_OBJECTS_MONORAILFRONT, - ASSET_TEX3D_OBJECTS_MONORAILRAILSKIRT, - ASSET_TEX3D_OBJECTS_MONORAILFRONTTOP, - ASSET_TEX3D_UNUSED_BETAPIPSYICON, - ASSET_TEX3D_UNUSED_OLDFORESTTREEBARK, - ASSET_TEX3D_OBJECTS_DOMEBLUETOP, - ASSET_TEX3D_WINTER_ICETUNNELCEILING, - ASSET_TEX3D_UNUSED_DOMEGREENUNKNOWN, - ASSET_TEX3D_OBJECTS_TROPHYSIGNQMARK, - ASSET_TEX3D_OBJECTS_BUBBLERHEAD, - ASSET_TEX3D_OBJECTS_BUBBLERUNDERSIDE, - ASSET_TEX3D_DINO_ORANGESTONE3, - ASSET_TEX3D_TROPICAL_PALMTREELEAVES2, - ASSET_TEX3D_TROPICAL_PALMTREEBARKBROWN2, - ASSET_TEX3D_TROPICAL_PALMTREESHADOW2, - ASSET_TEX3D_UNUSED_PAPERCENTER, - ASSET_TEX3D_UNUSED_PAPEREDGE, - ASSET_TEX3D_OBJECTS_SEAMONSTERSPINE, - ASSET_TEX3D_OBJECTS_DOORWIZPIG_0, - ASSET_TEX3D_OBJECTS_DOORWIZPIG_1, - ASSET_TEX3D_OBJECTS_DOORWIZPIG_2, - ASSET_TEX3D_OBJECTS_DOORWIZPIG_3, - ASSET_TEX3D_COMMON_SEPIASTONE, - ASSET_TEX3D_WINTER_WATERFROZEN2, - ASSET_TEX3D_OBJECTS_GOLDTROPHYEYE, - ASSET_TEX3D_OBJECTS_WIZPIGMOUNTAINEYE, - ASSET_TEX3D_OBJECTS_WIZPIGMOUNTAINNOSE, - ASSET_TEX3D_OBJECTS_GOLDTROPHYNOSE, - ASSET_TEX3D_UNUSED_PROAM64BALLOONLOGO, - ASSET_TEX3D_COMMON_RAINBOW, - ASSET_TEX3D_COMMON_BLUEDARK, - ASSET_TEX3D_COMMON_RARELOGOGRAY, - ASSET_TEX3D_COMMON_RARELOGOGOLD, - ASSET_TEX3D_OBJECTS_RAREWARE, - ASSET_TEX3D_OBJECTS_SPACESHIP5, - ASSET_TEX3D_SPACE_REDPATH, - ASSET_TEX3D_COMMON_REDYELLOWLAMP, - ASSET_TEX3D_SPACE_REDBRICKS, - ASSET_TEX3D_OBJECTS_SPACESHIPFRONT, - ASSET_TEX3D_DINO_ERODEDCANYONROCKSHADOW, - ASSET_TEX3D_TROPICAL_PIRATESHIPROPE, - ASSET_TEX3D_COMMON_YELLOWBRICK, - ASSET_TEX3D_COMMON_YELLOWSTONEGROUND, - ASSET_TEX3D_UNUSED_GRASSSANDYUNKNOWN, - ASSET_TEX3D_COMMON_GREYPAVEMENTEDGE, - ASSET_TEX3D_TROPICAL_YELLOWBRICKTILESANDY, - ASSET_TEX3D_WINTER_DARKSTONEWALL, - ASSET_TEX3D_DINO_ORANGESTONE4, - ASSET_TEX3D_DINO_ORANGESTONE5, - ASSET_TEX3D_UNUSED_PAPERUNKNOWN, - ASSET_TEX3D_OBJECTS_SHIELDLEVEL1, - ASSET_TEX3D_OBJECTS_SHIELDLEVEL2, - ASSET_TEX3D_OBJECTS_SHIELDLEVEL3, - ASSET_TEX3D_UNUSED_SIGNBALLOON, - ASSET_TEX3D_UNUSED_SIGNWHITE, - ASSET_TEX3D_UNUSED_SIGNYELLOW, - ASSET_TEX3D_OBJECTS_SILVERTROPHYENVMAP, - ASSET_TEX3D_UNUSED_SIGN60, - ASSET_TEX3D_OBJECTS_DOMEBLUESKY5_0, - ASSET_TEX3D_OBJECTS_DOMEBLUESKY5_1, - ASSET_TEX3D_OBJECTS_DOMEBLUESKY5_2, - ASSET_TEX3D_OBJECTS_DOMEBLUESKY5_3, - ASSET_TEX3D_OBJECTS_DOMEBLUESKY5_4, - ASSET_TEX3D_OBJECTS_DOMEBLUESKY5_5, - ASSET_TEX3D_OBJECTS_DOMEBLUESKY5_6, - ASSET_TEX3D_OBJECTS_DOMEBLUESKY5_7, - ASSET_TEX3D_SPACE_WALLTILELIGHTS2, - ASSET_TEX3D_UNUSED_PAPERDECORATION, - ASSET_TEX3D_SPACE_WALLTILELIGHTSLARGE, - ASSET_TEX3D_WINTER_VILLAGEDOOR, - ASSET_TEX3D_WINTER_HANGINGSNOW5, - ASSET_TEX3D_WINTER_WOODENGUARDRAILSNOWY, - ASSET_TEX3D_WINTER_DARKSTONEWALLSNOWY3, - ASSET_TEX3D_WINTER_HANGINGSNOW6, - ASSET_TEX3D_OBJECTS_SNOWBALLFACE, - ASSET_TEX3D_WINTER_SNOW5, - ASSET_TEX3D_OBJECTS_DOMEPLANETS2, - ASSET_TEX3D_SPACE_BLUELIGHTSTONE, - ASSET_TEX3D_SPACE_PURPLEPATH, - ASSET_TEX3D_SPACE_PINKSTONE, - ASSET_TEX3D_SPACE_ARCHINNER, - ASSET_TEX3D_UNUSED_SPACESHIPUNKNOWN5, - ASSET_TEX3D_UNUSED_SPACESHIPUNKNOWN6, - ASSET_TEX3D_UNUSED_SPACESHIPUNKNOWN7, - ASSET_TEX3D_COMMON_MOON, - ASSET_TEX3D_UNUSED_SATURN, - ASSET_TEX3D_UNUSED_SPACESHIPFRONTLOWRES, - ASSET_TEX3D_OBJECTS_ASTEROID, - ASSET_TEX3D_COMMON_SUN, - ASSET_TEX3D_COMMON_SUN2, - ASSET_TEX3D_UNUSED_SPACESHIPUNKNOWN8, - ASSET_TEX3D_UNUSED_SPACESHIPUNKNOWN9, - ASSET_TEX3D_COMMON_FINISHLINEFLAGORANGE2_0, - ASSET_TEX3D_COMMON_FINISHLINEFLAGORANGE2_1, - ASSET_TEX3D_COMMON_FINISHLINEFLAGSNOWY_0, - ASSET_TEX3D_COMMON_FINISHLINEFLAGSNOWY_1, - ASSET_TEX3D_COMMON_FINISHLINEFLAGSNOWY_2, - ASSET_TEX3D_COMMON_FINISHLINEFLAGSNOWY_3, - ASSET_TEX3D_COMMON_FINISHLINEFLAGSNOWY_4, - ASSET_TEX3D_COMMON_LEVELNAMEBORDER, - ASSET_TEX3D_OBJECTS_BRONZETROPHYEYE, - ASSET_TEX3D_OBJECTS_BRONZETROPHYSMILE, - ASSET_TEX3D_OBJECTS_BRONZETROPHYSCREW, - ASSET_TEX3D_OBJECTS_EFFECTBOX, - ASSET_TEX3D_OBJECTS_DOMEYELLOWSUN, - ASSET_TEX3D_OBJECTS_DOMEBOTTOMSNOW, - ASSET_TEX3D_UNUSED_SEAMONSTERUNKNOWN2, - ASSET_TEX3D_UNUSED_SEAMONSTERUNKNOWNEYE, - ASSET_TEX3D_OBJECTS_DOMEMOONCRESCENT, - ASSET_TEX3D_OBJECTS_LIGHTHOUSEROCKETBOOSTER, - ASSET_TEX3D_UNUSED_BETATIPTUPICON, - ASSET_TEX3D_DINO_FALLENTREELOGSHADOW, - ASSET_TEX3D_UNUSED_SIGN30, - ASSET_TEX3D_OBJECTS_TRICKYTOPSFACEEYEBOTTOM, - ASSET_TEX3D_OBJECTS_TRICKYTOPSEYESOCKET, - ASSET_TEX3D_DINO_TRICKYTOPSSTATUEEYE, - ASSET_TEX3D_OBJECTS_BRONZETROPHYDECORATION, - ASSET_TEX3D_OBJECTS_GOLDTROPHYDECORATION, - ASSET_TEX3D_OBJECTS_GOLDTROPHYNUMBER, - ASSET_TEX3D_OBJECTS_SILVERTROPHYNUMBER, - ASSET_TEX3D_OBJECTS_BRONZETROPHYNUMBER, - ASSET_TEX3D_OBJECTS_SILVERTROPHYDECORATION, - ASSET_TEX3D_WINTER_BLUEYSTATUEEYE, - ASSET_TEX3D_COMMON_WATER5, - ASSET_TEX3D_OBJECTS_DOMEISLANDCOAST_0, - ASSET_TEX3D_OBJECTS_DOMEISLANDCOAST_1, - ASSET_TEX3D_OBJECTS_DOMEISLANDCOAST_2, - ASSET_TEX3D_OBJECTS_DOMEISLANDCOAST_3, - ASSET_TEX3D_OBJECTS_DOMEISLANDCOAST_4, - ASSET_TEX3D_OBJECTS_DOMEISLANDCOAST_5, - ASSET_TEX3D_OBJECTS_DOMEISLANDCOAST_6, - ASSET_TEX3D_OBJECTS_DOMEISLANDCOAST_7, - ASSET_TEX3D_OBJECTS_DOORWORLDGATEBACKBOTTOM, - ASSET_TEX3D_OBJECTS_DOORWORLDGATESIDE, - ASSET_TEX3D_OBJECTS_DOORWORLDGATEFRONTTOP, - ASSET_TEX3D_OBJECTS_DOORWORLDGATEFRONTBOTTOM, - ASSET_TEX3D_OBJECTS_DOORWORLDGATEBACKTOP, - ASSET_TEX3D_OBJECTS_WHALEUNDERSIDE, - ASSET_TEX3D_OBJECTS_WHALEFIN, - ASSET_TEX3D_OBJECTS_WHALEEYE, - ASSET_TEX3D_OBJECTS_WHALEBLOWHOLE, - ASSET_TEX3D_OBJECTS_WHALEMOUTHTOP, - ASSET_TEX3D_OBJECTS_WHALEMOUTHBOTTOM, - ASSET_TEX3D_OBJECTS_WHALENOSE, - ASSET_TEX3D_COMMON_WATERFALL2, - ASSET_TEX3D_SPACE_REDGLASSWINDOW, - ASSET_TEX3D_OBJECTS_WOODBLOCK, - ASSET_TEX3D_OBJECTS_WOODSIGN, - ASSET_TEX3D_OBJECTS_DOORLEVELSINGLEDONETOP, - ASSET_TEX3D_OBJECTS_DOORLEVELSINGLEDONEBOTTOM, - ASSET_TEX3D_UNUSED_DOORLEVELCHECKMARK, - ASSET_TEX3D_UNUSED_DOORLEVELDONECHECKMARKTOP, - ASSET_TEX3D_UNUSED_DOORLEVELDONECHECKMARKBOTTOM, - ASSET_TEX3D_UNUSED_WOODUNKNOWN, - ASSET_TEX3D_UNUSED_WHALEBAYPROGRAMMERARTSIGN, - ASSET_TEX3D_UNUSED_TREASURECAVESPROGRAMMERARTSIGN, - ASSET_TEX3D_UNUSED_CRESCENTISLANDPROGRAMMERARTSIGN, - ASSET_TEX3D_UNUSED_PIRATELAGOONPROGRAMMERARTSIGN, - ASSET_TEX3D_UNUSED_WOODUNKNOWN2, - ASSET_TEX3D_UNUSED_VOLCANOSTONE, - ASSET_TEX3D_OBJECTS_DOORTTICONLEFT, - ASSET_TEX3D_OBJECTS_DOORTTICONRIGHT, - ASSET_TEX3D_OBJECTS_DOORTTTOPRIGHT, - ASSET_TEX3D_OBJECTS_DOORTTBOTTOMRIGHT, - ASSET_TEX3D_OBJECTS_DOORTTTOPRIGHTACTIVE, - ASSET_TEX3D_OBJECTS_DOORTTBOTTOMRIGHTTOPACTIVE, - ASSET_TEX3D_OBJECTS_DOORTTBOTTOMRIGHTACTIVE, - ASSET_TEX3D_OBJECTS_DOORBOSSBOTTOM2, - ASSET_TEX3D_MEDIEVAL_ROOFTILESHINGLES4, - ASSET_TEX3D_MEDIEVAL_VILLAGEWHITEWALL2, - ASSET_TEX3D_UNUSED_TAJPADSNOW, - ASSET_TEX3D_OBJECTS_DOORCHALLENGETOP, - ASSET_TEX3D_OBJECTS_DOORCHALLENGEBOTTOM, - ASSET_TEX3D_UNUSED_VINESONWOOD, - ASSET_TEX3D_WINTER_HANGINGICE2, - ASSET_TEX3D_UNUSED_UNKNOWNBALCONY, - ASSET_TEX3D_UNUSED_GROUNDCOBBLE, - ASSET_TEX3D_UNUSED_GREENBRICKWALL, - ASSET_TEX3D_UNUSED_OLDBRICKWALL, - ASSET_TEX3D_MEDIEVAL_ORANGEGATETIP, - ASSET_TEX3D_COMMON_SANDWETDRYTRANSITION2, - ASSET_TEX3D_MEDIEVAL_ROOFTILESHINGLES3, - ASSET_TEX3D_MEDIEVAL_STEELGATE, - ASSET_TEX3D_MEDIEVAL_STEELGATETIP, - ASSET_TEX3D_COMMON_DIRTWALLMOSSY, - ASSET_TEX3D_SPACE_BLUELIGHTNINGBOLT, - ASSET_TEX3D_OBJECTS_WIZPIGSHIPEYE, - ASSET_TEX3D_OBJECTS_WIZPIGSHIPNOSE, - ASSET_TEX3D_OBJECTS_WIZPIGSHIPEXHASTBOTTOM, - ASSET_TEX3D_OBJECTS_WIZPIGSHIPEXHASTTOP, - ASSET_TEX3D_OBJECTS_REDSTRIPESFORSPACESHIP, - ASSET_TEX3D_OBJECTS_PARTYPOST_0, - ASSET_TEX3D_OBJECTS_PARTYPOST_1, - ASSET_TEX3D_OBJECTS_PARTYPOST_2, - ASSET_TEX3D_OBJECTS_PARTYPOST_3, - ASSET_TEX3D_OBJECTS_PARTYPOST_4, - ASSET_TEX3D_OBJECTS_PARTYPOST_5, - ASSET_TEX3D_OBJECTS_DOORBOSSTAJTOP, - ASSET_TEX3D_OBJECTS_DOORBOSSTAJBOTTOM, - ASSET_TEX3D_OBJECTS_DOORLEVELGBNUMBERTOPRIGHT, - ASSET_TEX3D_OBJECTS_DOORLEVELGBNUMBERTOPLEFT, - ASSET_TEX3D_OBJECTS_DOORLEVELGBNUMBERBOTTOMRIGHT, - ASSET_TEX3D_OBJECTS_DOORLEVELGBNUMBERBOTTOMLEFT, - ASSET_TEX3D_UNUSED_FORESTBILLBOARD, - ASSET_TEX3D_COMMON_BROWNSTONE2, - ASSET_TEX3D_UNUSED_GREYSTONELARGE, - ASSET_TEX3D_COMMON_LOGLARGEMOSSY, - ASSET_TEX3D_COMMON_LOGEXPOSEDSIDE4, - ASSET_TEX3D_MEDIEVAL_WATERFOUNTAIN, - ASSET_TEX3D_UNUSED_UNKNOWNPURPLE, - ASSET_TEX3D_UNUSED_UNKNOWNRED, - ASSET_TEX3D_UNUSED_UNKNOWNRED2, - ASSET_TEX3D_MEDIEVAL_VILLAGEWHITEWALL3, - ASSET_TEX3D_COMMON_WOODGUARDRAILTOP, - ASSET_TEX3D_UNUSED_VILLAGEGREYWALL, - ASSET_TEX3D_MEDIEVAL_VILLAGEWHITEWALL4, - ASSET_TEX3D_COMMON_FINISHLINEREDTAPE, - ASSET_TEX3D_OBJECTS_BLUEYEYE, - ASSET_TEX3D_COMMON_TRANSPARENT2, - ASSET_TEX3D_UNUSED_GREENCYANGRADIENT, - ASSET_TEX3D_UNUSED_GOLDUNKNOWN, - ASSET_TEX3D_MEDIEVAL_SHRUBBERY, - ASSET_TEX3D_COMMON_CYANYELLOWARROWSIGN2, - ASSET_TEX3D_COMMON_DEBUGYELLOWBLUEINVISIBLE, - ASSET_TEX3D_COMMON_BROWNSTONEGRASSY, - ASSET_TEX3D_COMMON_BROWNSTONEGRASSY2, - ASSET_TEX3D_OBJECTS_WIZPIGMOUTH, - ASSET_TEX3D_WINTER_WALRUSCOVESIGN, - ASSET_TEX3D_WINTER_EVERFROSTPEAKSIGN, - ASSET_TEX3D_WINTER_FROSTYVILLAGESIGN, - ASSET_TEX3D_WINTER_SNOWBALLVALLEY, - ASSET_TEX3D_OBJECTS_WIZPIGROBELOWRES, - ASSET_TEX3D_OBJECTS_WIZPIGSKINLOWRES, - ASSET_TEX3D_COMMON_CYANYELLOWARROWNSIGNWITHBORDER, - ASSET_TEX3D_TROPICAL_WHALEBAYSIGN, - ASSET_TEX3D_TROPICAL_TREASURECAVESSIGN, - ASSET_TEX3D_TROPICAL_CRESCENTISLANDSIGN, - ASSET_TEX3D_TROPICAL_PIRATELAGOONSIGN, - ASSET_TEX3D_OBJECTS_ROCKETENVMAP, - ASSET_TEX3D_OBJECTS_WIZPIGBELTLOWRES, - ASSET_TEX3D_SPACE_PURPLEWIZPIGSTONEDARK, - ASSET_TEX3D_SPACE_PURPLEWIZPIGSTONE, - ASSET_TEX3D_SPACE_PURPLEWIZPIGSTONEWALL, - ASSET_TEX3D_SPACE_PURPLEWIZPIGSAND, - ASSET_TEX3D_SPACE_WIZPIGCHAIRSEATCUSHION, - ASSET_TEX3D_SPACE_WIZPIGCHARSEAT, - ASSET_TEX3D_OBJECTS_ROCKETENVMAP2, - ASSET_TEX3D_MEDIEVAL_HAUNTEDWOODSIGN, - ASSET_TEX3D_MEDIEVAL_WINDMILLPLAINSSIGN, - ASSET_TEX3D_MEDIEVAL_BOULDERCANYONSIGN, - ASSET_TEX3D_MEDIEVAL_GREENWOODVILLAGESIGN_0, - ASSET_TEX3D_MEDIEVAL_GREENWOODVILLAGESIGN_1, - ASSET_TEX3D_SPACE_SPACEDUSTALLEYSIGN, - ASSET_TEX3D_SPACE_DARKMOONCAVERNSSIGN_0, - ASSET_TEX3D_SPACE_DARKMOONCAVERNSSIGN_1, - ASSET_TEX3D_UNUSED_TWILIGHTCITYSIGN, - ASSET_TEX3D_SPACE_SPACEPORTALPHASIGN, - ASSET_TEX3D_SPACE_WIZPIGROOMARCHSIDETOP, - ASSET_TEX3D_SPACE_WIZPIGROOMARCHFRONT, - ASSET_TEX3D_SPACE_WIZPIGROOMARCHBOTTOM, - ASSET_TEX3D_SPACE_WIZPIGROOMARCHSIDEBOTTOM, - ASSET_TEX3D_UNUSED_KEITHPIGDOOR, - ASSET_TEX3D_UNUSED_KEITHPIGDOOR2, - ASSET_TEX3D_UNUSED_KEITHPIGDOOR3, - ASSET_TEX3D_OBJECTS_SPACESHIPSIDEBOOSTER, - ASSET_TEX3D_UNUSED_SPACESHIPUNKNOWN, - ASSET_TEX3D_UNUSED_SPACESHIPUNKNOWN2, - ASSET_TEX3D_UNUSED_SPACESHIPUNKNOWN3, - ASSET_TEX3D_UNUSED_SPACESHIPUNKNOWN4, - ASSET_TEX3D_SPACE_BIGPLANET, - ASSET_TEX3D_UNUSED_WIZPIGROCKETTRANSPARENT, - ASSET_TEX3D_WINTER_CANDYCANE2, - ASSET_TEX3D_COMMON_DEBUGREDGREEN, - ASSET_TEX3D_COMMON_FIRSTPLACE_0, - ASSET_TEX3D_COMMON_FIRSTPLACE_1, - ASSET_TEX3D_COMMON_FIRSTPLACE_2, - ASSET_TEX3D_COMMON_FIRSTPLACE_3, - ASSET_TEX3D_UNUSED_SMALLBOLT, - ASSET_TEX3D_UNUSED_LARGEBOLT, - ASSET_TEX3D_UNUSED_PURPLEPATH, - ASSET_TEX3D_UNUSED_PURPLEPATHEDGE, - ASSET_TEX3D_COMMON_YELLOWBRICKTILE3, - ASSET_TEX3D_WINTER_HANGINGICE3, - ASSET_TEX3D_WINTER_BROWNSTONESNOWY, - ASSET_TEX3D_OBJECTS_GOLDENTAJEYE, - ASSET_TEX3D_OBJECTS_YELLOWTRICKYTOPSTOES, - ASSET_TEX3D_OBJECTS_YELLOWTRICKYTOPSFRILL, - ASSET_TEX3D_OBJECTS_YELLOWTRICKYTOPSBACK, - ASSET_TEX3D_OBJECTS_PINKTRICKYTOPSTOES, - ASSET_TEX3D_OBJECTS_PINKTRICKYTOPSUNDERSIDE, - ASSET_TEX3D_OBJECTS_PINKTRICKYTOPSNOSE, - ASSET_TEX3D_OBJECTS_PINKTRICKYTOPSFRILL, - ASSET_TEX3D_OBJECTS_PINKTRICKYTOPSBACK, - ASSET_TEX3D_OBJECTS_PINKTRICKYTOPSEYE, - ASSET_TEX3D_OBJECTS_PINKTRICKYTOPSSKIN, - ASSET_TEX3D_OBJECTS_MAGNETFX, - ASSET_TEX3D_OBJECTS_MINISHIPNOSE, - ASSET_TEX3D_OBJECTS_MINISHIPHULL, - ASSET_TEX3D_OBJECTS_MINISHIPEXHAST, - ASSET_TEX3D_OBJECTS_MINISHIPBOOSTER, - ASSET_TEX3D_OBJECTS_MINISHIPBOOSTEREXHAST, - ASSET_TEX3D_SPACE_FANUPDRAFT, - ASSET_TEX3D_OBJECTS_N64LOGOYELLOW, - ASSET_TEX3D_UNUSED_MENUTEX_0, - ASSET_TEX3D_UNUSED_MENUTEX_1, - ASSET_TEX3D_UNUSED_MENUTEX_2, - ASSET_TEX3D_UNUSED_MENUTEX_3, - ASSET_TEX3D_UNUSED_MENUTEX_4, - ASSET_TEX3D_UNUSED_MENUTEX_5, - ASSET_TEX3D_UNUSED_MENUTEX_6, - ASSET_TEX3D_UNUSED_MENUTEX_7, - ASSET_TEX3D_UNUSED_MENUTEX_8, - ASSET_TEX3D_UNUSED_MENUTEX_9, - ASSET_TEX3D_UNUSED_MENUTEX_10, - ASSET_TEX3D_UNUSED_MENUTEX_11, - ASSET_TEX3D_UNUSED_MENUTEX_12, - ASSET_TEX3D_UNUSED_MENUTEX_13, - ASSET_TEX3D_UNUSED_MENUTEX_14, - ASSET_TEX3D_UNUSED_MENUTEX_15, - ASSET_TEX3D_UNUSED_MENUTEX_16, - ASSET_TEX3D_UNUSED_MENUTEX_17, - ASSET_TEX3D_UNUSED_MENUTEX_18, - ASSET_TEX3D_UNUSED_MENUTEX_19, - ASSET_TEX3D_UNUSED_MENUTEX_20, - ASSET_TEX3D_UNUSED_MENUTEX_21, - ASSET_TEX3D_UNUSED_MENUTEX_22, - ASSET_TEX3D_UNUSED_MENUTEX_23, - ASSET_TEX3D_UNUSED_MENUTEX_24, - ASSET_TEX3D_UNUSED_MENUTEX_25, - ASSET_TEX3D_UNUSED_PLANESHADOW, - ASSET_TEX3D_UNUSED_MAGICCARPETSHADOW, - ASSET_TEX3D_UNUSED_UNKNOWNEFFECT, - ASSET_TEX3D_OBJECTS_TRADEMARK, - ASSET_TEX3D_MEDIEVAL_TANSTONETILE, - ASSET_TEX3D_WINTER_ICICLEPYRAMIDTOPENTRANCETEXUNKNOWN, - ASSET_TEX3D_SPACE_STARCITYSIGN, - ASSET_TEX3D_OBJECTS_LEVELDOORSILVERBALLOONTOPRIGHT, - ASSET_TEX3D_OBJECTS_LEVELDOORSILVERBALLOONTOPLEFT, - ASSET_TEX3D_OBJECTS_LEVELDOORSILVERBALLOONBOTTOMRIGHT, - ASSET_TEX3D_OBJECTS_LEVELDOORSILVERBALLOONBOTTOMLEFT, - ASSET_TEX3D_OBJECTS_LEVELDOORSILVERBALLOONBOTTOMFULLCLEAR, - ASSET_TEX3D_OBJECTS_LEVELDOORSILVERBALLOONTOPFULLCLEAR, - ASSET_TEX3D_OBJECTS_SILVERBALLOONENVMAP, - ASSET_TEX3D_OBJECTS_LEVELDOORSILVERNUMBERTOP, - ASSET_TEX3D_OBJECTS_LEVELDOORSILVERNUMBERBOTTOM, - ASSET_TEX3D_OBJECTS_SPACESHIP3WINDOW, - ASSET_TEX3D_OBJECTS_SPACESHIP3HULL, - ASSET_TEX3D_OBJECTS_SPACESHIP3BOOSTER, - ASSET_TEX3D_OBJECTS_SPACESHIP3FRONT, - ASSET_TEX3D_COMMON_YELLOWBRICKTILE4, - ASSET_TEX3D_COMMON_VOID, - ASSET_TEX3D_COMMON_DEBUGFIREMOUNTAINCEILING, - ASSET_TEX3D_UNUSED_YELLOWARROWSIGN2, - ASSET_TEX3D_COMMON_FINISHLINEFLAGSNOWY2_0, - ASSET_TEX3D_COMMON_FINISHLINEFLAGSNOWY2_1, - ASSET_TEX3D_COMMON_FINISHLINEFLAGSNOWY2_2, - ASSET_TEX3D_COMMON_FINISHLINEFLAGSNOWY2_3, - ASSET_TEX3D_COMMON_FINISHLINEFLAGSNOWY2_4, - ASSET_TEX3D_COMMON_WATERFALL3, - ASSET_TEX3D_COMMON_YELLOWBRICKTILE5, - ASSET_TEX3D_COMMON_REDARROWSIGN4, - ASSET_TEX3D_COMMON_YELLOWBRICKTILE6, - ASSET_TEX3D_MEDIEVAL_VILLAGEGREYWALL2, - ASSET_TEX3D_COMMON_YELLOWBRICKTILE7, - ASSET_TEX3D_COMMON_SAND6, - ASSET_TEX3D_TROPICAL_PALMTREESHADOWLONG, - ASSET_TEX3D_COMMON_DEBUGBLACKWHITE, - ASSET_TEX3D_SPACE_RAREWARESIGNNONBLINKING, - - ASSET_TEXTURES_3D_COUNT -} AssetTextures3dEnum; - -/********** ASSET_TEXTURES_2D **********/ - -typedef enum AssetTextures2dEnum { - ASSET_TEX2D_SMALLFONT_0, - ASSET_TEX2D_SMALLFONT_1, - ASSET_TEX2D_SMALLFONT_2, - ASSET_TEX2D_HUD_RETICLESQUARE, - ASSET_TEX2D_HUD_RETICLECIRCLE, - ASSET_TEX2D_HUD_RETICLEX, - ASSET_TEX2D_UNUSED_CAROUTLINE, - ASSET_TEX2D_UNUSED_TRANSPARENT, - ASSET_TEX2D_SHADOW_CAR, - ASSET_TEX2D_SHADOW_CIRCLE, - ASSET_TEX2D_SHADOW_PLANE, - ASSET_TEX2D_SHADOW_MAGICCARPET, - ASSET_TEX2D_SHADOW_WIZPIGROCKET, - ASSET_TEX2D_SHADOW_UNKNOWN, - ASSET_TEX2D_SHADOW_PTERODACTYL, - ASSET_TEX2D_SHADOW_SMOKEY, - ASSET_TEX2D_OBJECTS_GROUNDZIPPER, - ASSET_TEX2D_MINIMAP_FOSSILCANYON, - ASSET_TEX2D_MINIMAP_ANCIENTLAKE, - ASSET_TEX2D_MINIMAP_PIRATELAGOON, - ASSET_TEX2D_MINIMAP_WHALEBAY, - ASSET_TEX2D_MINIMAP_SNOWBALLVALLEY, - ASSET_TEX2D_MINIMAP_HOTTOPVOLCANO, - ASSET_TEX2D_MINIMAP_CRESCENTISLAND, - ASSET_TEX2D_MINIMAP_UNUSED, - ASSET_TEX2D_MINIMAP_EVERFROSTPEAK, - ASSET_TEX2D_MINIMAP_UNUSED2, - ASSET_TEX2D_MINIMAP_WALRUSCOVE, - ASSET_TEX2D_MINIMAP_UNUSED3, - ASSET_TEX2D_MINIMAP_BOULDERCANYON, - ASSET_TEX2D_MINIMAP_SMOKEYCASTLE, - ASSET_TEX2D_MINIMAP_CENTRALAREA, - ASSET_TEX2D_MINIMAP_FIREMOUNTAIN, - ASSET_TEX2D_MINIMAP_SPACEPORTALPHA, - ASSET_TEX2D_MINIMAP_SPACEDUSTALLEY, - ASSET_TEX2D_MINIMAP_TREASURECAVES, - ASSET_TEX2D_MINIMAP_GREENWOODVILLAGE, - ASSET_TEX2D_MINIMAP_DARKMOONCAVERNS, - ASSET_TEX2D_MINIMAP_STARCITY, - ASSET_TEX2D_MINIMAP_WINDMILLPLAINS, - ASSET_TEX2D_MINIMAP_FROSTYVILLAGE, - ASSET_TEX2D_MINIMAP_DARKWATERBEACH, - ASSET_TEX2D_MINIMAP_JUNGLEFALLS, - ASSET_TEX2D_MINIMAP_ICICLEPYRAMID, - ASSET_TEX2D_MINIMAP_HAUNTEDWOODS, - ASSET_TEX2D_MINIMAP_BLUEY, - ASSET_TEX2D_MINIMAP_BUBBLER, - ASSET_TEX2D_MINIMAP_SMOKEY, - ASSET_TEX2D_MINIMAP_TRICKYTOPS, - ASSET_TEX2D_MINIMAP_WIZPIG1, - ASSET_TEX2D_MINIMAP_WIZPIG2, - ASSET_TEX2D_WEATHER_SNOWFLAKE, - ASSET_TEX2D_WEATHER_RAIN, - ASSET_TEX2D_WEATHER_UNKNOWN, - ASSET_TEX2D_WEATHER_RAINDROP_0, - ASSET_TEX2D_WEATHER_RAINDROP_1, - ASSET_TEX2D_WEATHER_RAINDROP_2, - ASSET_TEX2D_WEATHER_RAINDROP_3, - ASSET_TEX2D_WEATHER_RAINDROP_4, - ASSET_TEX2D_WEATHER_SNOWFLAKE2, - ASSET_TEX2D_PARTICLE_SMOKE, - ASSET_TEX2D_PARTICLE_SMOKE2, - ASSET_TEX2D_UNKNOWN_ANIMATEDUNKNOWN, - ASSET_TEX2D_UNKNOWN_ANIMATEDUNKNOWN2, - ASSET_TEX2D_OBJECTS_LENSFLARE1, - ASSET_TEX2D_OBJECTS_LENSFLARE2, - ASSET_TEX2D_OBJECTS_LENSFLARE3, - ASSET_TEX2D_UNKNOWN_WATERFALL, - ASSET_TEX2D_UNKNOWN_WATERFALL2, - ASSET_TEX2D_UNKNOWN_WHITECLOUDS, - ASSET_TEX2D_PARTICLES_TREELEAF, - ASSET_TEX2D_UNKNOWN_REDGREENUNKNOWN, - ASSET_TEX2D_UNKNOWN_SCHOOLOFFISH, - ASSET_TEX2D_UNKNOWN_BUTTERFLYORANGE, - ASSET_TEX2D_UNKNOWN_BUTTERFLYPURPLE, - ASSET_TEX2D_UNKNOWN_BAT, - ASSET_TEX2D_UNKNOWN_FISH, - ASSET_TEX2D_UNKNOWN_BROWNEGG, - ASSET_TEX2D_PARTICLES_SMOKE3, - ASSET_TEX2D_PARTICLES_SMOKE4_0, - ASSET_TEX2D_PARTICLES_SMOKE4_1, - ASSET_TEX2D_PARTICLES_SMOKE4_2, - ASSET_TEX2D_PARTICLES_SMOKE4_3, - ASSET_TEX2D_PARTICLES_SMOKE4_4, - ASSET_TEX2D_PARTICLES_SMOKE4_5, - ASSET_TEX2D_PARTICLES_SMOKE4_6, - ASSET_TEX2D_PARTICLES_BUBBLESSMALL_0, - ASSET_TEX2D_PARTICLES_BUBBLESSMALL_1, - ASSET_TEX2D_PARTICLES_SMOKE5, - ASSET_TEX2D_FUNFONT_0, - ASSET_TEX2D_FUNFONT_1, - ASSET_TEX2D_FUNFONT_2, - ASSET_TEX2D_FUNFONT_3, - ASSET_TEX2D_FUNFONT_4, - ASSET_TEX2D_FUNFONT_5, - ASSET_TEX2D_MENU_TRACKSELECTBGDINODOMAIN_0, - ASSET_TEX2D_MENU_TRACKSELECTBGDINODOMAIN_1, - ASSET_TEX2D_MENU_TRACKSELECTBGSHERBETISLAND_0, - ASSET_TEX2D_MENU_TRACKSELECTBGSHERBETISLAND_1, - ASSET_TEX2D_MENU_TRACKSELECTBGSNOWFLAKEMOUNTAIN_0, - ASSET_TEX2D_MENU_TRACKSELECTBGSNOWFLAKEMOUNTAIN_1, - ASSET_TEX2D_MENU_TRACKSELECTBGDRAGONFOREST_0, - ASSET_TEX2D_MENU_TRACKSELECTBGDRAGONFOREST_1, - ASSET_TEX2D_MENU_TRACKSELECTBGFUTUREFUNLAND_0, - ASSET_TEX2D_MENU_TRACKSELECTBGFUTUREFUNLAND_1, - ASSET_TEX2D_UNKNOWN_UNKWHITETEX, - ASSET_TEX2D_MENU_TRACKSELECTLOCKED_0, - ASSET_TEX2D_MENU_TRACKSELECTLOCKED_1, - ASSET_TEX2D_MENU_TRACKSELECTLOCKED_2, - ASSET_TEX2D_MENU_TRACKSELECTUNLOCKED_0, - ASSET_TEX2D_MENU_TRACKSELECTUNLOCKED_1, - ASSET_TEX2D_MENU_TRACKSELECTUNLOCKED_2, - ASSET_TEX2D_MENU_ARROWBLUERIGHT, - ASSET_TEX2D_MENU_ARROWBLUEUP, - ASSET_TEX2D_MENU_ARROWBLUELEFT, - ASSET_TEX2D_MENU_ARROWBLUEDOWN, - ASSET_TEX2D_OBJECTS_BUBBLEWEAPON_0, - ASSET_TEX2D_OBJECTS_BUBBLEWEAPON_1, - ASSET_TEX2D_OBJECTS_BUBBLEWEAPON_2, - ASSET_TEX2D_OBJECTS_BUBBLEWEAPON_3, - ASSET_TEX2D_MENU_TTBEATENICON, - ASSET_TEX2D_HUD_EGGICON, - ASSET_TEX2D_HUD_KRUNCHICON, - ASSET_TEX2D_HUD_BUMPERICON, - ASSET_TEX2D_HUD_TIPTUPICON, - ASSET_TEX2D_HUD_TIMBERICON, - ASSET_TEX2D_HUD_CONKERICON, - ASSET_TEX2D_HUD_BANJOICON, - ASSET_TEX2D_HUD_DRUMSTICKICON, - ASSET_TEX2D_HUD_PIPSYICON, - ASSET_TEX2D_HUD_TTICON, - ASSET_TEX2D_HUD_DIDDYICON, - ASSET_TEX2D_UNKNOWN_SMALLGOLDCAP, - ASSET_TEX2D_MENU_CARICON_0, - ASSET_TEX2D_MENU_CARICON_1, - ASSET_TEX2D_MENU_HOVERICON_0, - ASSET_TEX2D_MENU_HOVERICON_1, - ASSET_TEX2D_MENU_PLANEICON_0, - ASSET_TEX2D_MENU_PLANEICON_1, - ASSET_TEX2D_MENU_LABELCAROPTIONNONSELECTED, - ASSET_TEX2D_MENU_LABELCAROPTIONSELECTED, - ASSET_TEX2D_MENU_LABELHOVEROPTIONNONSELECTED, - ASSET_TEX2D_MENU_LABELHOVEROPTIONSELECTED, - ASSET_TEX2D_MENU_LABELPLANEOPTIONNONSELECTED, - ASSET_TEX2D_MENU_LABELPLANEOPTIONSELECTED, - ASSET_TEX2D_MENU_TIMETRIALONICON_0, - ASSET_TEX2D_MENU_TIMETRIALONICON_1, - ASSET_TEX2D_MENU_TIMETRIALOFFICON_0, - ASSET_TEX2D_MENU_TIMETRIALOFFICON_1, - ASSET_TEX2D_MENU_LABELONOPTIONNONSELECTED, - ASSET_TEX2D_MENU_LABELONOPTIONSELECTED, - ASSET_TEX2D_MENU_LABELOFFOPTIONNONSELECTED, - ASSET_TEX2D_MENU_LABELOFFOPTIONSELECTED, - ASSET_TEX2D_MENU_LABELPLAYER1, - ASSET_TEX2D_MENU_LABELPLAYER2, - ASSET_TEX2D_MENU_LABELPLAYER3, - ASSET_TEX2D_MENU_LABELPLAYER4, - ASSET_TEX2D_MENU_LABELTT, - ASSET_TEX2D_MENU_LABELVEHICLE, - ASSET_TEX2D_SUBTITLEFONT_0, - ASSET_TEX2D_SUBTITLEFONT_1, - ASSET_TEX2D_SUBTITLEFONT_2, - ASSET_TEX2D_BIGFONT_A, - ASSET_TEX2D_BIGFONT_B, - ASSET_TEX2D_BIGFONT_C, - ASSET_TEX2D_BIGFONT_D, - ASSET_TEX2D_BIGFONT_E, - ASSET_TEX2D_BIGFONT_F, - ASSET_TEX2D_BIGFONT_G, - ASSET_TEX2D_BIGFONT_H, - ASSET_TEX2D_BIGFONT_I, - ASSET_TEX2D_BIGFONT_J, - ASSET_TEX2D_BIGFONT_K, - ASSET_TEX2D_BIGFONT_L, - ASSET_TEX2D_BIGFONT_M, - ASSET_TEX2D_BIGFONT_N, - ASSET_TEX2D_BIGFONT_O, - ASSET_TEX2D_BIGFONT_P, - ASSET_TEX2D_BIGFONT_Q, - ASSET_TEX2D_BIGFONT_R, - ASSET_TEX2D_BIGFONT_S, - ASSET_TEX2D_BIGFONT_T, - ASSET_TEX2D_BIGFONT_U, - ASSET_TEX2D_BIGFONT_V, - ASSET_TEX2D_BIGFONT_W, - ASSET_TEX2D_BIGFONT_X, - ASSET_TEX2D_BIGFONT_Y, - ASSET_TEX2D_BIGFONT_Z, - ASSET_TEX2D_BIGFONT_QUESTIONMARK, - ASSET_TEX2D_BIGFONT_PERIOD, - ASSET_TEX2D_OBJECTS_SPARKLE_0, - ASSET_TEX2D_OBJECTS_SPARKLE_1, - ASSET_TEX2D_OBJECTS_SPARKLE_2, - ASSET_TEX2D_OBJECTS_SPARKLE_3, - ASSET_TEX2D_OBJECTS_SPARKLE_4, - ASSET_TEX2D_OBJECTS_SPARKLE_5, - ASSET_TEX2D_OBJECTS_SPARKLE_6, - ASSET_TEX2D_OBJECTS_BOMBEXPLOSIONBLUE, - ASSET_TEX2D_OBJECTS_BOMBEXPLOSIONYELLOW, - ASSET_TEX2D_OBJECTS_BOMBEXPLOSIONRED, - ASSET_TEX2D_OBJECTS_BOMBEXPLOSIONGREEN, - ASSET_TEX2D_OBJECTS_BOMBEXPLOSIONCYAN, - ASSET_TEX2D_OBJECTS_BOMBEXPLOSIONWHITE, - ASSET_TEX2D_OBJECTS_BOMBEXPLOSIONORANGE, - ASSET_TEX2D_OBJECTS_BOMBEXPLOSIONPURPLE, - ASSET_TEX2D_UNKNOWN_WHITEGREYCHECKBOARD, - ASSET_TEX2D_UNKNOWN_NEGATIVERED, - ASSET_TEX2D_UNKNOWN_NEGATIVEBLUE, - ASSET_TEX2D_UNKNOWN_NEGATIVEGREEN, - ASSET_TEX2D_UNKNOWN_NEGATIVEPURPLE, - ASSET_TEX2D_OBJECTS_RAINBOW_0, - ASSET_TEX2D_OBJECTS_RAINBOW_1, - ASSET_TEX2D_OBJECTS_EGG_0, - ASSET_TEX2D_OBJECTS_EGG_1, - ASSET_TEX2D_OBJECTS_EGG_2, - ASSET_TEX2D_OBJECTS_EGG_3, - ASSET_TEX2D_MENU_WOODPANEL, - ASSET_TEX2D_MENU_COBBLEPANEL, - ASSET_TEX2D_MENU_PORTALPANEL, - ASSET_TEX2D_MENU_ICONRUBBISHBIN, - ASSET_TEX2D_MENU_ICONN64, - ASSET_TEX2D_MENU_ICONTIMES, - ASSET_TEX2D_MENU_ICONCONTROLLERPAK, - ASSET_TEX2D_MENU_ICONEXTERNALDATA, - ASSET_TEX2D_MENU_ICONGHOSTS, - ASSET_TEX2D_OBJECTS_BOMB_0, - ASSET_TEX2D_OBJECTS_BOMB_1, - ASSET_TEX2D_PARTICLES_OILPUDDLE, - ASSET_TEX2D_OBJECTS_OILSLICK, - ASSET_TEX2D_UNKNOWN_EYESINDARK, - ASSET_TEX2D_HUD_COLON, - ASSET_TEX2D_HUD_RETICALHOMING_0, - ASSET_TEX2D_HUD_RETICALHOMING_1, - ASSET_TEX2D_OBJECTS_DEBUGREDSPHERE, - ASSET_TEX2D_HUD_FINISH_0, - ASSET_TEX2D_HUD_FINISH_1, - ASSET_TEX2D_HUD_FINISH_2, - ASSET_TEX2D_HUD_GETREADY_0, - ASSET_TEX2D_HUD_GETREADY_1, - ASSET_TEX2D_HUD_GETREADY_2, - ASSET_TEX2D_HUD_GO_0, - ASSET_TEX2D_HUD_GO_1, - ASSET_TEX2D_HUD_LAP, - ASSET_TEX2D_HUD_FORWARDSLASH, - ASSET_TEX2D_HUD_TIME, - ASSET_TEX2D_HUD_PLACENUMBER_0, - ASSET_TEX2D_HUD_PLACENUMBER_1, - ASSET_TEX2D_HUD_PLACENUMBER_2, - ASSET_TEX2D_HUD_PLACENUMBER_3, - ASSET_TEX2D_HUD_PLACENUMBER_4, - ASSET_TEX2D_HUD_PLACENUMBER_5, - ASSET_TEX2D_HUD_PLACENUMBER_6, - ASSET_TEX2D_HUD_PLACENUMBER_7, - ASSET_TEX2D_HUD_TIMERNUMBER_0, - ASSET_TEX2D_HUD_TIMERNUMBER_1, - ASSET_TEX2D_HUD_TIMERNUMBER_2, - ASSET_TEX2D_HUD_TIMERNUMBER_3, - ASSET_TEX2D_HUD_TIMERNUMBER_4, - ASSET_TEX2D_HUD_TIMERNUMBER_5, - ASSET_TEX2D_HUD_TIMERNUMBER_6, - ASSET_TEX2D_HUD_TIMERNUMBER_7, - ASSET_TEX2D_HUD_TIMERNUMBER_8, - ASSET_TEX2D_HUD_TIMERNUMBER_9, - ASSET_TEX2D_HUD_COLONSMALL, - ASSET_TEX2D_HUD_TIMERNUMBERSMALL_0, - ASSET_TEX2D_HUD_TIMERNUMBERSMALL_1, - ASSET_TEX2D_HUD_TIMERNUMBERSMALL_2, - ASSET_TEX2D_HUD_TIMERNUMBERSMALL_3, - ASSET_TEX2D_HUD_TIMERNUMBERSMALL_4, - ASSET_TEX2D_HUD_TIMERNUMBERSMALL_5, - ASSET_TEX2D_HUD_TIMERNUMBERSMALL_6, - ASSET_TEX2D_HUD_TIMERNUMBERSMALL_7, - ASSET_TEX2D_HUD_TIMERNUMBERSMALL_8, - ASSET_TEX2D_HUD_TIMERNUMBERSMALL_9, - ASSET_TEX2D_HUD_GOSMALL, - ASSET_TEX2D_HUD_LAPSMALL, - ASSET_TEX2D_HUD_GETREADYSMALL, - ASSET_TEX2D_HUD_FINALSMALL, - ASSET_TEX2D_HUD_FINISHSMALL, - ASSET_TEX2D_HUD_LAP2SMALL, - ASSET_TEX2D_HUD_WAYSMALL, - ASSET_TEX2D_HUD_WRONGSMALL, - ASSET_TEX2D_OBJECTS_POSITIONARROW_0, - ASSET_TEX2D_OBJECTS_POSITIONARROW_1, - ASSET_TEX2D_OBJECTS_POSITIONARROW_2, - ASSET_TEX2D_HUD_TIMERNUMBERSSINGLETEX, - ASSET_TEX2D_HUD_TIMERNUMBERSSMALLSINGLETEX, - ASSET_TEX2D_HUD_COLON2, - ASSET_TEX2D_HUD_COLORSMALL2, - ASSET_TEX2D_HUD_LAP2, - ASSET_TEX2D_HUD_TIME2, - ASSET_TEX2D_HUD_FORWARDSLASHSMALL, - ASSET_TEX2D_HUD_FORWARDSLASH2, - ASSET_TEX2D_HUD_X, - ASSET_TEX2D_HUD_PLACENUMBERSSINGLETEX, - ASSET_TEX2D_HUD_PLACENUMBERSUFFIXES, - ASSET_TEX2D_HUD_XSMALL, - ASSET_TEX2D_HUD_SILVERCOINCOLLECTED, - ASSET_TEX2D_HUD_GOLDENBALLOONICON, - ASSET_TEX2D_HUD_SILVERBALLOONICON, - ASSET_TEX2D_OBJECTS_LEVELNAME, - ASSET_TEX2D_MINIMAP_NPC, - ASSET_TEX2D_MINIMAP_PLAYER, - ASSET_TEX2D_HUD_WEAPONICONBOOST_0, - ASSET_TEX2D_HUD_WEAPONICONBOOST_1, - ASSET_TEX2D_HUD_WEAPONICONBOOST_2, - ASSET_TEX2D_HUD_WEAPONICONROCKET_0, - ASSET_TEX2D_HUD_WEAPONICONROCKET_1, - ASSET_TEX2D_HUD_WEAPONICONROCKET_2, - ASSET_TEX2D_HUD_WEAPONICONTRAP_0, - ASSET_TEX2D_HUD_WEAPONICONTRAP_1, - ASSET_TEX2D_HUD_WEAPONICONTRAP_2, - ASSET_TEX2D_HUD_WEAPONICONSHIELD_0, - ASSET_TEX2D_HUD_WEAPONICONSHIELD_1, - ASSET_TEX2D_HUD_WEAPONICONSHIELD_2, - ASSET_TEX2D_HUD_WEAPONICONMAGNET_0, - ASSET_TEX2D_HUD_WEAPONICONMAGNET_1, - ASSET_TEX2D_HUD_WEAPONICONMAGNET_2, - ASSET_TEX2D_HUD_WEAPONICONROCKETNUMBERS_0, - ASSET_TEX2D_HUD_WEAPONICONROCKETNUMBERS_1, - ASSET_TEX2D_HUD_WEAPONICONROCKETNUMBERS_2, - ASSET_TEX2D_HUD_WEAPONICONROCKETNUMBERS_3, - ASSET_TEX2D_HUD_WEAPONICONROCKETNUMBERS_4, - ASSET_TEX2D_HUD_WEAPONICONROCKETNUMBERS_5, - ASSET_TEX2D_HUD_WEAPONICONROCKETNUMBERS_6, - ASSET_TEX2D_HUD_WEAPONICONROCKETNUMBERS_7, - ASSET_TEX2D_HUD_WEAPONICONROCKETNUMBERS_8, - ASSET_TEX2D_HUD_WEAPONICONROCKETNUMBERS_9, - ASSET_TEX2D_UNUSED_BETAICONKRUNCH, - ASSET_TEX2D_UNUSED_BETAICONBUMPER, - ASSET_TEX2D_UNUSED_BETAICONTIPTUP, - ASSET_TEX2D_UNUSED_BETAICONCONKER, - ASSET_TEX2D_UNUSED_BETAICONTIMBER, - ASSET_TEX2D_UNUSED_BETAICONBANJO, - ASSET_TEX2D_UNUSED_BETAICONDRUMSTICK, - ASSET_TEX2D_UNUSED_BETAICONPIPSY, - ASSET_TEX2D_HUD_FINALLAP_0, - ASSET_TEX2D_HUD_FINALLAP_1, - ASSET_TEX2D_HUD_FINALLAP_2, - ASSET_TEX2D_HUD_FINALLAP_3, - ASSET_TEX2D_HUD_FINALLAP_4, - ASSET_TEX2D_HUD_FINAL_0, - ASSET_TEX2D_HUD_FINAL_1, - ASSET_TEX2D_HUD_LAPLARGE_0, - ASSET_TEX2D_HUD_LAPLARGE_1, - ASSET_TEX2D_HUD_LAP2_2, - ASSET_TEX2D_HUD_WAY, - ASSET_TEX2D_HUD_WRONG_0, - ASSET_TEX2D_HUD_WRONG_1, - ASSET_TEX2D_UNUSED_PROAMLOGO_0, - ASSET_TEX2D_UNUSED_PROAMLOGO_1, - ASSET_TEX2D_UNUSED_PROAMLOGO_2, - ASSET_TEX2D_HUD_SPEEDOMETERTICKS, - ASSET_TEX2D_HUD_SPEEDOMETER0, - ASSET_TEX2D_HUD_SPEEDOMETER30, - ASSET_TEX2D_HUD_SPEEDOMETER60, - ASSET_TEX2D_HUD_SPEEDOMETER90, - ASSET_TEX2D_HUD_SPEEDOMETER120, - ASSET_TEX2D_HUD_SPEEDOMETER150, - ASSET_TEX2D_HUD_SPEEDOMETERARROW, - ASSET_TEX2D_HUD_FIRSTPLACEONE_0, - ASSET_TEX2D_HUD_FIRSTPLACEONE_1, - ASSET_TEX2D_HUD_FIRSTPLACEST_0, - ASSET_TEX2D_HUD_FIRSTPLACEST_1, - ASSET_TEX2D_OBJECTS_BALLOONSTRING_0, - ASSET_TEX2D_OBJECTS_BALLOONSTRING_1, - ASSET_TEX2D_OBJECTS_BALLOONSTRING_2, - ASSET_TEX2D_OBJECTS_BALLOONSTRING_3, - ASSET_TEX2D_OBJECTS_BALLOONSTRING_4, - ASSET_TEX2D_OBJECTS_BALLOONSTRING_5, - ASSET_TEX2D_OBJECTS_BALLOONSTRING_6, - ASSET_TEX2D_OBJECTS_BALLOONSTRING_7, - ASSET_TEX2D_OBJECTS_BALLOONSTRING_8, - ASSET_TEX2D_OBJECTS_BALLOONSTRING_9, - ASSET_TEX2D_OBJECTS_BALLOONSTRING_10, - ASSET_TEX2D_OBJECTS_BALLOONSTRING_11, - ASSET_TEX2D_OBJECTS_BALLOONSTRING_12, - ASSET_TEX2D_OBJECTS_BALLOONSTRING_13, - ASSET_TEX2D_OBJECTS_BALLOONSTRING_14, - ASSET_TEX2D_OBJECTS_BALLOONSTRING_15, - ASSET_TEX2D_OBJECTS_BALLOONSTRING_16, - ASSET_TEX2D_OBJECTS_BALLOONSTRING_17, - ASSET_TEX2D_OBJECTS_BALLOONSTRING_18, - ASSET_TEX2D_OBJECTS_BALLOONSTRING_19, - ASSET_TEX2D_MENU_TITLE_0, - ASSET_TEX2D_MENU_TITLE_1, - ASSET_TEX2D_MENU_TITLE_2, - ASSET_TEX2D_MENU_TITLE_3, - ASSET_TEX2D_MENU_TITLE_4, - ASSET_TEX2D_MENU_TITLE_5, - ASSET_TEX2D_MENU_TITLE_6, - ASSET_TEX2D_MENU_TITLE_7, - ASSET_TEX2D_MENU_TITLE_8, - ASSET_TEX2D_MENU_TITLE_9, - ASSET_TEX2D_MENU_TRADEMARKSMALL, - ASSET_TEX2D_UNKNOWN_FIREBALLUNKNOWN_0, - ASSET_TEX2D_UNKNOWN_FIREBALLUNKNOWN_1, - ASSET_TEX2D_UNKNOWN_FIREBALLUNKNOWN_2, - ASSET_TEX2D_UNKNOWN_FIREBALLUNKNOWN_3, - ASSET_TEX2D_OBJECTS_FIREBALL_0, - ASSET_TEX2D_OBJECTS_FIREBALL_1, - ASSET_TEX2D_OBJECTS_FIREBALL_2, - ASSET_TEX2D_OBJECTS_FIREBALL_3, - ASSET_TEX2D_OBJECTS_FIREBALL_4, - ASSET_TEX2D_OBJECTS_FIREBALL_5, - ASSET_TEX2D_OBJECTS_FIREBALL_6, - ASSET_TEX2D_OBJECTS_FIREBALL_7, - ASSET_TEX2D_OBJECTS_FIREBALL_8, - ASSET_TEX2D_OBJECTS_FIREBALL_9, - ASSET_TEX2D_OBJECTS_WIZGHOST_0, - ASSET_TEX2D_OBJECTS_WIZGHOST_1, - ASSET_TEX2D_OBJECTS_WIZGHOST_2, - ASSET_TEX2D_OBJECTS_WIZGHOST_3, - ASSET_TEX2D_OBJECTS_WIZGHOST_4, - ASSET_TEX2D_OBJECTS_WIZGHOST_5, - ASSET_TEX2D_OBJECTS_WIZGHOST_6, - ASSET_TEX2D_OBJECTS_WIZGHOST_7, - ASSET_TEX2D_OBJECTS_WIZGHOST_8, - ASSET_TEX2D_OBJECTS_WIZGHOST_9, - ASSET_TEX2D_OBJECTS_WIZGHOST_10, - ASSET_TEX2D_OBJECTS_WIZGHOST_11, - ASSET_TEX2D_OBJECTS_WIZGHOST_12, - ASSET_TEX2D_UNKNOWN_UNKNOWNLIGHT_0, - ASSET_TEX2D_UNKNOWN_UNKNOWNLIGHT_1, - ASSET_TEX2D_UNKNOWN_SMALLSTAR, - ASSET_TEX2D_OBJECTS_BUOY_0, - ASSET_TEX2D_OBJECTS_BUOY_1, - ASSET_TEX2D_OBJECTS_BUOY_2, - ASSET_TEX2D_OBJECTS_BUOY_3, - ASSET_TEX2D_OBJECTS_SMARTIETREE_0, - ASSET_TEX2D_OBJECTS_SMARTIETREE_1, - ASSET_TEX2D_OBJECTS_SMARTIETREE_2, - ASSET_TEX2D_OBJECTS_SMARTIETREE_3, - ASSET_TEX2D_OBJECTS_BEACHTREE_0, - ASSET_TEX2D_OBJECTS_BEACHTREE_1, - ASSET_TEX2D_OBJECTS_BEACHTREE_2, - ASSET_TEX2D_OBJECTS_BLUEBERRYBUSH_0, - ASSET_TEX2D_OBJECTS_BLUEBERRYBUSH_1, - ASSET_TEX2D_OBJECTS_BLUEBERRYBUSH_2, - ASSET_TEX2D_OBJECTS_BLUEBERRYBUSH_3, - ASSET_TEX2D_OBJECTS_BLUEBERRYBUSH_4, - ASSET_TEX2D_OBJECTS_BLUEBERRYBUSH_5, - ASSET_TEX2D_OBJECTS_RUBBERSNOWTREE_0, - ASSET_TEX2D_OBJECTS_RUBBERSNOWTREE_1, - ASSET_TEX2D_OBJECTS_RUBBERSNOWTREE_2, - ASSET_TEX2D_OBJECTS_RUBBERSNOWTREE_3, - ASSET_TEX2D_OBJECTS_SKINNYSNOWTREE_0, - ASSET_TEX2D_OBJECTS_SKINNYSNOWTREE_1, - ASSET_TEX2D_OBJECTS_SKINNYSNOWTREE_2, - ASSET_TEX2D_OBJECTS_SKINNYSNOWTREE_3, - ASSET_TEX2D_OBJECTS_XMASTREE_0, - ASSET_TEX2D_OBJECTS_XMASTREE_1, - ASSET_TEX2D_OBJECTS_XMASTREE_2, - ASSET_TEX2D_OBJECTS_XMASTREE_3, - ASSET_TEX2D_OBJECTS_ALPINESNOWTREE_0, - ASSET_TEX2D_OBJECTS_ALPINESNOWTREE_1, - ASSET_TEX2D_OBJECTS_ALPINESNOWTREE_2, - ASSET_TEX2D_OBJECTS_ALPINESNOWTREE_3, - ASSET_TEX2D_OBJECTS_RUBBERTREE_0, - ASSET_TEX2D_OBJECTS_RUBBERTREE_1, - ASSET_TEX2D_OBJECTS_RUBBERTREE_2, - ASSET_TEX2D_OBJECTS_RUBBERTREE_3, - ASSET_TEX2D_OBJECTS_PALMTREETOP_0, - ASSET_TEX2D_OBJECTS_PALMTREETOP_1, - ASSET_TEX2D_OBJECTS_PALMTREETOP_2, - ASSET_TEX2D_OBJECTS_PALMTREETOP_3, - ASSET_TEX2D_OBJECTS_PALMTREETOP_4, - ASSET_TEX2D_OBJECTS_PALMPLANT_0, - ASSET_TEX2D_OBJECTS_PALMPLANT_1, - ASSET_TEX2D_OBJECTS_PALMPLANT_2, - ASSET_TEX2D_OBJECTS_PALMTREETOPCHEA_0, - ASSET_TEX2D_OBJECTS_PALMTREETOPCHEA_1, - ASSET_TEX2D_OBJECTS_FIRTREE_0, - ASSET_TEX2D_OBJECTS_FIRTREE_1, - ASSET_TEX2D_OBJECTS_FIRTREE_2, - ASSET_TEX2D_OBJECTS_FIRTREE_3, - ASSET_TEX2D_OBJECTS_SPACETREE_0, - ASSET_TEX2D_OBJECTS_SPACETREE_1, - ASSET_TEX2D_OBJECTS_LAMPPOST_0, - ASSET_TEX2D_OBJECTS_LAMPPOST_1, - ASSET_TEX2D_OBJECTS_LAMPPOST_2, - ASSET_TEX2D_OBJECTS_LAMPPOST_3, - ASSET_TEX2D_OBJECTS_FLOWERS_WHITEBUTTERCUP_0, - ASSET_TEX2D_OBJECTS_FLOWERS_WHITEBUTTERCUP_1, - ASSET_TEX2D_OBJECTS_FLOWERS_YELLOWBELLFLOWER_0, - ASSET_TEX2D_OBJECTS_FLOWERS_YELLOWBELLFLOWER_1, - ASSET_TEX2D_OBJECTS_FLOWERS_YELLOWBUTTERCUP_0, - ASSET_TEX2D_OBJECTS_FLOWERS_YELLOWBUTTERCUP_1, - ASSET_TEX2D_OBJECTS_FLOWERS_BLUEBUTTERCUP_0, - ASSET_TEX2D_OBJECTS_FLOWERS_BLUEBUTTERCUP_1, - ASSET_TEX2D_OBJECTS_FLOWERS_WATERLILY_0, - ASSET_TEX2D_OBJECTS_FLOWERS_WATERLILY_1, - ASSET_TEX2D_OBJECTS_REEDNOLEAF_0, - ASSET_TEX2D_OBJECTS_REEDNOLEAF_1, - ASSET_TEX2D_OBJECTS_REEDLEAVES_0, - ASSET_TEX2D_OBJECTS_REEDLEAVES_1, - ASSET_TEX2D_OBJECTS_REEDLEAVES_2, - ASSET_TEX2D_OBJECTS_REEDONELEAF_0, - ASSET_TEX2D_OBJECTS_REEDONELEAF_1, - ASSET_TEX2D_OBJECTS_REEDONELEAF_2, - ASSET_TEX2D_OBJECTS_SNOWMANTOPHAT_0, - ASSET_TEX2D_OBJECTS_SNOWMANTOPHAT_1, - ASSET_TEX2D_OBJECTS_SNOWMANTOPHAT_2, - ASSET_TEX2D_OBJECTS_SNOWMANTOPHAT_3, - ASSET_TEX2D_OBJECTS_BELL, - ASSET_TEX2D_OBJECTS_SNOWMAN_0, - ASSET_TEX2D_OBJECTS_SNOWMAN_1, - ASSET_TEX2D_OBJECTS_SNOWMAN_2, - ASSET_TEX2D_OBJECTS_SNOWMAN_3, - ASSET_TEX2D_UNUSED_TORCHWITHEYES, - ASSET_TEX2D_OBJECTS_DEBUGORBRED, - ASSET_TEX2D_OBJECTS_DEBUGORBYELLOW, - ASSET_TEX2D_UNUSED_BETAANCIENTLAKESIGN_0, - ASSET_TEX2D_UNUSED_BETAANCIENTLAKESIGN_1, - ASSET_TEX2D_UNUSED_BETAANCIENTLAKESIGN_2, - ASSET_TEX2D_UNUSED_BETAANCIENTLAKESIGN_3, - ASSET_TEX2D_UNUSED_BETAANCIENTLAKESIGN_4, - ASSET_TEX2D_OBJECTS_DEBUGFOGCHANGER, - ASSET_TEX2D_OBJECTS_DEBUGANIMCAR, - ASSET_TEX2D_OBJECTS_DEBUGSKYCONTROL, - ASSET_TEX2D_OBJECTS_DEBUGCAMERACONTROL, - ASSET_TEX2D_UNUSED_DEBUGUNKNOWNEXIT, - ASSET_TEX2D_UNUSED_DEBUGUNKNOWNTRAFFICLIGHT, - ASSET_TEX2D_OBJECTS_DEBUGANIMATOR, - ASSET_TEX2D_OBJECTS_DEBUGAUDIO, - ASSET_TEX2D_OBJECTS_DEBUGAUDIOLINE, - ASSET_TEX2D_OBJECTS_DEBUGAUDIOSEQLINE, - ASSET_TEX2D_OBJECTS_DEBUGAUDIOSEQ, - ASSET_TEX2D_OBJECTS_DEBUGAUDIOREVERB_0, - ASSET_TEX2D_OBJECTS_DEBUGAUDIOREVERB_1, - ASSET_TEX2D_OBJECTS_BALLOONBOOST_0, - ASSET_TEX2D_OBJECTS_BALLOONBOOST_1, - ASSET_TEX2D_OBJECTS_BALLOONBOOST_2, - ASSET_TEX2D_OBJECTS_BALLOONMISSILE_0, - ASSET_TEX2D_OBJECTS_BALLOONMISSILE_1, - ASSET_TEX2D_OBJECTS_BALLOONMISSILE_2, - ASSET_TEX2D_OBJECTS_BALLOONTRAP_0, - ASSET_TEX2D_OBJECTS_BALLOONTRAP_1, - ASSET_TEX2D_OBJECTS_BALLOONTRAP_2, - ASSET_TEX2D_OBJECTS_BALLOONSHIELD_0, - ASSET_TEX2D_OBJECTS_BALLOONSHIELD_1, - ASSET_TEX2D_OBJECTS_BALLOONSHIELD_2, - ASSET_TEX2D_OBJECTS_BALLOONMAGNET_0, - ASSET_TEX2D_OBJECTS_BALLOONMAGNET_1, - ASSET_TEX2D_OBJECTS_BALLOONMAGNET_2, - ASSET_TEX2D_UNUSED_BALLOONMISSILEGIFT_0, - ASSET_TEX2D_UNUSED_BALLOONMISSILEGIFT_1, - ASSET_TEX2D_UNUSED_BALLOONMISSILEGIFT_2, - ASSET_TEX2D_UNUSED_BALLOONBOOSTGIFT_0, - ASSET_TEX2D_UNUSED_BALLOONBOOSTGIFT_1, - ASSET_TEX2D_UNUSED_BALLOONBOOSTGIFT_2, - ASSET_TEX2D_OBJECTS_BALLOONGOLD_0, - ASSET_TEX2D_OBJECTS_BALLOONGOLD_1, - ASSET_TEX2D_OBJECTS_BALLOONGOLD_2, - ASSET_TEX2D_OBJECTS_BALLOONSILVER_0, - ASSET_TEX2D_OBJECTS_BALLOONSILVER_1, - ASSET_TEX2D_OBJECTS_BALLOONSILVER_2, - ASSET_TEX2D_OBJECTS_BANANA_0, - ASSET_TEX2D_OBJECTS_BANANA_1, - ASSET_TEX2D_OBJECTS_BANANA_2, - ASSET_TEX2D_OBJECTS_BANANA_3, - ASSET_TEX2D_OBJECTS_BANANA_4, - ASSET_TEX2D_OBJECTS_BANANA_5, - ASSET_TEX2D_OBJECTS_BANANA_6, - ASSET_TEX2D_OBJECTS_BANANA_7, - ASSET_TEX2D_OBJECTS_SILVERCOIN_0, - ASSET_TEX2D_OBJECTS_SILVERCOIN_1, - ASSET_TEX2D_OBJECTS_SILVERCOIN_2, - ASSET_TEX2D_OBJECTS_SILVERCOIN_3, - ASSET_TEX2D_OBJECTS_SILVERCOIN_4, - ASSET_TEX2D_OBJECTS_SILVERCOIN_5, - ASSET_TEX2D_OBJECTS_SILVERCOIN_6, - ASSET_TEX2D_OBJECTS_SILVERCOIN_7, - ASSET_TEX2D_OBJECTS_SILVERCOIN_8, - ASSET_TEX2D_OBJECTS_SILVERCOIN_9, - ASSET_TEX2D_OBJECTS_SILVERCOIN_10, - ASSET_TEX2D_OBJECTS_CHECKPOINTFLAG_0, - ASSET_TEX2D_OBJECTS_CHECKPOINTFLAG_1, - ASSET_TEX2D_OBJECTS_CHECKPOINTFLAG_2, - ASSET_TEX2D_OBJECTS_CHECKPOINTFLAG_3, - ASSET_TEX2D_OBJECTS_CHECKPOINTFLAG_4, - ASSET_TEX2D_OBJECTS_CHECKPOINTFLAG_5, - ASSET_TEX2D_OBJECTS_CHECKPOINTFLAG_6, - ASSET_TEX2D_OBJECTS_CHECKPOINTFLAG_7, - ASSET_TEX2D_OBJECTS_CHECKPOINTFLAG_8, - ASSET_TEX2D_UNUSED_RAREWARECOIN_0, - ASSET_TEX2D_UNUSED_RAREWARECOIN_1, - ASSET_TEX2D_UNUSED_RAREWARECOIN_2, - ASSET_TEX2D_UNUSED_RAREWARECOIN_3, - ASSET_TEX2D_UNUSED_RAREWARECOIN_4, - ASSET_TEX2D_UNUSED_RAREWARECOIN_5, - ASSET_TEX2D_UNUSED_RAREWARECOIN_6, - ASSET_TEX2D_UNUSED_RAREWARECOIN_7, - ASSET_TEX2D_UNUSED_RAREWARECOIN_8, - ASSET_TEX2D_UNUSED_RAREWARECOIN_9, - ASSET_TEX2D_UNUSED_RAREWARECOIN_10, - ASSET_TEX2D_UNUSED_SILVERCOINVERTICAL, - ASSET_TEX2D_HUD_BANANAICON_0, - ASSET_TEX2D_HUD_BANANAICON_1, - ASSET_TEX2D_PARTICLES_SPARKLE_0, - ASSET_TEX2D_PARTICLES_SPARKLE_1, - ASSET_TEX2D_PARTICLES_SPARKLE_2, - ASSET_TEX2D_PARTICLES_SPARKLE_3, - ASSET_TEX2D_PARTICLES_SPARKLE_4, - ASSET_TEX2D_OBJECTS_DEBUGEGGCREATOR_0, - ASSET_TEX2D_OBJECTS_DEBUGEGGCREATOR_1, - ASSET_TEX2D_OBJECTS_DEBUGEGGCREATOR_2, - ASSET_TEX2D_OBJECTS_DEBUGEGGCREATOR_3, - ASSET_TEX2D_OBJECTS_DEBUGEGGCREATOR_4, - ASSET_TEX2D_OBJECTS_DEBUGEGGCREATOR_5, - ASSET_TEX2D_UNUSED_BONUSGEM_0, - ASSET_TEX2D_UNUSED_BONUSGEM_1, - ASSET_TEX2D_UNUSED_BONUSGEM_2, - ASSET_TEX2D_UNUSED_BONUSGEM_3, - ASSET_TEX2D_UNUSED_BONUSGEM_4, - ASSET_TEX2D_UNUSED_BONUSGEM_5, - ASSET_TEX2D_UNUSED_BONUSGEM_6, - ASSET_TEX2D_UNUSED_BONUSGEM_7, - ASSET_TEX2D_HUD_INDICATORICONCAUTION, - ASSET_TEX2D_HUD_INDICATORICONDOWN, - ASSET_TEX2D_HUD_INDICATORICONUTURN, - ASSET_TEX2D_HUD_INDICATORICONTURN, - ASSET_TEX2D_HUD_INDICATORICONSLIGHTTURN, - ASSET_TEX2D_OBJECTS_SMOKEOBJECT_0, - ASSET_TEX2D_OBJECTS_SMOKEOBJECT_1, - ASSET_TEX2D_OBJECTS_SMOKEOBJECT_2, - ASSET_TEX2D_OBJECTS_SMOKEOBJECT_3, - ASSET_TEX2D_OBJECTS_SMOKEOBJECT_4, - ASSET_TEX2D_OBJECTS_SMOKEOBJECT_5, - ASSET_TEX2D_OBJECTS_SMOKEOBJECT_6, - ASSET_TEX2D_OBJECTS_SMOKEOBJECT_7, - ASSET_TEX2D_OBJECTS_SMOKEOBJECT_8, - ASSET_TEX2D_OBJECTS_SMOKEOBJECT_9, - ASSET_TEX2D_OBJECTS_SMOKEOBJECT_10, - ASSET_TEX2D_OBJECTS_SMOKEOBJECT_11, - ASSET_TEX2D_OBJECTS_SMOKEOBJECT_12, - ASSET_TEX2D_OBJECTS_SMOKEOBJECT_13, - ASSET_TEX2D_OBJECTS_SMOKEOBJECT_14, - ASSET_TEX2D_OBJECTS_SMOKEOBJECT_15, - ASSET_TEX2D_OBJECTS_SMOKECLOUD_0, - ASSET_TEX2D_OBJECTS_SMOKECLOUD_1, - ASSET_TEX2D_OBJECTS_SMOKECLOUD_2, - ASSET_TEX2D_OBJECTS_SMOKECLOUD_3, - ASSET_TEX2D_OBJECTS_SMOKECLOUD_4, - ASSET_TEX2D_OBJECTS_SMOKECLOUD_5, - ASSET_TEX2D_OBJECTS_SMOKECLOUD_6, - ASSET_TEX2D_OBJECTS_SMOKECLOUD_7, - ASSET_TEX2D_OBJECTS_SMOKECLOUD_8, - ASSET_TEX2D_OBJECTS_SMOKEGRASS_0, - ASSET_TEX2D_OBJECTS_SMOKEGRASS_1, - ASSET_TEX2D_OBJECTS_SMOKEGRASS_2, - ASSET_TEX2D_OBJECTS_SMOKEGRASS_3, - ASSET_TEX2D_OBJECTS_SMOKEGRASS_4, - ASSET_TEX2D_OBJECTS_SMOKEGRASS_5, - ASSET_TEX2D_OBJECTS_SMOKEGRASS_6, - ASSET_TEX2D_OBJECTS_SMOKEGRASS_7, - ASSET_TEX2D_OBJECTS_SMOKEGRASS_8, - ASSET_TEX2D_OBJECTS_SMOKEGRASS_9, - ASSET_TEX2D_OBJECTS_SMOKEGRASS_10, - ASSET_TEX2D_OBJECTS_SMOKEGRASS_11, - ASSET_TEX2D_OBJECTS_SMOKEGRASS_12, - ASSET_TEX2D_OBJECTS_SMOKEGRASS_13, - ASSET_TEX2D_OBJECTS_MIST_0, - ASSET_TEX2D_OBJECTS_MIST_1, - ASSET_TEX2D_OBJECTS_MIST_2, - ASSET_TEX2D_OBJECTS_MIST_3, - ASSET_TEX2D_OBJECTS_MIST_4, - ASSET_TEX2D_OBJECTS_MIST_5, - ASSET_TEX2D_OBJECTS_MIST_6, - ASSET_TEX2D_OBJECTS_MIST_7, - ASSET_TEX2D_OBJECTS_MIST_8, - ASSET_TEX2D_OBJECTS_MIST_9, - ASSET_TEX2D_OBJECTS_MIST_10, - ASSET_TEX2D_OBJECTS_FLAMINGTORCH_0, - ASSET_TEX2D_OBJECTS_FLAMINGTORCH_1, - ASSET_TEX2D_OBJECTS_FLAMINGTORCH_2, - ASSET_TEX2D_OBJECTS_FLAMINGTORCH_3, - ASSET_TEX2D_OBJECTS_FLAMINGTORCH_4, - ASSET_TEX2D_OBJECTS_FLAMINGTORCH_5, - ASSET_TEX2D_OBJECTS_FLAMINGTORCH_6, - ASSET_TEX2D_OBJECTS_FLAMINGTORCH_7, - ASSET_TEX2D_OBJECTS_FLAMINGTORCH_8, - ASSET_TEX2D_OBJECTS_FLAMINGTORCH_9, - ASSET_TEX2D_OBJECTS_FLAMINGTORCH_10, - ASSET_TEX2D_OBJECTS_FLAMINGTORCH_11, - ASSET_TEX2D_UNUSED_SPLASH_0, - ASSET_TEX2D_UNUSED_SPLASH_1, - ASSET_TEX2D_UNUSED_SPLASH_2, - ASSET_TEX2D_UNUSED_SPLASH_3, - ASSET_TEX2D_UNUSED_SPLASH_4, - ASSET_TEX2D_UNUSED_SPLASH_5, - ASSET_TEX2D_UNUSED_SPLASH_6, - ASSET_TEX2D_UNUSED_SPLASH_7, - ASSET_TEX2D_UNUSED_SPLASH_8, - ASSET_TEX2D_UNUSED_SPLASH_9, - ASSET_TEX2D_UNUSED_SPLASH_10, - ASSET_TEX2D_UNUSED_SPLASH_11, - ASSET_TEX2D_UNUSED_SPLASH_12, - ASSET_TEX2D_UNUSED_SPLASH_13, - ASSET_TEX2D_UNUSED_SPLASH_14, - ASSET_TEX2D_UNUSED_SPLASH_15, - ASSET_TEX2D_UNUSED_SPLASH_16, - ASSET_TEX2D_UNUSED_SPLASH_17, - ASSET_TEX2D_UNUSED_SPLASH_18, - ASSET_TEX2D_UNUSED_SPLASH_19, - ASSET_TEX2D_UNUSED_SPLASH_20, - ASSET_TEX2D_UNUSED_SPLASH_21, - ASSET_TEX2D_UNUSED_SPLASH_22, - ASSET_TEX2D_UNUSED_SPLASH_23, - ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_0, - ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_1, - ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_2, - ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_3, - ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_4, - ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_5, - ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_6, - ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_7, - ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_8, - ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_9, - ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_10, - ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_11, - ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_12, - ASSET_TEX2D_OBJECTS_LAVASPURT_0, - ASSET_TEX2D_OBJECTS_LAVASPURT_1, - ASSET_TEX2D_OBJECTS_LAVASPURT_2, - ASSET_TEX2D_OBJECTS_LAVASPURT_3, - ASSET_TEX2D_OBJECTS_LAVASPURT_4, - ASSET_TEX2D_OBJECTS_LAVASPURT_5, - ASSET_TEX2D_OBJECTS_LAVASPURT_6, - ASSET_TEX2D_OBJECTS_LAVASPURT_7, - ASSET_TEX2D_OBJECTS_LAVASPURT_8, - ASSET_TEX2D_OBJECTS_LAVASPURT_9, - ASSET_TEX2D_OBJECTS_LAVASPURT_10, - ASSET_TEX2D_OBJECTS_LAVASPURT_11, - ASSET_TEX2D_OBJECTS_LAVASPURT_12, - ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_0, - ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_1, - ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_2, - ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_3, - ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_4, - ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_5, - ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_6, - ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_7, - ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_8, - ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_9, - ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_10, - ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_11, - ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_12, - ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_13, - ASSET_TEX2D_VEHICLE_PARTS_TYRE0_0, - ASSET_TEX2D_VEHICLE_PARTS_TYRE0_1, - ASSET_TEX2D_VEHICLE_PARTS_TYRE0_2, - ASSET_TEX2D_VEHICLE_PARTS_TYRE0_3, - ASSET_TEX2D_VEHICLE_PARTS_TYRE0_4, - ASSET_TEX2D_VEHICLE_PARTS_TYRE0_5, - ASSET_TEX2D_VEHICLE_PARTS_TYRE0_6, - ASSET_TEX2D_VEHICLE_PARTS_TYRE0_7, - ASSET_TEX2D_VEHICLE_PARTS_TYRE0_8, - ASSET_TEX2D_VEHICLE_PARTS_TYRE0_9, - ASSET_TEX2D_VEHICLE_PARTS_TYRE0_10, - ASSET_TEX2D_VEHICLE_PARTS_TYRE0_11, - ASSET_TEX2D_VEHICLE_PARTS_TYRE0_12, - ASSET_TEX2D_VEHICLE_PARTS_TYRE0_13, - ASSET_TEX2D_VEHICLE_PARTS_TYRE0_14, - ASSET_TEX2D_VEHICLE_PARTS_TYRE0_15, - ASSET_TEX2D_VEHICLE_PARTS_TYRE1_0, - ASSET_TEX2D_VEHICLE_PARTS_TYRE1_1, - ASSET_TEX2D_VEHICLE_PARTS_TYRE1_2, - ASSET_TEX2D_VEHICLE_PARTS_TYRE1_3, - ASSET_TEX2D_VEHICLE_PARTS_TYRE1_4, - ASSET_TEX2D_VEHICLE_PARTS_TYRE1_5, - ASSET_TEX2D_VEHICLE_PARTS_TYRE1_6, - ASSET_TEX2D_VEHICLE_PARTS_TYRE1_7, - ASSET_TEX2D_VEHICLE_PARTS_TYRE1_8, - ASSET_TEX2D_VEHICLE_PARTS_TYRE1_9, - ASSET_TEX2D_VEHICLE_PARTS_TYRE1_10, - ASSET_TEX2D_VEHICLE_PARTS_TYRE1_11, - ASSET_TEX2D_VEHICLE_PARTS_TYRE1_12, - ASSET_TEX2D_VEHICLE_PARTS_TYRE1_13, - ASSET_TEX2D_VEHICLE_PARTS_TYRE1_14, - ASSET_TEX2D_VEHICLE_PARTS_TYRE1_15, - ASSET_TEX2D_VEHICLE_PARTS_TYRE2_0, - ASSET_TEX2D_VEHICLE_PARTS_TYRE2_1, - ASSET_TEX2D_VEHICLE_PARTS_TYRE2_2, - ASSET_TEX2D_VEHICLE_PARTS_TYRE2_3, - ASSET_TEX2D_VEHICLE_PARTS_TYRE2_4, - ASSET_TEX2D_VEHICLE_PARTS_TYRE2_5, - ASSET_TEX2D_VEHICLE_PARTS_TYRE2_6, - ASSET_TEX2D_VEHICLE_PARTS_TYRE2_7, - ASSET_TEX2D_VEHICLE_PARTS_TYRE2_8, - ASSET_TEX2D_VEHICLE_PARTS_TYRE2_9, - ASSET_TEX2D_VEHICLE_PARTS_TYRE2_10, - ASSET_TEX2D_VEHICLE_PARTS_TYRE2_11, - ASSET_TEX2D_VEHICLE_PARTS_TYRE2_12, - ASSET_TEX2D_VEHICLE_PARTS_TYRE2_13, - ASSET_TEX2D_VEHICLE_PARTS_TYRE2_14, - ASSET_TEX2D_VEHICLE_PARTS_TYRE2_15, - ASSET_TEX2D_VEHICLE_PARTS_TYRE3_0, - ASSET_TEX2D_VEHICLE_PARTS_TYRE3_1, - ASSET_TEX2D_VEHICLE_PARTS_TYRE3_2, - ASSET_TEX2D_VEHICLE_PARTS_TYRE3_3, - ASSET_TEX2D_VEHICLE_PARTS_TYRE3_4, - ASSET_TEX2D_VEHICLE_PARTS_TYRE3_5, - ASSET_TEX2D_VEHICLE_PARTS_TYRE3_6, - ASSET_TEX2D_VEHICLE_PARTS_TYRE3_7, - ASSET_TEX2D_VEHICLE_PARTS_TYRE3_8, - ASSET_TEX2D_VEHICLE_PARTS_TYRE3_9, - ASSET_TEX2D_VEHICLE_PARTS_TYRE3_10, - ASSET_TEX2D_VEHICLE_PARTS_TYRE3_11, - ASSET_TEX2D_VEHICLE_PARTS_TYRE3_12, - ASSET_TEX2D_VEHICLE_PARTS_TYRE3_13, - ASSET_TEX2D_VEHICLE_PARTS_TYRE3_14, - ASSET_TEX2D_VEHICLE_PARTS_TYRE3_15, - ASSET_TEX2D_VEHICLE_PARTS_FAN0_0, - ASSET_TEX2D_VEHICLE_PARTS_FAN0_1, - ASSET_TEX2D_VEHICLE_PARTS_FAN0_2, - ASSET_TEX2D_VEHICLE_PARTS_FAN0_3, - ASSET_TEX2D_VEHICLE_PARTS_FAN0_4, - ASSET_TEX2D_VEHICLE_PARTS_FAN0_5, - ASSET_TEX2D_VEHICLE_PARTS_FAN0_6, - ASSET_TEX2D_VEHICLE_PARTS_FAN0_7, - ASSET_TEX2D_VEHICLE_PARTS_FAN0_8, - ASSET_TEX2D_VEHICLE_PARTS_FAN0_9, - ASSET_TEX2D_VEHICLE_PARTS_FAN0_10, - ASSET_TEX2D_VEHICLE_PARTS_FAN0_11, - ASSET_TEX2D_VEHICLE_PARTS_FAN0_12, - ASSET_TEX2D_VEHICLE_PARTS_FAN0_13, - ASSET_TEX2D_VEHICLE_PARTS_FAN0_14, - ASSET_TEX2D_VEHICLE_PARTS_FAN0_15, - ASSET_TEX2D_VEHICLE_PARTS_FAN1_0, - ASSET_TEX2D_VEHICLE_PARTS_FAN1_1, - ASSET_TEX2D_VEHICLE_PARTS_FAN1_2, - ASSET_TEX2D_VEHICLE_PARTS_FAN1_3, - ASSET_TEX2D_VEHICLE_PARTS_FAN1_4, - ASSET_TEX2D_VEHICLE_PARTS_FAN1_5, - ASSET_TEX2D_VEHICLE_PARTS_FAN1_6, - ASSET_TEX2D_VEHICLE_PARTS_FAN1_7, - ASSET_TEX2D_VEHICLE_PARTS_FAN1_8, - ASSET_TEX2D_VEHICLE_PARTS_FAN1_9, - ASSET_TEX2D_VEHICLE_PARTS_FAN1_10, - ASSET_TEX2D_VEHICLE_PARTS_FAN1_11, - ASSET_TEX2D_VEHICLE_PARTS_FAN1_12, - ASSET_TEX2D_VEHICLE_PARTS_FAN1_13, - ASSET_TEX2D_VEHICLE_PARTS_FAN1_14, - ASSET_TEX2D_VEHICLE_PARTS_FAN1_15, - ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_0, - ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_1, - ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_2, - ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_3, - ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_4, - ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_5, - ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_6, - ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_7, - ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_8, - ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_9, - ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_10, - ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_11, - ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_12, - ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_13, - ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_14, - ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_15, - ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_0, - ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_1, - ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_2, - ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_3, - ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_4, - ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_5, - ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_6, - ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_7, - ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_8, - ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_9, - ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_10, - ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_11, - ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_12, - ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_13, - ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_14, - ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_15, - ASSET_TEX2D_UNUSED_RARELETTERS_0, - ASSET_TEX2D_UNUSED_RARELETTERS_1, - ASSET_TEX2D_UNUSED_RARELETTERS_2, - ASSET_TEX2D_OBJECTS_BOLTGLOW_0, - ASSET_TEX2D_OBJECTS_BOLTGLOW_1, - ASSET_TEX2D_MENU_ICONTROPHYNOTCOLLECTED, - ASSET_TEX2D_MENU_ICONTROPHYCOLLECTED, - ASSET_TEX2D_MENU_ICONKEYNOTCOLLECTED, - ASSET_TEX2D_MENU_ICONKEYCOLLECTED, - ASSET_TEX2D_MENU_ICONWIZPIGAMULET0_0, - ASSET_TEX2D_MENU_ICONWIZPIGAMULET0_1, - ASSET_TEX2D_MENU_ICONWIZPIGAMULET1_0, - ASSET_TEX2D_MENU_ICONWIZPIGAMULET1_1, - ASSET_TEX2D_MENU_ICONWIZPIGAMULET2_0, - ASSET_TEX2D_MENU_ICONWIZPIGAMULET2_1, - ASSET_TEX2D_MENU_ICONWIZPIGAMULET3_0, - ASSET_TEX2D_MENU_ICONWIZPIGAMULET3_1, - ASSET_TEX2D_MENU_ICONWIZPIGAMULET4_0, - ASSET_TEX2D_MENU_ICONWIZPIGAMULET4_1, - ASSET_TEX2D_MENU_ICONTTAMULET0_0, - ASSET_TEX2D_MENU_ICONTTAMULET0_1, - ASSET_TEX2D_MENU_ICONTTAMULET1_0, - ASSET_TEX2D_MENU_ICONTTAMULET1_1, - ASSET_TEX2D_MENU_ICONTTAMULET2_0, - ASSET_TEX2D_MENU_ICONTTAMULET2_1, - ASSET_TEX2D_MENU_ICONTTAMULET3_0, - ASSET_TEX2D_MENU_ICONTTAMULET3_1, - ASSET_TEX2D_MENU_ICONTTAMULET4_0, - ASSET_TEX2D_MENU_ICONTTAMULET4_1, - - ASSET_TEXTURES_2D_COUNT -} AssetTextures2dEnum; - -/********** ASSET_GAME_TEXT **********/ - -typedef enum AssetGameTextEnum { - ASSET_GAME_TEXT_0, - ASSET_GAME_TEXT_1, - ASSET_GAME_TEXT_2, - ASSET_GAME_TEXT_3, - ASSET_GAME_TEXT_4, - ASSET_GAME_TEXT_5, - ASSET_GAME_TEXT_6, - ASSET_GAME_TEXT_7, - ASSET_GAME_TEXT_8, - ASSET_GAME_TEXT_9, - ASSET_GAME_TEXT_10, - ASSET_GAME_TEXT_11, - ASSET_GAME_TEXT_12, - ASSET_GAME_TEXT_13, - ASSET_GAME_TEXT_14, - ASSET_GAME_TEXT_15, - ASSET_GAME_TEXT_16, - ASSET_GAME_TEXT_17, - ASSET_GAME_TEXT_18, - ASSET_GAME_TEXT_19, - ASSET_GAME_TEXT_20, - ASSET_GAME_TEXT_21, - ASSET_GAME_TEXT_22, - ASSET_GAME_TEXT_23, - ASSET_GAME_TEXT_24, - ASSET_GAME_TEXT_25, - ASSET_GAME_TEXT_26, - ASSET_GAME_TEXT_27, - ASSET_GAME_TEXT_28, - ASSET_GAME_TEXT_29, - ASSET_GAME_TEXT_30, - ASSET_GAME_TEXT_31, - ASSET_GAME_TEXT_32, - ASSET_GAME_TEXT_33, - ASSET_GAME_TEXT_34, - ASSET_GAME_TEXT_35, - ASSET_GAME_TEXT_36, - ASSET_GAME_TEXT_37, - ASSET_GAME_TEXT_38, - ASSET_GAME_TEXT_39, - ASSET_GAME_TEXT_40, - ASSET_GAME_TEXT_41, - ASSET_GAME_TEXT_42, - ASSET_GAME_TEXT_43, - ASSET_GAME_TEXT_44, - ASSET_GAME_TEXT_45, - ASSET_GAME_TEXT_46, - ASSET_GAME_TEXT_47, - ASSET_GAME_TEXT_48, - ASSET_GAME_TEXT_49, - ASSET_GAME_TEXT_50, - ASSET_GAME_TEXT_51, - ASSET_GAME_TEXT_52, - ASSET_GAME_TEXT_53, - ASSET_GAME_TEXT_54, - ASSET_GAME_TEXT_55, - ASSET_GAME_TEXT_56, - ASSET_GAME_TEXT_57, - ASSET_GAME_TEXT_58, - ASSET_GAME_TEXT_59, - ASSET_GAME_TEXT_60, - ASSET_GAME_TEXT_61, - ASSET_GAME_TEXT_62, - ASSET_GAME_TEXT_63, - ASSET_GAME_TEXT_64, - ASSET_GAME_TEXT_65, - ASSET_GAME_TEXT_66, - ASSET_GAME_TEXT_67, - ASSET_GAME_TEXT_68, - ASSET_GAME_TEXT_69, - ASSET_GAME_TEXT_70, - ASSET_GAME_TEXT_71, - ASSET_GAME_TEXT_72, - ASSET_GAME_TEXT_73, - ASSET_GAME_TEXT_74, - ASSET_GAME_TEXT_75, - ASSET_GAME_TEXT_76, - ASSET_GAME_TEXT_77, - ASSET_GAME_TEXT_78, - ASSET_GAME_TEXT_79, - ASSET_GAME_TEXT_80, - ASSET_GAME_TEXT_81, - ASSET_GAME_TEXT_82, - ASSET_GAME_TEXT_83, - ASSET_GAME_TEXT_84, - ASSET_GAME_TEXT_85, - ASSET_GAME_TEXT_86, - ASSET_GAME_TEXT_87, - ASSET_GAME_TEXT_88, - ASSET_GAME_TEXT_89, - ASSET_GAME_TEXT_90, - ASSET_GAME_TEXT_91, - ASSET_GAME_TEXT_92, - ASSET_GAME_TEXT_93, - ASSET_GAME_TEXT_94, - ASSET_GAME_TEXT_95, - ASSET_GAME_TEXT_96, - ASSET_GAME_TEXT_97, - ASSET_GAME_TEXT_98, - ASSET_GAME_TEXT_99, - ASSET_GAME_TEXT_100, - ASSET_GAME_TEXT_101, - ASSET_GAME_TEXT_102, - ASSET_GAME_TEXT_103, - ASSET_GAME_TEXT_104, - ASSET_GAME_TEXT_105, - ASSET_GAME_TEXT_106, - ASSET_GAME_TEXT_107, - ASSET_GAME_TEXT_108, - ASSET_GAME_TEXT_109, - ASSET_GAME_TEXT_110, - ASSET_GAME_TEXT_111, - ASSET_GAME_TEXT_112, - ASSET_GAME_TEXT_113, - ASSET_GAME_TEXT_114, - ASSET_GAME_TEXT_115, - ASSET_GAME_TEXT_116, - ASSET_GAME_TEXT_117, - ASSET_GAME_TEXT_118, - ASSET_GAME_TEXT_119, - ASSET_GAME_TEXT_120, - ASSET_GAME_TEXT_121, - ASSET_GAME_TEXT_122, - ASSET_GAME_TEXT_123, - ASSET_GAME_TEXT_124, - ASSET_GAME_TEXT_125, - ASSET_GAME_TEXT_126, - ASSET_GAME_TEXT_127, - ASSET_GAME_TEXT_128, - ASSET_GAME_TEXT_129, - ASSET_GAME_TEXT_130, - ASSET_GAME_TEXT_131, - ASSET_GAME_TEXT_132, - ASSET_GAME_TEXT_133, - ASSET_GAME_TEXT_134, - ASSET_GAME_TEXT_135, - ASSET_GAME_TEXT_136, - ASSET_GAME_TEXT_137, - ASSET_GAME_TEXT_138, - ASSET_GAME_TEXT_139, - ASSET_GAME_TEXT_140, - ASSET_GAME_TEXT_141, - ASSET_GAME_TEXT_142, - ASSET_GAME_TEXT_143, - ASSET_GAME_TEXT_144, - ASSET_GAME_TEXT_145, - ASSET_GAME_TEXT_146, - ASSET_GAME_TEXT_147, - ASSET_GAME_TEXT_148, - ASSET_GAME_TEXT_149, - ASSET_GAME_TEXT_150, - ASSET_GAME_TEXT_151, - ASSET_GAME_TEXT_152, - ASSET_GAME_TEXT_153, - ASSET_GAME_TEXT_154, - ASSET_GAME_TEXT_155, - ASSET_GAME_TEXT_156, - ASSET_GAME_TEXT_157, - ASSET_GAME_TEXT_158, - ASSET_GAME_TEXT_159, - ASSET_GAME_TEXT_160, - ASSET_GAME_TEXT_161, - ASSET_GAME_TEXT_162, - ASSET_GAME_TEXT_163, - ASSET_GAME_TEXT_164, - ASSET_GAME_TEXT_165, - ASSET_GAME_TEXT_166, - ASSET_GAME_TEXT_167, - ASSET_GAME_TEXT_168, - ASSET_GAME_TEXT_169, - ASSET_GAME_TEXT_170, - ASSET_GAME_TEXT_171, - ASSET_GAME_TEXT_172, - ASSET_GAME_TEXT_173, - ASSET_GAME_TEXT_174, - ASSET_GAME_TEXT_175, - ASSET_GAME_TEXT_176, - ASSET_GAME_TEXT_177, - ASSET_GAME_TEXT_178, - ASSET_GAME_TEXT_179, - ASSET_GAME_TEXT_180, - ASSET_GAME_TEXT_181, - ASSET_GAME_TEXT_182, - ASSET_GAME_TEXT_183, - ASSET_GAME_TEXT_184, - ASSET_GAME_TEXT_185, - ASSET_GAME_TEXT_186, - ASSET_GAME_TEXT_187, - ASSET_GAME_TEXT_188, - ASSET_GAME_TEXT_189, - ASSET_GAME_TEXT_190, - ASSET_GAME_TEXT_191, - ASSET_GAME_TEXT_192, - ASSET_GAME_TEXT_193, - ASSET_GAME_TEXT_194, - ASSET_GAME_TEXT_195, - ASSET_GAME_TEXT_196, - ASSET_GAME_TEXT_197, - ASSET_GAME_TEXT_198, - ASSET_GAME_TEXT_199, - ASSET_GAME_TEXT_200, - ASSET_GAME_TEXT_201, - ASSET_GAME_TEXT_202, - ASSET_GAME_TEXT_203, - ASSET_GAME_TEXT_204, - ASSET_GAME_TEXT_205, - ASSET_GAME_TEXT_206, - ASSET_GAME_TEXT_207, - ASSET_GAME_TEXT_208, - ASSET_GAME_TEXT_209, - ASSET_GAME_TEXT_210, - ASSET_GAME_TEXT_211, - ASSET_GAME_TEXT_212, - ASSET_GAME_TEXT_213, - ASSET_GAME_TEXT_214, - ASSET_GAME_TEXT_215, - ASSET_GAME_TEXT_216, - ASSET_GAME_TEXT_217, - ASSET_GAME_TEXT_218, - ASSET_GAME_TEXT_219, - ASSET_GAME_TEXT_220, - ASSET_GAME_TEXT_221, - ASSET_GAME_TEXT_222, - ASSET_GAME_TEXT_223, - ASSET_GAME_TEXT_224, - ASSET_GAME_TEXT_225, - ASSET_GAME_TEXT_226, - ASSET_GAME_TEXT_227, - ASSET_GAME_TEXT_228, - ASSET_GAME_TEXT_229, - ASSET_GAME_TEXT_230, - ASSET_GAME_TEXT_231, - ASSET_GAME_TEXT_232, - ASSET_GAME_TEXT_233, - ASSET_GAME_TEXT_234, - ASSET_GAME_TEXT_235, - ASSET_GAME_TEXT_236, - ASSET_GAME_TEXT_237, - ASSET_GAME_TEXT_238, - ASSET_GAME_TEXT_239, - ASSET_GAME_TEXT_240, - ASSET_GAME_TEXT_241, - ASSET_GAME_TEXT_242, - ASSET_GAME_TEXT_243, - ASSET_GAME_TEXT_244, - ASSET_GAME_TEXT_245, - ASSET_GAME_TEXT_246, - ASSET_GAME_TEXT_247, - ASSET_GAME_TEXT_248, - ASSET_GAME_TEXT_249, - ASSET_GAME_TEXT_250, - ASSET_GAME_TEXT_251, - ASSET_GAME_TEXT_252, - ASSET_GAME_TEXT_253, - ASSET_GAME_TEXT_254, - - ASSET_GAME_TEXT_COUNT -} AssetGameTextEnum; - -/********** ASSET_MENU_TEXT **********/ - -typedef enum AssetMenuTextEnum { - ASSET_MENU_TEXT_ENGLISH, - ASSET_MENU_TEXT_FRENCH, - ASSET_MENU_TEXT_GERMAN, - ASSET_MENU_TEXT_JAPANESE -} AssetMenuTextEnum; - -typedef enum AssetMenuTextIdsEnum { - ASSET_MENU_TEXT_STEREO, - ASSET_MENU_TEXT_MONO, - ASSET_MENU_TEXT_HEADPHONES, - ASSET_MENU_TEXT_SFXVOLUME, - ASSET_MENU_TEXT_MUSICVOLUME, - ASSET_MENU_TEXT_RETURN, - ASSET_MENU_TEXT_AUDIOOPTIONS, - ASSET_MENU_TEXT_MUSICTEST, - ASSET_MENU_TEXT_ENTERINITIALS, - ASSET_MENU_TEXT_BESTTIME, - ASSET_MENU_TEXT_BESTLAP, - ASSET_MENU_TEXT_SILVERCOIN, - ASSET_MENU_TEXT_GOLDCOIN, - ASSET_MENU_TEXT_CHALLENGE, - ASSET_MENU_TEXT_ENTERCODE, - ASSET_MENU_TEXT_CLEARALLCODES, - ASSET_MENU_TEXT_CODELIST, - ASSET_MENU_TEXT_MAGICCODES, - ASSET_MENU_TEXT_BADCODE, - ASSET_MENU_TEXT_ALLCODESDELETED, - ASSET_MENU_TEXT_MAGICCODESLIST, - ASSET_MENU_TEXT_ON, - ASSET_MENU_TEXT_OFF, - ASSET_MENU_TEXT_TRYAGAIN, - ASSET_MENU_TEXT_SELECTTRACK, - ASSET_MENU_TEXT_RETURNTOLOBBY, - ASSET_MENU_TEXT_SELECTCHARACTER, - ASSET_MENU_TEXT_SAVEGHOST, - ASSET_MENU_TEXT_QUIT, - ASSET_MENU_TEXT_LAPTIMES, - ASSET_MENU_TEXT_OVERALLTIME, - ASSET_MENU_TEXT_RACEORDER, - ASSET_MENU_TEXT_RECORDTIMES, - ASSET_MENU_TEXT_RANKINGS, - ASSET_MENU_TEXT_LANGUAGE, - ASSET_MENU_TEXT_CONTPAK, - ASSET_MENU_TEXT_OPTIONS, - ASSET_MENU_TEXT_CHANGEVEHICLE, - ASSET_MENU_TEXT_HELP, - ASSET_MENU_TEXT_CHALLENGES, - ASSET_MENU_TEXT_VEHICLESELECT, - ASSET_MENU_TEXT_CAR, - ASSET_MENU_TEXT_HOVERCRAFT, - ASSET_MENU_TEXT_PLANE, - ASSET_MENU_TEXT_MAINMENU, - ASSET_MENU_TEXT_CHALLENGESELECT, - ASSET_MENU_TEXT_CARCHALLENGE, - ASSET_MENU_TEXT_HOVERCHALLENGE, - ASSET_MENU_TEXT_PLANECHALLENGE, - ASSET_MENU_TEXT_LOSETOTAJ_0, - ASSET_MENU_TEXT_LOSETOTAJ_1, - ASSET_MENU_TEXT_EXIT, - ASSET_MENU_TEXT_TTINTRO_0, - ASSET_MENU_TEXT_TTINTRO_1, - ASSET_MENU_TEXT_TTINTRO_2, - ASSET_MENU_TEXT_TTINTRO_3, - ASSET_MENU_TEXT_TTINTRO_4, - ASSET_MENU_TEXT_TTINTRO_5, - ASSET_MENU_TEXT_TTINTRO_6, - ASSET_MENU_TEXT_TTINTRO_7, - ASSET_MENU_TEXT_TTINTRO_8, - ASSET_MENU_TEXT_TTINTRO_9, - ASSET_MENU_TEXT_TTINTRO_10, - ASSET_MENU_TEXT_TTINTRO_11, - ASSET_MENU_TEXT_PAKERROR, - ASSET_MENU_TEXT_TIMETRIALON, - ASSET_MENU_TEXT_TIMETRIALOFF, - ASSET_MENU_TEXT_NOCONTPAK, - ASSET_MENU_TEXT_CONTPAKFULL, - ASSET_MENU_TEXT_BADCONTPAK, - ASSET_MENU_TEXT_TROPHYRACE, - ASSET_MENU_TEXT_STATUS, - ASSET_MENU_TEXT_GAMEA, - ASSET_MENU_TEXT_GAMEB, - ASSET_MENU_TEXT_GAMEC, - ASSET_MENU_TEXT_NEW, - ASSET_MENU_TEXT_GAMESELECT, - ASSET_MENU_TEXT_GAMETOCOPY, - ASSET_MENU_TEXT_GAMETOCOPYTO, - ASSET_MENU_TEXT_GAMETOERASE, - ASSET_MENU_TEXT_COPY, - ASSET_MENU_TEXT_ERASE, - ASSET_MENU_TEXT_GHOSTDATA, - ASSET_MENU_TEXT_NOGHOSTSSAVED, - ASSET_MENU_TEXT_ERASEGHOST, - ASSET_MENU_TEXT_CANCEL, - ASSET_MENU_TEXT_CONTPAK1, - ASSET_MENU_TEXT_CONTPAK2, - ASSET_MENU_TEXT_CONTPAK3, - ASSET_MENU_TEXT_CONTPAK4, - ASSET_MENU_TEXT_CONTPAKX, - ASSET_MENU_TEXT_CONTPAKNOTPRESENT, - ASSET_MENU_TEXT_CONTPAKTRYAGAIN, - ASSET_MENU_TEXT_CONTPAKHASCORRUPTDATA_0, - ASSET_MENU_TEXT_CONTPAKHASCORRUPTDATA_1, - ASSET_MENU_TEXT_CONTPAKISDAMAGED_0, - ASSET_MENU_TEXT_CONTPAKISDAMAGED_1, - ASSET_MENU_TEXT_CONTPAKISFULL, - ASSET_MENU_TEXT_CONTINUE, - ASSET_MENU_TEXT_CONTPAKDIFFERENT_0, - ASSET_MENU_TEXT_CONTPAKDIFFERENT_1, - ASSET_MENU_TEXT_CONTPAKRETRY, - ASSET_MENU_TEXT_CANNOTSTOREANYMOREGHOSTS_0, - ASSET_MENU_TEXT_CANNOTSTOREANYMOREGHOSTS_1, - ASSET_MENU_TEXT_ADVTWOLOADERROR_0, - ASSET_MENU_TEXT_ADVTWOLOADERROR_1, - ASSET_MENU_TEXT_ADVTWOLOADERROR_2, - ASSET_MENU_TEXT_ADVTWOLOADERROR_3, - ASSET_MENU_TEXT_ADVTWOLOADERROR_4, - ASSET_MENU_TEXT_ADVTWOLOADERROR_5, - ASSET_MENU_TEXT_PAKNOTES, - ASSET_MENU_TEXT_DELETENOTEX, - ASSET_MENU_TEXT_DELETE, - ASSET_MENU_TEXT_CANCELDELETE, - ASSET_MENU_TEXT_FREEPAGESX, - ASSET_MENU_TEXT_NOTE, - ASSET_MENU_TEXT_FILENAME, - ASSET_MENU_TEXT_PAGES, - ASSET_MENU_TEXT_MORE, - ASSET_MENU_TEXT_GAMEPAK, - ASSET_MENU_TEXT_TIMES, - ASSET_MENU_TEXT_GHOSTS, - ASSET_MENU_TEXT_EMPTYSLOT, - ASSET_MENU_TEXT_VIEWGHOSTS, - ASSET_MENU_TEXT_PLEASEWAIT, - ASSET_MENU_TEXT_GAMEERROR, - ASSET_MENU_TEXT_RESTARTRACE, - ASSET_MENU_TEXT_RESTARTCHALLENGE, - ASSET_MENU_TEXT_ABANDONCHALLENGE, - ASSET_MENU_TEXT_QUITTROPHYRACE, - ASSET_MENU_TEXT_QUITTROPHYRACETITLE, - ASSET_MENU_TEXT_QUITGAME, - ASSET_MENU_TEXT_QUITGAMETITLE, - ASSET_MENU_TEXT_PAUSEOPTIONS, - ASSET_MENU_TEXT_OK, - ASSET_MENU_TEXT_PLAYERSELECT, - ASSET_MENU_TEXT_NUMBEROFRACERS, - ASSET_MENU_TEXT_START, - ASSET_MENU_TEXT_ROUNDONE, - ASSET_MENU_TEXT_ROUNDTWO, - ASSET_MENU_TEXT_ROUNDTHREE, - ASSET_MENU_TEXT_ROUNDFOUR, - ASSET_MENU_TEXT_ADVENTURE, - ASSET_MENU_TEXT_ADVENTURETWO, - ASSET_MENU_TEXT_TRACKS, - ASSET_MENU_TEXT_TROPHYCEREMONY, - ASSET_MENU_TEXT_ADVENTURE2, - ASSET_MENU_TEXT_ADVENTURETWO2, - ASSET_MENU_TEXT_CLEARALLCODESTITLE, - ASSET_MENU_TEXT_CLEARALLCODESCONFIRM, - ASSET_MENU_TEXT_CLEARALLCODESCANCEL, - ASSET_MENU_TEXT_CONTROLLERNOTCONNECTED, - ASSET_MENU_TEXT_CAUTION, - ASSET_MENU_TEXT_RUMBLEPAKDETECTED_0, - ASSET_MENU_TEXT_RUMBLEPAKDETECTED_1, - ASSET_MENU_TEXT_RUMBLEPAKDETECTED_2, - ASSET_MENU_TEXT_INSERTDEVICE_0, - ASSET_MENU_TEXT_INSERTDEVICE_1, - ASSET_MENU_TEXT_INSERTDEVICE_2, - ASSET_MENU_TEXT_INSERTDEVICE_3, - ASSET_MENU_TEXT_INSERTDEVICE_4, - ASSET_MENU_TEXT_INSERTDEVICE_5, - ASSET_MENU_TEXT_INSERTDEVICE_6, - ASSET_MENU_TEXT_TURNOFFN64_0, - ASSET_MENU_TEXT_TURNOFFN64_1, - ASSET_MENU_TEXT_SAVEOPTIONS, - ASSET_MENU_TEXT_CAUTIONMESSAGE_0, - ASSET_MENU_TEXT_CAUTIONMESSAGE_1, - ASSET_MENU_TEXT_CAUTIONMESSAGE_2, - ASSET_MENU_TEXT_CAUTIONMESSAGE_3, - ASSET_MENU_TEXT_CAUTIONMESSAGE_4, - ASSET_MENU_TEXT_CAUTIONMESSAGE_5, - ASSET_MENU_TEXT_CAUTIONMESSAGE_6, - ASSET_MENU_TEXT_CAUTIONMESSAGE_7, - ASSET_MENU_TEXT_CAUTIONMESSAGE_8, - ASSET_MENU_TEXT_CAUTIONMESSAGE_9, - ASSET_MENU_TEXT_CAUTIONMESSAGE_10, - ASSET_MENU_TEXT_CANNOTSAVEGHOSTDATA_0, - ASSET_MENU_TEXT_CANNOTSAVEGHOSTDATA_1, - ASSET_MENU_TEXT_CANNOTSAVEGHOSTDATA_2, - ASSET_MENU_TEXT_ENTERTROPHYRACE, - ASSET_MENU_TEXT_GAMEPAKBONUSES, - ASSET_MENU_TEXT_SUBTITLESON, - ASSET_MENU_TEXT_SUBTITLESOFF, - ASSET_MENU_TEXT_CORRUPTDATA_0, - ASSET_MENU_TEXT_CORRUPTDATA_1, - - ASSET_MENU_TEXT_COUNT -} AssetMenuTextIdsEnum; - -/********** ASSET_SPRITES **********/ - -typedef enum AssetSpritesEnum { - ASSET_SPRITE_MINIMAP_FOSSILCANYON, - ASSET_SPRITE_MINIMAP_ANCIENTLAKE, - ASSET_SPRITE_MINIMAP_PIRATELAGOON, - ASSET_SPRITE_MINIMAP_WHALEBAY, - ASSET_SPRITE_MINIMAP_SNOWBALLVALLEY, - ASSET_SPRITE_MINIMAP_HOTTOPVOLCANO, - ASSET_SPRITE_MINIMAP_CRESCENTISLAND, - ASSET_SPRITE_MINIMAP_UNUSED, - ASSET_SPRITE_MINIMAP_EVERFROSTPEAK, - ASSET_SPRITE_MINIMAP_UNUSED2, - ASSET_SPRITE_MINIMAP_WALRUSCOVE, - ASSET_SPRITE_MINIMAP_UNUSED3, - ASSET_SPRITE_MINIMAP_BOULDERCANYON, - ASSET_SPRITE_MINIMAP_SMOKEYCASTLE, - ASSET_SPRITE_MINIMAP_CENTRALAREA, - ASSET_SPRITE_MINIMAP_FIREMOUNTAIN, - ASSET_SPRITE_MINIMAP_SPACEPORTALPHA, - ASSET_SPRITE_MINIMAP_SPACEDUSTALLEY, - ASSET_SPRITE_MINIMAP_TREASURECAVES, - ASSET_SPRITE_MINIMAP_GREENWOODVILLAGE, - ASSET_SPRITE_MINIMAP_DARKMOONCAVERNS, - ASSET_SPRITE_MINIMAP_STARCITY, - ASSET_SPRITE_MINIMAP_WINDMILLPLAINS, - ASSET_SPRITE_MINIMAP_FROSTYVILLAGE, - ASSET_SPRITE_MINIMAP_DARKWATERBEACH, - ASSET_SPRITE_MINIMAP_JUNGLEFALLS, - ASSET_SPRITE_MINIMAP_ICICLEPYRAMID, - ASSET_SPRITE_MINIMAP_HAUNTEDWOODS, - ASSET_SPRITE_MINIMAP_BLUEY, - ASSET_SPRITE_MINIMAP_BUBBLER, - ASSET_SPRITE_MINIMAP_SMOKEY, - ASSET_SPRITE_MINIMAP_TRICKYTOPS, - ASSET_SPRITE_MINIMAP_WIZPIG1, - ASSET_SPRITE_MINIMAP_WIZPIG2, - ASSET_SPRITE_WEATHER_RAINDROP, - ASSET_SPRITE_WEATHER_SNOWFLAKE, - ASSET_SPRITE_OBJECTS_LENSFLARE1, - ASSET_SPRITE_OBJECTS_LENSFLARE2, - ASSET_SPRITE_OBJECTS_LENSFLARE3, - ASSET_SPRITE_UNKNOWN_BROWNEGG, - ASSET_SPRITE_PARTICLES_SMOKE, - ASSET_SPRITE_PARTICLES_SMOKE2, - ASSET_SPRITE_PARTICLES_BUBBLESSMALL, - ASSET_SPRITE_PARTICLES_SMOKE3, - ASSET_SPRITE_OBJECTS_BUBBLEWEAPON, - ASSET_SPRITE_OBJECTS_SPARKLE, - ASSET_SPRITE_OBJECTS_BOMBEXPLOSIONBLUE, - ASSET_SPRITE_OBJECTS_BOMBEXPLOSIONYELLOW, - ASSET_SPRITE_OBJECTS_BOMBEXPLOSIONRED, - ASSET_SPRITE_OBJECTS_BOMBEXPLOSIONGREEN, - ASSET_SPRITE_OBJECTS_BOMBEXPLOSIONCYAN, - ASSET_SPRITE_OBJECTS_BOMBEXPLOSIONWHITE, - ASSET_SPRITE_OBJECTS_BOMBEXPLOSIONORANGE, - ASSET_SPRITE_OBJECTS_BOMBEXPLOSIONPURPLE, - ASSET_SPRITE_OBJECTS_RAINBOW, - ASSET_SPRITE_OBJECTS_EGG, - ASSET_SPRITE_OBJECTS_BOMB, - ASSET_SPRITE_OBJECTS_OILSLICK, - ASSET_SPRITE_OBJECTS_EYESINDARK, - ASSET_SPRITE_HUD_TIMERCOLON, - ASSET_SPRITE_HUD_RETICALHOMING, - ASSET_SPRITE_OBJECTS_DEBUGREDSPHERE, - ASSET_SPRITE_HUD_FINISH, - ASSET_SPRITE_HUD_GETREADY, - ASSET_SPRITE_HUD_GO, - ASSET_SPRITE_HUD_LAP, - ASSET_SPRITE_HUD_FORWARDSLASH, - ASSET_SPRITE_HUD_TIME, - ASSET_SPRITE_HUD_PLACENUMBERS, - ASSET_SPRITE_HUD_TIMERNUMBERS, - ASSET_SPRITE_HUD_TIMERCOLORSMALL, - ASSET_SPRITE_HUD_TIMERNUMBERSSMALL, - ASSET_SPRITE_HUD_GOSMALL, - ASSET_SPRITE_HUD_LAPSMALL, - ASSET_SPRITE_HUD_GETREADY2, - ASSET_SPRITE_HUD_FINALSMALL, - ASSET_SPRITE_HUD_FINISHSMALL, - ASSET_SPRITE_HUD_LAP2SMALL, - ASSET_SPRITE_HUD_WAYSMALL, - ASSET_SPRITE_HUD_WRONGSMALL, - ASSET_SPRITE_OBJECTS_POSITIONARROW, - ASSET_SPRITE_HUD_GOLDENBALLOONICON, - ASSET_SPRITE_HUD_SILVERBALLOONICON, - ASSET_SPRITE_OBJECTS_LEVELNAME, - ASSET_SPRITE_MINIMAP_NPC, - ASSET_SPRITE_MINIMAP_PLAYER, - ASSET_SPRITE_HUD_WEAPONICONS, - ASSET_SPRITE_HUD_WEAPONICONNUMBERS, - ASSET_SPRITE_UNUSED_BETACHARACTERICON, - ASSET_SPRITE_HUD_FINALLAPFLAG, - ASSET_SPRITE_HUD_FINAL, - ASSET_SPRITE_HUD_LAPLARGE, - ASSET_SPRITE_HUD_LAP22, - ASSET_SPRITE_HUD_WAY, - ASSET_SPRITE_HUD_WRONG, - ASSET_SPRITE_UNUSED_PROAMLOGO, - ASSET_SPRITE_HUD_SPEEDOMETERARROW, - ASSET_SPRITE_HUD_FIRSTPLACEONE, - ASSET_SPRITE_HUD_FIRSTPLACEST, - ASSET_SPRITE_OBJECTS_BALLOONSTRING, - ASSET_SPRITE_UNKNOWN_FIREBALLUNKNOWN, - ASSET_SPRITE_OBJECTS_FIREBALL, - ASSET_SPRITE_OBJECTS_WIZGHOST, - ASSET_SPRITE_UNKNOWN_UNKNOWNLIGHT, - ASSET_SPRITE_UNKNOWN_SMALLSTAR, - ASSET_SPRITE_OBJECTS_BUOY, - ASSET_SPRITE_OBJECTS_SMARTIETREE, - ASSET_SPRITE_OBJECTS_BEACHTREE, - ASSET_SPRITE_OBJECTS_BLUEBERRYBUSH, - ASSET_SPRITE_OBJECTS_RUBBERSNOWTREE, - ASSET_SPRITE_OBJECTS_SKINNYSNOWTREE, - ASSET_SPRITE_OBJECTS_XMASTREE, - ASSET_SPRITE_OBJECTS_ALPINESNOWTREE, - ASSET_SPRITE_OBJECTS_RUBBERTREE, - ASSET_SPRITE_OBJECTS_PALMTREETOP, - ASSET_SPRITE_OBJECTS_PALMPLANT, - ASSET_SPRITE_OBJECTS_PALMTREETOPCHEA, - ASSET_SPRITE_OBJECTS_FIRTREE, - ASSET_SPRITE_OBJECTS_SPACETREE, - ASSET_SPRITE_OBJECTS_LAMPPOST, - ASSET_SPRITE_FLOWERS_WHITEBUTTERCUP, - ASSET_SPRITE_FLOWERS_YELLOWBELLFLOWER, - ASSET_SPRITE_FLOWERS_YELLOWBUTTERCUP, - ASSET_SPRITE_FLOWERS_BLUEBUTTERCUP, - ASSET_SPRITE_FLOWERS_WATERLILY, - ASSET_SPRITE_OBJECTS_REEDNOLEAF, - ASSET_SPRITE_OBJECTS_REEDLEAVES, - ASSET_SPRITE_OBJECTS_READONELEAF, - ASSET_SPRITE_OBJECTS_SNOWMANTOPHAT, - ASSET_SPRITE_OBJECTS_BELL, - ASSET_SPRITE_OBJECTS_SNOWMAN, - ASSET_SPRITE_UNUSED_TORCHWITHEYES, - ASSET_SPRITE_OBJECTS_DEBUGORBRED, - ASSET_SPRITE_OBJECTS_DEBUGORBYELLOW, - ASSET_SPRITE_UNUSED_BETAANCIENTLAKESIGN, - ASSET_SPRITE_OBJECTS_DEBUGFOGCHANGER, - ASSET_SPRITE_OBJECTS_DEBUGANIMCAR, - ASSET_SPRITE_OBJECTS_DEBUGSKYCONTROL, - ASSET_SPRITE_OBJECTS_DEBUGCAMERACONTROL, - ASSET_SPRITE_UNUSED_DEBUGUNKNOWNEXIT, - ASSET_SPRITE_UNUSED_DEBUGUNKNOWNTRAFFICLIGHT, - ASSET_SPRITE_OBJECTS_DEBUGANIMATOR, - ASSET_SPRITE_OBJECTS_DEBUGAUDIO, - ASSET_SPRITE_OBJECTS_DEBUGAUDIOLINE, - ASSET_SPRITE_OBJECTS_DEBUGAUDIOSEQLINE, - ASSET_SPRITE_OBJECTS_DEBUGAUDIOSEQ, - ASSET_SPRITE_OBJECTS_DEBUGAUDIOREVERB, - ASSET_SPRITE_OBJECTS_BALLOONBOOST, - ASSET_SPRITE_OBJECTS_BALLOONMISSLE, - ASSET_SPRITE_OBJECTS_BALLOONTRAP, - ASSET_SPRITE_OBJECTS_BALLOONSHIELD, - ASSET_SPRITE_OBJECTS_BALLOONMAGNET, - ASSET_SPRITE_UNUSED_BALLOONMISSLEGIFT, - ASSET_SPRITE_UNUSED_BALLOONBOOSTGIFT, - ASSET_SPRITE_OBJECTS_BALLOONGOLD, - ASSET_SPRITE_OBJECTS_BALLOONSILVER, - ASSET_SPRITE_OBJECTS_BANANA, - ASSET_SPRITE_OBJECTS_SILVERCOIN, - ASSET_SPRITE_OBJECTS_CHECKPOINTFLAG, - ASSET_SPRITE_UNUSED_RAREWARECOIN, - ASSET_SPRITE_UNUSED_SILVERCOINVERTICAL, - ASSET_SPRITE_HUD_BANANAICON, - ASSET_SPRITE_PARTICLES_SPARKLE, - ASSET_SPRITE_OBJECTS_DEBUGEGGCREATOR, - ASSET_SPRITE_UNUSED_BONUSGEM, - ASSET_SPRITE_HUD_INDICATORICONCAUTION, - ASSET_SPRITE_HUD_INDICATORICONDOWN, - ASSET_SPRITE_HUD_INDICATORICONUTURN, - ASSET_SPRITE_HUD_INDICATORICONTURN, - ASSET_SPRITE_HUD_INDICATORICONSLIGHTTURN, - ASSET_SPRITE_OBJECTS_SMOKEOBJECT, - ASSET_SPRITE_OBJECTS_SMOKECLOUD, - ASSET_SPRITE_OBJECTS_SMOKEGRASS, - ASSET_SPRITE_OBJECTS_MIST, - ASSET_SPRITE_OBJECTS_FLAMINGTORCH, - ASSET_SPRITE_UNUSED_SPLASH, - ASSET_SPRITE_UNUSED_WEAPONBALLOONPOP, - ASSET_SPRITE_OBJECTS_LAVASPURT, - ASSET_SPRITE_UNKNOWN_UNKNOWNSMALLPOP, - ASSET_SPRITE_VEHICLE_PARTS_TYRE0, - ASSET_SPRITE_VEHICLE_PARTS_TYRE1, - ASSET_SPRITE_VEHICLE_PARTS_TYRE2, - ASSET_SPRITE_VEHICLE_PARTS_TYRE3, - ASSET_SPRITE_VEHICLE_PARTS_FAN0, - ASSET_SPRITE_VEHICLE_PARTS_FAN1, - ASSET_SPRITE_VEHICLE_PARTS_PROPELLER0, - ASSET_SPRITE_VEHICLE_PARTS_PROPELLER1, - ASSET_SPRITE_UNUSED_RARELETTERS, - ASSET_SPRITE_OBJECTS_BOLTGLOW, - ASSET_SPRITE_MENU_ICONTROPHY, - ASSET_SPRITE_MENU_ICONKEY, - ASSET_SPRITE_MENU_ICONWIZPIGAMULET, - ASSET_SPRITE_MENU_ICONTTAMULET, - - ASSET_SPRITES_COUNT -} AssetSpritesEnum; - -/********** ASSET_MISC **********/ - -typedef enum AssetMiscEnum { - ASSET_MISC_0, - ASSET_MISC_1, - ASSET_MISC_2, - ASSET_MISC_3, - ASSET_MISC_4, - ASSET_MISC_5, - ASSET_MISC_6, - ASSET_MISC_7, - ASSET_MISC_8, - ASSET_MISC_RACER_WEIGHT, - ASSET_MISC_RACER_HANDLING, - ASSET_MISC_RACER_UNUSED_11, - ASSET_MISC_BALLOON_DATA, - ASSET_MISC_13, - ASSET_MISC_14, - ASSET_MISC_15, - ASSET_MISC_16, - ASSET_MISC_17, - ASSET_MISC_18, - ASSET_MISC_RUMBLE_DATA, - ASSET_MISC_20, - ASSET_MISC_SHIELD_DATA, - ASSET_MISC_MAGNET_DATA, - ASSET_MISC_23, - ASSET_MISC_GHOST_UNLOCK_TIMES, - ASSET_MISC_CINEMATIC_RACE, - ASSET_MISC_TRACKS_MENU_IDS, - ASSET_MISC_HUB_AREA_IDS, - ASSET_MISC_MAIN_TRACKS_IDS, - ASSET_MISC_BATTLE_TRACKS_IDS, - ASSET_MISC_BOSS_TRACKS_IDS, - ASSET_MISC_CINEMATIC_TROPHY, - ASSET_MISC_32, - ASSET_MISC_RACERACCELERATION_UNKNOWN0, - ASSET_MISC_RACERACCELERATION_DIDDY, - ASSET_MISC_RACERACCELERATION_TT, - ASSET_MISC_RACERACCELERATION_UNKNOWN1, - ASSET_MISC_RACERACCELERATION_KRUNCH, - ASSET_MISC_RACERACCELERATION_BUMPER, - ASSET_MISC_RACERACCELERATION_TIPTUP, - ASSET_MISC_RACERACCELERATION_CONKER, - ASSET_MISC_RACERACCELERATION_TIMBER, - ASSET_MISC_RACERACCELERATION_BANJO, - ASSET_MISC_RACERACCELERATION_DRUMSTICK, - ASSET_MISC_RACERACCELERATION_PIPSY, - ASSET_MISC_RACERACCELERATION_UNKNOWN2, - ASSET_MISC_46, - ASSET_MISC_47, - ASSET_MISC_48, - ASSET_MISC_49, - ASSET_MISC_50, - ASSET_MISC_51, - ASSET_MISC_52, - ASSET_MISC_53, - ASSET_MISC_54, - ASSET_MISC_55, - ASSET_MISC_RACER_HITBOX_SIZE, - ASSET_MISC_57, - ASSET_MISC_58, - ASSET_MISC_59, - ASSET_MISC_60, - ASSET_MISC_61, - ASSET_MISC_62, - ASSET_MISC_63, - ASSET_MISC_64, - ASSET_MISC_MAGIC_CODES, - ASSET_MISC_TITLE_SCREEN_DEMO_IDS, - ASSET_MISC_67, - ASSET_MISC_68, - ASSET_MISC_69, - - ASSET_MISC_COUNT -} AssetMiscEnum; - -/********** ASSET_LEVEL_OBJECT_MAPS **********/ - -typedef enum AssetLevelObjectMapsEnum { - ASSET_LEVEL_OBJECT_MAPS_0, - ASSET_LEVEL_OBJECT_MAPS_1, - ASSET_LEVEL_OBJECT_MAPS_2, - ASSET_LEVEL_OBJECT_MAPS_3, - ASSET_LEVEL_OBJECT_MAPS_4, - ASSET_LEVEL_OBJECT_MAPS_5, - ASSET_LEVEL_OBJECT_MAPS_6, - ASSET_LEVEL_OBJECT_MAPS_7, - ASSET_LEVEL_OBJECT_MAPS_8, - ASSET_LEVEL_OBJECT_MAPS_9, - ASSET_LEVEL_OBJECT_MAPS_10, - ASSET_LEVEL_OBJECT_MAPS_11, - ASSET_LEVEL_OBJECT_MAPS_12, - ASSET_LEVEL_OBJECT_MAPS_13, - ASSET_LEVEL_OBJECT_MAPS_14, - ASSET_LEVEL_OBJECT_MAPS_15, - ASSET_LEVEL_OBJECT_MAPS_16, - ASSET_LEVEL_OBJECT_MAPS_17, - ASSET_LEVEL_OBJECT_MAPS_18, - ASSET_LEVEL_OBJECT_MAPS_19, - ASSET_LEVEL_OBJECT_MAPS_20, - ASSET_LEVEL_OBJECT_MAPS_21, - ASSET_LEVEL_OBJECT_MAPS_22, - ASSET_LEVEL_OBJECT_MAPS_23, - ASSET_LEVEL_OBJECT_MAPS_24, - ASSET_LEVEL_OBJECT_MAPS_25, - ASSET_LEVEL_OBJECT_MAPS_26, - ASSET_LEVEL_OBJECT_MAPS_27, - ASSET_LEVEL_OBJECT_MAPS_28, - ASSET_LEVEL_OBJECT_MAPS_29, - ASSET_LEVEL_OBJECT_MAPS_30, - ASSET_LEVEL_OBJECT_MAPS_31, - ASSET_LEVEL_OBJECT_MAPS_32, - ASSET_LEVEL_OBJECT_MAPS_33, - ASSET_LEVEL_OBJECT_MAPS_34, - ASSET_LEVEL_OBJECT_MAPS_35, - ASSET_LEVEL_OBJECT_MAPS_36, - ASSET_LEVEL_OBJECT_MAPS_37, - ASSET_LEVEL_OBJECT_MAPS_38, - ASSET_LEVEL_OBJECT_MAPS_39, - ASSET_LEVEL_OBJECT_MAPS_40, - ASSET_LEVEL_OBJECT_MAPS_41, - ASSET_LEVEL_OBJECT_MAPS_42, - ASSET_LEVEL_OBJECT_MAPS_43, - ASSET_LEVEL_OBJECT_MAPS_44, - ASSET_LEVEL_OBJECT_MAPS_45, - ASSET_LEVEL_OBJECT_MAPS_46, - ASSET_LEVEL_OBJECT_MAPS_47, - ASSET_LEVEL_OBJECT_MAPS_48, - ASSET_LEVEL_OBJECT_MAPS_49, - ASSET_LEVEL_OBJECT_MAPS_50, - ASSET_LEVEL_OBJECT_MAPS_51, - ASSET_LEVEL_OBJECT_MAPS_52, - ASSET_LEVEL_OBJECT_MAPS_53, - ASSET_LEVEL_OBJECT_MAPS_54, - ASSET_LEVEL_OBJECT_MAPS_55, - ASSET_LEVEL_OBJECT_MAPS_56, - ASSET_LEVEL_OBJECT_MAPS_57, - ASSET_LEVEL_OBJECT_MAPS_58, - ASSET_LEVEL_OBJECT_MAPS_59, - ASSET_LEVEL_OBJECT_MAPS_60, - ASSET_LEVEL_OBJECT_MAPS_61, - ASSET_LEVEL_OBJECT_MAPS_62, - ASSET_LEVEL_OBJECT_MAPS_63, - ASSET_LEVEL_OBJECT_MAPS_64, - ASSET_LEVEL_OBJECT_MAPS_65, - ASSET_LEVEL_OBJECT_MAPS_66, - ASSET_LEVEL_OBJECT_MAPS_67, - ASSET_LEVEL_OBJECT_MAPS_68, - ASSET_LEVEL_OBJECT_MAPS_69, - ASSET_LEVEL_OBJECT_MAPS_70, - ASSET_LEVEL_OBJECT_MAPS_71, - ASSET_LEVEL_OBJECT_MAPS_72, - ASSET_LEVEL_OBJECT_MAPS_73, - ASSET_LEVEL_OBJECT_MAPS_74, - ASSET_LEVEL_OBJECT_MAPS_75, - ASSET_LEVEL_OBJECT_MAPS_76, - ASSET_LEVEL_OBJECT_MAPS_77, - ASSET_LEVEL_OBJECT_MAPS_78, - ASSET_LEVEL_OBJECT_MAPS_79, - ASSET_LEVEL_OBJECT_MAPS_80, - ASSET_LEVEL_OBJECT_MAPS_81, - ASSET_LEVEL_OBJECT_MAPS_82, - ASSET_LEVEL_OBJECT_MAPS_83, - ASSET_LEVEL_OBJECT_MAPS_84, - ASSET_LEVEL_OBJECT_MAPS_85, - ASSET_LEVEL_OBJECT_MAPS_86, - ASSET_LEVEL_OBJECT_MAPS_87, - ASSET_LEVEL_OBJECT_MAPS_88, - ASSET_LEVEL_OBJECT_MAPS_89, - ASSET_LEVEL_OBJECT_MAPS_90, - ASSET_LEVEL_OBJECT_MAPS_91, - ASSET_LEVEL_OBJECT_MAPS_92, - ASSET_LEVEL_OBJECT_MAPS_93, - ASSET_LEVEL_OBJECT_MAPS_94, - ASSET_LEVEL_OBJECT_MAPS_95, - ASSET_LEVEL_OBJECT_MAPS_96, - ASSET_LEVEL_OBJECT_MAPS_97, - ASSET_LEVEL_OBJECT_MAPS_98, - ASSET_LEVEL_OBJECT_MAPS_99, - ASSET_LEVEL_OBJECT_MAPS_100, - ASSET_LEVEL_OBJECT_MAPS_101, - ASSET_LEVEL_OBJECT_MAPS_102, - ASSET_LEVEL_OBJECT_MAPS_103, - ASSET_LEVEL_OBJECT_MAPS_104, - ASSET_LEVEL_OBJECT_MAPS_105, - ASSET_LEVEL_OBJECT_MAPS_106, - ASSET_LEVEL_OBJECT_MAPS_107, - ASSET_LEVEL_OBJECT_MAPS_108, - ASSET_LEVEL_OBJECT_MAPS_109, - ASSET_LEVEL_OBJECT_MAPS_110, - ASSET_LEVEL_OBJECT_MAPS_111, - ASSET_LEVEL_OBJECT_MAPS_112, - ASSET_LEVEL_OBJECT_MAPS_113, - ASSET_LEVEL_OBJECT_MAPS_114, - ASSET_LEVEL_OBJECT_MAPS_115, - ASSET_LEVEL_OBJECT_MAPS_116, - ASSET_LEVEL_OBJECT_MAPS_117, - ASSET_LEVEL_OBJECT_MAPS_118, - ASSET_LEVEL_OBJECT_MAPS_119, - ASSET_LEVEL_OBJECT_MAPS_120, - ASSET_LEVEL_OBJECT_MAPS_121, - ASSET_LEVEL_OBJECT_MAPS_122, - ASSET_LEVEL_OBJECT_MAPS_123, - ASSET_LEVEL_OBJECT_MAPS_124, - ASSET_LEVEL_OBJECT_MAPS_125, - ASSET_LEVEL_OBJECT_MAPS_126, - ASSET_LEVEL_OBJECT_MAPS_127, - ASSET_LEVEL_OBJECT_MAPS_128, - ASSET_LEVEL_OBJECT_MAPS_129, - ASSET_LEVEL_OBJECT_MAPS_130, - ASSET_LEVEL_OBJECT_MAPS_131, - ASSET_LEVEL_OBJECT_MAPS_132, - ASSET_LEVEL_OBJECT_MAPS_133, - ASSET_LEVEL_OBJECT_MAPS_134, - ASSET_LEVEL_OBJECT_MAPS_135, - ASSET_LEVEL_OBJECT_MAPS_136, - ASSET_LEVEL_OBJECT_MAPS_137, - - ASSET_LEVEL_OBJECT_MAPS_COUNT -} AssetLevelObjectMapsEnum; - -/********** ASSET_LEVEL_HEADERS **********/ - -typedef enum AssetLevelHeadersEnum { - ASSET_LEVEL_CENTRALAREAHUB, - ASSET_LEVEL_BLUEY1, - ASSET_LEVEL_DRAGONFORESTHUB, - ASSET_LEVEL_FOSSILCANYON, - ASSET_LEVEL_PIRATELAGOON, - ASSET_LEVEL_ANCIENTLAKE, - ASSET_LEVEL_WALRUSCOVE, - ASSET_LEVEL_HOTTOPVOLCANO, - ASSET_LEVEL_WHALEBAY, - ASSET_LEVEL_SNOWBALLVALLEY, - ASSET_LEVEL_CRESCENTISLAND, - ASSET_LEVEL_FIREMOUNTAIN, - ASSET_LEVEL_DINODOMAINHUB, - ASSET_LEVEL_EVERFROSTPEAK, - ASSET_LEVEL_SHERBETISLANDHUB, - ASSET_LEVEL_SPACEPORTALPHA, - ASSET_LEVEL_HORSESHOEGULCH, - ASSET_LEVEL_SPACEDUSTALLEY, - ASSET_LEVEL_GREENWOODVILLAGE, - ASSET_LEVEL_BOULDERCANYON, - ASSET_LEVEL_WINDMILLPLAINS, - ASSET_LEVEL_FRONTEND, - ASSET_LEVEL_CHARACTERSELECT, - ASSET_LEVEL_TITLESCREENSEQUENCE, - ASSET_LEVEL_SNOWFLAKEMOUNTAINHUB, - ASSET_LEVEL_SMOKEYCASTLE, - ASSET_LEVEL_DARKWATERBEACH, - ASSET_LEVEL_ICICLEPYRAMID, - ASSET_LEVEL_FROSTYVILLAGE, - ASSET_LEVEL_JUNGLEFALLS, - ASSET_LEVEL_TREASURECAVES, - ASSET_LEVEL_HAUNTEDWOODS, - ASSET_LEVEL_DARKMOONCAVERNS, - ASSET_LEVEL_STARCITY, - ASSET_LEVEL_TROPHYRACE, - ASSET_LEVEL_FUTUREFUNLANDHUB, - ASSET_LEVEL_OPENINGSEQUENCE, - ASSET_LEVEL_WIZPIG1, - ASSET_LEVEL_TRICKYTOPS1, - ASSET_LEVEL_OPTIONSBACKGROUND, - ASSET_LEVEL_BUBBLER1, - ASSET_LEVEL_SMOKEY1, - ASSET_LEVEL_WIZPIGMOUTHSEQUENCE, - ASSET_LEVEL_WIZPIGAMULETSEQUENCE, - ASSET_LEVEL_TTAMULETSEQUENCE, - ASSET_LEVEL_ROCKETSEQUENCE, - ASSET_LEVEL_TRICKYTOPS2, - ASSET_LEVEL_DINODOMAINTROPHYANIM, - ASSET_LEVEL_SNOWFLAKEMOUNTAINTROPHYANIM, - ASSET_LEVEL_SHERBETISLANDTROPHYANIM, - ASSET_LEVEL_DRAGONFORESTTROPHYANIM, - ASSET_LEVEL_FUTUREFUNLANDTROPHYANIM, - ASSET_LEVEL_BLUEY2, - ASSET_LEVEL_BUBBLER2, - ASSET_LEVEL_SMOKEY2, - ASSET_LEVEL_WIZPIG2, - ASSET_LEVEL_PARTYSEQUENCE, - ASSET_LEVEL_TRICKTOPSANIM, - ASSET_LEVEL_SMOKEYANIM, - ASSET_LEVEL_BLUEYANIM, - ASSET_LEVEL_WIZPIG1ANIM, - ASSET_LEVEL_BUBBLERANIM, - ASSET_LEVEL_WIZPIG2ANIM, - ASSET_LEVEL_LASTBIT, - ASSET_LEVEL_LASTBITB, - - ASSET_LEVEL_HEADERS_COUNT -} AssetLevelHeadersEnum; - -/********** ASSET_LEVEL_NAMES **********/ - -typedef enum AssetLevelNamesEnum { - ASSET_LEVEL_CENTRALAREAHUB_NAME, - ASSET_LEVEL_BLUEY1_NAME, - ASSET_LEVEL_DRAGONFORESTHUB_NAME, - ASSET_LEVEL_FOSSILCANYON_NAME, - ASSET_LEVEL_PIRATELAGOON_NAME, - ASSET_LEVEL_ANCIENTLAKE_NAME, - ASSET_LEVEL_WALRUSCOVE_NAME, - ASSET_LEVEL_HOTTOPVOLCANO_NAME, - ASSET_LEVEL_WHALEBAY_NAME, - ASSET_LEVEL_SNOWBALLVALLEY_NAME, - ASSET_LEVEL_CRESCENTISLAND_NAME, - ASSET_LEVEL_FIREMOUNTAIN_NAME, - ASSET_LEVEL_DINODOMAINHUB_NAME, - ASSET_LEVEL_EVERFROSTPEAK_NAME, - ASSET_LEVEL_SHERBETISLANDHUB_NAME, - ASSET_LEVEL_SPACEPORTALPHA_NAME, - ASSET_LEVEL_HORSESHOEGULCH_NAME, - ASSET_LEVEL_SPACEDUSTALLEY_NAME, - ASSET_LEVEL_GREENWOODVILLAGE_NAME, - ASSET_LEVEL_BOULDERCANYON_NAME, - ASSET_LEVEL_WINDMILLPLAINS_NAME, - ASSET_LEVEL_FRONTEND_NAME, - ASSET_LEVEL_CHARACTERSELECT_NAME, - ASSET_LEVEL_TITLESCREENSEQUENCE_NAME, - ASSET_LEVEL_SNOWFLAKEMOUNTAINHUB_NAME, - ASSET_LEVEL_SMOKEYCASTLE_NAME, - ASSET_LEVEL_DARKWATERBEACH_NAME, - ASSET_LEVEL_ICICLEPYRAMID_NAME, - ASSET_LEVEL_FROSTYVILLAGE_NAME, - ASSET_LEVEL_JUNGLEFALLS_NAME, - ASSET_LEVEL_TREASURECAVES_NAME, - ASSET_LEVEL_HAUNTEDWOODS_NAME, - ASSET_LEVEL_DARKMOONCAVERNS_NAME, - ASSET_LEVEL_STARCITY_NAME, - ASSET_LEVEL_TROPHYRACE_NAME, - ASSET_LEVEL_FUTUREFUNLANDHUB_NAME, - ASSET_LEVEL_OPENINGSEQUENCE_NAME, - ASSET_LEVEL_WIZPIG1_NAME, - ASSET_LEVEL_TRICKYTOPS1_NAME, - ASSET_LEVEL_OPTIONSBACKGROUND_NAME, - ASSET_LEVEL_BUBBLER1_NAME, - ASSET_LEVEL_SMOKEY1_NAME, - ASSET_LEVEL_WIZPIGMOUTHSEQUENCE_NAME, - ASSET_LEVEL_WIZPIGAMULETSEQUENCE_NAME, - ASSET_LEVEL_TTAMULETSEQUENCE_NAME, - ASSET_LEVEL_ROCKETSEQUENCE_NAME, - ASSET_LEVEL_TRICKYTOPS2_NAME, - ASSET_LEVEL_DINODOMAINTROPHYANIM_NAME, - ASSET_LEVEL_SNOWFLAKEMOUNTAINTROPHYANIM_NAME, - ASSET_LEVEL_SHERBETISLANDTROPHYANIM_NAME, - ASSET_LEVEL_DRAGONFORESTTROPHYANIM_NAME, - ASSET_LEVEL_FUTUREFUNLANDTROPHYANIM_NAME, - ASSET_LEVEL_BLUEY2_NAME, - ASSET_LEVEL_BUBBLER2_NAME, - ASSET_LEVEL_SMOKEY2_NAME, - ASSET_LEVEL_WIZPIG2_NAME, - ASSET_LEVEL_PARTYSEQUENCE_NAME, - ASSET_LEVEL_TRICKTOPSANIM_NAME, - ASSET_LEVEL_SMOKEYANIM_NAME, - ASSET_LEVEL_BLUEYANIM_NAME, - ASSET_LEVEL_WIZPIG1ANIM_NAME, - ASSET_LEVEL_BUBBLERANIM_NAME, - ASSET_LEVEL_WIZPIG2ANIM_NAME, - ASSET_LEVEL_LASTBIT_NAME, - ASSET_LEVEL_LASTBITB_NAME, - - ASSET_LEVEL_NAMES_COUNT -} AssetLevelNamesEnum; - -/********** ASSET_LEVEL_MODELS **********/ - -typedef enum AssetLevelModelsEnum { - ASSET_LEVELMODEL_CENTRALAREAHUB, - ASSET_LEVELMODEL_BLUEY, - ASSET_LEVELMODEL_DRAGONFORESTHUB, - ASSET_LEVELMODEL_FOSSILCANYON, - ASSET_LEVELMODEL_PIRATELAGOON, - ASSET_LEVELMODEL_ANCIENTLAKE, - ASSET_LEVELMODEL_WALRUSCOVE, - ASSET_LEVELMODEL_HOTTOPVOLCANO, - ASSET_LEVELMODEL_WHALEBAY, - ASSET_LEVELMODEL_SNOWBALLVALLEY, - ASSET_LEVELMODEL_TEMPLETRACK, - ASSET_LEVELMODEL_CRESCENTISLAND, - ASSET_LEVELMODEL_FIREMOUNTAIN, - ASSET_LEVELMODEL_DINODOMAINHUB, - ASSET_LEVELMODEL_EVERFROSTPEAK, - ASSET_LEVELMODEL_SHERBETISLANDHUB, - ASSET_LEVELMODEL_FRONTEND, - ASSET_LEVELMODEL_CHARACTERSELECT, - ASSET_LEVELMODEL_SPACEPORTALPHA, - ASSET_LEVELMODEL_HORSESHOEGULCH, - ASSET_LEVELMODEL_GREENWOODVILLAGE, - ASSET_LEVELMODEL_SPACEDUSTALLEY, - ASSET_LEVELMODEL_TITLESCREEN, - ASSET_LEVELMODEL_BOULDERCANYON, - ASSET_LEVELMODEL_WINDMILLPLAINS, - ASSET_LEVELMODEL_SNOWFLAKEMOUNTAINHUB, - ASSET_LEVELMODEL_SMOKEYCASTLE, - ASSET_LEVELMODEL_DARKWATERBEACH, - ASSET_LEVELMODEL_ICICLEPYRAMID, - ASSET_LEVELMODEL_FROSTYVILLAGE, - ASSET_LEVELMODEL_JUNGLEFALLS, - ASSET_LEVELMODEL_TREASURECAVES, - ASSET_LEVELMODEL_HAUNTEDWOODS, - ASSET_LEVELMODEL_DARKMOONCAVERNS, - ASSET_LEVELMODEL_STARCITY, - ASSET_LEVELMODEL_TROPHYRACE, - ASSET_LEVELMODEL_FUTUREFUNLANDHUB, - ASSET_LEVELMODEL_INTROSEQUENCE, - ASSET_LEVELMODEL_SMOKEY, - ASSET_LEVELMODEL_TRICKYTOPS, - ASSET_LEVELMODEL_WIZPIGMOUTHSEQUENCE, - ASSET_LEVELMODEL_ROCKETSEQUENCE, - ASSET_LEVELMODEL_WIZPIG1, - ASSET_LEVELMODEL_OCEANTRACK, - ASSET_LEVELMODEL_VOLCANOTRACK, - ASSET_LEVELMODEL_SNOWMOUNTAINTRACK, - ASSET_LEVELMODEL_PARTYSEQUENCE, - ASSET_LEVELMODEL_BLUEYANIMATION, - ASSET_LEVELMODEL_WIZPIG1ANIMATION, - ASSET_LEVELMODEL_BUBBLER, - ASSET_LEVELMODEL_BUBBLERANIMATION, - ASSET_LEVELMODEL_WIZPIG2ANIMATION, - ASSET_LEVELMODEL_WIZPIG2, - ASSET_LEVELMODEL_ENDINGPART1, - ASSET_LEVELMODEL_ENDINGPART2, - - ASSET_LEVEL_MODELS_COUNT -} AssetLevelModelsEnum; - -/********** ASSET_OBJECT_MODELS **********/ - -typedef enum AssetObjectModelsEnum { - ASSET_OBJECTMODEL_DOME, - ASSET_OBJECTMODEL_DOME1, - ASSET_OBJECTMODEL_DOME2, - ASSET_OBJECTMODEL_DOME3, - ASSET_OBJECTMODEL_DOME4, - ASSET_OBJECTMODEL_DOME5, - ASSET_OBJECTMODEL_DOME6, - ASSET_OBJECTMODEL_DOME7, - ASSET_OBJECTMODEL_DOME8, - ASSET_OBJECTMODEL_DOME9, - ASSET_OBJECTMODEL_DOME10, - ASSET_OBJECTMODEL_DOME11, - ASSET_OBJECTMODEL_DOME12, - ASSET_OBJECTMODEL_DOME13, - ASSET_OBJECTMODEL_DOME14, - ASSET_OBJECTMODEL_DOME15, - ASSET_OBJECTMODEL_DOME16, - ASSET_OBJECTMODEL_DOME17, - ASSET_OBJECTMODEL_FIRSTPLACE, - ASSET_OBJECTMODEL_DIDDYCAR_0, - ASSET_OBJECTMODEL_DIDDYCAR_1, - ASSET_OBJECTMODEL_DIDDYCAR_2, - ASSET_OBJECTMODEL_DIDDYCAR_3, - ASSET_OBJECTMODEL_DIDDYCAR_4, - ASSET_OBJECTMODEL_DIDDYCAR_5, - ASSET_OBJECTMODEL_SWCAR_0, - ASSET_OBJECTMODEL_SWCAR_1, - ASSET_OBJECTMODEL_SWCAR_2, - ASSET_OBJECTMODEL_SWCAR_3, - ASSET_OBJECTMODEL_SWCAR_4, - ASSET_OBJECTMODEL_SWCAR_5, - ASSET_OBJECTMODEL_BADGERCAR_0, - ASSET_OBJECTMODEL_BADGERCAR_1, - ASSET_OBJECTMODEL_BADGERCAR_2, - ASSET_OBJECTMODEL_BADGERCAR_3, - ASSET_OBJECTMODEL_BADGERCAR_4, - ASSET_OBJECTMODEL_BADGERCAR_5, - ASSET_OBJECTMODEL_TORTCAR_0, - ASSET_OBJECTMODEL_TORTCAR_1, - ASSET_OBJECTMODEL_TORTCAR_2, - ASSET_OBJECTMODEL_TORTCAR_3, - ASSET_OBJECTMODEL_TORTCAR_4, - ASSET_OBJECTMODEL_TORTCAR_5, - ASSET_OBJECTMODEL_KREMCAR_0, - ASSET_OBJECTMODEL_KREMCAR_1, - ASSET_OBJECTMODEL_KREMCAR_2, - ASSET_OBJECTMODEL_KREMCAR_3, - ASSET_OBJECTMODEL_KREMCAR_4, - ASSET_OBJECTMODEL_KREMCAR_5, - ASSET_OBJECTMODEL_TIGERCAR_0, - ASSET_OBJECTMODEL_TIGERCAR_1, - ASSET_OBJECTMODEL_TIGERCAR_2, - ASSET_OBJECTMODEL_TIGERCAR_3, - ASSET_OBJECTMODEL_TIGERCAR_4, - ASSET_OBJECTMODEL_TIGERCAR_5, - ASSET_OBJECTMODEL_CONKACAR_0, - ASSET_OBJECTMODEL_CONKACAR_1, - ASSET_OBJECTMODEL_CONKACAR_2, - ASSET_OBJECTMODEL_CONKACAR_3, - ASSET_OBJECTMODEL_CONKACAR_4, - ASSET_OBJECTMODEL_CONKACAR_5, - ASSET_OBJECTMODEL_BANJOCAR_0, - ASSET_OBJECTMODEL_BANJOCAR_1, - ASSET_OBJECTMODEL_BANJOCAR_2, - ASSET_OBJECTMODEL_BANJOCAR_3, - ASSET_OBJECTMODEL_BANJOCAR_4, - ASSET_OBJECTMODEL_BANJOCAR_5, - ASSET_OBJECTMODEL_CHICKENCAR_0, - ASSET_OBJECTMODEL_CHICKENCAR_1, - ASSET_OBJECTMODEL_CHICKENCAR_2, - ASSET_OBJECTMODEL_CHICKENCAR_3, - ASSET_OBJECTMODEL_CHICKENCAR_4, - ASSET_OBJECTMODEL_CHICKENCAR_5, - ASSET_OBJECTMODEL_MOUSECAR_0, - ASSET_OBJECTMODEL_MOUSECAR_1, - ASSET_OBJECTMODEL_MOUSECAR_2, - ASSET_OBJECTMODEL_MOUSECAR_3, - ASSET_OBJECTMODEL_MOUSECAR_4, - ASSET_OBJECTMODEL_MOUSECAR_5, - ASSET_OBJECTMODEL_TICKTOCKHOVER_0, - ASSET_OBJECTMODEL_TICKTOCKHOVER_1, - ASSET_OBJECTMODEL_TICKTOCKHOVER_2, - ASSET_OBJECTMODEL_TICKTOCKHOVER_3, - ASSET_OBJECTMODEL_TICKTOCKHOVER_4, - ASSET_OBJECTMODEL_TICKTOCKHOVER_5, - ASSET_OBJECTMODEL_KREMLINHOVER_0, - ASSET_OBJECTMODEL_KREMLINHOVER_1, - ASSET_OBJECTMODEL_KREMLINHOVER_2, - ASSET_OBJECTMODEL_KREMLINHOVER_3, - ASSET_OBJECTMODEL_KREMLINHOVER_4, - ASSET_OBJECTMODEL_KREMLINHOVER_5, - ASSET_OBJECTMODEL_BADGERHOVER_0, - ASSET_OBJECTMODEL_BADGERHOVER_1, - ASSET_OBJECTMODEL_BADGERHOVER_2, - ASSET_OBJECTMODEL_BADGERHOVER_3, - ASSET_OBJECTMODEL_BADGERHOVER_4, - ASSET_OBJECTMODEL_BADGERHOVER_5, - ASSET_OBJECTMODEL_CONKAHOVER_0, - ASSET_OBJECTMODEL_CONKAHOVER_1, - ASSET_OBJECTMODEL_CONKAHOVER_2, - ASSET_OBJECTMODEL_CONKAHOVER_3, - ASSET_OBJECTMODEL_CONKAHOVER_4, - ASSET_OBJECTMODEL_CONKAHOVER_5, - ASSET_OBJECTMODEL_TORTHOVER_0, - ASSET_OBJECTMODEL_TORTHOVER_1, - ASSET_OBJECTMODEL_TORTHOVER_2, - ASSET_OBJECTMODEL_TORTHOVER_3, - ASSET_OBJECTMODEL_TORTHOVER_4, - ASSET_OBJECTMODEL_TORTHOVER_5, - ASSET_OBJECTMODEL_BANJOHOVER_0, - ASSET_OBJECTMODEL_BANJOHOVER_1, - ASSET_OBJECTMODEL_BANJOHOVER_2, - ASSET_OBJECTMODEL_BANJOHOVER_3, - ASSET_OBJECTMODEL_BANJOHOVER_4, - ASSET_OBJECTMODEL_BANJOHOVER_5, - ASSET_OBJECTMODEL_TIGERHOVER_0, - ASSET_OBJECTMODEL_TIGERHOVER_1, - ASSET_OBJECTMODEL_TIGERHOVER_2, - ASSET_OBJECTMODEL_TIGERHOVER_3, - ASSET_OBJECTMODEL_TIGERHOVER_4, - ASSET_OBJECTMODEL_TIGERHOVER_5, - ASSET_OBJECTMODEL_CHICKENHOVER_0, - ASSET_OBJECTMODEL_CHICKENHOVER_1, - ASSET_OBJECTMODEL_CHICKENHOVER_2, - ASSET_OBJECTMODEL_CHICKENHOVER_3, - ASSET_OBJECTMODEL_CHICKENHOVER_4, - ASSET_OBJECTMODEL_CHICKENHOVER_5, - ASSET_OBJECTMODEL_MOUSEHOVER_0, - ASSET_OBJECTMODEL_MOUSEHOVER_1, - ASSET_OBJECTMODEL_MOUSEHOVER_2, - ASSET_OBJECTMODEL_MOUSEHOVER_3, - ASSET_OBJECTMODEL_MOUSEHOVER_4, - ASSET_OBJECTMODEL_MOUSEHOVER_5, - ASSET_OBJECTMODEL_DIDDYHOVER_0, - ASSET_OBJECTMODEL_DIDDYHOVER_1, - ASSET_OBJECTMODEL_DIDDYHOVER_2, - ASSET_OBJECTMODEL_DIDDYHOVER_3, - ASSET_OBJECTMODEL_DIDDYHOVER_4, - ASSET_OBJECTMODEL_DIDDYHOVER_5, - ASSET_OBJECTMODEL_DIDDYPLANE_0, - ASSET_OBJECTMODEL_DIDDYPLANE_1, - ASSET_OBJECTMODEL_DIDDYPLANE_2, - ASSET_OBJECTMODEL_DIDDYPLANE_3, - ASSET_OBJECTMODEL_DIDDYPLANE_4, - ASSET_OBJECTMODEL_DIDDYPLANE_5, - ASSET_OBJECTMODEL_TIGERANIMPLANE, - ASSET_OBJECTMODEL_TICKTOCKPLANE_0, - ASSET_OBJECTMODEL_TICKTOCKPLANE_1, - ASSET_OBJECTMODEL_TICKTOCKPLANE_2, - ASSET_OBJECTMODEL_TICKTOCKPLANE_3, - ASSET_OBJECTMODEL_TICKTOCKPLANE_4, - ASSET_OBJECTMODEL_TICKTOCKPLANE_5, - ASSET_OBJECTMODEL_KREMPLANE_0, - ASSET_OBJECTMODEL_KREMPLANE_1, - ASSET_OBJECTMODEL_KREMPLANE_2, - ASSET_OBJECTMODEL_KREMPLANE_3, - ASSET_OBJECTMODEL_KREMPLANE_4, - ASSET_OBJECTMODEL_KREMPLANE_5, - ASSET_OBJECTMODEL_BADGERPLANE_0, - ASSET_OBJECTMODEL_BADGERPLANE_1, - ASSET_OBJECTMODEL_BADGERPLANE_2, - ASSET_OBJECTMODEL_BADGERPLANE_3, - ASSET_OBJECTMODEL_BADGERPLANE_4, - ASSET_OBJECTMODEL_BADGERPLANE_5, - ASSET_OBJECTMODEL_TORTPLANE_0, - ASSET_OBJECTMODEL_TORTPLANE_1, - ASSET_OBJECTMODEL_TORTPLANE_2, - ASSET_OBJECTMODEL_TORTPLANE_3, - ASSET_OBJECTMODEL_TORTPLANE_4, - ASSET_OBJECTMODEL_TORTPLANE_5, - ASSET_OBJECTMODEL_CONKA_0, - ASSET_OBJECTMODEL_CONKA_1, - ASSET_OBJECTMODEL_CONKA_2, - ASSET_OBJECTMODEL_CONKA_3, - ASSET_OBJECTMODEL_CONKA_4, - ASSET_OBJECTMODEL_CONKA_5, - ASSET_OBJECTMODEL_TIGPLANE_0, - ASSET_OBJECTMODEL_TIGPLANE_1, - ASSET_OBJECTMODEL_TIGPLANE_2, - ASSET_OBJECTMODEL_TIGPLANE_3, - ASSET_OBJECTMODEL_TIGPLANE_4, - ASSET_OBJECTMODEL_TIGPLANE_5, - ASSET_OBJECTMODEL_BANJOPLANE_0, - ASSET_OBJECTMODEL_BANJOPLANE_1, - ASSET_OBJECTMODEL_BANJOPLANE_2, - ASSET_OBJECTMODEL_BANJOPLANE_3, - ASSET_OBJECTMODEL_BANJOPLANE_4, - ASSET_OBJECTMODEL_BANJOPLANE_5, - ASSET_OBJECTMODEL_CHICKENPLANE_0, - ASSET_OBJECTMODEL_CHICKENPLANE_1, - ASSET_OBJECTMODEL_CHICKENPLANE_2, - ASSET_OBJECTMODEL_CHICKENPLANE_3, - ASSET_OBJECTMODEL_CHICKENPLANE_4, - ASSET_OBJECTMODEL_CHICKENPLANE_5, - ASSET_OBJECTMODEL_MOUSEPLANE_0, - ASSET_OBJECTMODEL_MOUSEPLANE_1, - ASSET_OBJECTMODEL_MOUSEPLANE_2, - ASSET_OBJECTMODEL_MOUSEPLANE_3, - ASSET_OBJECTMODEL_MOUSEPLANE_4, - ASSET_OBJECTMODEL_MOUSEPLANE_5, - ASSET_OBJECTMODEL_EMPTYPLANE, - ASSET_OBJECTMODEL_EMPTYCAR, - ASSET_OBJECTMODEL_EMPTYHOVER, - ASSET_OBJECTMODEL_MAGICCARPET, - ASSET_OBJECTMODEL_POLYGOLDBALOON_0, - ASSET_OBJECTMODEL_POLYGOLDBALOON_1, - ASSET_OBJECTMODEL_STOPWATCHMAN, - ASSET_OBJECTMODEL_STOPWATCHSELECT, - ASSET_OBJECTMODEL_PARKWARDEN, - ASSET_OBJECTMODEL_ANIMGENIE2, - ASSET_OBJECTMODEL_GENIEHEAD, - ASSET_OBJECTMODEL_PIGBOSS, - ASSET_OBJECTMODEL_PIGBOSS2, - ASSET_OBJECTMODEL_WIZPIG, - ASSET_OBJECTMODEL_PIGROCKETEER, - ASSET_OBJECTMODEL_WIZPIGROCKET, - ASSET_OBJECTMODEL_ROCKETBIT1, - ASSET_OBJECTMODEL_ROCKETBIT2, - ASSET_OBJECTMODEL_PIGBOULDER, - ASSET_OBJECTMODEL_PIGBOULDER2, - ASSET_OBJECTMODEL_PIGBOULDER3, - ASSET_OBJECTMODEL_PIGBOULDER4, - ASSET_OBJECTMODEL_PIGBOULDER5, - ASSET_OBJECTMODEL_BIGPLANET, - ASSET_OBJECTMODEL_WIZPIGSHIP, - ASSET_OBJECTMODEL_TRICKYTOPS, - ASSET_OBJECTMODEL_TRICKYANIM, - ASSET_OBJECTMODEL_TRICKYANIM2, - ASSET_OBJECTMODEL_TRICKYANIM3, - ASSET_OBJECTMODEL_DRAGONBOSS, - ASSET_OBJECTMODEL_DRAGONANIM, - ASSET_OBJECTMODEL_TERRYBOSS, - ASSET_OBJECTMODEL_WALRUS, - ASSET_OBJECTMODEL_WALRUS_ANIM, - ASSET_OBJECTMODEL_OCTOPUS, - ASSET_OBJECTMODEL_STOPWATCHICON, - ASSET_OBJECTMODEL_STOPWATCHHAND, - ASSET_OBJECTMODEL_SNOWBALL, - ASSET_OBJECTMODEL_SNOWBALL2, - ASSET_OBJECTMODEL_DINOSAUR1, - ASSET_OBJECTMODEL_DINOSAUR2, - ASSET_OBJECTMODEL_DINOSAUR3, - ASSET_OBJECTMODEL_SEAMONSTER, - ASSET_OBJECTMODEL_WOODBLOCK, - ASSET_OBJECTMODEL_WHALE, - ASSET_OBJECTMODEL_LEVELDOOR_2, - ASSET_OBJECTMODEL_LEVELDOOR_3, - ASSET_OBJECTMODEL_LEVELDOOR_0, - ASSET_OBJECTMODEL_LEVELDOOR_4, - ASSET_OBJECTMODEL_LEVELDOOR_1, - ASSET_OBJECTMODEL_LEVELDOOR_7, - ASSET_OBJECTMODEL_LEVELDOOR_8, - ASSET_OBJECTMODEL_LEVELDOOR_5, - ASSET_OBJECTMODEL_LEVELDOOR_6, - ASSET_OBJECTMODEL_SIGNS_0, - ASSET_OBJECTMODEL_SIGNS_1, - ASSET_OBJECTMODEL_SIGNS_2, - ASSET_OBJECTMODEL_SIGNS_3, - ASSET_OBJECTMODEL_LOG, - ASSET_OBJECTMODEL_BOULDER, - ASSET_OBJECTMODEL_AIRZIPPERS, - ASSET_OBJECTMODEL_WATERZIPPERS, - ASSET_OBJECTMODEL_GROUNDZIPPER2, - ASSET_OBJECTMODEL_BETAAIRZIPPER, - ASSET_OBJECTMODEL_DINOISLE, - ASSET_OBJECTMODEL_BETABUMPERICON, - ASSET_OBJECTMODEL_BETADRUMSTICKICON, - ASSET_OBJECTMODEL_BETAKRUNCHICON, - ASSET_OBJECTMODEL_BETAPIPSYICON, - ASSET_OBJECTMODEL_BETATIPTUPICON, - ASSET_OBJECTMODEL_BETAKRUNCHBALLOON, - ASSET_OBJECTMODEL_BETABUMPERBALLOON, - ASSET_OBJECTMODEL_BETATIPTUPBALLOON, - ASSET_OBJECTMODEL_BETATIMBERBALLOON, - ASSET_OBJECTMODEL_BETABANJOBALLOON, - ASSET_OBJECTMODEL_BETADRUMSTICKBALLOON, - ASSET_OBJECTMODEL_BETAPIPSYBALLOON, - ASSET_OBJECTMODEL_SELECTIONSHADOW, - ASSET_OBJECTMODEL_BETAPLAYER1BALLOON, - ASSET_OBJECTMODEL_BETAPLAYER2BALLOON, - ASSET_OBJECTMODEL_BETAPLAYER3BALLOON, - ASSET_OBJECTMODEL_BETAPLAYER4BALLOON, - ASSET_OBJECTMODEL_BADGERANIMWALK, - ASSET_OBJECTMODEL_TIMBERDANCER, - ASSET_OBJECTMODEL_TIPTUPDANCER, - ASSET_OBJECTMODEL_RAREWARELOGO, - ASSET_OBJECTMODEL_FROG_0, - ASSET_OBJECTMODEL_FROG_1, - ASSET_OBJECTMODEL_CHECKPOINT, - ASSET_OBJECTMODEL_MIDIFADE, - ASSET_OBJECTMODEL_MODECHANGE, - ASSET_OBJECTMODEL_EXIT, - ASSET_OBJECTMODEL_BONUS, - ASSET_OBJECTMODEL_ANIMCAMERA, - ASSET_OBJECTMODEL_ANIMATION, - ASSET_OBJECTMODEL_RGBALIGHT_0, - ASSET_OBJECTMODEL_RGBALIGHT_1, - ASSET_OBJECTMODEL_RGBALIGHT_2, - ASSET_OBJECTMODEL_RGBALIGHT_3, - ASSET_OBJECTMODEL_N64LOGO, - ASSET_OBJECTMODEL_WIDESCREEN, - ASSET_OBJECTMODEL_ANIMDOME, - ASSET_OBJECTMODEL_DIDDYSELECT, - ASSET_OBJECTMODEL_ELECTRICITY, - ASSET_OBJECTMODEL_KREMSELECT, - ASSET_OBJECTMODEL_BADGERSELECT, - ASSET_OBJECTMODEL_TORTSELECT, - ASSET_OBJECTMODEL_BANJOSELECT, - ASSET_OBJECTMODEL_TIGERSELECT, - ASSET_OBJECTMODEL_CHICKSELECT, - ASSET_OBJECTMODEL_MOUSESELECT, - ASSET_OBJECTMODEL_CONKSELECT, - ASSET_OBJECTMODEL_POSTFORPARTY, - ASSET_OBJECTMODEL_LIGHTHOUSE, - ASSET_OBJECTMODEL_LIGHTHOUSE1, - ASSET_OBJECTMODEL_SELECTIONHILL, - ASSET_OBJECTMODEL_RARELOGO, - ASSET_OBJECTMODEL_WORLDKEY, - ASSET_OBJECTMODEL_ANIMKEY, - ASSET_OBJECTMODEL_ROCKETSIGNPOST_0, - ASSET_OBJECTMODEL_ROCKETSIGNPOST_1, - ASSET_OBJECTMODEL_ROCKETSIGNPOST_2, - ASSET_OBJECTMODEL_ROCKETSIGNPOST_3, - ASSET_OBJECTMODEL_ROCKETSIGNPOST_4, - ASSET_OBJECTMODEL_MAGICRING, - ASSET_OBJECTMODEL_LEEFAN, - ASSET_OBJECTMODEL_SPACESHIP1, - ASSET_OBJECTMODEL_SPACESHIP2, - ASSET_OBJECTMODEL_SPACESHIP3, - ASSET_OBJECTMODEL_MONORAIL, - ASSET_OBJECTMODEL_BRIDGE, - ASSET_OBJECTMODEL_PIRATESHIP, - ASSET_OBJECTMODEL_WORLDGATE_0, - ASSET_OBJECTMODEL_WORLDGATE_1, - ASSET_OBJECTMODEL_WORLDGATE_2, - ASSET_OBJECTMODEL_WORLDGATE_3, - ASSET_OBJECTMODEL_BIGBOSSDOOR_0, - ASSET_OBJECTMODEL_BIGBOSSDOOR_1, - ASSET_OBJECTMODEL_CHALDOOR_0, - ASSET_OBJECTMODEL_CHALDOOR_1, - ASSET_OBJECTMODEL_BOSSDOOR_0, - ASSET_OBJECTMODEL_BOSSDOOR_1, - ASSET_OBJECTMODEL_BOSSDOOR_2, - ASSET_OBJECTMODEL_SPACECOLUMN1, - ASSET_OBJECTMODEL_SPACECOLUMN2, - ASSET_OBJECTMODEL_SPACECOLUMN3, - ASSET_OBJECTMODEL_TRACKSELECTFRAME, - ASSET_OBJECTMODEL_WINDSAIL, - ASSET_OBJECTMODEL_EFFECTBOX, - ASSET_OBJECTMODEL_ASTEROID, - ASSET_OBJECTMODEL_TROPHYCAB, - ASSET_OBJECTMODEL_LASERBOLT, - ASSET_OBJECTMODEL_TRACKSELECTFRAMEUNKNOWN, - ASSET_OBJECTMODEL_TRACKSELECTFRAMECHALLENGE, - ASSET_OBJECTMODEL_TRACKSELECTFRAMETROPHYRACE, - ASSET_OBJECTMODEL_UNKNOWN, - ASSET_OBJECTMODEL_PIGHEADCOLOURS_0, - ASSET_OBJECTMODEL_PIGHEADCOLOURS_1, - ASSET_OBJECTMODEL_PIGHEADCOLOURS_2, - ASSET_OBJECTMODEL_PIGHEADCOLOURS_3, - ASSET_OBJECTMODEL_PIGHEADCOLOURS_4, - ASSET_OBJECTMODEL_PTERODACTYL, - ASSET_OBJECTMODEL_AMULETPIECE1, - ASSET_OBJECTMODEL_AMULETPIECE2, - ASSET_OBJECTMODEL_AMULETPIECE3, - ASSET_OBJECTMODEL_AMULETPIECE4, - ASSET_OBJECTMODEL_SWAMULET1, - ASSET_OBJECTMODEL_SWAMULET2, - ASSET_OBJECTMODEL_SWAMULET3, - ASSET_OBJECTMODEL_SWAMULET4, - ASSET_OBJECTMODEL_PIGFACEANIMATOR, - ASSET_OBJECTMODEL_PILLAR, - ASSET_OBJECTMODEL_BOULDERANIM, - ASSET_OBJECTMODEL_HAYSTACK, - ASSET_OBJECTMODEL_BETAPROAM64HOTAIRBALLOON, - ASSET_OBJECTMODEL_MINISHIP, - ASSET_OBJECTMODEL_GOLDTROPHY, - ASSET_OBJECTMODEL_PARKTROPHY, - ASSET_OBJECTMODEL_TICKTROPHY, - ASSET_OBJECTMODEL_SPACEDOME, - ASSET_OBJECTMODEL_MISSILE, - ASSET_OBJECTMODEL_SHIELD_1, - ASSET_OBJECTMODEL_SHIELD_0, - ASSET_OBJECTMODEL_SHIELD_2, - ASSET_OBJECTMODEL_TTDOOR_0, - ASSET_OBJECTMODEL_TTDOOR_1, - ASSET_OBJECTMODEL_TTDOOR_2, - ASSET_OBJECTMODEL_PIGLOG, - ASSET_OBJECTMODEL_KEITHPIGDOOR, - ASSET_OBJECTMODEL_MAGNETFX, - - ASSET_OBJECT_MODELS_COUNT -} AssetObjectModelsEnum; - -/********** ASSET_OBJECT_ANIMATIONS **********/ - -typedef enum AssetObjectAnimationsEnum { - ASSET_OBJECT_ANIMATIONS_0, - ASSET_OBJECT_ANIMATIONS_1, - ASSET_OBJECT_ANIMATIONS_2, - ASSET_OBJECT_ANIMATIONS_3, - ASSET_OBJECT_ANIMATIONS_4, - ASSET_OBJECT_ANIMATIONS_5, - ASSET_OBJECT_ANIMATIONS_6, - ASSET_OBJECT_ANIMATIONS_7, - ASSET_OBJECT_ANIMATIONS_8, - ASSET_OBJECT_ANIMATIONS_9, - ASSET_OBJECT_ANIMATIONS_10, - ASSET_OBJECT_ANIMATIONS_11, - ASSET_OBJECT_ANIMATIONS_12, - ASSET_OBJECT_ANIMATIONS_13, - ASSET_OBJECT_ANIMATIONS_14, - ASSET_OBJECT_ANIMATIONS_15, - ASSET_OBJECT_ANIMATIONS_16, - ASSET_OBJECT_ANIMATIONS_17, - ASSET_OBJECT_ANIMATIONS_18, - ASSET_OBJECT_ANIMATIONS_19, - ASSET_OBJECT_ANIMATIONS_20, - ASSET_OBJECT_ANIMATIONS_21, - ASSET_OBJECT_ANIMATIONS_22, - ASSET_OBJECT_ANIMATIONS_23, - ASSET_OBJECT_ANIMATIONS_24, - ASSET_OBJECT_ANIMATIONS_25, - ASSET_OBJECT_ANIMATIONS_26, - ASSET_OBJECT_ANIMATIONS_27, - ASSET_OBJECT_ANIMATIONS_28, - ASSET_OBJECT_ANIMATIONS_29, - ASSET_OBJECT_ANIMATIONS_30, - ASSET_OBJECT_ANIMATIONS_31, - ASSET_OBJECT_ANIMATIONS_32, - ASSET_OBJECT_ANIMATIONS_33, - ASSET_OBJECT_ANIMATIONS_34, - ASSET_OBJECT_ANIMATIONS_35, - ASSET_OBJECT_ANIMATIONS_36, - ASSET_OBJECT_ANIMATIONS_37, - ASSET_OBJECT_ANIMATIONS_38, - ASSET_OBJECT_ANIMATIONS_39, - ASSET_OBJECT_ANIMATIONS_40, - ASSET_OBJECT_ANIMATIONS_41, - ASSET_OBJECT_ANIMATIONS_42, - ASSET_OBJECT_ANIMATIONS_43, - ASSET_OBJECT_ANIMATIONS_44, - ASSET_OBJECT_ANIMATIONS_45, - ASSET_OBJECT_ANIMATIONS_46, - ASSET_OBJECT_ANIMATIONS_47, - ASSET_OBJECT_ANIMATIONS_48, - ASSET_OBJECT_ANIMATIONS_49, - ASSET_OBJECT_ANIMATIONS_50, - ASSET_OBJECT_ANIMATIONS_51, - ASSET_OBJECT_ANIMATIONS_52, - ASSET_OBJECT_ANIMATIONS_53, - ASSET_OBJECT_ANIMATIONS_54, - ASSET_OBJECT_ANIMATIONS_55, - ASSET_OBJECT_ANIMATIONS_56, - ASSET_OBJECT_ANIMATIONS_57, - ASSET_OBJECT_ANIMATIONS_58, - ASSET_OBJECT_ANIMATIONS_59, - ASSET_OBJECT_ANIMATIONS_60, - ASSET_OBJECT_ANIMATIONS_61, - ASSET_OBJECT_ANIMATIONS_62, - ASSET_OBJECT_ANIMATIONS_63, - ASSET_OBJECT_ANIMATIONS_64, - ASSET_OBJECT_ANIMATIONS_65, - ASSET_OBJECT_ANIMATIONS_66, - ASSET_OBJECT_ANIMATIONS_67, - ASSET_OBJECT_ANIMATIONS_68, - ASSET_OBJECT_ANIMATIONS_69, - ASSET_OBJECT_ANIMATIONS_70, - ASSET_OBJECT_ANIMATIONS_71, - ASSET_OBJECT_ANIMATIONS_72, - ASSET_OBJECT_ANIMATIONS_73, - ASSET_OBJECT_ANIMATIONS_74, - ASSET_OBJECT_ANIMATIONS_75, - ASSET_OBJECT_ANIMATIONS_76, - ASSET_OBJECT_ANIMATIONS_77, - ASSET_OBJECT_ANIMATIONS_78, - ASSET_OBJECT_ANIMATIONS_79, - ASSET_OBJECT_ANIMATIONS_80, - ASSET_OBJECT_ANIMATIONS_81, - ASSET_OBJECT_ANIMATIONS_82, - ASSET_OBJECT_ANIMATIONS_83, - ASSET_OBJECT_ANIMATIONS_84, - ASSET_OBJECT_ANIMATIONS_85, - ASSET_OBJECT_ANIMATIONS_86, - ASSET_OBJECT_ANIMATIONS_87, - ASSET_OBJECT_ANIMATIONS_88, - ASSET_OBJECT_ANIMATIONS_89, - ASSET_OBJECT_ANIMATIONS_90, - ASSET_OBJECT_ANIMATIONS_91, - ASSET_OBJECT_ANIMATIONS_92, - ASSET_OBJECT_ANIMATIONS_93, - ASSET_OBJECT_ANIMATIONS_94, - ASSET_OBJECT_ANIMATIONS_95, - ASSET_OBJECT_ANIMATIONS_96, - ASSET_OBJECT_ANIMATIONS_97, - ASSET_OBJECT_ANIMATIONS_98, - ASSET_OBJECT_ANIMATIONS_99, - ASSET_OBJECT_ANIMATIONS_100, - ASSET_OBJECT_ANIMATIONS_101, - ASSET_OBJECT_ANIMATIONS_102, - ASSET_OBJECT_ANIMATIONS_103, - ASSET_OBJECT_ANIMATIONS_104, - ASSET_OBJECT_ANIMATIONS_105, - ASSET_OBJECT_ANIMATIONS_106, - ASSET_OBJECT_ANIMATIONS_107, - ASSET_OBJECT_ANIMATIONS_108, - ASSET_OBJECT_ANIMATIONS_109, - ASSET_OBJECT_ANIMATIONS_110, - ASSET_OBJECT_ANIMATIONS_111, - ASSET_OBJECT_ANIMATIONS_112, - ASSET_OBJECT_ANIMATIONS_113, - ASSET_OBJECT_ANIMATIONS_114, - ASSET_OBJECT_ANIMATIONS_115, - ASSET_OBJECT_ANIMATIONS_116, - ASSET_OBJECT_ANIMATIONS_117, - ASSET_OBJECT_ANIMATIONS_118, - ASSET_OBJECT_ANIMATIONS_119, - ASSET_OBJECT_ANIMATIONS_120, - ASSET_OBJECT_ANIMATIONS_121, - ASSET_OBJECT_ANIMATIONS_122, - ASSET_OBJECT_ANIMATIONS_123, - ASSET_OBJECT_ANIMATIONS_124, - ASSET_OBJECT_ANIMATIONS_125, - ASSET_OBJECT_ANIMATIONS_126, - ASSET_OBJECT_ANIMATIONS_127, - ASSET_OBJECT_ANIMATIONS_128, - ASSET_OBJECT_ANIMATIONS_129, - ASSET_OBJECT_ANIMATIONS_130, - ASSET_OBJECT_ANIMATIONS_131, - ASSET_OBJECT_ANIMATIONS_132, - ASSET_OBJECT_ANIMATIONS_133, - ASSET_OBJECT_ANIMATIONS_134, - ASSET_OBJECT_ANIMATIONS_135, - ASSET_OBJECT_ANIMATIONS_136, - ASSET_OBJECT_ANIMATIONS_137, - ASSET_OBJECT_ANIMATIONS_138, - ASSET_OBJECT_ANIMATIONS_139, - ASSET_OBJECT_ANIMATIONS_140, - ASSET_OBJECT_ANIMATIONS_141, - ASSET_OBJECT_ANIMATIONS_142, - ASSET_OBJECT_ANIMATIONS_143, - ASSET_OBJECT_ANIMATIONS_144, - ASSET_OBJECT_ANIMATIONS_145, - ASSET_OBJECT_ANIMATIONS_146, - ASSET_OBJECT_ANIMATIONS_147, - ASSET_OBJECT_ANIMATIONS_148, - ASSET_OBJECT_ANIMATIONS_149, - ASSET_OBJECT_ANIMATIONS_150, - ASSET_OBJECT_ANIMATIONS_151, - ASSET_OBJECT_ANIMATIONS_152, - ASSET_OBJECT_ANIMATIONS_153, - ASSET_OBJECT_ANIMATIONS_154, - ASSET_OBJECT_ANIMATIONS_155, - ASSET_OBJECT_ANIMATIONS_156, - ASSET_OBJECT_ANIMATIONS_157, - ASSET_OBJECT_ANIMATIONS_158, - ASSET_OBJECT_ANIMATIONS_159, - ASSET_OBJECT_ANIMATIONS_160, - ASSET_OBJECT_ANIMATIONS_161, - ASSET_OBJECT_ANIMATIONS_162, - ASSET_OBJECT_ANIMATIONS_163, - ASSET_OBJECT_ANIMATIONS_164, - ASSET_OBJECT_ANIMATIONS_165, - ASSET_OBJECT_ANIMATIONS_166, - ASSET_OBJECT_ANIMATIONS_167, - ASSET_OBJECT_ANIMATIONS_168, - ASSET_OBJECT_ANIMATIONS_169, - ASSET_OBJECT_ANIMATIONS_170, - ASSET_OBJECT_ANIMATIONS_171, - ASSET_OBJECT_ANIMATIONS_172, - ASSET_OBJECT_ANIMATIONS_173, - ASSET_OBJECT_ANIMATIONS_174, - ASSET_OBJECT_ANIMATIONS_175, - ASSET_OBJECT_ANIMATIONS_176, - ASSET_OBJECT_ANIMATIONS_177, - ASSET_OBJECT_ANIMATIONS_178, - ASSET_OBJECT_ANIMATIONS_179, - ASSET_OBJECT_ANIMATIONS_180, - ASSET_OBJECT_ANIMATIONS_181, - ASSET_OBJECT_ANIMATIONS_182, - ASSET_OBJECT_ANIMATIONS_183, - ASSET_OBJECT_ANIMATIONS_184, - ASSET_OBJECT_ANIMATIONS_185, - ASSET_OBJECT_ANIMATIONS_186, - ASSET_OBJECT_ANIMATIONS_187, - ASSET_OBJECT_ANIMATIONS_188, - ASSET_OBJECT_ANIMATIONS_189, - ASSET_OBJECT_ANIMATIONS_190, - ASSET_OBJECT_ANIMATIONS_191, - ASSET_OBJECT_ANIMATIONS_192, - ASSET_OBJECT_ANIMATIONS_193, - ASSET_OBJECT_ANIMATIONS_194, - ASSET_OBJECT_ANIMATIONS_195, - ASSET_OBJECT_ANIMATIONS_196, - ASSET_OBJECT_ANIMATIONS_197, - ASSET_OBJECT_ANIMATIONS_198, - ASSET_OBJECT_ANIMATIONS_199, - ASSET_OBJECT_ANIMATIONS_200, - ASSET_OBJECT_ANIMATIONS_201, - ASSET_OBJECT_ANIMATIONS_202, - ASSET_OBJECT_ANIMATIONS_203, - ASSET_OBJECT_ANIMATIONS_204, - ASSET_OBJECT_ANIMATIONS_205, - ASSET_OBJECT_ANIMATIONS_206, - ASSET_OBJECT_ANIMATIONS_207, - ASSET_OBJECT_ANIMATIONS_208, - ASSET_OBJECT_ANIMATIONS_209, - ASSET_OBJECT_ANIMATIONS_210, - ASSET_OBJECT_ANIMATIONS_211, - ASSET_OBJECT_ANIMATIONS_212, - ASSET_OBJECT_ANIMATIONS_213, - ASSET_OBJECT_ANIMATIONS_214, - ASSET_OBJECT_ANIMATIONS_215, - ASSET_OBJECT_ANIMATIONS_216, - ASSET_OBJECT_ANIMATIONS_217, - ASSET_OBJECT_ANIMATIONS_218, - ASSET_OBJECT_ANIMATIONS_219, - ASSET_OBJECT_ANIMATIONS_220, - ASSET_OBJECT_ANIMATIONS_221, - ASSET_OBJECT_ANIMATIONS_222, - ASSET_OBJECT_ANIMATIONS_223, - ASSET_OBJECT_ANIMATIONS_224, - ASSET_OBJECT_ANIMATIONS_225, - ASSET_OBJECT_ANIMATIONS_226, - ASSET_OBJECT_ANIMATIONS_227, - ASSET_OBJECT_ANIMATIONS_228, - ASSET_OBJECT_ANIMATIONS_229, - ASSET_OBJECT_ANIMATIONS_230, - ASSET_OBJECT_ANIMATIONS_231, - ASSET_OBJECT_ANIMATIONS_232, - ASSET_OBJECT_ANIMATIONS_233, - ASSET_OBJECT_ANIMATIONS_234, - ASSET_OBJECT_ANIMATIONS_235, - ASSET_OBJECT_ANIMATIONS_236, - ASSET_OBJECT_ANIMATIONS_237, - ASSET_OBJECT_ANIMATIONS_238, - ASSET_OBJECT_ANIMATIONS_239, - ASSET_OBJECT_ANIMATIONS_240, - ASSET_OBJECT_ANIMATIONS_241, - ASSET_OBJECT_ANIMATIONS_242, - ASSET_OBJECT_ANIMATIONS_243, - ASSET_OBJECT_ANIMATIONS_244, - ASSET_OBJECT_ANIMATIONS_245, - ASSET_OBJECT_ANIMATIONS_246, - ASSET_OBJECT_ANIMATIONS_247, - ASSET_OBJECT_ANIMATIONS_248, - ASSET_OBJECT_ANIMATIONS_249, - ASSET_OBJECT_ANIMATIONS_250, - ASSET_OBJECT_ANIMATIONS_251, - ASSET_OBJECT_ANIMATIONS_252, - ASSET_OBJECT_ANIMATIONS_253, - ASSET_OBJECT_ANIMATIONS_254, - ASSET_OBJECT_ANIMATIONS_255, - ASSET_OBJECT_ANIMATIONS_256, - ASSET_OBJECT_ANIMATIONS_257, - ASSET_OBJECT_ANIMATIONS_258, - ASSET_OBJECT_ANIMATIONS_259, - ASSET_OBJECT_ANIMATIONS_260, - ASSET_OBJECT_ANIMATIONS_261, - ASSET_OBJECT_ANIMATIONS_262, - ASSET_OBJECT_ANIMATIONS_263, - ASSET_OBJECT_ANIMATIONS_264, - ASSET_OBJECT_ANIMATIONS_265, - ASSET_OBJECT_ANIMATIONS_266, - ASSET_OBJECT_ANIMATIONS_267, - ASSET_OBJECT_ANIMATIONS_268, - ASSET_OBJECT_ANIMATIONS_269, - ASSET_OBJECT_ANIMATIONS_270, - ASSET_OBJECT_ANIMATIONS_271, - ASSET_OBJECT_ANIMATIONS_272, - ASSET_OBJECT_ANIMATIONS_273, - ASSET_OBJECT_ANIMATIONS_274, - ASSET_OBJECT_ANIMATIONS_275, - ASSET_OBJECT_ANIMATIONS_276, - ASSET_OBJECT_ANIMATIONS_277, - ASSET_OBJECT_ANIMATIONS_278, - ASSET_OBJECT_ANIMATIONS_279, - ASSET_OBJECT_ANIMATIONS_280, - ASSET_OBJECT_ANIMATIONS_281, - ASSET_OBJECT_ANIMATIONS_282, - ASSET_OBJECT_ANIMATIONS_283, - ASSET_OBJECT_ANIMATIONS_284, - ASSET_OBJECT_ANIMATIONS_285, - ASSET_OBJECT_ANIMATIONS_286, - ASSET_OBJECT_ANIMATIONS_287, - ASSET_OBJECT_ANIMATIONS_288, - ASSET_OBJECT_ANIMATIONS_289, - ASSET_OBJECT_ANIMATIONS_290, - ASSET_OBJECT_ANIMATIONS_291, - ASSET_OBJECT_ANIMATIONS_292, - ASSET_OBJECT_ANIMATIONS_293, - ASSET_OBJECT_ANIMATIONS_294, - ASSET_OBJECT_ANIMATIONS_295, - ASSET_OBJECT_ANIMATIONS_296, - ASSET_OBJECT_ANIMATIONS_297, - ASSET_OBJECT_ANIMATIONS_298, - ASSET_OBJECT_ANIMATIONS_299, - ASSET_OBJECT_ANIMATIONS_300, - ASSET_OBJECT_ANIMATIONS_301, - ASSET_OBJECT_ANIMATIONS_302, - ASSET_OBJECT_ANIMATIONS_303, - ASSET_OBJECT_ANIMATIONS_304, - ASSET_OBJECT_ANIMATIONS_305, - ASSET_OBJECT_ANIMATIONS_306, - ASSET_OBJECT_ANIMATIONS_307, - ASSET_OBJECT_ANIMATIONS_308, - ASSET_OBJECT_ANIMATIONS_309, - ASSET_OBJECT_ANIMATIONS_310, - ASSET_OBJECT_ANIMATIONS_311, - ASSET_OBJECT_ANIMATIONS_312, - ASSET_OBJECT_ANIMATIONS_313, - ASSET_OBJECT_ANIMATIONS_314, - ASSET_OBJECT_ANIMATIONS_315, - ASSET_OBJECT_ANIMATIONS_316, - ASSET_OBJECT_ANIMATIONS_317, - ASSET_OBJECT_ANIMATIONS_318, - ASSET_OBJECT_ANIMATIONS_319, - ASSET_OBJECT_ANIMATIONS_320, - ASSET_OBJECT_ANIMATIONS_321, - ASSET_OBJECT_ANIMATIONS_322, - ASSET_OBJECT_ANIMATIONS_323, - ASSET_OBJECT_ANIMATIONS_324, - ASSET_OBJECT_ANIMATIONS_325, - ASSET_OBJECT_ANIMATIONS_326, - ASSET_OBJECT_ANIMATIONS_327, - ASSET_OBJECT_ANIMATIONS_328, - ASSET_OBJECT_ANIMATIONS_329, - ASSET_OBJECT_ANIMATIONS_330, - ASSET_OBJECT_ANIMATIONS_331, - ASSET_OBJECT_ANIMATIONS_332, - ASSET_OBJECT_ANIMATIONS_333, - ASSET_OBJECT_ANIMATIONS_334, - ASSET_OBJECT_ANIMATIONS_335, - ASSET_OBJECT_ANIMATIONS_336, - ASSET_OBJECT_ANIMATIONS_337, - ASSET_OBJECT_ANIMATIONS_338, - ASSET_OBJECT_ANIMATIONS_339, - ASSET_OBJECT_ANIMATIONS_340, - ASSET_OBJECT_ANIMATIONS_341, - ASSET_OBJECT_ANIMATIONS_342, - ASSET_OBJECT_ANIMATIONS_343, - ASSET_OBJECT_ANIMATIONS_344, - ASSET_OBJECT_ANIMATIONS_345, - ASSET_OBJECT_ANIMATIONS_346, - ASSET_OBJECT_ANIMATIONS_347, - ASSET_OBJECT_ANIMATIONS_348, - ASSET_OBJECT_ANIMATIONS_349, - ASSET_OBJECT_ANIMATIONS_350, - ASSET_OBJECT_ANIMATIONS_351, - ASSET_OBJECT_ANIMATIONS_352, - ASSET_OBJECT_ANIMATIONS_353, - ASSET_OBJECT_ANIMATIONS_354, - ASSET_OBJECT_ANIMATIONS_355, - ASSET_OBJECT_ANIMATIONS_356, - ASSET_OBJECT_ANIMATIONS_357, - ASSET_OBJECT_ANIMATIONS_358, - ASSET_OBJECT_ANIMATIONS_359, - ASSET_OBJECT_ANIMATIONS_360, - ASSET_OBJECT_ANIMATIONS_361, - ASSET_OBJECT_ANIMATIONS_362, - ASSET_OBJECT_ANIMATIONS_363, - ASSET_OBJECT_ANIMATIONS_364, - ASSET_OBJECT_ANIMATIONS_365, - ASSET_OBJECT_ANIMATIONS_366, - ASSET_OBJECT_ANIMATIONS_367, - ASSET_OBJECT_ANIMATIONS_368, - ASSET_OBJECT_ANIMATIONS_369, - ASSET_OBJECT_ANIMATIONS_370, - ASSET_OBJECT_ANIMATIONS_371, - ASSET_OBJECT_ANIMATIONS_372, - ASSET_OBJECT_ANIMATIONS_373, - ASSET_OBJECT_ANIMATIONS_374, - ASSET_OBJECT_ANIMATIONS_375, - ASSET_OBJECT_ANIMATIONS_376, - ASSET_OBJECT_ANIMATIONS_377, - ASSET_OBJECT_ANIMATIONS_378, - ASSET_OBJECT_ANIMATIONS_379, - ASSET_OBJECT_ANIMATIONS_380, - ASSET_OBJECT_ANIMATIONS_381, - ASSET_OBJECT_ANIMATIONS_382, - ASSET_OBJECT_ANIMATIONS_383, - ASSET_OBJECT_ANIMATIONS_384, - ASSET_OBJECT_ANIMATIONS_385, - ASSET_OBJECT_ANIMATIONS_386, - ASSET_OBJECT_ANIMATIONS_387, - ASSET_OBJECT_ANIMATIONS_388, - ASSET_OBJECT_ANIMATIONS_389, - ASSET_OBJECT_ANIMATIONS_390, - ASSET_OBJECT_ANIMATIONS_391, - ASSET_OBJECT_ANIMATIONS_392, - ASSET_OBJECT_ANIMATIONS_393, - ASSET_OBJECT_ANIMATIONS_394, - ASSET_OBJECT_ANIMATIONS_395, - ASSET_OBJECT_ANIMATIONS_396, - ASSET_OBJECT_ANIMATIONS_397, - ASSET_OBJECT_ANIMATIONS_398, - ASSET_OBJECT_ANIMATIONS_399, - ASSET_OBJECT_ANIMATIONS_400, - ASSET_OBJECT_ANIMATIONS_401, - ASSET_OBJECT_ANIMATIONS_402, - ASSET_OBJECT_ANIMATIONS_403, - ASSET_OBJECT_ANIMATIONS_404, - ASSET_OBJECT_ANIMATIONS_405, - ASSET_OBJECT_ANIMATIONS_406, - ASSET_OBJECT_ANIMATIONS_407, - ASSET_OBJECT_ANIMATIONS_408, - ASSET_OBJECT_ANIMATIONS_409, - ASSET_OBJECT_ANIMATIONS_410, - ASSET_OBJECT_ANIMATIONS_411, - ASSET_OBJECT_ANIMATIONS_412, - ASSET_OBJECT_ANIMATIONS_413, - ASSET_OBJECT_ANIMATIONS_414, - ASSET_OBJECT_ANIMATIONS_415, - ASSET_OBJECT_ANIMATIONS_416, - ASSET_OBJECT_ANIMATIONS_417, - ASSET_OBJECT_ANIMATIONS_418, - ASSET_OBJECT_ANIMATIONS_419, - ASSET_OBJECT_ANIMATIONS_420, - ASSET_OBJECT_ANIMATIONS_421, - ASSET_OBJECT_ANIMATIONS_422, - ASSET_OBJECT_ANIMATIONS_423, - ASSET_OBJECT_ANIMATIONS_424, - ASSET_OBJECT_ANIMATIONS_425, - ASSET_OBJECT_ANIMATIONS_426, - ASSET_OBJECT_ANIMATIONS_427, - ASSET_OBJECT_ANIMATIONS_428, - ASSET_OBJECT_ANIMATIONS_429, - ASSET_OBJECT_ANIMATIONS_430, - ASSET_OBJECT_ANIMATIONS_431, - ASSET_OBJECT_ANIMATIONS_432, - ASSET_OBJECT_ANIMATIONS_433, - ASSET_OBJECT_ANIMATIONS_434, - ASSET_OBJECT_ANIMATIONS_435, - ASSET_OBJECT_ANIMATIONS_436, - ASSET_OBJECT_ANIMATIONS_437, - ASSET_OBJECT_ANIMATIONS_438, - ASSET_OBJECT_ANIMATIONS_439, - ASSET_OBJECT_ANIMATIONS_440, - ASSET_OBJECT_ANIMATIONS_441, - ASSET_OBJECT_ANIMATIONS_442, - ASSET_OBJECT_ANIMATIONS_443, - ASSET_OBJECT_ANIMATIONS_444, - ASSET_OBJECT_ANIMATIONS_445, - ASSET_OBJECT_ANIMATIONS_446, - ASSET_OBJECT_ANIMATIONS_447, - ASSET_OBJECT_ANIMATIONS_448, - ASSET_OBJECT_ANIMATIONS_449, - ASSET_OBJECT_ANIMATIONS_450, - ASSET_OBJECT_ANIMATIONS_451, - ASSET_OBJECT_ANIMATIONS_452, - ASSET_OBJECT_ANIMATIONS_453, - ASSET_OBJECT_ANIMATIONS_454, - ASSET_OBJECT_ANIMATIONS_455, - ASSET_OBJECT_ANIMATIONS_456, - ASSET_OBJECT_ANIMATIONS_457, - ASSET_OBJECT_ANIMATIONS_458, - ASSET_OBJECT_ANIMATIONS_459, - ASSET_OBJECT_ANIMATIONS_460, - ASSET_OBJECT_ANIMATIONS_461, - ASSET_OBJECT_ANIMATIONS_462, - ASSET_OBJECT_ANIMATIONS_463, - ASSET_OBJECT_ANIMATIONS_464, - ASSET_OBJECT_ANIMATIONS_465, - ASSET_OBJECT_ANIMATIONS_466, - ASSET_OBJECT_ANIMATIONS_467, - ASSET_OBJECT_ANIMATIONS_468, - ASSET_OBJECT_ANIMATIONS_469, - - ASSET_OBJECT_ANIMATIONS_COUNT -} AssetObjectAnimationsEnum; - -/********** ASSET_OBJECTS **********/ - -typedef enum AssetObjectsEnum { - ASSET_OBJECT_DIDDYCAR, - ASSET_OBJECT_SWCAR, - ASSET_OBJECT_KREMCAR, - ASSET_OBJECT_BADGERCAR, - ASSET_OBJECT_TORTCAR, - ASSET_OBJECT_CONKACAR, - ASSET_OBJECT_TIGERCAR, - ASSET_OBJECT_BANJOCAR, - ASSET_OBJECT_CHICKENCAR, - ASSET_OBJECT_MOUSECAR, - ASSET_OBJECT_DIDDYHOVER, - ASSET_OBJECT_TICKTOCKHOVER, - ASSET_OBJECT_KREMLINHOVER, - ASSET_OBJECT_BADGERHOVER, - ASSET_OBJECT_TORTHOVER, - ASSET_OBJECT_CONKAHOVER, - ASSET_OBJECT_TIGERHOVER, - ASSET_OBJECT_BANJOHOVER, - ASSET_OBJECT_CHICKENHOVER, - ASSET_OBJECT_MOUSEHOVER, - ASSET_OBJECT_DIDDYPLANE, - ASSET_OBJECT_TICKTOCKPLANE, - ASSET_OBJECT_KREMPLANE, - ASSET_OBJECT_BADGERPLANE, - ASSET_OBJECT_TORTPLANE, - ASSET_OBJECT_CONKA, - ASSET_OBJECT_TIGPLANE, - ASSET_OBJECT_BANJOPLANE, - ASSET_OBJECT_CHICKENPLANE, - ASSET_OBJECT_MOUSEPLANE, - ASSET_OBJECT_FLYINGCARPET, - ASSET_OBJECT_TIMBERDANCER, - ASSET_OBJECT_CHICKENCHARACTE, - ASSET_OBJECT_PIPSYDANCER, - ASSET_OBJECT_BANJODANCER, - ASSET_OBJECT_TICKTOCKDANCER, - ASSET_OBJECT_WIZPIGSHIP, - ASSET_OBJECT_CONKADANCER, - ASSET_OBJECT_EMPTYHOVER, - ASSET_OBJECT_STOPWATCHMAN, - ASSET_OBJECT_STOPWATCHSELECT, - ASSET_OBJECT_PARKWARDEN, - ASSET_OBJECT_SMARTIETREE, - ASSET_OBJECT_BLUEBERRYBUSH, - ASSET_OBJECT_RUBBERSNOWTREE, - ASSET_OBJECT_SKINNYSNOWTREE, - ASSET_OBJECT_XMASTREE, - ASSET_OBJECT_ALPINESNOWTREE, - ASSET_OBJECT_RUBBERTREE, - ASSET_OBJECT_BEACHTREE, - ASSET_OBJECT_PALMTREETOP, - ASSET_OBJECT_PALMPLANT, - ASSET_OBJECT_PALMTREETOPCHEA, - ASSET_OBJECT_FIRTREE, - ASSET_OBJECT_SPACETREE, - ASSET_OBJECT_LAMPPOST, - ASSET_OBJECT_FLOWERS, - ASSET_OBJECT_REEDS, - ASSET_OBJECT_SMOKE, - ASSET_OBJECT_DINOSAUR1, - ASSET_OBJECT_DINOSAUR2, - ASSET_OBJECT_DINOSAUR3, - ASSET_OBJECT_WHALE, - ASSET_OBJECT_SNOWMEN, - ASSET_OBJECT_SIGNS, - ASSET_OBJECT_FLAMINGTORCH, - ASSET_OBJECT_MIST, - ASSET_OBJECT_SNOWBALL, - ASSET_OBJECT_BUOY, - ASSET_OBJECT_PIRATESHIP, - ASSET_OBJECT_LOG, - ASSET_OBJECT_PIGLOG, - ASSET_OBJECT_BOULDER, - ASSET_OBJECT_AIRZIPPERS, - ASSET_OBJECT_WATERZIPPERS, - ASSET_OBJECT_LEVELDOOR, - ASSET_OBJECT_KEITHPIGDOOR, - ASSET_OBJECT_CHALDOOR, - ASSET_OBJECT_BOSSDOOR, - ASSET_OBJECT_BIGBOSSDOOR, - ASSET_OBJECT_WORLDGATE, - ASSET_OBJECT_TTDOOR, - ASSET_OBJECT_RAMPSWITCH, - ASSET_OBJECT_NOENTRYDOOR, - ASSET_OBJECT_RAMPWHALE, - ASSET_OBJECT_SEAMONSTER, - ASSET_OBJECT_DINOISLE, - ASSET_OBJECT_SKYCONTROL, - ASSET_OBJECT_CHECKPOINT, - ASSET_OBJECT_CHECKARROW, - ASSET_OBJECT_MODECHANGE, - ASSET_OBJECT_TRIGGER, - ASSET_OBJECT_FOGCHANGER, - ASSET_OBJECT_AINODE, - ASSET_OBJECT_EXIT, - ASSET_OBJECT_BONUS, - ASSET_OBJECT_CAMERA_CONTROL, - ASSET_OBJECT_SETUPPOINT, - ASSET_OBJECT_ANIMATOR, - ASSET_OBJECT_TEXSCROLL, - ASSET_OBJECT_RGBALIGHT, - ASSET_OBJECT_INTROCAM, - ASSET_OBJECT_WEATHER, - ASSET_OBJECT_LENSFLARE, - ASSET_OBJECT_LENSFLARESWITCH, - ASSET_OBJECT_INFOPOINT, - ASSET_OBJECT_WAVEGENERATOR, - ASSET_OBJECT_WAVEPOWER, - ASSET_OBJECT_RANGETRIGGER, - ASSET_OBJECT_LAVASPURT, - ASSET_OBJECT_BOMBEXPLOSION, - ASSET_OBJECT_WARDENSMOKE, - ASSET_OBJECT_BUBBLER, - ASSET_OBJECT_WEAPONBALLOON, - ASSET_OBJECT_WBALLOONPOP, - ASSET_OBJECT_MISSILEGLOW, - ASSET_OBJECT_HOMINGGLOW, - ASSET_OBJECT_MISSILE, - ASSET_OBJECT_HOMING, - ASSET_OBJECT_OILSLICK, - ASSET_OBJECT_SMOKECLOUD, - ASSET_OBJECT_BOMB, - ASSET_OBJECT_BUBBLEWEAPON, - ASSET_OBJECT_WORLDKEY, - ASSET_OBJECT_COINCREATOR, - ASSET_OBJECT_TREASURESUCKER, - ASSET_OBJECT_COIN, - ASSET_OBJECT_SILVERCOIN, - ASSET_OBJECT_GOLDCOIN, - ASSET_OBJECT_BONUSGEM, - ASSET_OBJECT_COLLECTEGG, - ASSET_OBJECT_EGGCREATOR, - ASSET_OBJECT_CHARACTERFLAG, - ASSET_OBJECT_ANIMATION, - ASSET_OBJECT_OVERRIDEPOS, - ASSET_OBJECT_ANIMCAMERA, - ASSET_OBJECT_ANIMCAR, - ASSET_OBJECT_ANIMDOME, - ASSET_OBJECT_WIZGHOSTS, - ASSET_OBJECT_N64LOGO, - ASSET_OBJECT_ASTEROID, - ASSET_OBJECT_PILLAR, - ASSET_OBJECT_BOULDERANIM, - ASSET_OBJECT_PIGHEADCOLOURS, - ASSET_OBJECT_PIGFACEANIMATOR, - ASSET_OBJECT_PTERODACTYL, - ASSET_OBJECT_AMULETPIECE1, - ASSET_OBJECT_AMULETPIECE2, - ASSET_OBJECT_AMULETPIECE3, - ASSET_OBJECT_AMULETPIECE4, - ASSET_OBJECT_SWAMULET1, - ASSET_OBJECT_SWAMULET2, - ASSET_OBJECT_SWAMULET3, - ASSET_OBJECT_SWAMULET4, - ASSET_OBJECT_ANIMKEY, - ASSET_OBJECT_SPACESHIP1, - ASSET_OBJECT_MINISHIP, - ASSET_OBJECT_MONORAIL, - ASSET_OBJECT_SPACESHIP2, - ASSET_OBJECT_SPACESHIP3, - ASSET_OBJECT_LIGHTHOUSE, - ASSET_OBJECT_ROCKETSIGNPOST, - ASSET_OBJECT_LIGHTHOUSE1, - ASSET_OBJECT_LIGHTHOUSE2, - ASSET_OBJECT_SELECTIONHILL, - ASSET_OBJECT_WIDESCREEN, - ASSET_OBJECT_TIGERANIMPLANE, - ASSET_OBJECT_BADGERANIMWALK, - ASSET_OBJECT_TIMBERANIMCAR, - ASSET_OBJECT_KREMSELECT, - ASSET_OBJECT_CONKSELECT, - ASSET_OBJECT_BADGERSELECT, - ASSET_OBJECT_TORTSELECT, - ASSET_OBJECT_TIGERSELECT, - ASSET_OBJECT_DIDDYSELECT, - ASSET_OBJECT_BANJOSELECT, - ASSET_OBJECT_CHICKSELECT, - ASSET_OBJECT_MOUSESELECT, - ASSET_OBJECT_MAGICCARPET, - ASSET_OBJECT_POLYGOLDBALOON, - ASSET_OBJECT_ANIMGENIE, - ASSET_OBJECT_ANIMGENIE3, - ASSET_OBJECT_BUTTERFLYBAIT, - ASSET_OBJECT_AUDIO, - ASSET_OBJECT_AUDIOLINE, - ASSET_OBJECT_AUDIOSEQLINE, - ASSET_OBJECT_AUDIOSEQ, - ASSET_OBJECT_AUDIOREVERB, - ASSET_OBJECT_FRONTTYRE, - ASSET_OBJECT_BACKTYRE, - ASSET_OBJECT_PLANETYRE, - ASSET_OBJECT_FAN, - ASSET_OBJECT_JETENGINE, - ASSET_OBJECT_GLOVE, - ASSET_OBJECT_LEEFAN, - ASSET_OBJECT_MAGICRING, - ASSET_OBJECT_DOME, - ASSET_OBJECT_DOME1, - ASSET_OBJECT_DOME2, - ASSET_OBJECT_DOME3, - ASSET_OBJECT_DOME4, - ASSET_OBJECT_DOME5, - ASSET_OBJECT_DOME6, - ASSET_OBJECT_DOME7, - ASSET_OBJECT_DOME8, - ASSET_OBJECT_DOME9, - ASSET_OBJECT_DOME10, - ASSET_OBJECT_DOME11, - ASSET_OBJECT_DOME12, - ASSET_OBJECT_DOME13, - ASSET_OBJECT_DOME14, - ASSET_OBJECT_DOME15, - ASSET_OBJECT_DOME16, - ASSET_OBJECT_DOME17, - ASSET_OBJECT_SELECTIONSHADOW, - ASSET_OBJECT_POSTFORPARTY, - ASSET_OBJECT_RARELOGO, - ASSET_OBJECT_SPARKLYTHING, - ASSET_OBJECT_DOOROPENER, - ASSET_OBJECT_ANIMDINOSAUR2, - ASSET_OBJECT_TIMERANIMHOVER, - ASSET_OBJECT_ANIMBADGERPLANE, - ASSET_OBJECT_ANIMDINOSAUR1, - ASSET_OBJECT_ANIMMOUSECAR, - ASSET_OBJECT_ANIMTORT, - ASSET_OBJECT_CHICKENANIMPLAN, - ASSET_OBJECT_EMPTYHOVERANIM, - ASSET_OBJECT_KREMANIM, - ASSET_OBJECT_MOUSEHOVERANIM, - ASSET_OBJECT_TORTRUNNER, - ASSET_OBJECT_ANIMBANJOPLANE, - ASSET_OBJECT_CONKAANIMCAR, - ASSET_OBJECT_GBPARKWARDEN, - ASSET_OBJECT_WIZPIG, - ASSET_OBJECT_WIZPIGROCKET, - ASSET_OBJECT_PIGBOSS, - ASSET_OBJECT_PIGBOSS2, - ASSET_OBJECT_PIGROCKETEER, - ASSET_OBJECT_PARTICLES2, - ASSET_OBJECT_PIGBOULDER, - ASSET_OBJECT_BIGPLANET, - ASSET_OBJECT_ROCKETBIT1, - ASSET_OBJECT_ROCKETBIT2, - ASSET_OBJECT_GENIEHEAD, - ASSET_OBJECT_PIGBOULDER2, - ASSET_OBJECT_PIGBOULDER3, - ASSET_OBJECT_PIGBOULDER4, - ASSET_OBJECT_PIGBOULDER5, - ASSET_OBJECT_TRICKYTOPS, - ASSET_OBJECT_TRICKYANIM, - ASSET_OBJECT_TRICKYANIM2, - ASSET_OBJECT_TRICKYANIM3, - ASSET_OBJECT_WALRUS_ANIM, - ASSET_OBJECT_TERRYBOSS, - ASSET_OBJECT_DRAGONBOSS, - ASSET_OBJECT_DRAGONANIM, - ASSET_OBJECT_WALRUS, - ASSET_OBJECT_SNOWBALLBOSS, - ASSET_OBJECT_ANIMOCTO, - ASSET_OBJECT_OCTOPUS, - ASSET_OBJECT_GOLDBALOONSPRIT, - ASSET_OBJECT_SPACECOLUMN1, - ASSET_OBJECT_SPACECOLUMN2, - ASSET_OBJECT_SPACECOLUMN3, - ASSET_OBJECT_HAYSTACK, - ASSET_OBJECT_ANIMGENIE2, - ASSET_OBJECT_BRIGHTSTAR, - ASSET_OBJECT_BUTTERFLY, - ASSET_OBJECT_FISH, - ASSET_OBJECT_FROG, - ASSET_OBJECT_BOOST, - ASSET_OBJECT_MAGNETFX, - ASSET_OBJECT_STILLFROG, - ASSET_OBJECT_STOPWATCHICON, - ASSET_OBJECT_STOPWATCHHAND, - ASSET_OBJECT_BRIDGE, - ASSET_OBJECT_POSARROW, - ASSET_OBJECT_HITTESTER, - ASSET_OBJECT_MIDIFADE, - ASSET_OBJECT_WINDSAIL, - ASSET_OBJECT_EFFECTBOX, - ASSET_OBJECT_TROPHYCAB, - ASSET_OBJECT_FLYCOIN, - ASSET_OBJECT_GOLDENBALLOON, - ASSET_OBJECT_LASERBOLT, - ASSET_OBJECT_LASERGUN, - ASSET_OBJECT_BOLTGLOW, - ASSET_OBJECT_GROUNDZIPPER, - ASSET_OBJECT_PWSAFETELEPOINT, - ASSET_OBJECT_HEADFORPOINT, - ASSET_OBJECT_FIREBALLATTRACT, - ASSET_OBJECT_FIREBALL, - ASSET_OBJECT_OCTOBUBBLE, - ASSET_OBJECT_OCTOBOMB, - ASSET_OBJECT_GOLDTROPHY, - ASSET_OBJECT_PARKTROPHY, - ASSET_OBJECT_TICKTROPHY, - ASSET_OBJECT_TROPHY, - ASSET_OBJECT_TELEPORT, - ASSET_OBJECT_SHIELD, - ASSET_OBJECT_LIGHTNING, - ASSET_OBJECT_MIDIFADEPOINT, - ASSET_OBJECT_LEVELNAME, - ASSET_OBJECT_MIDICHSET, - - ASSET_OBJECTS_COUNT -} AssetObjectsEnum; - -/********** ASSET_LEVEL_OBJECT_TRANSLATION_TABLE **********/ - -typedef enum AssetLevelObjectTranslationTableEnum { - ASSET_OBJECT_ID_DOME, - ASSET_OBJECT_ID_KREMCAR, - ASSET_OBJECT_ID_BADGERCAR, - ASSET_OBJECT_ID_TORTCAR, - ASSET_OBJECT_ID_CONKACAR, - ASSET_OBJECT_ID_SMARTIETREE, - ASSET_OBJECT_ID_FRONTTYRE, - ASSET_OBJECT_ID_BACKTYRE, - ASSET_OBJECT_ID_HITTESTER, - ASSET_OBJECT_ID_WORLDGATE, - ASSET_OBJECT_ID_MIDIFADE, - ASSET_OBJECT_ID_PARKWARDEN, - ASSET_OBJECT_ID_WARDENSMOKE, - ASSET_OBJECT_ID_ANIMATOR, - ASSET_OBJECT_ID_BOMB, - ASSET_OBJECT_ID_FLOWERS, - ASSET_OBJECT_ID_SMOKE, - ASSET_OBJECT_ID_EXIT, - ASSET_OBJECT_ID_CAMERA_CONTROL, - ASSET_OBJECT_ID_WORLDKEY, - ASSET_OBJECT_ID_SETUPPOINT, - ASSET_OBJECT_ID_AUDIO, - ASSET_OBJECT_ID_AUDIOLINE, - ASSET_OBJECT_ID_DINOSAUR1, - ASSET_OBJECT_ID_CHECKPOINT, - ASSET_OBJECT_ID_LEVELDOOR, - ASSET_OBJECT_ID_FOGCHANGER, - ASSET_OBJECT_ID_AINODE, - ASSET_OBJECT_ID_WEAPONBALLOON, - ASSET_OBJECT_ID_MISSILE, - ASSET_OBJECT_ID_DOME1, - ASSET_OBJECT_ID_SNOWMEN, - ASSET_OBJECT_ID_DOME2, - ASSET_OBJECT_ID_SIGNS, - ASSET_OBJECT_ID_REEDS, - ASSET_OBJECT_ID_BEACHTREE, - ASSET_OBJECT_ID_AUDIOSEQLINE, - ASSET_OBJECT_ID_AUDIOSEQ, - ASSET_OBJECT_ID_STOPWATCHICON, - ASSET_OBJECT_ID_EFFECTBOX, - ASSET_OBJECT_ID_COINCREATOR, - ASSET_OBJECT_ID_TREASURESUCKER, - ASSET_OBJECT_ID_BRIDGE, - ASSET_OBJECT_ID_LAVASPURT, - ASSET_OBJECT_ID_BOMBEXPLOSION, - ASSET_OBJECT_ID_WBALLOONPOP, - ASSET_OBJECT_ID_BUBBLEWEAPON, - ASSET_OBJECT_ID_DOME5, - ASSET_OBJECT_ID_DINOISLE, - ASSET_OBJECT_ID_AUDIOREVERB, - ASSET_OBJECT_ID_POSARROW, - ASSET_OBJECT_ID_WINDSAIL, - ASSET_OBJECT_ID_COLLECTEGG, - ASSET_OBJECT_ID_SKYCONTROL, - ASSET_OBJECT_ID_STOPWATCHHAND, - ASSET_OBJECT_ID_KREMLINHOVER, - ASSET_OBJECT_ID_BADGERHOVER, - ASSET_OBJECT_ID_TORTHOVER, - ASSET_OBJECT_ID_CONKAHOVER, - ASSET_OBJECT_ID_DOME3, - ASSET_OBJECT_ID_GLOVE, - ASSET_OBJECT_ID_FLAMINGTORCH, - ASSET_OBJECT_ID_MIST, - ASSET_OBJECT_ID_DOME4, - ASSET_OBJECT_ID_TEXSCROLL, - ASSET_OBJECT_ID_FAN, - ASSET_OBJECT_ID_KREMPLANE, - ASSET_OBJECT_ID_BADGERPLANE, - ASSET_OBJECT_ID_TORTPLANE, - ASSET_OBJECT_ID_CONKA, - ASSET_OBJECT_ID_LOG, - ASSET_OBJECT_ID_MODECHANGE, - ASSET_OBJECT_ID_JETENGINE, - ASSET_OBJECT_ID_BLUEBERRYBUSH, - ASSET_OBJECT_ID_RUBBERSNOWTREE, - ASSET_OBJECT_ID_SKINNYSNOWTREE, - ASSET_OBJECT_ID_XMASTREE, - ASSET_OBJECT_ID_ALPINESNOWTREE, - ASSET_OBJECT_ID_RUBBERTREE, - ASSET_OBJECT_ID_BOULDER, - ASSET_OBJECT_ID_STOPWATCHMAN, - ASSET_OBJECT_ID_TIGERCAR, - ASSET_OBJECT_ID_TROPHYCAB, - ASSET_OBJECT_ID_COIN, - ASSET_OBJECT_ID_BANJOCAR, - ASSET_OBJECT_ID_CHICKENCAR, - ASSET_OBJECT_ID_MOUSECAR, - ASSET_OBJECT_ID_TIGERHOVER, - ASSET_OBJECT_ID_BANJOHOVER, - ASSET_OBJECT_ID_CHICKENHOVER, - ASSET_OBJECT_ID_MOUSEHOVER, - ASSET_OBJECT_ID_TIGPLANE, - ASSET_OBJECT_ID_BANJOPLANE, - ASSET_OBJECT_ID_CHICKENPLANE, - ASSET_OBJECT_ID_MOUSEPLANE, - ASSET_OBJECT_ID_EGGCREATOR, - ASSET_OBJECT_ID_CHARACTERFLAG, - ASSET_OBJECT_ID_FLYCOIN, - ASSET_OBJECT_ID_GOLDENBALLOON, - ASSET_OBJECT_ID_DOME6, - ASSET_OBJECT_ID_DOME10, - ASSET_OBJECT_ID_PALMTREETOP, - ASSET_OBJECT_ID_WHALE, - ASSET_OBJECT_ID_DINOSAUR2, - ASSET_OBJECT_ID_DINOSAUR3, - ASSET_OBJECT_ID_RGBALIGHT, - ASSET_OBJECT_ID_PALMPLANT, - ASSET_OBJECT_ID_SNOWBALL, - ASSET_OBJECT_ID_BUOY, - ASSET_OBJECT_ID_SILVERCOIN, - ASSET_OBJECT_ID_WEATHER, - ASSET_OBJECT_ID_AIRZIPPERS, - ASSET_OBJECT_ID_FIRTREE, - ASSET_OBJECT_ID_RAMPWHALE, - ASSET_OBJECT_ID_RAMPSWITCH, - ASSET_OBJECT_ID_SEAMONSTER, - ASSET_OBJECT_ID_BONUSGEM, - ASSET_OBJECT_ID_BONUS, - ASSET_OBJECT_ID_DOME7, - ASSET_OBJECT_ID_INTROCAM, - ASSET_OBJECT_ID_MAGICCARPET, - ASSET_OBJECT_ID_LENSFLARE, - ASSET_OBJECT_ID_LENSFLARESWITCH, - ASSET_OBJECT_ID_HAYSTACK, - ASSET_OBJECT_ID_PILLAR, - ASSET_OBJECT_ID_BOULDERANIM, - ASSET_OBJECT_ID_BOOST, - ASSET_OBJECT_ID_MONORAIL, - ASSET_OBJECT_ID_TROPHY, - ASSET_OBJECT_ID_GOLDTROPHY, - ASSET_OBJECT_ID_OILSLICK, - ASSET_OBJECT_ID_PIGHEADCOLOURS, - ASSET_OBJECT_ID_DOME11, - ASSET_OBJECT_ID_RARELOGO, - ASSET_OBJECT_ID_CHECKARROW, - ASSET_OBJECT_ID_BIGBOSSDOOR, - ASSET_OBJECT_ID_FIREBALLATTRACT, - ASSET_OBJECT_ID_FIREBALL, - ASSET_OBJECT_ID_SNOWBALLBOSS, - ASSET_OBJECT_ID_FROG, - ASSET_OBJECT_ID_TICKTROPHY, - ASSET_OBJECT_ID_SHIELD, - ASSET_OBJECT_ID_SELECTIONSHADOW, - ASSET_OBJECT_ID_BUBBLER, - ASSET_OBJECT_ID_PLANETYRE, - ASSET_OBJECT_ID_DOME8, - ASSET_OBJECT_ID_PALMTREETOPCHEA, - ASSET_OBJECT_ID_DOME9, - ASSET_OBJECT_ID_ANIMATION, - ASSET_OBJECT_ID_TIGERANIMPLANE, - ASSET_OBJECT_ID_BADGERANIMWALK, - ASSET_OBJECT_ID_ANIMCAMERA, - ASSET_OBJECT_ID_TIMBERDANCER, - ASSET_OBJECT_ID_PIPSYDANCER, - ASSET_OBJECT_ID_EMPTYHOVER, - ASSET_OBJECT_ID_ANIMDOME, - ASSET_OBJECT_ID_TIMBERANIMCAR, - ASSET_OBJECT_ID_NOENTRYDOOR, - ASSET_OBJECT_ID_N64LOGO, - ASSET_OBJECT_ID_WIZGHOSTS, - ASSET_OBJECT_ID_KREMSELECT, - ASSET_OBJECT_ID_BADGERSELECT, - ASSET_OBJECT_ID_TORTSELECT, - ASSET_OBJECT_ID_TIGERSELECT, - ASSET_OBJECT_ID_BANJOSELECT, - ASSET_OBJECT_ID_CHICKSELECT, - ASSET_OBJECT_ID_MOUSESELECT, - ASSET_OBJECT_ID_LEEFAN, - ASSET_OBJECT_ID_GBPARKWARDEN, - ASSET_OBJECT_ID_GOLDBALOONSPRIT, - ASSET_OBJECT_ID_LIGHTHOUSE, - ASSET_OBJECT_ID_SELECTIONHILL, - ASSET_OBJECT_ID_WIDESCREEN, - ASSET_OBJECT_ID_OVERRIDEPOS, - ASSET_OBJECT_ID_ANIMCAR, - ASSET_OBJECT_ID_TRIGGER, - ASSET_OBJECT_ID_BOLTGLOW, - ASSET_OBJECT_ID_POSTFORPARTY, - ASSET_OBJECT_ID_SPARKLYTHING, - ASSET_OBJECT_ID_ANIMDINOSAUR2, - ASSET_OBJECT_ID_TIMERANIMHOVER, - ASSET_OBJECT_ID_ANIMBADGERPLANE, - ASSET_OBJECT_ID_ANIMDINOSAUR1, - ASSET_OBJECT_ID_ANIMMOUSECAR, - ASSET_OBJECT_ID_ANIMTORT, - ASSET_OBJECT_ID_CHICKENANIMPLAN, - ASSET_OBJECT_ID_EMPTYHOVERANIM, - ASSET_OBJECT_ID_RANGETRIGGER, - ASSET_OBJECT_ID_KREMANIM, - ASSET_OBJECT_ID_MOUSEHOVERANIM, - ASSET_OBJECT_ID_TORTRUNNER, - ASSET_OBJECT_ID_ANIMBANJOPLANE, - ASSET_OBJECT_ID_CONKSELECT, - ASSET_OBJECT_ID_LASERGUN, - ASSET_OBJECT_ID_CONKAANIMCAR, - ASSET_OBJECT_ID_WAVEGENERATOR, - ASSET_OBJECT_ID_WAVEPOWER, - ASSET_OBJECT_ID_BUTTERFLY, - ASSET_OBJECT_ID_LASERBOLT, - ASSET_OBJECT_ID_FISH, - ASSET_OBJECT_ID_ANIMGENIE, - ASSET_OBJECT_ID_SPACESHIP1, - ASSET_OBJECT_ID_SPACESHIP2, - ASSET_OBJECT_ID_POLYGOLDBALOON, - ASSET_OBJECT_ID_GROUNDZIPPER, - ASSET_OBJECT_ID_ASTEROID, - ASSET_OBJECT_ID_PIRATESHIP, - ASSET_OBJECT_ID_BRIGHTSTAR, - ASSET_OBJECT_ID_WATERZIPPERS, - ASSET_OBJECT_ID_SPACESHIP3, - ASSET_OBJECT_ID_DOME12, - ASSET_OBJECT_ID_CHALDOOR, - ASSET_OBJECT_ID_STILLFROG, - ASSET_OBJECT_ID_PARKTROPHY, - ASSET_OBJECT_ID_BUTTERFLYBAIT, - ASSET_OBJECT_ID_BOSSDOOR, - ASSET_OBJECT_ID_PWSAFETELEPOINT, - ASSET_OBJECT_ID_TRICKYTOPS, - ASSET_OBJECT_ID_FLYINGCARPET, - ASSET_OBJECT_ID_DOME14, - ASSET_OBJECT_ID_PIGBOSS, - ASSET_OBJECT_ID_DOME13, - ASSET_OBJECT_ID_DOME15, - ASSET_OBJECT_ID_WALRUS, - ASSET_OBJECT_ID_DRAGONBOSS, - ASSET_OBJECT_ID_LAMPPOST, - ASSET_OBJECT_ID_SPACETREE, - ASSET_OBJECT_ID_MAGICRING, - ASSET_OBJECT_ID_HEADFORPOINT, - ASSET_OBJECT_ID_HOMING, - ASSET_OBJECT_ID_SPACECOLUMN2, - ASSET_OBJECT_ID_SPACECOLUMN3, - ASSET_OBJECT_ID_OCTOPUS, - ASSET_OBJECT_ID_PIGFACEANIMATOR, - ASSET_OBJECT_ID_PTERODACTYL, - ASSET_OBJECT_ID_SMOKECLOUD, - ASSET_OBJECT_ID_DOME16, - ASSET_OBJECT_ID_SWCAR, - ASSET_OBJECT_ID_AMULETPIECE1, - ASSET_OBJECT_ID_AMULETPIECE2, - ASSET_OBJECT_ID_AMULETPIECE3, - ASSET_OBJECT_ID_AMULETPIECE4, - ASSET_OBJECT_ID_STOPWATCHSELECT, - ASSET_OBJECT_ID_TICKTOCKHOVER, - ASSET_OBJECT_ID_TICKTOCKPLANE, - ASSET_OBJECT_ID_SWAMULET1, - ASSET_OBJECT_ID_SWAMULET2, - ASSET_OBJECT_ID_SWAMULET3, - ASSET_OBJECT_ID_SWAMULET4, - ASSET_OBJECT_ID_ANIMKEY, - ASSET_OBJECT_ID_TELEPORT, - ASSET_OBJECT_ID_DIDDYSELECT, - ASSET_OBJECT_ID_ROCKETSIGNPOST, - ASSET_OBJECT_ID_DIDDYHOVER, - ASSET_OBJECT_ID_LIGHTHOUSE1, - ASSET_OBJECT_ID_DIDDYCAR, - ASSET_OBJECT_ID_ANIMGENIE2, - ASSET_OBJECT_ID_DIDDYPLANE, - ASSET_OBJECT_ID_BANJODANCER, - ASSET_OBJECT_ID_SPACECOLUMN1, - ASSET_OBJECT_ID_MISSILEGLOW, - ASSET_OBJECT_ID_TERRYBOSS, - ASSET_OBJECT_ID_HOMINGGLOW, - ASSET_OBJECT_ID_TICKTOCKDANCER, - ASSET_OBJECT_ID_CONKADANCER, - ASSET_OBJECT_ID_GOLDCOIN, - ASSET_OBJECT_ID_TTDOOR, - ASSET_OBJECT_ID_MIDIFADEPOINT, - ASSET_OBJECT_ID_WIZPIGSHIP, - ASSET_OBJECT_ID_TRICKYANIM, - ASSET_OBJECT_ID_DOOROPENER, - ASSET_OBJECT_ID_MINISHIP, - ASSET_OBJECT_ID_OCTOBUBBLE, - ASSET_OBJECT_ID_DOME17, - ASSET_OBJECT_ID_DRAGONANIM, - ASSET_OBJECT_ID_ANIMOCTO, - ASSET_OBJECT_ID_PIGBOSS2, - ASSET_OBJECT_ID_WIZPIG, - ASSET_OBJECT_ID_WALRUS_ANIM, - ASSET_OBJECT_ID_PIGLOG, - ASSET_OBJECT_ID_WIZPIGROCKET, - ASSET_OBJECT_ID_KEITHPIGDOOR, - ASSET_OBJECT_ID_LIGHTNING, - ASSET_OBJECT_ID_MAGNETFX, - ASSET_OBJECT_ID_PIGROCKETEER, - ASSET_OBJECT_ID_PARTICLES2, - ASSET_OBJECT_ID_PIGBOULDER, - ASSET_OBJECT_ID_PIGBOULDER2, - ASSET_OBJECT_ID_PIGBOULDER3, - ASSET_OBJECT_ID_PIGBOULDER4, - ASSET_OBJECT_ID_PIGBOULDER5, - ASSET_OBJECT_ID_BIGPLANET, - ASSET_OBJECT_ID_ROCKETBIT1, - ASSET_OBJECT_ID_ROCKETBIT2, - ASSET_OBJECT_ID_LEVELNAME, - ASSET_OBJECT_ID_TRICKYANIM2, - ASSET_OBJECT_ID_TRICKYANIM3, - ASSET_OBJECT_ID_GENIEHEAD, - ASSET_OBJECT_ID_OCTOBOMB, - ASSET_OBJECT_ID_MIDICHSET, - ASSET_OBJECT_ID_ANIMGENIE3, - NULL_OBJECT_301_ID, - ASSET_OBJECT_ID_LIGHTHOUSE2, - ASSET_OBJECT_ID_CHICKENCHARACTE, - ASSET_OBJECT_ID_INFOPOINT, - - ASSET_LEVEL_OBJECT_TRANSLATION_TABLE_COUNT -} AssetLevelObjectTranslationTableEnum; - -/********** ASSET_AUDIO **********/ - -typedef enum AssetAudioEnum { - ASSET_AUDIO_0, - ASSET_AUDIO_1, - ASSET_AUDIO_2, - ASSET_AUDIO_3, - ASSET_AUDIO_4, - ASSET_AUDIO_5, - ASSET_AUDIO_6, - ASSET_AUDIO_7, - ASSET_AUDIO_8, - ASSET_AUDIO_9, - ASSET_AUDIO_10, - ASSET_AUDIO_11, - ASSET_AUDIO_12, - - ASSET_AUDIO_COUNT -} AssetAudioEnum; - -/********** ASSET_PARTICLES **********/ - -typedef enum AssetParticlesEnum { - ASSET_PARTICLES_0, - ASSET_PARTICLES_1, - ASSET_PARTICLES_2, - ASSET_PARTICLES_3, - ASSET_PARTICLES_4, - ASSET_PARTICLES_5, - ASSET_PARTICLES_6, - ASSET_PARTICLES_7, - ASSET_PARTICLES_8, - ASSET_PARTICLES_9, - ASSET_PARTICLES_10, - ASSET_PARTICLES_11, - ASSET_PARTICLES_12, - ASSET_PARTICLES_13, - ASSET_PARTICLES_14, - ASSET_PARTICLES_15, - ASSET_PARTICLES_16, - ASSET_PARTICLES_17, - ASSET_PARTICLES_18, - ASSET_PARTICLES_19, - ASSET_PARTICLES_20, - ASSET_PARTICLES_21, - ASSET_PARTICLES_22, - ASSET_PARTICLES_23, - ASSET_PARTICLES_24, - ASSET_PARTICLES_25, - ASSET_PARTICLES_26, - ASSET_PARTICLES_27, - ASSET_PARTICLES_28, - ASSET_PARTICLES_29, - ASSET_PARTICLES_30, - ASSET_PARTICLES_31, - ASSET_PARTICLES_32, - ASSET_PARTICLES_33, - ASSET_PARTICLES_34, - ASSET_PARTICLES_35, - ASSET_PARTICLES_36, - ASSET_PARTICLES_37, - ASSET_PARTICLES_38, - ASSET_PARTICLES_39, - ASSET_PARTICLES_40, - ASSET_PARTICLES_41, - ASSET_PARTICLES_42, - ASSET_PARTICLES_43, - ASSET_PARTICLES_44, - ASSET_PARTICLES_45, - ASSET_PARTICLES_46, - ASSET_PARTICLES_47, - ASSET_PARTICLES_48, - ASSET_PARTICLES_49, - ASSET_PARTICLES_50, - ASSET_PARTICLES_51, - ASSET_PARTICLES_52, - ASSET_PARTICLES_53, - ASSET_PARTICLES_54, - ASSET_PARTICLES_55, - ASSET_PARTICLES_56, - ASSET_PARTICLES_57, - ASSET_PARTICLES_58, - ASSET_PARTICLES_59, - ASSET_PARTICLES_60, - ASSET_PARTICLES_61, - ASSET_PARTICLES_62, - ASSET_PARTICLES_63, - ASSET_PARTICLES_64, - ASSET_PARTICLES_65, - ASSET_PARTICLES_66, - ASSET_PARTICLES_67, - ASSET_PARTICLES_68, - ASSET_PARTICLES_69, - - ASSET_PARTICLES_COUNT -} AssetParticlesEnum; - -/********** ASSET_PARTICLE_BEHAVIORS **********/ - -typedef enum AssetParticleBehaviorsEnum { - ASSET_PARTICLE_BEHAVIORS_0, - ASSET_PARTICLE_BEHAVIORS_1, - ASSET_PARTICLE_BEHAVIORS_2, - ASSET_PARTICLE_BEHAVIORS_3, - ASSET_PARTICLE_BEHAVIORS_4, - ASSET_PARTICLE_BEHAVIORS_5, - ASSET_PARTICLE_BEHAVIORS_6, - ASSET_PARTICLE_BEHAVIORS_7, - ASSET_PARTICLE_BEHAVIORS_8, - ASSET_PARTICLE_BEHAVIORS_9, - ASSET_PARTICLE_BEHAVIORS_10, - ASSET_PARTICLE_BEHAVIORS_11, - ASSET_PARTICLE_BEHAVIORS_12, - ASSET_PARTICLE_BEHAVIORS_13, - ASSET_PARTICLE_BEHAVIORS_14, - ASSET_PARTICLE_BEHAVIORS_15, - ASSET_PARTICLE_BEHAVIORS_16, - ASSET_PARTICLE_BEHAVIORS_17, - ASSET_PARTICLE_BEHAVIORS_18, - ASSET_PARTICLE_BEHAVIORS_19, - ASSET_PARTICLE_BEHAVIORS_20, - ASSET_PARTICLE_BEHAVIORS_21, - ASSET_PARTICLE_BEHAVIORS_22, - ASSET_PARTICLE_BEHAVIORS_23, - ASSET_PARTICLE_BEHAVIORS_24, - ASSET_PARTICLE_BEHAVIORS_25, - ASSET_PARTICLE_BEHAVIORS_26, - ASSET_PARTICLE_BEHAVIORS_27, - ASSET_PARTICLE_BEHAVIORS_28, - ASSET_PARTICLE_BEHAVIORS_29, - ASSET_PARTICLE_BEHAVIORS_30, - ASSET_PARTICLE_BEHAVIORS_31, - ASSET_PARTICLE_BEHAVIORS_32, - ASSET_PARTICLE_BEHAVIORS_33, - ASSET_PARTICLE_BEHAVIORS_34, - ASSET_PARTICLE_BEHAVIORS_35, - ASSET_PARTICLE_BEHAVIORS_36, - ASSET_PARTICLE_BEHAVIORS_37, - ASSET_PARTICLE_BEHAVIORS_38, - ASSET_PARTICLE_BEHAVIORS_39, - ASSET_PARTICLE_BEHAVIORS_40, - ASSET_PARTICLE_BEHAVIORS_41, - ASSET_PARTICLE_BEHAVIORS_42, - ASSET_PARTICLE_BEHAVIORS_43, - ASSET_PARTICLE_BEHAVIORS_44, - ASSET_PARTICLE_BEHAVIORS_45, - ASSET_PARTICLE_BEHAVIORS_46, - ASSET_PARTICLE_BEHAVIORS_47, - ASSET_PARTICLE_BEHAVIORS_48, - ASSET_PARTICLE_BEHAVIORS_49, - ASSET_PARTICLE_BEHAVIORS_50, - ASSET_PARTICLE_BEHAVIORS_51, - ASSET_PARTICLE_BEHAVIORS_52, - ASSET_PARTICLE_BEHAVIORS_53, - ASSET_PARTICLE_BEHAVIORS_54, - ASSET_PARTICLE_BEHAVIORS_55, - ASSET_PARTICLE_BEHAVIORS_56, - ASSET_PARTICLE_BEHAVIORS_57, - ASSET_PARTICLE_BEHAVIORS_58, - ASSET_PARTICLE_BEHAVIORS_59, - ASSET_PARTICLE_BEHAVIORS_60, - ASSET_PARTICLE_BEHAVIORS_61, - ASSET_PARTICLE_BEHAVIORS_62, - ASSET_PARTICLE_BEHAVIORS_63, - ASSET_PARTICLE_BEHAVIORS_64, - ASSET_PARTICLE_BEHAVIORS_65, - ASSET_PARTICLE_BEHAVIORS_66, - ASSET_PARTICLE_BEHAVIORS_67, - ASSET_PARTICLE_BEHAVIORS_68, - ASSET_PARTICLE_BEHAVIORS_69, - ASSET_PARTICLE_BEHAVIORS_70, - ASSET_PARTICLE_BEHAVIORS_71, - ASSET_PARTICLE_BEHAVIORS_72, - ASSET_PARTICLE_BEHAVIORS_73, - ASSET_PARTICLE_BEHAVIORS_74, - - ASSET_PARTICLE_BEHAVIORS_COUNT -} AssetParticleBehaviorsEnum; - -/********** ASSET_FONTS **********/ - -typedef enum AssetFontsEnum { - ASSET_FONTS_FUNFONT, - ASSET_FONTS_SMALLFONT, - ASSET_FONTS_BIGFONT, - ASSET_FONTS_SUBTITLEFONT, - - ASSET_FONTS_COUNT -} AssetFontsEnum; - -/********** ASSET_TTGHOSTS **********/ - -typedef enum AssetTtghostsEnum { - ASSET_TTGHOSTS_FOSSILCANYON, - ASSET_TTGHOSTS_PIRATELAGOON, - ASSET_TTGHOSTS_ANCIENTLAKE, - ASSET_TTGHOSTS_WALRUSCOVE, - ASSET_TTGHOSTS_HOTTOPVOLCANO, - ASSET_TTGHOSTS_WHALEBAY, - ASSET_TTGHOSTS_SNOWBALLVALLEY, - ASSET_TTGHOSTS_CRESCENTISLAND, - ASSET_TTGHOSTS_EVERFROSTPEAK, - ASSET_TTGHOSTS_SPACEPORTALPHA, - ASSET_TTGHOSTS_SPACEDUSTALLEY, - ASSET_TTGHOSTS_GREENWOODVILLAGE, - ASSET_TTGHOSTS_BOULDERCANYON, - ASSET_TTGHOSTS_WINDMILLPLAINS, - ASSET_TTGHOSTS_FROSTYVILLAGE, - ASSET_TTGHOSTS_JUNGLEFALLS, - ASSET_TTGHOSTS_TREASURECAVES, - ASSET_TTGHOSTS_HAUNTEDWOODS, - ASSET_TTGHOSTS_DARKMOONCAVERNS, - ASSET_TTGHOSTS_STARCITY, - - ASSET_TTGHOSTS_COUNT -} AssetTtghostsEnum; - -#endif diff --git a/mods/assets/examples/CustomModelTest/asset_object_models.meta.json b/mods/assets/examples/CustomModelTest/asset_object_models.meta.json new file mode 100644 index 00000000..f57b2700 --- /dev/null +++ b/mods/assets/examples/CustomModelTest/asset_object_models.meta.json @@ -0,0 +1,12 @@ +{ + "files": { + "order": [ + "ASSET_CUSTOM_TESTCUBE" + ], + "sections": { + "ASSET_CUSTOM_TESTCUBE": { + "filename": "okCube.json" + } + } + } +} \ No newline at end of file diff --git a/mods/assets/examples/CustomModelTest/meta.json b/mods/assets/examples/CustomModelTest/meta.json new file mode 100644 index 00000000..94df540e --- /dev/null +++ b/mods/assets/examples/CustomModelTest/meta.json @@ -0,0 +1,5 @@ +{ + "name": "Custom Model Test", + "authors" : ["Example"], + "description": "A simple cube model with a custom texture that replaces the N64 logo on the bootup screen." +} \ No newline at end of file diff --git a/mods/assets/examples/CustomModelTest/objects/headers/N64logo.json b/mods/assets/examples/CustomModelTest/objects/headers/N64logo.json new file mode 100644 index 00000000..40417f06 --- /dev/null +++ b/mods/assets/examples/CustomModelTest/objects/headers/N64logo.json @@ -0,0 +1,6 @@ +{ + "models": [ + "ASSET_CUSTOM_TESTCUBE" + ], + "merge-type": "patch" +} diff --git a/mods/assets/examples/CustomModelTest/objects/models/ok.png b/mods/assets/examples/CustomModelTest/objects/models/ok.png new file mode 100644 index 0000000000000000000000000000000000000000..e6eea350ec6e4fb997a177d351a9de888f97edc3 GIT binary patch literal 2710 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-V36TpVqjpHQ=Zkxz`(#*9OUlAuNSs54@I14-?iy0XB4uLSEsD@Vq0|S?~r;B5VhxgX7>WGk1sk-ws zi_e`g_}X_a(zoN}7saIVA*?dNA^TK+!%KoxWy`$Vn|@Z;et&Bdx_ox=4$0>2)xz9MY#iTANPf2Y%&z#QU;z z_~I|`ZTp`-Gv97JzdK>_A=Zf5ACGce{SbKd-_rG4#I~+|n`U}YNa|06rVT@T{EINJ z-%e}m5~r@a>A!V-B5T#A$vl0V*J{Qu41Z}nWAobli6Qywd@6?{I+hx5RN*iFa$(m6 z1HFA8&LoRfcD;Gp$7<~xe0tN_%3JgL^dhA~G8@>OHY}dwzv1)X*;BG zq#%Q_`0f4sbJl!%a(AL#!i8Ixr#SO*hj3hGoD_XPL{VbPH-&G~&93aXHqT$bH*Ct% z8&@L!7Tmt9y?Ivijg(f+)fSug-irJY^7G=MBYteAk{&(Jl{Rl#?#i}e5fl6CrQOTl z`5(W+qQYcq$|DXI~E!*9`w`C)jP}9?z z$+hmSid>o-IaE%s7h8X$e9QlT$%p$YPIeq!#gZb_B$PMTB168e)pA_C{ z-ZJsG&vfDZt+La--ZIo)X5HQWu*T(p{_=`RABqnaFlhg;*t}=kONW|M3bt{aPKv_1 zZ{H?~>DHg0cIj|=PYb8KcpJA0Ltnz9N1O}HBW~W4(^bqCRkC*F2)d=7rhLM|mT6P; z0Y~APbKX3>HpOG*?bkvIlbCcGN}5miJ)h-UeR9oTk-)|M& zefoDzRrgtV`7$LiZ*e)q_%6ZQQNZ)08N=1e%u>t!vCh+N4zIadiFgBR7^hoZ9s@JzurLcAlVuz@6(kYp-5f%zlO8fqYk=g|?bMlimb3frqcn z|Lxmb$DS{F_2bghUsvh6o!vF3)4XMkLF&uYyuQyB?NjeLN^s~xq;K2z zbDvxAipSpby?ZJQBhODrd6BEgn9@@E{mV-R*6i-Amvx-ajf)BE!~ z{fjS7d!O-|!}`^;-^u;+X7$eKZ~iK@|9e%ogaR{v$Bkp#UQShi&peskp3|PQ-!k(1 z;+KEkiCfuoKWnd>xWq9#ese+hNu7w=ClFPYJYD<~WfxU*$lw$8rEC1|l!@)Rj`~3&MUhUjhRkt9Jc6Uc^fw=xvQ=&IMYAIZ^xI`6QC&6L!v7lVMT* z=kv>D=5^of`8YH>SKR!Q82P?oT2N}|9g&wujyz|2$@G%t?ZOP#w06_l)8D=u-dMT# zh-QjVL&h@EqsFv? zO~_$+Z1J+Wkt=pa?8sPs)UwrUj{9Y{TjHL-l`{QR&bnPH(VA(q|8Dj7HB;pkHpRH_ zc_tB_W572(b+-2UlvA$v3}Jw@>Se zRbF=6ZogkwX{lM5YqWN$`mtYUTg4yAdGL8Cv$HK}e%v*C`Y%3p+dnh6zP+&_yW`gS zE9d^bT)Us;&!IQD!Yi!ym3SrmI+Cm@I#J8(OHNWs){Kbjs%ri{io$te&qrOYxSmZ(QOjuK=q>DLD=Ycs#vA<@G=1PTKn6%}=MBncKfK zwHx1lvQGW(JNf5XqVJce%IumoeL+da(#MXgzL%WYvg>har_o1Wj=LZDs+K*9*y8X# z@|o6^>$&%87x%@aPTI2im(P~{DQ!whsX0g2zjzhvyM4V$oaOm@8t-K!K61v%>n^Qj zNU6DU*>ly^&P5z;zgqpyc^2|KU7lleMd4v}<$PVA7jbfet2gTM=ADx&cAroz8*k+; zX?Ha8m-a5J71fKU9=3DLDC=cc*mCRezSlm>6tw(a@3Wt_+*8Tpy?#kieMrg2h4PP7 zd%BZ%9p6&ua%Nhli$^&7#;^ab9KF(XLGC|0i>11c;>pGq1_lNOPgg&ebxsLQ0L8L3 AAOHXW literal 0 HcmV?d00001 diff --git a/mods/assets/examples/CustomModelTest/objects/models/okCube.json b/mods/assets/examples/CustomModelTest/objects/models/okCube.json new file mode 100644 index 00000000..38da0e52 --- /dev/null +++ b/mods/assets/examples/CustomModelTest/objects/models/okCube.json @@ -0,0 +1,4 @@ +{ + "model": "okCube.obj", + "type": "ObjectModel" +} diff --git a/mods/assets/examples/CustomModelTest/objects/models/okCube.mtl b/mods/assets/examples/CustomModelTest/objects/models/okCube.mtl new file mode 100644 index 00000000..a0d7d83a --- /dev/null +++ b/mods/assets/examples/CustomModelTest/objects/models/okCube.mtl @@ -0,0 +1,12 @@ +# Blender 4.2.3 LTS MTL File: 'okCube.blend' +# www.blender.org + +newmtl OK +Ns 250.000000 +Ka 1.000000 1.000000 1.000000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.500000 +d 1.000000 +illum 2 +map_Kd ok.png diff --git a/mods/assets/examples/CustomModelTest/objects/models/okCube.obj b/mods/assets/examples/CustomModelTest/objects/models/okCube.obj new file mode 100644 index 00000000..e65a8e00 --- /dev/null +++ b/mods/assets/examples/CustomModelTest/objects/models/okCube.obj @@ -0,0 +1,50 @@ +# Blender 4.2.3 LTS +# www.blender.org +mtllib okCube.mtl +o Cube +v -1.000000 -1.000000 1.000000 +v -1.000000 1.000000 1.000000 +v -1.000000 -1.000000 -1.000000 +v -1.000000 1.000000 -1.000000 +v 1.000000 -1.000000 1.000000 +v 1.000000 1.000000 1.000000 +v 1.000000 -1.000000 -1.000000 +v 1.000000 1.000000 -1.000000 +vt 0.997037 0.999800 +vt 0.001401 0.004664 +vt 0.996713 0.004264 +vt 1.000502 1.001801 +vt -0.000438 -0.001309 +vt 0.999901 0.006264 +vt 0.998942 0.999685 +vt -0.000837 0.000692 +vt 1.001076 0.004442 +vt 1.001248 1.009469 +vt 0.001877 -0.005005 +vt 1.001871 -0.004697 +vt 0.995394 0.004395 +vt -0.000019 0.996097 +vt 0.003106 0.005796 +vt 0.999416 0.002147 +vt -0.002540 1.000085 +vt -0.002540 0.002147 +vt 0.001724 1.000200 +vt 0.000501 1.003068 +vt -0.002671 0.999511 +vt 0.001254 1.009161 +vt 0.998585 0.993865 +vt 0.999416 1.000085 +s 0 +usemtl OK +f 2/1 3/2 1/3 +f 4/4 7/5 3/6 +f 8/7 5/8 7/9 +f 6/10 1/11 5/12 +f 7/13 1/14 3/15 +f 4/16 6/17 8/18 +f 2/1 4/19 3/2 +f 4/4 8/20 7/5 +f 8/7 6/21 5/8 +f 6/10 2/22 1/11 +f 7/13 5/23 1/14 +f 4/16 2/24 6/17 diff --git a/src/font.c b/src/font.c index c8cc6796..1dc9d8b4 100644 --- a/src/font.c +++ b/src/font.c @@ -1344,7 +1344,7 @@ void func_800C6464_C7064(void) { } } - D_8012C2A4_EE5E4 = (FontData_JP *) load_asset_section_from_rom(ASSET_BINARY_45); + D_8012C2A4_EE5E4 = (FontData_JP *) load_asset_section_from_rom(ASSET_JAPANESE_FONTS_TABLE); // Init the 4 pointers in D_8012C2A8_EE5E8 (table for spacing of each character in every font) D_8012C2A8_EE5E8[0] = mempool_alloc_safe(NUMBER_OF_JP_FONTS * JP_FONT_ARRAY_SIZE, COLOUR_TAG_RED); @@ -1356,7 +1356,7 @@ void func_800C6464_C7064(void) { for (i = 0; i < 4; i++) { jpFontHeader = &D_8012C2A4_EE5E4[i]; for (charIndex = 0; charIndex < JP_FONT_ARRAY_SIZE; charIndex++) { - load_asset_to_address(ASSET_BINARY_46, (u32) jpFontData, + load_asset_to_address(ASSET_JAPANESE_FONTS, (u32) jpFontData, jpFontHeader->offsetToData + (charIndex * jpFontHeader->bytesPerCharacter), 0x40); D_8012C2A8_EE5E8[i]->spacing[charIndex] = jpFontData->spacing; } @@ -1473,7 +1473,7 @@ s32 func_800C68CC_C74CC(u16 arg0) { } } asset = &D_8012C2C0_EE600[curIndex]; - load_asset_to_address(ASSET_BINARY_46, (u32) asset, + load_asset_to_address(ASSET_JAPANESE_FONTS, (u32) asset, D_8012C2A4_EE5E4[fontInUse].offsetToData + (D_8012C2A4_EE5E4[fontInUse].bytesPerCharacter * arg0), D_8012C2A4_EE5E4[fontInUse].bytesPerCharacter); diff --git a/tools/dkr_assets_tool_extract.json b/tools/dkr_assets_tool_extract.json new file mode 100644 index 00000000..b50050fd --- /dev/null +++ b/tools/dkr_assets_tool_extract.json @@ -0,0 +1,34199 @@ +{ + "inputs-supported": [ + { + "name": "DKR USA 1.0", + "sha1": "0cb115d8716dbbc2922fda38e533b9fe63bb9670", + "assets": 969568, + "assets_end": 11310640, + "dkr_version": "us.v77" + }, + { + "name": "DKR USA 1.1", + "sha1": "6d96743d46f8c0cd0edb0ec5600b003c89b93755", + "assets": 970976, + "assets_end": 12111824, + "dkr_version": "us.v80" + }, + { + "name": "DKR PAL 1.0", + "sha1": "dd5d64dd140cb7aa28404fa35abdcaba33c29260", + "assets": 969712, + "assets_end": 11310784, + "dkr_version": "pal.v77" + }, + { + "name": "DKR PAL 1.1", + "sha1": "b7f628073237b3d211d40406aa0884ff8fdd70d5", + "assets": 971120, + "assets_end": 12111968, + "dkr_version": "pal.v80" + }, + { + "name": "DKR JAPAN", + "sha1": "23ba3d302025153d111416e751027cef11213a19", + "assets": 976336, + "assets_end": 12117216, + "dkr_version": "jpn.v79" + } + ], + "files": [ + { + "build-id": "ASSET_AI_BEHAVIOUR_0", + "filename": "asset_ai_behaviour_0", + "folder": "unknown", + "sha1": "11d991bbadd25d5a60755a47c85a339c13405af8", + "type": "Binary" + }, + { + "build-id": "ASSET_AI_BEHAVIOUR_1", + "filename": "asset_ai_behaviour_1", + "folder": "unknown", + "sha1": "c2a355703284d6a41948041ea3f8b3afa9e7319a", + "type": "Binary" + }, + { + "build-id": "ASSET_AI_BEHAVIOUR_2", + "filename": "asset_ai_behaviour_2", + "folder": "unknown", + "sha1": "7c8390476f5b7a30ce8eebb4ae315f04c6defd10", + "type": "Binary" + }, + { + "build-id": "ASSET_AI_BEHAVIOUR_3", + "filename": "asset_ai_behaviour_3", + "folder": "unknown", + "sha1": "5c15e2fe7b13d5c89d1a76e70fc0988eb3cc262a", + "type": "Binary" + }, + { + "build-id": "ASSET_AI_BEHAVIOUR_4", + "filename": "asset_ai_behaviour_4", + "folder": "unknown", + "sha1": "9e7d587524c7f3318b252e149e5bdd800638f62e", + "type": "Binary" + }, + { + "build-id": "ASSET_AI_BEHAVIOUR_5", + "filename": "asset_ai_behaviour_5", + "folder": "unknown", + "sha1": "2bd8cc171a47d6dbabf0be4d365bb11cea9dc556", + "type": "Binary" + }, + { + "build-id": "ASSET_AI_BEHAVIOUR_6", + "filename": "asset_ai_behaviour_6", + "folder": "unknown", + "sha1": "26ebf868398e7e82e73084a903cf4e9a93d2e07e", + "type": "Binary" + }, + { + "build-id": "ASSET_AI_BEHAVIOUR_7", + "filename": "asset_ai_behaviour_7", + "folder": "unknown", + "sha1": "5b032b94ec5bb28644ae3474458160943bce6963", + "type": "Binary" + }, + { + "build-id": "ASSET_AI_BEHAVIOUR_8", + "filename": "asset_ai_behaviour_8", + "folder": "unknown", + "sha1": "f121ba198a7371a7db25ccb5c32e84a45b236755", + "type": "Binary" + }, + { + "build-id": "ASSET_AI_BEHAVIOUR_9", + "filename": "asset_ai_behaviour_9", + "folder": "unknown", + "sha1": "1de4b87a19153de1b8033a3ee2f9f2d2f2401847", + "type": "Binary" + }, + { + "filename": "white_wall_200496", + "build-id": "ASSET_TEX3D_SPACE_WHITEWALL200496", + "folder": "space", + "type": "Texture", + "sha1": "9bd86aa695d30a1c92060faa051b579145a519dd" + }, + { + "filename": "green_wall_337", + "build-id": "ASSET_TEX3D_SPACE_GREENWALL337", + "folder": "space", + "type": "Texture", + "sha1": "a5aecd3554baf4fa6df6b43b6cc2f7ea1f9bc91e" + }, + { + "filename": "white_wall", + "build-id": "ASSET_TEX3D_SPACE_WHITEWALL", + "folder": "space", + "type": "Texture", + "sha1": "f40f7bbdc1a3373aa2e2e052488b216947d41ccf" + }, + { + "filename": "white_wall_with_arrow", + "build-id": "ASSET_TEX3D_SPACE_WHITEWALLWITHARROW", + "folder": "space", + "type": "Texture", + "sha1": "f2ea8ad30871dea04e31eee00535ae69667f835d" + }, + { + "filename": "neon_rocket_sign", + "build-id": "ASSET_TEX3D_SPACE_NEONROCKETSIGN", + "folder": "space", + "type": "Texture", + "sha1": "10684a74bb0fb132cb28f99da5f17031ff8f096f" + }, + { + "filename": "water", + "build-id": "ASSET_TEX3D_COMMON_WATER", + "folder": "common", + "type": "Texture", + "sha1": "21f57fe8ca0960788b8c4ac52fd28647f59b0306" + }, + { + "filename": "water2", + "build-id": "ASSET_TEX3D_COMMON_WATER2", + "folder": "common", + "type": "Texture", + "sha1": "c0b6d27b96983e9bb6c1a86cef6ee07949577349" + }, + { + "filename": "zipper", + "build-id": "ASSET_TEX3D_OBJECTS_ZIPPER", + "folder": "objects", + "type": "Texture", + "sha1": "6fc585b92254b0f4aefaab9eac2cf0cc59a0fcea" + }, + { + "filename": "ceiling_lights", + "build-id": "ASSET_TEX3D_SPACE_CEILINGLIGHTS", + "folder": "space", + "type": "Texture", + "sha1": "3c6e411bca8a7699c4e6ae4518d6a8b9435fa4d9" + }, + { + "filename": "white_wall_alpha_0", + "build-id": "ASSET_TEX3D_SPACE_WHITEWALLALPHA_0", + "folder": "space", + "type": "Texture", + "sha1": "7f20787a2078833eaf2b5c363dc0ea263ec56490" + }, + { + "filename": "white_wall_alpha_1", + "build-id": "ASSET_TEX3D_SPACE_WHITEWALLALPHA_1", + "folder": "space", + "type": "Texture", + "sha1": "64a63e92a3139e26ef23dc725c540e3eac3974c9" + }, + { + "filename": "white_wall_blue_line", + "build-id": "ASSET_TEX3D_SPACE_WHITEWALLBLUELINE", + "folder": "space", + "type": "Texture", + "sha1": "e093726cf5e9b7dc55f5b2f97375ecb6b9873e14" + }, + { + "filename": "water3", + "build-id": "ASSET_TEX3D_COMMON_WATER3", + "folder": "common", + "type": "Texture", + "sha1": "bcd8ce3018c586a31208eb2d2dc830476553c267" + }, + { + "filename": "water_still", + "build-id": "ASSET_TEX3D_COMMON_WATERSTILL", + "folder": "common", + "type": "Texture", + "sha1": "3c8ba85842e3eb896b6d82a5a2283e5991bb90bd" + }, + { + "filename": "red_arrow_sign", + "build-id": "ASSET_TEX3D_COMMON_REDARROWSIGN", + "folder": "common", + "type": "Texture", + "sha1": "cfd448cdd3f12b47e93d7195941e28d7047a1b62" + }, + { + "filename": "water4", + "build-id": "ASSET_TEX3D_COMMON_WATER4", + "folder": "common", + "type": "Texture", + "sha1": "6f6733f82068d4172dc01b8ff9038becd82d9347" + }, + { + "filename": "lava", + "build-id": "ASSET_TEX3D_COMMON_LAVA", + "folder": "common", + "type": "Texture", + "sha1": "ee7cd1b2b2eee8c9df4332e62a1984296c770dc3" + }, + { + "filename": "zipper2", + "build-id": "ASSET_TEX3D_OBJECTS_ZIPPER2", + "folder": "objects", + "type": "Texture", + "sha1": "9f876c1f2ea713abc8c1f4d28e42e983486f6b51" + }, + { + "filename": "pirateship_taffrail", + "build-id": "ASSET_TEX3D_TROPICAL_PIRATESHIPTAFFRAIL", + "folder": "tropical", + "type": "Texture", + "sha1": "ef7e1c05f23d085a0822a26a2951edab58d732c8" + }, + { + "filename": "yellow_arrow_sign", + "build-id": "ASSET_TEX3D_COMMON_YELLOWARROWSIGN", + "folder": "common", + "type": "Texture", + "sha1": "17b7f01b58175efc7093b365d8c40d934db26c5b" + }, + { + "filename": "floor_tile", + "build-id": "ASSET_TEX3D_COMMON_FLOORTILE", + "folder": "common", + "type": "Texture", + "sha1": "2fd2eeabced58862b442256defcf7a6c251a3262" + }, + { + "filename": "ice", + "build-id": "ASSET_TEX3D_WINTER_ICE", + "folder": "winter", + "type": "Texture", + "sha1": "0d5b55d8a895a0ee5788be7017182f624db89f70" + }, + { + "filename": "ice2", + "build-id": "ASSET_TEX3D_WINTER_ICE2", + "folder": "winter", + "type": "Texture", + "sha1": "0d5b55d8a895a0ee5788be7017182f624db89f70" + }, + { + "filename": "snowy_wall", + "build-id": "ASSET_TEX3D_WINTER_SNOWYWALL", + "folder": "winter", + "type": "Texture", + "sha1": "c1bac8dd23008468558860581bda7d68eab8cea9" + }, + { + "filename": "candy_cane", + "build-id": "ASSET_TEX3D_WINTER_CANDYCANE", + "folder": "winter", + "type": "Texture", + "sha1": "33b673c6389dbbec06de383b692a0242feeb5e1c" + }, + { + "filename": "igloo_brick", + "build-id": "ASSET_TEX3D_WINTER_IGLOOBRICK", + "folder": "winter", + "type": "Texture", + "sha1": "635829b27e72698d88259d8cf5c85d5aa91a9c15" + }, + { + "filename": "sand", + "build-id": "ASSET_TEX3D_COMMON_SAND", + "folder": "common", + "type": "Texture", + "sha1": "adddee9925fe08350069ecdad04a43f687437a90" + }, + { + "filename": "boost_loop", + "build-id": "ASSET_TEX3D_SPACE_BOOSTLOOP", + "folder": "space", + "type": "Texture", + "sha1": "4b2195653de3ec2f677eaf339b755674eb12fbde" + }, + { + "filename": "dirt_wall_sandy", + "build-id": "ASSET_TEX3D_TROPICAL_DIRTWALLSANDY", + "folder": "tropical", + "type": "Texture", + "sha1": "d42cc953da03ebd5b4a5bcb2fc100830b4e747c0" + }, + { + "filename": "dirt_wall", + "build-id": "ASSET_TEX3D_TROPICAL_DIRTWALL", + "folder": "tropical", + "type": "Texture", + "sha1": "0bf0915b8047e1f7d957daff063ff7adf9e08834" + }, + { + "filename": "rock_guardrail", + "build-id": "ASSET_TEX3D_TROPICAL_ROCKGUARDRAIL", + "folder": "tropical", + "type": "Texture", + "sha1": "4a07b1a3af52f4e7f2fd11a14055603e726b9b21" + }, + { + "filename": "blue_yellow_arrows", + "build-id": "ASSET_TEX3D_COMMON_BLUEYELLOWARROWS", + "folder": "common", + "type": "Texture", + "sha1": "9b55d762d66b5992c899556f23c7a2f7d5964add" + }, + { + "filename": "castle_window", + "build-id": "ASSET_TEX3D_MEDIEVAL_CASTLEWINDOW", + "folder": "medieval", + "type": "Texture", + "sha1": "dca79fad4a87b717cf0ec98471efad6fddd78b51" + }, + { + "filename": "castle_bridge", + "build-id": "ASSET_TEX3D_MEDIEVAL_CASTLEBRIDGE", + "folder": "medieval", + "type": "Texture", + "sha1": "070dd4846eeb3e0fa53403c310f7a05f40330517" + }, + { + "filename": "yellow_stone", + "build-id": "ASSET_TEX3D_MEDIEVAL_YELLOWSTONE", + "folder": "medieval", + "type": "Texture", + "sha1": "10d6900d4d24c2587b9bc82ff6a8e4df840b6cd5" + }, + { + "filename": "yellow_stone_hillside", + "build-id": "ASSET_TEX3D_MEDIEVAL_YELLOWSTONEHILLSIDE", + "folder": "medieval", + "type": "Texture", + "sha1": "a3360b4cef3d1a8418cab18886f8edcbf76c4c0d" + }, + { + "filename": "beta_dkr_logo", + "build-id": "ASSET_TEX3D_UNUSED_BETADKRLOGO", + "folder": "unused", + "type": "Texture", + "sha1": "f3ee5219b2b36a8d223165b898e9f1701492c401" + }, + { + "filename": "finish_line_0", + "build-id": "ASSET_TEX3D_SPACE_FINISHLINE_0", + "folder": "space", + "type": "Texture", + "sha1": "4f67e3f81b006060c332eae68199283b5d79b37d" + }, + { + "filename": "finish_line_1", + "build-id": "ASSET_TEX3D_SPACE_FINISHLINE_1", + "folder": "space", + "type": "Texture", + "sha1": "b83f362bf54bdebbb1bda196a36ab9a3d7463b79" + }, + { + "filename": "finish_line_2", + "build-id": "ASSET_TEX3D_SPACE_FINISHLINE_2", + "folder": "space", + "type": "Texture", + "sha1": "3418fab0d11df75c1f70269821caa4d41986cada" + }, + { + "filename": "finish_line_3", + "build-id": "ASSET_TEX3D_SPACE_FINISHLINE_3", + "folder": "space", + "type": "Texture", + "sha1": "b0f800d572418c110f595fa4f755a7484e3f5c0e" + }, + { + "filename": "finish_line_4", + "build-id": "ASSET_TEX3D_SPACE_FINISHLINE_4", + "folder": "space", + "type": "Texture", + "sha1": "6083603e68d52865af6a67f25211717e13d37b41" + }, + { + "filename": "cave_wall", + "build-id": "ASSET_TEX3D_SPACE_CAVEWALL", + "folder": "space", + "type": "Texture", + "sha1": "ffe5f06b6b8de845742263b4b7df9a7d25d46683" + }, + { + "filename": "smokey_fence", + "build-id": "ASSET_TEX3D_MEDIEVAL_SMOKEYFENCE", + "folder": "medieval", + "type": "Texture", + "sha1": "1037281b31f92df9b67abac0f5824d67b7e6d286" + }, + { + "filename": "cobblestone_floor", + "build-id": "ASSET_TEX3D_COMMON_COBBLESTONEFLOOR", + "folder": "common", + "type": "Texture", + "sha1": "04a53dc1312fe983a12f2ef29ec14969b6fb5558" + }, + { + "filename": "hay", + "build-id": "ASSET_TEX3D_MEDIEVAL_HAY", + "folder": "medieval", + "type": "Texture", + "sha1": "443c852810e3d75a3475aad623843119cd472b2f" + }, + { + "filename": "hay_eye", + "build-id": "ASSET_TEX3D_MEDIEVAL_HAYEYE", + "folder": "medieval", + "type": "Texture", + "sha1": "9873f9a0f34ac01dfec4836ad1b44aab73ef0668" + }, + { + "filename": "sunkin_ship_floorboard", + "build-id": "ASSET_TEX3D_TROPICAL_SUNKINSHIPFLOORBOARD", + "folder": "tropical", + "type": "Texture", + "sha1": "22e2c469c34a909dddf6c623f85a1fa4dae7237b" + }, + { + "filename": "icy_floor", + "build-id": "ASSET_TEX3D_WINTER_ICYFLOOR", + "folder": "winter", + "type": "Texture", + "sha1": "0d2c73a992e5788e040c27cbc084b1199a153d3e" + }, + { + "filename": "windmill_base", + "build-id": "ASSET_TEX3D_MEDIEVAL_WINDMILLBASE", + "folder": "medieval", + "type": "Texture", + "sha1": "c7d5fa5ab19b0ef3b26c3d87a811b80bb6c5a053" + }, + { + "filename": "dirt_transition", + "build-id": "ASSET_TEX3D_MEDIEVAL_DIRTTRANSITION", + "folder": "medieval", + "type": "Texture", + "sha1": "12865d40ff8f6290f57ad20a7681121327a24dda" + }, + { + "filename": "wheat_field", + "build-id": "ASSET_TEX3D_MEDIEVAL_WHEATFIELD", + "folder": "medieval", + "type": "Texture", + "sha1": "35b5929652aef352e6144b83ed4101b690fc7666" + }, + { + "filename": "castle_walls_with_shadow", + "build-id": "ASSET_TEX3D_MEDIEVAL_CASTLEWALLSWITHSHADOW", + "folder": "medieval", + "type": "Texture", + "sha1": "4f93ca500b1dbaed2bd83100e47bb2bc6b331c9a" + }, + { + "filename": "castle_walls", + "build-id": "ASSET_TEX3D_MEDIEVAL_CASTLEWALLS", + "folder": "medieval", + "type": "Texture", + "sha1": "0af662a8c09524e4e726812809f5c6ca5a33e34f" + }, + { + "filename": "castle_merlon", + "build-id": "ASSET_TEX3D_MEDIEVAL_CASTLEMERLON", + "folder": "medieval", + "type": "Texture", + "sha1": "0b86f24afcd89d6cdc955fa7c71216021029a083" + }, + { + "filename": "orange_wall", + "build-id": "ASSET_TEX3D_DINO_ORANGEWALL", + "folder": "dino", + "type": "Texture", + "sha1": "0eec5fc5e1839af693209365391861855d186b9c" + }, + { + "filename": "white_wall_bricks", + "build-id": "ASSET_TEX3D_SPACE_WHITEWALLBRICKS", + "folder": "space", + "type": "Texture", + "sha1": "444d563c6e3a02cbab6a54aa83858cf782707a13" + }, + { + "filename": "proam64_balloon_red_line", + "build-id": "ASSET_TEX3D_UNUSED_PROAM64BALLOONREDLINE", + "folder": "unused", + "type": "Texture", + "sha1": "896279aecab9caaacb860109bebdfebe9bb9afeb" + }, + { + "filename": "fog", + "build-id": "ASSET_TEX3D_TROPICAL_FOG", + "folder": "tropical", + "type": "Texture", + "sha1": "9c32f133272e48279c494792a44a473ef90ba987" + }, + { + "filename": "windsail", + "build-id": "ASSET_TEX3D_MEDIEVAL_WINDSAIL", + "folder": "medieval", + "type": "Texture", + "sha1": "ede1ee273cf41d988abedfa3cc209fc592bf9693" + }, + { + "filename": "snowy_red_arrow_down", + "build-id": "ASSET_TEX3D_WINTER_SNOWYREDARROWDOWN", + "folder": "winter", + "type": "Texture", + "sha1": "8eaa81040ab0e280cc1a5b546b78fa1208e40599" + }, + { + "filename": "garden_fence", + "build-id": "ASSET_TEX3D_MEDIEVAL_GARDENFENCE", + "folder": "medieval", + "type": "Texture", + "sha1": "441d8476879e8f6aa698ee2719c7fe89c29b55fd" + }, + { + "filename": "village_white_wall", + "build-id": "ASSET_TEX3D_MEDIEVAL_VILLAGEWHITEWALL", + "folder": "medieval", + "type": "Texture", + "sha1": "f3dbde3a51c5c363e231127b45682ee9affc5d39" + }, + { + "filename": "hanging_moss", + "build-id": "ASSET_TEX3D_COMMON_HANGINGMOSS", + "folder": "common", + "type": "Texture", + "sha1": "2e8bde8d840983dee174a2ed3610e3d77a66dcc4" + }, + { + "filename": "hanging_moss2", + "build-id": "ASSET_TEX3D_COMMON_HANGINGMOSS2", + "folder": "common", + "type": "Texture", + "sha1": "2e8bde8d840983dee174a2ed3610e3d77a66dcc4" + }, + { + "filename": "grass", + "build-id": "ASSET_TEX3D_COMMON_GRASS", + "folder": "common", + "type": "Texture", + "sha1": "8c07d947483f7aad7ea4fcbba7714c3c8b06afdf" + }, + { + "filename": "grass2", + "build-id": "ASSET_TEX3D_COMMON_GRASS2", + "folder": "common", + "type": "Texture", + "sha1": "08e5dd9182ef86874e2331d328af14a55e9c99ca" + }, + { + "filename": "unknown_rocky_texture", + "build-id": "ASSET_TEX3D_WINTER_UNKNOWNROCKYTEXTURE", + "folder": "winter", + "type": "Texture", + "sha1": "b04b65bb2756af1ae341f9b1f472072bf875271f" + }, + { + "filename": "mossy_rock", + "build-id": "ASSET_TEX3D_TROPICAL_MOSSYROCK", + "folder": "tropical", + "type": "Texture", + "sha1": "f69278dcd629f37f87e49eb51a167bd29603eddd" + }, + { + "filename": "mossy_rock2", + "build-id": "ASSET_TEX3D_TROPICAL_MOSSYROCK2", + "folder": "tropical", + "type": "Texture", + "sha1": "55581fad58b93d0d18cfc1fc3e14e527e5931c72" + }, + { + "filename": "snowy_wall2", + "build-id": "ASSET_TEX3D_WINTER_SNOWYWALL2", + "folder": "tropical", + "type": "Texture", + "sha1": "b953c45d0804b49d8202f63855ee23b87cb2e5b5" + }, + { + "filename": "debug_chequered_redyellow", + "build-id": "ASSET_TEX3D_COMMON_DEBUGREDYELLOW", + "folder": "common", + "type": "Texture", + "sha1": "9a8cff2063b7dafb3cc502478e1b4da8d949aa79" + }, + { + "filename": "debug_purple", + "build-id": "ASSET_TEX3D_COMMON_DEBUGPURPLE", + "folder": "common", + "type": "Texture", + "sha1": "a50cda2f1ba3b25a145d1096b05cb70e908619bd" + }, + { + "filename": "ice3", + "build-id": "ASSET_TEX3D_WINTER_ICE3", + "folder": "winter", + "type": "Texture", + "sha1": "dc71fd0393d0782b18fcf7bbc9a9be9c37347911" + }, + { + "filename": "semitransparent_ice", + "build-id": "ASSET_TEX3D_WINTER_SEMITRANSICE", + "folder": "winter", + "type": "Texture", + "sha1": "1074f98729d5e1710f50aa583a4de70727c10b9c" + }, + { + "filename": "semitransparent_ice2", + "build-id": "ASSET_TEX3D_WINTER_SEMITRANSICE2", + "folder": "winter", + "type": "Texture", + "sha1": "41783eb62e141fdec90f85e5a6a7506d3478d89d" + }, + { + "filename": "semitransparent_ice3", + "build-id": "ASSET_TEX3D_WINTER_SEMITRANSICE3", + "folder": "winter", + "type": "Texture", + "sha1": "1074f98729d5e1710f50aa583a4de70727c10b9c" + }, + { + "filename": "tree_branch", + "build-id": "ASSET_TEX3D_MEDIEVAL_TREEBRANCH", + "folder": "medieval", + "type": "Texture", + "sha1": "69d08cb4df741be32d00f3cfc8db66ece78f11b8" + }, + { + "filename": "ice_ceiling", + "build-id": "ASSET_TEX3D_WINTER_ICECEILING", + "folder": "winter", + "type": "Texture", + "sha1": "4b7a5449aad8199d11714d1dffe562d4a6929b67" + }, + { + "filename": "hanging_ice_0", + "build-id": "ASSET_TEX3D_WINTER_HANGINGICE_0", + "folder": "winter", + "type": "Texture", + "sha1": "4f6f7dfe75ae54c84d9cf674dab0af9cfef5a003" + }, + { + "filename": "hanging_ice_1", + "build-id": "ASSET_TEX3D_WINTER_HANGINGICE_1", + "folder": "winter", + "type": "Texture", + "sha1": "4f6f7dfe75ae54c84d9cf674dab0af9cfef5a003" + }, + { + "filename": "hanging_ice_2", + "build-id": "ASSET_TEX3D_WINTER_HANGINGICE_2", + "folder": "winter", + "type": "Texture", + "sha1": "bfa2604ce1e0ea565804398d2c596c9157a9289e" + }, + { + "filename": "crystal", + "build-id": "ASSET_TEX3D_WINTER_CRYSTAL", + "folder": "winter", + "type": "Texture", + "sha1": "da8d72ce352192bed9f8265d8da81b8239c5a7ef" + }, + { + "filename": "crystal_shadow", + "build-id": "ASSET_TEX3D_WINTER_CRYSTALSHADOW", + "folder": "winter", + "type": "Texture", + "sha1": "25665449a014f50ead8025c2dd71b0cb38c63fb2" + }, + { + "filename": "dock64_0", + "build-id": "ASSET_TEX3D_SPACE_DOCK64_0", + "folder": "space", + "type": "Texture", + "sha1": "21096686a487a9d80f22f0ed143c219754506bc9" + }, + { + "filename": "dock64_1", + "build-id": "ASSET_TEX3D_SPACE_DOCK64_1", + "folder": "space", + "type": "Texture", + "sha1": "3e784c6b2c437bff049b495f9d5a6dc076b46594" + }, + { + "filename": "dock64_2", + "build-id": "ASSET_TEX3D_SPACE_DOCK64_2", + "folder": "space", + "type": "Texture", + "sha1": "451c709f66d915520cb3fef8708b459b4b7abf7c" + }, + { + "filename": "dock64_3", + "build-id": "ASSET_TEX3D_SPACE_DOCK64_3", + "folder": "space", + "type": "Texture", + "sha1": "ac878afda94930c4a656607a753c926a9baee5f3" + }, + { + "filename": "dock64_4", + "build-id": "ASSET_TEX3D_SPACE_DOCK64_4", + "folder": "space", + "type": "Texture", + "sha1": "a81b0bc8b664ce70abf6b853551b4a908c3ae5a7" + }, + { + "filename": "dock64_5", + "build-id": "ASSET_TEX3D_SPACE_DOCK64_5", + "folder": "space", + "type": "Texture", + "sha1": "ce7c12214abac1952c051c96f15caef2c33ae5a1" + }, + { + "filename": "dock64_6", + "build-id": "ASSET_TEX3D_SPACE_DOCK64_6", + "folder": "space", + "type": "Texture", + "sha1": "71e2e59fcfff485e47318e620ff00b6b7a6d6b09" + }, + { + "filename": "dock64_7", + "build-id": "ASSET_TEX3D_SPACE_DOCK64_7", + "folder": "space", + "type": "Texture", + "sha1": "4afe5031defa6369227c563441004c35a020d713" + }, + { + "filename": "dock64_8", + "build-id": "ASSET_TEX3D_SPACE_DOCK64_8", + "folder": "space", + "type": "Texture", + "sha1": "0d8de15d2dbae0958dbaf296aa457b5e013e3b62" + }, + { + "filename": "dock64_9", + "build-id": "ASSET_TEX3D_SPACE_DOCK64_9", + "folder": "space", + "type": "Texture", + "sha1": "1b89533257f70b3b51de2b15beeda0bd29d8d773" + }, + { + "filename": "dock64_10", + "build-id": "ASSET_TEX3D_SPACE_DOCK64_10", + "folder": "space", + "type": "Texture", + "sha1": "8acc167cb84a0035c219787d93a36271f01d6270" + }, + { + "filename": "dock64_11", + "build-id": "ASSET_TEX3D_SPACE_DOCK64_11", + "folder": "space", + "type": "Texture", + "sha1": "7bb46db3a2aa16286083ebfc302746b42fab59ad" + }, + { + "filename": "wood", + "build-id": "ASSET_TEX3D_COMMON_WOOD", + "folder": "common", + "type": "Texture", + "sha1": "1a89e35fb0943f9364aa1e9e09191d74faf3d9b5" + }, + { + "filename": "beta_n64logo_0", + "build-id": "ASSET_TEX3D_UNUSED_BETAN64LOGO_0", + "folder": "unused", + "type": "Texture", + "sha1": "f80da8b2ffeefa6bc471780e4186a3da9f55ad9c" + }, + { + "filename": "beta_n64logo_1", + "build-id": "ASSET_TEX3D_UNUSED_BETAN64LOGO_1", + "folder": "unused", + "type": "Texture", + "sha1": "a63c76da90e54c3c6b466fcc74b88147696ce952" + }, + { + "filename": "brown_brick_tile", + "build-id": "ASSET_TEX3D_TROPICAL_BROWNBRICKTILE", + "folder": "tropical", + "type": "Texture", + "sha1": "f4b7d5373466bb979c1eed6a977e8f69f64a0886" + }, + { + "filename": "snow", + "build-id": "ASSET_TEX3D_WINTER_SNOW", + "folder": "winter", + "type": "Texture", + "sha1": "7b9aa52040a2e6552d14f15299ea098be614a061" + }, + { + "filename": "snow2", + "build-id": "ASSET_TEX3D_WINTER_SNOW2", + "folder": "winter", + "type": "Texture", + "sha1": "694d5ce94e540470c7fc6907e37bc637ca6634e3" + }, + { + "filename": "semitransparent_ice4", + "build-id": "ASSET_TEX3D_WINTER_SEMITRANSICE4", + "folder": "winter", + "type": "Texture", + "sha1": "44f3587d8ae56ac17f5d9e17fb21a3cf1756dba4" + }, + { + "filename": "portal", + "build-id": "ASSET_TEX3D_COMMON_PORTAL", + "folder": "common", + "type": "Texture", + "sha1": "0d2c73a992e5788e040c27cbc084b1199a153d3e" + }, + { + "filename": "stone_tile", + "build-id": "ASSET_TEX3D_MEDIEVAL_STONETILE", + "folder": "medieval", + "type": "Texture", + "sha1": "3a5eb500c2042a318ecfc91eb4d27cd149166788" + }, + { + "filename": "stone_tile2", + "build-id": "ASSET_TEX3D_MEDIEVAL_STONETILE2", + "folder": "medieval", + "type": "Texture", + "sha1": "9349bb1b49904b4e016271be7fd4d94f7934d1a1" + }, + { + "filename": "brick_wall_with_snow", + "build-id": "ASSET_TEX3D_WINTER_BRICKWALLWITHSNOW", + "folder": "winter", + "type": "Texture", + "sha1": "575de753765716e394be7c1d6d05dd92f5ab44e2" + }, + { + "filename": "brick_wall", + "build-id": "ASSET_TEX3D_TROPICAL_BRICKWALL", + "folder": "tropical", + "type": "Texture", + "sha1": "11b6320e64d6cc660daa63c353f7ec877510e906" + }, + { + "filename": "wood_planks", + "build-id": "ASSET_TEX3D_COMMON_WOODPLANKS", + "folder": "common", + "type": "Texture", + "sha1": "b7ed822cd56ffe10482e3962cb21cb18866a8f47" + }, + { + "filename": "pirateship_wood_planks", + "build-id": "ASSET_TEX3D_TROPICAL_PIRATESHIPWOODPLANKS", + "folder": "tropical", + "type": "Texture", + "sha1": "d9bdf508fadf8ba4cb4c484015e3bf9b5a5f6e4f" + }, + { + "filename": "life_preserver_ring", + "build-id": "ASSET_TEX3D_COMMON_LIFEPRESERVERRING", + "folder": "common", + "type": "Texture", + "sha1": "19f53ed2889266a0813113201a8153a0d3a785d7" + }, + { + "filename": "red_stone", + "build-id": "ASSET_TEX3D_TROPICAL_REDSTONE", + "folder": "tropical", + "type": "Texture", + "sha1": "0453276a0af7ae951866917705faa9a540020038" + }, + { + "filename": "stone", + "build-id": "ASSET_TEX3D_COMMON_STONE", + "folder": "common", + "type": "Texture", + "sha1": "d880cd86215d75b62b44bec9dc2d8dc7005d1076" + }, + { + "filename": "rare_logo_stone", + "build-id": "ASSET_TEX3D_DINO_RARELOGOSTONE", + "folder": "dino", + "type": "Texture", + "sha1": "03c61a35afb25fea73b24fd6f9676a81166e2a0b" + }, + { + "filename": "stone_wall_sandy", + "build-id": "ASSET_TEX3D_TROPICAL_STONEWALLSANDY", + "folder": "tropical", + "type": "Texture", + "sha1": "f6cbf9a343b643ca2fb90c8ccd9db532b060d17a" + }, + { + "filename": "arrow_sign_shadow", + "build-id": "ASSET_TEX3D_COMMON_ARROWSIGNSHADOW", + "folder": "common", + "type": "Texture", + "sha1": "3518ef555226ef7286d3766e18ed06beac8e5bb2" + }, + { + "filename": "ice_bricks", + "build-id": "ASSET_TEX3D_WINTER_ICEBRICKS", + "folder": "winter", + "type": "Texture", + "sha1": "6bcdc99f699bd43ccd610574a238c07c32ba6eb8" + }, + { + "filename": "ice_bricks_with_snow", + "build-id": "ASSET_TEX3D_WINTER_ICEBRICKSWITHSNOW", + "folder": "winter", + "type": "Texture", + "sha1": "bc8da5529930f15fdc7f961f67e283bf66f73e21" + }, + { + "filename": "hanging_snow", + "build-id": "ASSET_TEX3D_WINTER_HANGINGSNOW", + "folder": "winter", + "type": "Texture", + "sha1": "abc69ece89d507b1e9a049306f3be6d8002d7260" + }, + { + "filename": "hanging_snow2", + "build-id": "ASSET_TEX3D_WINTER_HANGINGSNOW2", + "folder": "winter", + "type": "Texture", + "sha1": "cfa3b93191336239d6e6916f752c43a0ec2ce5d7" + }, + { + "filename": "element_gradient", + "build-id": "ASSET_TEX3D_COMMON_ELEMENTGRADIENT", + "folder": "common", + "type": "Texture", + "sha1": "5fe7520f75d495920812e4020fdf16653cccf302" + }, + { + "filename": "snow_trees_billboard_0", + "build-id": "ASSET_TEX3D_WINTER_SNOWTREESBILLBOARD_0", + "folder": "winter", + "type": "Texture", + "sha1": "ac0f22e815daee73c044eb1284770222f306223c" + }, + { + "filename": "snow_trees_billboard_1", + "build-id": "ASSET_TEX3D_WINTER_SNOWTREESBILLBOARD_1", + "folder": "winter", + "type": "Texture", + "sha1": "dad147c8f1e525e1c02ee976d30925427f93e0ad" + }, + { + "filename": "icy_snow", + "build-id": "ASSET_TEX3D_WINTER_ICYSNOW", + "folder": "winter", + "type": "Texture", + "sha1": "6996cb19e0e2b847a7d89d216a03999df65611c9" + }, + { + "filename": "snowy_fence", + "build-id": "ASSET_TEX3D_WINTER_SNOWYFENCE", + "folder": "winter", + "type": "Texture", + "sha1": "2445121e602f3903f0b18d07f0f4a459c284ea8f" + }, + { + "filename": "icy_path", + "build-id": "ASSET_TEX3D_WINTER_ICYPATH", + "folder": "winter", + "type": "Texture", + "sha1": "df5febc773bded4a84223bf6e697c8c35dc92304" + }, + { + "filename": "jungle_trees_billboard_0", + "build-id": "ASSET_TEX3D_TROPICAL_JUNGLETREESBILLBOARD_0", + "folder": "tropical", + "type": "Texture", + "sha1": "c52b929275b5f3d106c0444c4ecaf10dca46e157" + }, + { + "filename": "jungle_trees_billboard_1", + "build-id": "ASSET_TEX3D_TROPICAL_JUNGLETREESBILLBOARD_1", + "folder": "tropical", + "type": "Texture", + "sha1": "b679ef0ddc28e27935da2c3a336055b3f2aec81f" + }, + { + "filename": "mossy_ship_planks_broken", + "build-id": "ASSET_TEX3D_TROPICAL_MOSSYSHIPPLANKSBROKEN", + "folder": "tropical", + "type": "Texture", + "sha1": "d33257fdae93f8363839794278303e36cb593895" + }, + { + "filename": "mossy_ship_planks", + "build-id": "ASSET_TEX3D_TROPICAL_MOSSYSHIPPLANKS", + "folder": "tropical", + "type": "Texture", + "sha1": "e467105a7d163707cfb70df5d615d87ee8fc1938" + }, + { + "filename": "mossy_ship_torn_sail", + "build-id": "ASSET_TEX3D_TROPICAL_MOSSYSHIPTORNSAIL", + "folder": "tropical", + "type": "Texture", + "sha1": "a537d405892514a9b73b2a789a251d9faf9bd876" + }, + { + "filename": "pirateship_rear_decoration", + "build-id": "ASSET_TEX3D_TROPICAL_PIRATESHIPREARDECORATION", + "folder": "tropical", + "type": "Texture", + "sha1": "40ff7b03cb455ffabf1bc3fb1598bc2f52f0539f" + }, + { + "filename": "thatch_roofing", + "build-id": "ASSET_TEX3D_MEDIEVAL_THATCHROOFING", + "folder": "medieval", + "type": "Texture", + "sha1": "a6b85034add3490f509ae677145fc09b54a3b71f" + }, + { + "filename": "house_window_with_plants", + "build-id": "ASSET_TEX3D_MEDIEVAL_HOUSEWINDOWWITHPLANTS", + "folder": "medieval", + "type": "Texture", + "sha1": "2e2d11a4b5d7d5a99581658d76c4986dd2aece2f" + }, + { + "filename": "house_door", + "build-id": "ASSET_TEX3D_MEDIEVAL_HOUSEDOOR", + "folder": "medieval", + "type": "Texture", + "sha1": "41ca8091ed57abf0f858382fd895bec4232b8992" + }, + { + "filename": "house_roof_support", + "build-id": "ASSET_TEX3D_MEDIEVAL_HOUSEROOFSUPPORT", + "folder": "medieval", + "type": "Texture", + "sha1": "f49133a78931efa5f51b8e34f9bbc82372844f8d" + }, + { + "filename": "house_wall_support", + "build-id": "ASSET_TEX3D_MEDIEVAL_HOUSEWALLSUPPORT", + "folder": "medieval", + "type": "Texture", + "sha1": "681d45a7ca81d78f837f1dcd2beedce6c2c09f55" + }, + { + "filename": "white", + "build-id": "ASSET_TEX3D_COMMON_WHITE", + "folder": "common", + "type": "Texture", + "sha1": "4106f18d10b18a1367025f44a43c0630b9aad827" + }, + { + "filename": "finish_line_tape", + "build-id": "ASSET_TEX3D_COMMON_FINISHLINETAPE", + "folder": "common", + "type": "Texture", + "sha1": "1d81812a1525d5adc6c7e1ff79d5341f60a08ecf" + }, + { + "filename": "ice_bricks2", + "build-id": "ASSET_TEX3D_WINTER_ICEBRICKS2", + "folder": "winter", + "type": "Texture", + "sha1": "9a418ca95fb37defda4454f4a3b8b4146ea3f3cc" + }, + { + "filename": "water_still2", + "build-id": "ASSET_TEX3D_COMMON_WATERSTILL2", + "folder": "common", + "type": "Texture", + "sha1": "960c2b9843c51703433fd57cb08e1e710e840bff" + }, + { + "filename": "unused_track_select_frame_texture", + "build-id": "ASSET_TEX3D_COMMON_UNUSEDTRACKSELCTFRAMETEXTURE", + "folder": "common", + "type": "Texture", + "sha1": "68036e8086c2ed8dffdc2c90185902aac2ae56ca" + }, + { + "filename": "sand_dry", + "build-id": "ASSET_TEX3D_COMMON_SANDDRY", + "folder": "common", + "type": "Texture", + "sha1": "d8ccaedb544bd1bc5b4fa4135152ee8c8ffeeeca" + }, + { + "filename": "sand_dry_to_wet", + "build-id": "ASSET_TEX3D_COMMON_SANDDRYTOWET", + "folder": "common", + "type": "Texture", + "sha1": "c38d84314d590271732091ccfd46f6fd6d306d27" + }, + { + "filename": "ancient_lake_sign", + "build-id": "ASSET_TEX3D_DINO_ANCIENTLAKESIGN", + "folder": "dino", + "type": "Texture", + "sha1": "0b0477df88924fe3cf180bdb2f35dfcef1d50cb2" + }, + { + "filename": "log_exposed_side", + "build-id": "ASSET_TEX3D_COMMON_LOGEXPOSEDSIDE", + "folder": "common", + "type": "Texture", + "sha1": "43d9686172c6cd2da497852cc4fd1b7c4843f557" + }, + { + "filename": "brick_rail_with_snow_edge", + "build-id": "ASSET_TEX3D_WINTER_BRICKRAILWITHSNOWEDGE", + "folder": "winter", + "type": "Texture", + "sha1": "48dcd7bc135812f21ba412e2f08f0311c93964dd" + }, + { + "filename": "brick_rail_with_snow", + "build-id": "ASSET_TEX3D_WINTER_BRICKRAILWITHSNOW", + "folder": "winter", + "type": "Texture", + "sha1": "9e21401f07c88b2e48dd6b03adb6eaf925784a49" + }, + { + "filename": "colourful_arrow", + "build-id": "ASSET_TEX3D_COMMON_COLOURFULARROW", + "folder": "common", + "type": "Texture", + "sha1": "710003edc61f9cb05f9ee6798665b761f1b00884" + }, + { + "filename": "blue_floor_tile", + "build-id": "ASSET_TEX3D_SPACE_BLUEFLOORTILE", + "folder": "common", + "type": "Texture", + "sha1": "b9110c14e8ae89bbd57f84da5908820d4a1c0f63" + }, + { + "filename": "pirateship_underside", + "build-id": "ASSET_TEX3D_TROPICAL_PIRATESHIPUNDERSIDE", + "folder": "tropical", + "type": "Texture", + "sha1": "ca3267b078a48da72963e197a104c9572029c85c" + }, + { + "filename": "pirateship_sails", + "build-id": "ASSET_TEX3D_TROPICAL_PIRATESHIPSAILS", + "folder": "tropical", + "type": "Texture", + "sha1": "a804591ff28230f0af907e65370bb831f0a4035b" + }, + { + "filename": "pirateship_bowspirit", + "build-id": "ASSET_TEX3D_TROPICAL_PIRATESHIPBOWSPIRIT", + "folder": "tropical", + "type": "Texture", + "sha1": "3bfa26e05d719249860277a9105e66b5bfab49cb" + }, + { + "filename": "sand2", + "build-id": "ASSET_TEX3D_COMMON_SAND2", + "folder": "common", + "type": "Texture", + "sha1": "d968c1f2085c3a3c2dce6a97aa70543083a293bc" + }, + { + "filename": "trackselectframe_gold", + "build-id": "ASSET_TEX3D_OBJECTS_TRACKSELECTFRAMEGOLD", + "folder": "objects", + "type": "Texture", + "sha1": "b8b144e7a73cb0ff6d8640e9a1acf823b31e9237" + }, + { + "filename": "pirateship_cannon", + "build-id": "ASSET_TEX3D_TROPICAL_PIRATESHIPCANNON", + "folder": "tropical", + "type": "Texture", + "sha1": "6aedad56a34cd4b1302ff18bd8b67dacd76543b0" + }, + { + "filename": "chain_link", + "build-id": "ASSET_TEX3D_COMMON_CHAINLINK", + "folder": "common", + "type": "Texture", + "sha1": "349d405c9924bbf3d6fa07fa8ca86dc86019cde2" + }, + { + "filename": "finish_line_tape2", + "build-id": "ASSET_TEX3D_COMMON_FINISHLINETAPE2", + "folder": "common", + "type": "Texture", + "sha1": "54e9bd12a734c4e970cb2fbcc606999b96f3cd54" + }, + { + "filename": "finish_line_water", + "build-id": "ASSET_TEX3D_COMMON_FINISHLINEWATER", + "folder": "common", + "type": "Texture", + "sha1": "c2d75aef981d4109516bf9e00fccc1ff9014dd98" + }, + { + "filename": "finish_line_chequered_red_and_white", + "build-id": "ASSET_TEX3D_COMMON_FINISHLINECHEQUEREDREDWHITE", + "folder": "common", + "type": "Texture", + "sha1": "11e92587cafbda093ea506eae96cc4cee996de37" + }, + { + "filename": "finish_line_chequered_red_and_yellow", + "build-id": "ASSET_TEX3D_COMMON_FINISHLINECHEQUEREDREDYELLOW", + "folder": "common", + "type": "Texture", + "sha1": "cf6dcb69741ddcebeb9dc5bbc5f0aab0f5cc78a6" + }, + { + "filename": "finish_line_chequered_purple_and_yellow", + "build-id": "ASSET_TEX3D_COMMON_FINISHLINECHEQUEREDPURPLEYELLOW", + "folder": "common", + "type": "Texture", + "sha1": "e545ae61bdc4e6adaa31ed476b012d0f3569c991" + }, + { + "filename": "cyan_yellow_arrow_sign", + "build-id": "ASSET_TEX3D_COMMON_CYANYELLOWARROWSIGN", + "folder": "common", + "type": "Texture", + "sha1": "ecaef165728b47dc9d26972fe9bf029465a77537" + }, + { + "filename": "blue_yellow_arrows2_0", + "build-id": "ASSET_TEX3D_COMMON_BLUEYELLOWARROWS2_0", + "folder": "common", + "type": "Texture", + "sha1": "e11ce1bec23024eeab56cc3c91c247e9ad001c4a" + }, + { + "filename": "blue_yellow_arrows2_1", + "build-id": "ASSET_TEX3D_COMMON_BLUEYELLOWARROWS2_1", + "folder": "common", + "type": "Texture", + "sha1": "c0a53af6b0a6b281e6f9fe4bce72e09efea5c6f9" + }, + { + "filename": "blue_yellow_arrows2_2", + "build-id": "ASSET_TEX3D_COMMON_BLUEYELLOWARROWS2_2", + "folder": "common", + "type": "Texture", + "sha1": "9b55d762d66b5992c899556f23c7a2f7d5964add" + }, + { + "filename": "transparent", + "build-id": "ASSET_TEX3D_COMMON_TRANSPARENT", + "folder": "common", + "type": "Texture", + "sha1": "15ab3c44146721c0284dcf3bce9b42a63da5f3d9" + }, + { + "filename": "stone_with_grass", + "build-id": "ASSET_TEX3D_UNUSED_STONEWITHGRASS", + "folder": "unused", + "type": "Texture", + "sha1": "d832531605a5d25a12e99beb5b23ecfaa631b432" + }, + { + "filename": "orange_stone", + "build-id": "ASSET_TEX3D_DINO_ORANGESTONE", + "folder": "dino", + "type": "Texture", + "sha1": "9d35fe44b3358499c08806c75aead67e16c7f1f8" + }, + { + "filename": "thin_cloud", + "build-id": "ASSET_TEX3D_DINO_THINCLOUD", + "folder": "dino", + "type": "Texture", + "sha1": "912eb9dcbbe5c192b13f709533c94457dfdb52a9" + }, + { + "filename": "dome_clouds", + "build-id": "ASSET_TEX3D_OBJECTS_DOMECLOUDS", + "folder": "objects", + "type": "Texture", + "sha1": "4f409fcbacdc8c7f99e4bad6633d77c729bea93b" + }, + { + "filename": "dome_clouds2", + "build-id": "ASSET_TEX3D_OBJECTS_DOMECLOUDS2", + "folder": "objects", + "type": "Texture", + "sha1": "8b5409b55d33d22cc7572bc65c3a38ba88e7d6e6" + }, + { + "filename": "temple_brick", + "build-id": "ASSET_TEX3D_DINO_TEMPLEBRICK", + "folder": "dino", + "type": "Texture", + "sha1": "ac742c719f10541dd62f5f43563d8a45e1a2c8f9" + }, + { + "filename": "snow3", + "build-id": "ASSET_TEX3D_WINTER_SNOW3", + "folder": "winter", + "type": "Texture", + "sha1": "94ce07a2d4a1031d9ac948b9bcc42b9ca7639390" + }, + { + "filename": "temple_brick_tile", + "build-id": "ASSET_TEX3D_DINO_TEMPLEBRICKTILE", + "folder": "dino", + "type": "Texture", + "sha1": "4a8f125a53c722a921e86c12bf8d5ff4209bc4ef" + }, + { + "filename": "castle_tower_block", + "build-id": "ASSET_TEX3D_TROPICAL_CASTLETOWERBLOCK", + "folder": "tropical", + "type": "Texture", + "sha1": "0707be10bc0892b88203a115098d5a1c0fe0e592" + }, + { + "filename": "bridge", + "build-id": "ASSET_TEX3D_UNUSED_BRIDGE", + "folder": "unused", + "type": "Texture", + "sha1": "0a9e306e6706dff0fafb51912ca72bad5fc793df" + }, + { + "filename": "bridge2", + "build-id": "ASSET_TEX3D_UNUSED_BRIDGE2", + "folder": "unused", + "type": "Texture", + "sha1": "0a9e306e6706dff0fafb51912ca72bad5fc793df" + }, + { + "filename": "flashing_arrow", + "build-id": "ASSET_TEX3D_COMMON_FLASHINGARROW", + "folder": "common", + "type": "Texture", + "sha1": "ee1230e668b4e922de16b87231c1fb8812d9aac0" + }, + { + "filename": "metal_environment_map", + "build-id": "ASSET_TEX3D_UNUSED_METALENVIRONMENTMAP", + "folder": "unused", + "type": "Texture", + "sha1": "efe953cc69f60f982db17810ac2032204ae26d6b" + }, + { + "filename": "grass_transition", + "build-id": "ASSET_TEX3D_COMMON_GRASSTRANSITION", + "folder": "common", + "type": "Texture", + "sha1": "941a4545076fa8eb08fac01584719440c88c5248" + }, + { + "filename": "grass3", + "build-id": "ASSET_TEX3D_COMMON_GRASS3", + "folder": "common", + "type": "Texture", + "sha1": "db35efb74d3920a0a47c1a3833ab2143847800c5" + }, + { + "filename": "pirateship_guardrail", + "build-id": "ASSET_TEX3D_TROPICAL_PIRATESHIPGUARDRAIL", + "folder": "tropical", + "type": "Texture", + "sha1": "510b0b7f9a785ac2402bf6f12e3c575e5088105c" + }, + { + "filename": "wood_bridge", + "build-id": "ASSET_TEX3D_OBJECTS_WOODBRIDGE", + "folder": "objects", + "type": "Texture", + "sha1": "1615e724a9a752f17b39c4a8060e22624caa5af8" + }, + { + "filename": "snowy_path", + "build-id": "ASSET_TEX3D_WINTER_SNOWYPATH", + "folder": "winter", + "type": "Texture", + "sha1": "7fb931d513303a8b0b6e0fc84007fb6bf744ef71" + }, + { + "filename": "mossy_overlay", + "build-id": "ASSET_TEX3D_TROPICAL_MOSSYOVERLAY", + "folder": "winter", + "type": "Texture", + "sha1": "070728bfcb74ed65985e3f138b7a00b2f964ba36" + }, + { + "filename": "fossil_canyon_sign", + "build-id": "ASSET_TEX3D_DINO_FOSSILCANYONSIGN", + "folder": "dino", + "type": "Texture", + "sha1": "2b8b9abfbbe5f4e3e931c2be5c4eb468aaac1f8a" + }, + { + "filename": "trophy_cab_base", + "build-id": "ASSET_TEX3D_OBJECTS_TROPHYCABBASE", + "folder": "objects", + "type": "Texture", + "sha1": "941a4545076fa8eb08fac01584719440c88c5248" + }, + { + "filename": "orange_stone_wall_hillside", + "build-id": "ASSET_TEX3D_COMMON_ORANGESTONEWALLHILLSIDE", + "folder": "common", + "type": "Texture", + "sha1": "e598f19bfa74c6d21f213aaca8ddecd41e4d0ba4" + }, + { + "filename": "blue_stone_wall_sandy_with_moss", + "build-id": "ASSET_TEX3D_TROPICAL_BLUESTONEWALLSANDYWITHMOSS", + "folder": "tropical", + "type": "Texture", + "sha1": "07fd8b5c8885c38a1c72a0535acd793c1b0df740" + }, + { + "filename": "dirt_blue_stone_transition", + "build-id": "ASSET_TEX3D_COMMON_DIRTBLUESTONETRANSITION", + "folder": "common", + "type": "Texture", + "sha1": "439f4b9278c1f51402a6e1f1538542986c940dbb" + }, + { + "filename": "blue_stone", + "build-id": "ASSET_TEX3D_COMMON_BLUESTONE", + "folder": "common", + "type": "Texture", + "sha1": "ed0435447a6d68494aa5141a673545fc0f4253c8" + }, + { + "filename": "blue_stone_sandy", + "build-id": "ASSET_TEX3D_COMMON_BLUESTONESANDY", + "folder": "common", + "type": "Texture", + "sha1": "e4c17f9d70f8849b39e8822446048997ca2f2ed5" + }, + { + "filename": "hot_top_volcano_sign", + "build-id": "ASSET_TEX3D_DINO_HOTTOPVOLCANOSIGN", + "folder": "dino", + "type": "Texture", + "sha1": "950fdade90398f16bcb2c75bf340ed3ff34c2562" + }, + { + "filename": "unknown_icy_texture", + "build-id": "ASSET_TEX3D_UNUSED_UNKNOWNICYTEXTURE", + "folder": "unused", + "type": "Texture", + "sha1": "0dcf3a7aad817464d841ce1428e1ea6e8ce93603" + }, + { + "filename": "transparent", + "build-id": "ASSET_TEX3D_UNUSED_TRANSPARENT", + "folder": "unused", + "type": "Texture", + "sha1": "1143f48a70dc44f61d5acb40d7c247fbc7e4eb0b" + }, + { + "filename": "blue_stone_wall_sandy_heavy_moss", + "build-id": "ASSET_TEX3D_TROPICAL_BLUESTONEWALLSANDYHEAVYMOSS", + "folder": "tropical", + "type": "Texture", + "sha1": "56b2991ebe91314528531505da56c74f51f7efea" + }, + { + "filename": "moss", + "build-id": "ASSET_TEX3D_UNUSED_MOSS", + "folder": "unused", + "type": "Texture", + "sha1": "8588fbcd0bb6a683382d709e2fde6a1b31fd9f66" + }, + { + "filename": "jungle_falls_sign", + "build-id": "ASSET_TEX3D_DINO_JUNGLEFALLSSIGN", + "folder": "dino", + "type": "Texture", + "sha1": "2213d74b04bdfd477935c2b13c25eb8895d056cd" + }, + { + "filename": "blinking_computer_lights", + "build-id": "ASSET_TEX3D_SPACE_BLINKINGCOMPUTERLIGHTS", + "folder": "space", + "type": "Texture", + "sha1": "d00770b1a9d84a3a7538692d507748991df37394" + }, + { + "filename": "yellow_house_wall", + "build-id": "ASSET_TEX3D_MEDIEVAL_YELLOWHOUSEWALL", + "folder": "medieval", + "type": "Texture", + "sha1": "cbdb76d8a1a0b84446f852ff6f07fe6367533d47" + }, + { + "filename": "coloured_lamp", + "build-id": "ASSET_TEX3D_COMMON_COLOUREDLAMP", + "folder": "common", + "type": "Texture", + "sha1": "400f096c0de0f4fbba6bf30a5fb13e084dfd08a4" + }, + { + "filename": "volcano_wall", + "build-id": "ASSET_TEX3D_DINO_VOLCANOWALL", + "folder": "dino", + "type": "Texture", + "sha1": "adc86f5ebe45b7645cbbd0d4bcd0aa65b11daf0b" + }, + { + "filename": "volcano_wall_magma_transition", + "build-id": "ASSET_TEX3D_DINO_VOLCANOWALLMAGMATRANSITION", + "folder": "dino", + "type": "Texture", + "sha1": "383032cc7d633a39fc3ae2625ebc74bdf5ae2cc9" + }, + { + "filename": "magma_high_line_transition", + "build-id": "ASSET_TEX3D_DINO_MAGMAHIGHLINETRANSITION", + "folder": "dino", + "type": "Texture", + "sha1": "9fceb4bbe9eec7070d473313a7a98dfb5568e9a7" + }, + { + "filename": "volcano_wall2", + "build-id": "ASSET_TEX3D_DINO_VOLCANOWALL2", + "folder": "dino", + "type": "Texture", + "sha1": "adc86f5ebe45b7645cbbd0d4bcd0aa65b11daf0b" + }, + { + "filename": "yellow_brick_tile", + "build-id": "ASSET_TEX3D_COMMON_YELLOWBRICKTILE", + "folder": "common", + "type": "Texture", + "sha1": "4f93ca500b1dbaed2bd83100e47bb2bc6b331c9a" + }, + { + "filename": "yellow_brick_tile2", + "build-id": "ASSET_TEX3D_COMMON_YELLOWBRICKTILE2", + "folder": "common", + "type": "Texture", + "sha1": "abc305145c2e3dde5d9e94c171d5e526af5c6dd2" + }, + { + "filename": "grass_uncolored", + "build-id": "ASSET_TEX3D_TROPICAL_GRASSUNCOLORED", + "folder": "tropical", + "type": "Texture", + "sha1": "345e2416f3968ccc1166aa744652f1609c675190" + }, + { + "filename": "blue_wall_with_yellow_arrows", + "build-id": "ASSET_TEX3D_SPACE_BLUEWALLWITHYELLOWARROWS", + "folder": "space", + "type": "Texture", + "sha1": "4faa894954387c2a12fe934566d1671731eeb2ae" + }, + { + "filename": "blue_wall_small_light", + "build-id": "ASSET_TEX3D_SPACE_BLUEWALLSMALLLIGHT", + "folder": "space", + "type": "Texture", + "sha1": "5869087d84898789d894bbdac5d7a3b3395bb78f" + }, + { + "filename": "blue_wall", + "build-id": "ASSET_TEX3D_SPACE_BLUEWALL", + "folder": "space", + "type": "Texture", + "sha1": "e270986005a8527215918088e0f325e9607e64fc" + }, + { + "filename": "wall_tile_lights", + "build-id": "ASSET_TEX3D_SPACE_WALLTILELIGHTS", + "folder": "space", + "type": "Texture", + "sha1": "d67254fa34d2a9a76f49692d678b2a064237e7dc" + }, + { + "filename": "grass4", + "build-id": "ASSET_TEX3D_COMMON_GRASS4", + "folder": "common", + "type": "Texture", + "sha1": "db35efb74d3920a0a47c1a3833ab2143847800c5" + }, + { + "filename": "grass5", + "build-id": "ASSET_TEX3D_COMMON_GRASS5", + "folder": "common", + "type": "Texture", + "sha1": "4cb01f7f6633ac0f80819c8728a9af31bad84e05" + }, + { + "filename": "grass6", + "build-id": "ASSET_TEX3D_COMMON_GRASS6", + "folder": "common", + "type": "Texture", + "sha1": "db35efb74d3920a0a47c1a3833ab2143847800c5" + }, + { + "filename": "trophy_cab_edge", + "build-id": "ASSET_TEX3D_OBJECTS_TROPHYCABEDGE", + "folder": "objects", + "type": "Texture", + "sha1": "545cf4b2106e227d758ba05984d903a17f28f7fb" + }, + { + "filename": "stone_wall_snowy", + "build-id": "ASSET_TEX3D_WINTER_STONEWALLSNOWY", + "folder": "winter", + "type": "Texture", + "sha1": "f2e0225684fc186fcb1a1faf7531a35ae125194f" + }, + { + "filename": "blue_stone_wall_snowy", + "build-id": "ASSET_TEX3D_WINTER_BLUESTONEWALLSNOWY", + "folder": "winter", + "type": "Texture", + "sha1": "3181e8d94a8ce072f2c328102d96755562ae39ef" + }, + { + "filename": "stone_path", + "build-id": "ASSET_TEX3D_COMMON_STONEPATH", + "folder": "common", + "type": "Texture", + "sha1": "fc673e56217632b36104aa9d84bb2357fcbb8231" + }, + { + "filename": "dome_sun_shining", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESUNSHINING", + "folder": "objects", + "type": "Texture", + "sha1": "589c1bfe34c7a1b5c703d4e587c87a14fdd1f8a8" + }, + { + "filename": "sand_water_transition", + "build-id": "ASSET_TEX3D_COMMON_SANDWATERTRANSITION", + "folder": "common", + "type": "Texture", + "sha1": "ddb17fba4cb7687f6d485111dd9efa02f7e4edf1" + }, + { + "filename": "nintendo_logo", + "build-id": "ASSET_TEX3D_COMMON_NINTENDOLOGO", + "folder": "common", + "type": "Texture", + "sha1": "dda71d926eb6e159d348aea7de9e7dee1fa990e6" + }, + { + "filename": "tan_stone_tile", + "build-id": "ASSET_TEX3D_UNUSED_TANSTONETILE", + "folder": "unused", + "type": "Texture", + "sha1": "0af662a8c09524e4e726812809f5c6ca5a33e34f" + }, + { + "filename": "orange_stone2", + "build-id": "ASSET_TEX3D_DINO_ORANGESTONE2", + "folder": "dino", + "type": "Texture", + "sha1": "5c2014a8dbd895fc3f7b64e41d1e8752c926cda8" + }, + { + "filename": "volcano_wall3", + "build-id": "ASSET_TEX3D_DINO_VOLCANOWALL3", + "folder": "dino", + "type": "Texture", + "sha1": "9d35fe44b3358499c08806c75aead67e16c7f1f8" + }, + { + "filename": "sand3", + "build-id": "ASSET_TEX3D_COMMON_SAND3", + "folder": "common", + "type": "Texture", + "sha1": "b5570ec95508c3a919b2d4627846366ff44c73f7" + }, + { + "filename": "palm_trees_billboard_0", + "build-id": "ASSET_TEX3D_TROPICAL_PALMTREESBILLBOARD_0", + "folder": "tropical", + "type": "Texture", + "sha1": "d07ece89e012868619741ee5637bf9a5d6397ea9" + }, + { + "filename": "palm_trees_billboard_1", + "build-id": "ASSET_TEX3D_TROPICAL_PALMTREESBILLBOARD_1", + "folder": "tropical", + "type": "Texture", + "sha1": "4a3d4d0ba617195e15249fc56efffb6964fc17a0" + }, + { + "filename": "palm_trees_billboard_2", + "build-id": "ASSET_TEX3D_TROPICAL_PALMTREESBILLBOARD_2", + "folder": "tropical", + "type": "Texture", + "sha1": "4bcb286883b4fd517354a3fa8ab34b5fd164ef54" + }, + { + "filename": "palm_trees_billboard2_0", + "build-id": "ASSET_TEX3D_TROPICAL_PALMTREESBILLBOARD2_0", + "folder": "tropical", + "type": "Texture", + "sha1": "4dd632e01d186721f70de1c6bf926e8e911afec9" + }, + { + "filename": "palm_trees_billboard2_1", + "build-id": "ASSET_TEX3D_TROPICAL_PALMTREESBILLBOARD2_1", + "folder": "tropical", + "type": "Texture", + "sha1": "7e192534d1ad8865c9133d0b80c9907945f22f7a" + }, + { + "filename": "palm_trees_billboard2_2", + "build-id": "ASSET_TEX3D_TROPICAL_PALMTREESBILLBOARD2_2", + "folder": "tropical", + "type": "Texture", + "sha1": "640be1a5772c69084702939e824801c90573c0e3" + }, + { + "filename": "palm_trees_billboard2_3", + "build-id": "ASSET_TEX3D_TROPICAL_PALMTREESBILLBOARD2_3", + "folder": "tropical", + "type": "Texture", + "sha1": "975157f60d35d4cdb15fa244aab4e206cae18856" + }, + { + "filename": "palm_trees_billboard2_4", + "build-id": "ASSET_TEX3D_TROPICAL_PALMTREESBILLBOARD2_4", + "folder": "tropical", + "type": "Texture", + "sha1": "da5c8c6d7b22e2b6731d8ba0901243aae722259d" + }, + { + "filename": "palm_tree_leaves", + "build-id": "ASSET_TEX3D_TROPICAL_PALMTREELEAVES", + "folder": "tropical", + "type": "Texture", + "sha1": "af701c785cee54e857e70edb272e93866a4d7e2e" + }, + { + "filename": "palm_tree_bark_brown", + "build-id": "ASSET_TEX3D_TROPICAL_PALMTREEBARKBROWN", + "folder": "tropical", + "type": "Texture", + "sha1": "30966069bdcacc0496c5ece37862331b89f8f022" + }, + { + "filename": "asset_tex3d_tropical_palmtreesbillboard3", + "build-id": "ASSET_TEX3D_TROPICAL_ASSETTEX3DTROPICALPALMTREESBILLBOARD3", + "folder": "tropical", + "type": "Texture", + "sha1": "f25834d9ab72a4180e306ac1d22208965d90a9c5" + }, + { + "filename": "palm_tree_bark_white", + "build-id": "ASSET_TEX3D_TROPICAL_PALMTREEBARKWHITE", + "folder": "tropical", + "type": "Texture", + "sha1": "6bca7f8cdfd085dd4a4db6881e00bff366bb4cf1" + }, + { + "filename": "palm_tree_shadow", + "build-id": "ASSET_TEX3D_TROPICAL_PALMTREESHADOW", + "folder": "tropical", + "type": "Texture", + "sha1": "8c1b7c85319633d9471d2b10be52341f4d7dd276" + }, + { + "filename": "palm_tree_bark_white2", + "build-id": "ASSET_TEX3D_TROPICAL_PALMTREEBARKWHITE2", + "folder": "tropical", + "type": "Texture", + "sha1": "6bca7f8cdfd085dd4a4db6881e00bff366bb4cf1" + }, + { + "filename": "light_shaft", + "build-id": "ASSET_TEX3D_COMMON_LIGHTSHAFT", + "folder": "common", + "type": "Texture", + "sha1": "5fe7520f75d495920812e4020fdf16653cccf302" + }, + { + "filename": "light_shaft2", + "build-id": "ASSET_TEX3D_COMMON_LIGHTSHAFT2", + "folder": "common", + "type": "Texture", + "sha1": "5fe7520f75d495920812e4020fdf16653cccf302" + }, + { + "filename": "spacecolumn_block_saturn", + "build-id": "ASSET_TEX3D_OBJECTS_SPACECOLUMNBLOCKSATURN", + "folder": "objects", + "type": "Texture", + "sha1": "734e4a1cf129a17c32bb76b6ca108b31bc08a9e7" + }, + { + "filename": "tower_spire", + "build-id": "ASSET_TEX3D_TROPICAL_TOWERSPIRE", + "folder": "tropical", + "type": "Texture", + "sha1": "cf92de2344e2b04199a4a186c9f8cec3daac76e9" + }, + { + "filename": "ship_wood_planks", + "build-id": "ASSET_TEX3D_TROPICAL_SHIPWOODPLANKS", + "folder": "tropical", + "type": "Texture", + "sha1": "82b01835a9c51cf7ec8fa2657c8fb0d8dc1d7f01" + }, + { + "filename": "vines", + "build-id": "ASSET_TEX3D_COMMON_VINES", + "folder": "common", + "type": "Texture", + "sha1": "93e8b77155d9f016bdd22a45c2f8fe76f174059e" + }, + { + "filename": "vines2", + "build-id": "ASSET_TEX3D_COMMON_VINES2", + "folder": "common", + "type": "Texture", + "sha1": "72edbc9ce5ff4748760aeaca0af208574a7a4f25" + }, + { + "filename": "taj_pad_grass", + "build-id": "ASSET_TEX3D_COMMON_TAJPADGRASS", + "folder": "common", + "type": "Texture", + "sha1": "18d303177e2c93fd1b2d66df35884c3fd7cb3b33" + }, + { + "filename": "tree_branch_with_vines", + "build-id": "ASSET_TEX3D_MEDIEVAL_TREEBRANCHWITHVINES", + "folder": "medieval", + "type": "Texture", + "sha1": "b3b5aeae856bc3a52dc7109b46147efe71354538" + }, + { + "filename": "red_carpet", + "build-id": "ASSET_TEX3D_COMMON_REDCARPET", + "folder": "common", + "type": "Texture", + "sha1": "e4e431d06e194c2cb4db248ef8acf15a33c5bc22" + }, + { + "filename": "large_tree_log", + "build-id": "ASSET_TEX3D_COMMON_LARGETREELOG", + "folder": "common", + "type": "Texture", + "sha1": "2e4435eb0e54d881c7e6e8d667e454c1555cbc5f" + }, + { + "filename": "temple_stone_dino", + "build-id": "ASSET_TEX3D_DINO_TEMPLESTONEDINO", + "folder": "dino", + "type": "Texture", + "sha1": "419cbd5b216993536ae72c33465363a12f3c0168" + }, + { + "filename": "white_wall_with_flags", + "build-id": "ASSET_TEX3D_MEDIEVAL_WHITEWALLWITHFLAGS", + "folder": "medieval", + "type": "Texture", + "sha1": "3f5ea702b31f02d64dda5aca6731a6cdd6c3c69c" + }, + { + "filename": "town_castle_sprite", + "build-id": "ASSET_TEX3D_MEDIEVAL_TOWNCASTLESPRITE", + "folder": "medieval", + "type": "Texture", + "sha1": "58fa932136eca15ae4752fb09a2fcac673d04dba" + }, + { + "filename": "village_viaduct_shadow", + "build-id": "ASSET_TEX3D_WINTER_VILLAGEVIADUCTSHADOW", + "folder": "winter", + "type": "Texture", + "sha1": "9e60b21c5bc985afe43f09930d78af5946970a96" + }, + { + "filename": "dirt_path", + "build-id": "ASSET_TEX3D_DINO_DIRTPATH", + "folder": "dino", + "type": "Texture", + "sha1": "063249abaa44478fcec8d38e9ae4e6cd078b2b15" + }, + { + "filename": "proam64balloonrope", + "build-id": "ASSET_TEX3D_UNUSED_PROAM64BALLOONROPE", + "folder": "unused", + "type": "Texture", + "sha1": "1b48e42bbd165846ee142c68b373f3380dfd3e0f" + }, + { + "filename": "dome_blue_sky_0", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY_0", + "folder": "objects", + "type": "Texture", + "sha1": "31ad340dadbc4a1f5c1a73b069dcfaf0eeb2720a" + }, + { + "filename": "dome_blue_sky_1", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY_1", + "folder": "objects", + "type": "Texture", + "sha1": "c5e32b72c49592520c49b240d8428787439b790a" + }, + { + "filename": "dome_blue_sky_2", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY_2", + "folder": "objects", + "type": "Texture", + "sha1": "fa721dd06660e306fe50edd7befd776f81d661b1" + }, + { + "filename": "dome_blue_sky_3", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY_3", + "folder": "objects", + "type": "Texture", + "sha1": "fb7aef25c971bb2c7a3833cced43b100d99f7284" + }, + { + "filename": "ship_torn_sail", + "build-id": "ASSET_TEX3D_TROPICAL_SHIPTORNSAIL", + "folder": "tropical", + "type": "Texture", + "sha1": "28f15791c4a46ca590b5623c93b0d99ad934b906" + }, + { + "filename": "ship_sail_shadow", + "build-id": "ASSET_TEX3D_TROPICAL_SHIPSAILSHADOW", + "folder": "tropical", + "type": "Texture", + "sha1": "8aa26bf6034113921ebfb95c88a24b81ab140868" + }, + { + "filename": "sand_transition", + "build-id": "ASSET_TEX3D_COMMON_SANDTRANSITION", + "folder": "common", + "type": "Texture", + "sha1": "7fed86dd2c34c7848e8d1aa21a02b65690fcaf16" + }, + { + "filename": "sand_underwater", + "build-id": "ASSET_TEX3D_COMMON_SANDUNDERWATER", + "folder": "common", + "type": "Texture", + "sha1": "cce72fffcacb6dc411571302ef08b5e91b3c6d7b" + }, + { + "filename": "spacecolumn_block", + "build-id": "ASSET_TEX3D_OBJECTS_SPACECOLUMNBLOCK", + "folder": "objects", + "type": "Texture", + "sha1": "476bc585d6c4444e31580615948927cc5ecf8060" + }, + { + "filename": "volcano_stone", + "build-id": "ASSET_TEX3D_DINO_VOLCANOSTONE", + "folder": "dino", + "type": "Texture", + "sha1": "ddd782d70d9cfb022358bf347a0952d191daf93a" + }, + { + "filename": "moon_stone", + "build-id": "ASSET_TEX3D_SPACE_MOONSTONE", + "folder": "space", + "type": "Texture", + "sha1": "ddd782d70d9cfb022358bf347a0952d191daf93a" + }, + { + "filename": "tower_window", + "build-id": "ASSET_TEX3D_TROPICAL_TOWERWINDOW", + "folder": "tropical", + "type": "Texture", + "sha1": "25f4ae7b0e460ea019db3a50ce8f8b62c166a70a" + }, + { + "filename": "brown_stone_brick", + "build-id": "ASSET_TEX3D_COMMON_BROWNSTONEBRICK", + "folder": "common", + "type": "Texture", + "sha1": "19586bdd7cd29f43dbb22f0131bae0d52286c3f2" + }, + { + "filename": "sand_wet_dry_transition", + "build-id": "ASSET_TEX3D_DINO_SANDWETDRYTRANSITION", + "folder": "dino", + "type": "Texture", + "sha1": "db562cd4f4be99b87ebfcffe6c2d82a58fc950ce" + }, + { + "filename": "dark_stone_wall_snowy", + "build-id": "ASSET_TEX3D_WINTER_DARKSTONEWALLSNOWY", + "folder": "winter", + "type": "Texture", + "sha1": "43cecabb97a781dab8c528b9878406f487385cc3" + }, + { + "filename": "snow_trees_billboard_small", + "build-id": "ASSET_TEX3D_WINTER_SNOWTREESBILLBOARDSMALL", + "folder": "winter", + "type": "Texture", + "sha1": "21a71dae2a6e804f168050a447185cd15c3f56d8" + }, + { + "filename": "snow4", + "build-id": "ASSET_TEX3D_WINTER_SNOW4", + "folder": "winter", + "type": "Texture", + "sha1": "61a75288c9c2a2c2714ad6b1bfd5af0c89913392" + }, + { + "filename": "hanging_snow3", + "build-id": "ASSET_TEX3D_WINTER_HANGINGSNOW3", + "folder": "winter", + "type": "Texture", + "sha1": "0d330e3189cfdf75123b1d4d71eaafb6fe76149f" + }, + { + "filename": "hanging_snow4", + "build-id": "ASSET_TEX3D_WINTER_HANGINGSNOW4", + "folder": "winter", + "type": "Texture", + "sha1": "2f7ced47603f5e59a8f6cfc41f8cff8ff1760cad" + }, + { + "filename": "dark_stone_wall_snowy2", + "build-id": "ASSET_TEX3D_WINTER_DARKSTONEWALLSNOWY2", + "folder": "winter", + "type": "Texture", + "sha1": "43cecabb97a781dab8c528b9878406f487385cc3" + }, + { + "filename": "snow_char_blue_eye", + "build-id": "ASSET_TEX3D_WINTER_SNOWCHARBLUEEYE", + "folder": "winter", + "type": "Texture", + "sha1": "eab2d82c934579509892be625fbf3d119d5bc52b" + }, + { + "filename": "snow_char_yellow_eye", + "build-id": "ASSET_TEX3D_WINTER_SNOWCHARYELLOWEYE", + "folder": "winter", + "type": "Texture", + "sha1": "db694a683ff527ff6fce75805da34778a977529a" + }, + { + "filename": "snow_char_blue_goggles", + "build-id": "ASSET_TEX3D_WINTER_SNOWCHARBLUEGOGGLES", + "folder": "winter", + "type": "Texture", + "sha1": "0b9073832e680778a4e109586aab8814e95e215c" + }, + { + "filename": "village_window_lights", + "build-id": "ASSET_TEX3D_WINTER_VILLAGEWINDOWLIGHTS", + "folder": "winter", + "type": "Texture", + "sha1": "184ca65b926f52388e9f3cdadacf3dea029583fa" + }, + { + "filename": "village_window_lights_glow", + "build-id": "ASSET_TEX3D_WINTER_VILLAGEWINDOWLIGHTSGLOW", + "folder": "winter", + "type": "Texture", + "sha1": "5b28da3dd7c507a5e27daddbf85a06cc08d0f051" + }, + { + "filename": "snow_char_nose", + "build-id": "ASSET_TEX3D_WINTER_SNOWCHARNOSE", + "folder": "winter", + "type": "Texture", + "sha1": "b006dc72918db2585c5b555a82d0cf812ba17c5a" + }, + { + "filename": "cyan_stone", + "build-id": "ASSET_TEX3D_WINTER_CYANSTONE", + "folder": "winter", + "type": "Texture", + "sha1": "d5998b4cdb4f4667c596bf3af7f4ccb385a33868" + }, + { + "filename": "snow_trees_billboard_small2", + "build-id": "ASSET_TEX3D_WINTER_SNOWTREESBILLBOARDSMALL2", + "folder": "winter", + "type": "Texture", + "sha1": "21a71dae2a6e804f168050a447185cd15c3f56d8" + }, + { + "filename": "cyan_stone_snow", + "build-id": "ASSET_TEX3D_WINTER_CYANSTONESNOW", + "folder": "winter", + "type": "Texture", + "sha1": "b4ae21d25d6804a0e90d2aa4b59e79e9e630e1fa" + }, + { + "filename": "pink_white_snow", + "build-id": "ASSET_TEX3D_WINTER_PINKWHITESNOW", + "folder": "winter", + "type": "Texture", + "sha1": "74ef437b354bb513633244f8e63eb1e1804377e1" + }, + { + "filename": "purple_stone", + "build-id": "ASSET_TEX3D_SPACE_PURPLESTONE", + "folder": "space", + "type": "Texture", + "sha1": "354c5fcbb419968a36e82d3d04960eaac6d67242" + }, + { + "filename": "finish_line_flag_green_0", + "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGGREEN_0", + "folder": "common", + "type": "Texture", + "sha1": "a88fbfdf7cf88f4c089d71fd50d57347d463cd23" + }, + { + "filename": "finish_line_flag_green_1", + "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGGREEN_1", + "folder": "common", + "type": "Texture", + "sha1": "8ea19356b98990e6056b215bba54477024851f2a" + }, + { + "filename": "finish_line_flag_green_2", + "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGGREEN_2", + "folder": "common", + "type": "Texture", + "sha1": "e7a0f16449959e36fbf5d89314fea9db05482bcb" + }, + { + "filename": "finish_line_flag_green_3", + "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGGREEN_3", + "folder": "common", + "type": "Texture", + "sha1": "b5a1ad11da0df47adf6c885aedb66c174acf1b5f" + }, + { + "filename": "starfish", + "build-id": "ASSET_TEX3D_TROPICAL_STARFISH", + "folder": "tropical", + "type": "Texture", + "sha1": "9af331f4209387808786af78e00f46664d5ad6ea" + }, + { + "filename": "finish_line_flag_orange_0", + "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGORANGE_0", + "folder": "common", + "type": "Texture", + "sha1": "9f7d5e28713ecd0e5596f00c77ff8a38aa0ac340" + }, + { + "filename": "finish_line_flag_orange_1", + "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGORANGE_1", + "folder": "common", + "type": "Texture", + "sha1": "7de6ebbbaa00539297735053a0d0b70e61e18737" + }, + { + "filename": "finish_line_flag_orange_2", + "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGORANGE_2", + "folder": "common", + "type": "Texture", + "sha1": "e137e67af1ceda705c987f71b81e0cd074d337f8" + }, + { + "filename": "finish_line_flag_orange_3", + "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGORANGE_3", + "folder": "common", + "type": "Texture", + "sha1": "4877c6077c8a40582e526982dd25f84d2d5a8530" + }, + { + "filename": "finish_line_flag_orange_4", + "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGORANGE_4", + "folder": "common", + "type": "Texture", + "sha1": "70e98afecc0f7e4bfde7f51aa1c09d0776c28496" + }, + { + "filename": "finish_line_palm_trees_shadow", + "build-id": "ASSET_TEX3D_DINO_FINISHLINEPALMTREESSHADOW", + "folder": "dino", + "type": "Texture", + "sha1": "563f94d9deae8cf133e80f89ae028e6be0bfdf6a" + }, + { + "filename": "water_scrolling", + "build-id": "ASSET_TEX3D_COMMON_WATERSCROLLING", + "folder": "common", + "type": "Texture", + "sha1": "1562fe07296e0cbd1420172f1bbc44668968d95c" + }, + { + "filename": "firemountain_lava", + "build-id": "ASSET_TEX3D_DINO_FIREMOUNTAINLAVA", + "folder": "dino", + "type": "Texture", + "sha1": "32b1fcbb1636ddf9793c3b8391bc9c964f04dbd0" + }, + { + "filename": "firemountain_red_base", + "build-id": "ASSET_TEX3D_DINO_FIREMOUNTAINREDBASE", + "folder": "dino", + "type": "Texture", + "sha1": "ddd782d70d9cfb022358bf347a0952d191daf93a" + }, + { + "filename": "firemountain_yellow_base", + "build-id": "ASSET_TEX3D_DINO_FIREMOUNTAINYELLOWBASE", + "folder": "dino", + "type": "Texture", + "sha1": "ddd782d70d9cfb022358bf347a0952d191daf93a" + }, + { + "filename": "firemountain_green_base", + "build-id": "ASSET_TEX3D_DINO_FIREMOUNTAINGREENBASE", + "folder": "dino", + "type": "Texture", + "sha1": "ddd782d70d9cfb022358bf347a0952d191daf93a" + }, + { + "filename": "firemountain_blue_base", + "build-id": "ASSET_TEX3D_DINO_FIREMOUNTAINBLUEBASE", + "folder": "dino", + "type": "Texture", + "sha1": "ddd782d70d9cfb022358bf347a0952d191daf93a" + }, + { + "filename": "brown_dirt_wall", + "build-id": "ASSET_TEX3D_COMMON_BROWNDIRTWALL", + "folder": "common", + "type": "Texture", + "sha1": "e1e51ab083bfd9fb10e6b949226805732c444ea8" + }, + { + "filename": "brown_dirt_wall_hilltop", + "build-id": "ASSET_TEX3D_COMMON_BROWNDIRTWALLHILLTOP", + "folder": "common", + "type": "Texture", + "sha1": "c8f605b8290eab25ae848b926188fd7f8b3c8262" + }, + { + "filename": "brown_dirt_wall_hilltop_sandy", + "build-id": "ASSET_TEX3D_COMMON_BROWNDIRTWALLHILLTOPSANDY", + "folder": "common", + "type": "Texture", + "sha1": "4496564a9875c7fa9fe1a5aac75222d17b91a039" + }, + { + "filename": "light_shaft_3", + "build-id": "ASSET_TEX3D_COMMON_LIGHTSHAFT3", + "folder": "common", + "type": "Texture", + "sha1": "5fe7520f75d495920812e4020fdf16653cccf302" + }, + { + "filename": "lagoon_castle_merlon", + "build-id": "ASSET_TEX3D_TROPICAL_LAGOONCASTLEMERLON", + "folder": "tropical", + "type": "Texture", + "sha1": "714f1ad990f2863a27212ac1c892ea75a3e7d8f2" + }, + { + "filename": "house_guardrail_flags", + "build-id": "ASSET_TEX3D_MEDIEVAL_HOUSEGUARDRAILFLAGS", + "folder": "medieval", + "type": "Texture", + "sha1": "44b0357d958855c09460d1248ab139bf02309afe" + }, + { + "filename": "blue_flag", + "build-id": "ASSET_TEX3D_MEDIEVAL_BLUEFLAG", + "folder": "medieval", + "type": "Texture", + "sha1": "0d06bdce6804c39edf6c954dfb6b6ee88960762f" + }, + { + "filename": "white_flag", + "build-id": "ASSET_TEX3D_MEDIEVAL_WHITEFLAG", + "folder": "medieval", + "type": "Texture", + "sha1": "f98722be8d925f93f13e33c0ed391cf264699b96" + }, + { + "filename": "yellow_flag", + "build-id": "ASSET_TEX3D_MEDIEVAL_YELLOWFLAG", + "folder": "medieval", + "type": "Texture", + "sha1": "564ca044c6df2928d149a1a9d8a9ceae1a4e22c1" + }, + { + "filename": "volcano_ceiling_shadow", + "build-id": "ASSET_TEX3D_DINO_VOLCANOCEILINGSHADOW", + "folder": "dino", + "type": "Texture", + "sha1": "6e477033595947af5f65c06fccb9268163667765" + }, + { + "filename": "lagoon_castle_merlon2", + "build-id": "ASSET_TEX3D_TROPICAL_LAGOONCASTLEMERLON2", + "folder": "tropical", + "type": "Texture", + "sha1": "2221312346deafe22bbd3a068d4ed7d26145873b" + }, + { + "filename": "waterfall", + "build-id": "ASSET_TEX3D_COMMON_WATERFALL", + "folder": "common", + "type": "Texture", + "sha1": "f98f168b1842f10b4b998153237bf3f52fed3b17" + }, + { + "filename": "white_fence", + "build-id": "ASSET_TEX3D_OBJECTS_WHITEFENCE", + "folder": "objects", + "type": "Texture", + "sha1": "ad4025abc207b38a4d7729c4a76358653f095e4a" + }, + { + "filename": "dome_white", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEWHITE", + "folder": "objects", + "type": "Texture", + "sha1": "d51c8a389d6c5cd927b6c982602d666259eeec30" + }, + { + "filename": "sand_abovewater", + "build-id": "ASSET_TEX3D_COMMON_SANDABOVEWATER", + "folder": "common", + "type": "Texture", + "sha1": "da82291a40128adcd27473fb1f478440af5926d6" + }, + { + "filename": "wood_bark", + "build-id": "ASSET_TEX3D_COMMON_WOODBARK", + "folder": "common", + "type": "Texture", + "sha1": "7010c75b3a22dc2abb6d9a550373e47ba201e3a2" + }, + { + "filename": "lagoon_castle_tile", + "build-id": "ASSET_TEX3D_TROPICAL_LAGOONCASTLETILE", + "folder": "tropical", + "type": "Texture", + "sha1": "9f4b1edfa0d6e682faf6299ea4470d338f59d73f" + }, + { + "filename": "spacecolumn_gold_horn", + "build-id": "ASSET_TEX3D_OBJECTS_SPACECOLUMNGOLDHORN", + "folder": "objects", + "type": "Texture", + "sha1": "c0695db234bd77b1d3a62e4d06549c5b556d506e" + }, + { + "filename": "sand4", + "build-id": "ASSET_TEX3D_COMMON_SAND4", + "folder": "common", + "type": "Texture", + "sha1": "3f968f44f0cc6385241b66d600c64ce2ef943e3a" + }, + { + "filename": "sand5", + "build-id": "ASSET_TEX3D_COMMON_SAND5", + "folder": "common", + "type": "Texture", + "sha1": "db11841148df894bb8f81629c837d9d1e8402348" + }, + { + "filename": "magma_fall", + "build-id": "ASSET_TEX3D_DINO_MAGMAFALL", + "folder": "dino", + "type": "Texture", + "sha1": "32b1fcbb1636ddf9793c3b8391bc9c964f04dbd0" + }, + { + "filename": "diddy_brown_fur", + "build-id": "ASSET_TEX3D_OBJECTS_DIDDYBROWNFUR", + "folder": "objects", + "type": "Texture", + "sha1": "70ddd7f0cd0cca1ac609f99597d47810eae49ec7" + }, + { + "filename": "tt_plane_wing", + "build-id": "ASSET_TEX3D_OBJECTS_TTPLANEWING", + "folder": "objects", + "type": "Texture", + "sha1": "017601b54e4dc311515dad05d60049c486cf5f86" + }, + { + "filename": "bluey_nose", + "build-id": "ASSET_TEX3D_OBJECTS_BLUEYNOSE", + "folder": "objects", + "type": "Texture", + "sha1": "1bec6d5ded3876a498dfd79fbc63eba031a70753" + }, + { + "filename": "taj_eye", + "build-id": "ASSET_TEX3D_OBJECTS_TAJEYE", + "folder": "objects", + "type": "Texture", + "sha1": "4e378605c7ef9ba436c346b5791585256ccadcfa" + }, + { + "filename": "tower_belfry", + "build-id": "ASSET_TEX3D_MEDIEVAL_TOWERBELFRY", + "folder": "medieval", + "type": "Texture", + "sha1": "8d5ae6aa715c5b9f509ed5702d36ec0256a273bd" + }, + { + "filename": "tower_belfry2", + "build-id": "ASSET_TEX3D_MEDIEVAL_TOWERBELFRY2", + "folder": "medieval", + "type": "Texture", + "sha1": "d82cccab1ddbd366df8824f83f065aac83dca4c2" + }, + { + "filename": "tower_base", + "build-id": "ASSET_TEX3D_MEDIEVAL_TOWERBASE", + "folder": "medieval", + "type": "Texture", + "sha1": "124773e0e7174075596b7786893506c695f970d9" + }, + { + "filename": "tower_base_window", + "build-id": "ASSET_TEX3D_MEDIEVAL_TOWERBASEWINDOW", + "folder": "medieval", + "type": "Texture", + "sha1": "034edf04eb364a7905315895655143aad8191551" + }, + { + "filename": "car_backlights_lowpoly", + "build-id": "ASSET_TEX3D_OBJECTS_CARBACKLIGHTSLOWPOLY", + "folder": "objects", + "type": "Texture", + "sha1": "b2b09bca400df5e1f31debdfacbe8e5007ccff2b" + }, + { + "filename": "timber_stripes", + "build-id": "ASSET_TEX3D_OBJECTS_TIMBERSTRIPES", + "folder": "objects", + "type": "Texture", + "sha1": "a5c583ea46bdfd4d7626ddf29f83a11a2f9f63f5" + }, + { + "filename": "bumper_back", + "build-id": "ASSET_TEX3D_OBJECTS_BUMPERBACK", + "folder": "objects", + "type": "Texture", + "sha1": "a6f11bdaa6347bfff3fb112faf6aa710dc421553" + }, + { + "filename": "bumper_front", + "build-id": "ASSET_TEX3D_OBJECTS_BUMPERFRONT", + "folder": "objects", + "type": "Texture", + "sha1": "c35cfb18ca534e0ed53c7c973d85b45f6cc5dd9d" + }, + { + "filename": "bumper_head_fur", + "build-id": "ASSET_TEX3D_OBJECTS_BUMPERHEADFUR", + "folder": "objects", + "type": "Texture", + "sha1": "a7b96029a135af9470b91149b9b9babdc343d9a9" + }, + { + "filename": "bumper_glove_plus", + "build-id": "ASSET_TEX3D_OBJECTS_BUMPERGLOVEPLUS", + "folder": "objects", + "type": "Texture", + "sha1": "7bbbd5a79b83c5b9b75c6c63721cb8d2c778fea1" + }, + { + "filename": "bumper_goggles_front", + "build-id": "ASSET_TEX3D_OBJECTS_BUMPERGOGGLESFRONT", + "folder": "objects", + "type": "Texture", + "sha1": "5f6b672615d53f37995a7790fcbf54ef3fbd93dc" + }, + { + "filename": "bumper_red_pilot_cap", + "build-id": "ASSET_TEX3D_OBJECTS_BUMPERREDPILOTCAP", + "folder": "objects", + "type": "Texture", + "sha1": "0f178a3f81aa51e949573798672207aa45068939" + }, + { + "filename": "bumper_shoulder_fur", + "build-id": "ASSET_TEX3D_OBJECTS_BUMPERSHOULDERFUR", + "folder": "objects", + "type": "Texture", + "sha1": "cc6cf5b96146d1865bdf359725d347f9dea36d29" + }, + { + "filename": "bumper_nose", + "build-id": "ASSET_TEX3D_OBJECTS_BUMPERNOSE", + "folder": "objects", + "type": "Texture", + "sha1": "ef89bc038a877c86f2f857fd174c092dcd6df01f" + }, + { + "filename": "racer_common_red", + "build-id": "ASSET_TEX3D_OBJECTS_RACERCOMMONRED", + "folder": "objects", + "type": "Texture", + "sha1": "3b3c8057a4183a36858b5b447e82bfa66dcc84dc" + }, + { + "filename": "bumper_head_fur_lowpoly", + "build-id": "ASSET_TEX3D_OBJECTS_BUMPERHEADFURLOWPOLY", + "folder": "objects", + "type": "Texture", + "sha1": "7dbb7f6543cc3cd620c23c4a0f268a4affdcf580" + }, + { + "filename": "bumper_face_lowpoly", + "build-id": "ASSET_TEX3D_OBJECTS_BUMPERFACELOWPOLY", + "folder": "objects", + "type": "Texture", + "sha1": "38b4dd5d60188352182d13526dd594fac6d77125" + }, + { + "filename": "bumper_back_lowpoly", + "build-id": "ASSET_TEX3D_OBJECTS_BUMPERBACKLOWPOLY", + "folder": "objects", + "type": "Texture", + "sha1": "8d808d2a6153f7b2e6de0cdb98870581eaff8b08" + }, + { + "filename": "bumper_goggles_side", + "build-id": "ASSET_TEX3D_OBJECTS_BUMPERGOGGLESSIDE", + "folder": "objects", + "type": "Texture", + "sha1": "bfe1ce2b3ef7e1d31e71734550a16cd52ea72c42" + }, + { + "filename": "bumper_head_fur_light", + "build-id": "ASSET_TEX3D_OBJECTS_BUMPERHEADFURLIGHT", + "folder": "objects", + "type": "Texture", + "sha1": "ffda0a3510b6666ae5fd07cbfeb9727231fea01f" + }, + { + "filename": "bumper_goggles_side2", + "build-id": "ASSET_TEX3D_OBJECTS_BUMPERGOGGLESSIDE2", + "folder": "objects", + "type": "Texture", + "sha1": "6b86d5dbae8ae2404767c757c6e0d4b1f93f7672" + }, + { + "filename": "banjo_backpack", + "build-id": "ASSET_TEX3D_OBJECTS_BANJOBACKPACK", + "folder": "objects", + "type": "Texture", + "sha1": "1c390c79d42864de2e189b80be2ceb0e5edcea1b" + }, + { + "filename": "banjo_shorts", + "build-id": "ASSET_TEX3D_OBJECTS_BANJOSHORTS", + "folder": "objects", + "type": "Texture", + "sha1": "24e67e3bb9c94bc7c087acb29237262aea1a1646" + }, + { + "filename": "banjo_shorts_charselect", + "build-id": "ASSET_TEX3D_OBJECTS_BANJOSHORTSCHARSELECT", + "folder": "objects", + "type": "Texture", + "sha1": "4bc9b6d8994b69cc2f2d8c285a73554ad418faad" + }, + { + "filename": "banjo_chest", + "build-id": "ASSET_TEX3D_OBJECTS_BANJOCHEST", + "folder": "objects", + "type": "Texture", + "sha1": "3ab39781928bdb6ca3d535eb6b7f7ba19ca026e3" + }, + { + "filename": "banjo_chest_charselect", + "build-id": "ASSET_TEX3D_OBJECTS_BANJOCHESTCHARSELECT", + "folder": "objects", + "type": "Texture", + "sha1": "6ca1b6b33bb6bf383b6851c98ef308fdb875aa8a" + }, + { + "filename": "banjo_hair_top_charselect", + "build-id": "ASSET_TEX3D_OBJECTS_BANJOHAIRTOPCHARSELECT", + "folder": "objects", + "type": "Texture", + "sha1": "fe9779737c52bedb8f4d3d0f7ff2d76bd77dad2d" + }, + { + "filename": "banjo_wrist_ankles_charselect", + "build-id": "ASSET_TEX3D_OBJECTS_BANJOWRISTANKLESCHARSELECT", + "folder": "objects", + "type": "Texture", + "sha1": "bc9c95e30ddd76a9200bbc3a4806df4c1ed2bd37" + }, + { + "filename": "banjo_ear_shadow", + "build-id": "ASSET_TEX3D_OBJECTS_BANJOEARSHADOW", + "folder": "objects", + "type": "Texture", + "sha1": "848dfd119d114c21aa6cb9c449a6669a9e9313a1" + }, + { + "filename": "banjo_eyes", + "build-id": "ASSET_TEX3D_OBJECTS_BANJOEYES", + "folder": "objects", + "type": "Texture", + "sha1": "1696e412bfa8202501a029fc5da9fecafb9862d0" + }, + { + "filename": "beta_balloon_banjo_0", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONBANJO_0", + "folder": "unused", + "type": "Texture", + "sha1": "e3bf0c30bef03a6a511e68a28af7c8c0228ad95c" + }, + { + "filename": "beta_balloon_banjo_1", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONBANJO_1", + "folder": "unused", + "type": "Texture", + "sha1": "75c716aa23db654517acd38f5e60b96074ae1937" + }, + { + "filename": "beta_balloon_banjo_2", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONBANJO_2", + "folder": "unused", + "type": "Texture", + "sha1": "6bf66076438fbb83d87e6cd5d66986dbba2d0dbf" + }, + { + "filename": "beta_balloon_banjo_3", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONBANJO_3", + "folder": "unused", + "type": "Texture", + "sha1": "c7cc227144ca5776ea643a795252ba0eac8ee893" + }, + { + "filename": "banjo_skin", + "build-id": "ASSET_TEX3D_OBJECTS_BANJOSKIN", + "folder": "objects", + "type": "Texture", + "sha1": "f4878115e1e3dde0bc373402c64066c92df6dafd" + }, + { + "filename": "banjo_chest_lowpoly", + "build-id": "ASSET_TEX3D_OBJECTS_BANJOCHESTLOWPOLY", + "folder": "objects", + "type": "Texture", + "sha1": "7ee438606dd82a1ebca1e34ada1023337946fc39" + }, + { + "filename": "banjo_hair_fur", + "build-id": "ASSET_TEX3D_OBJECTS_BANJOHAIRFUR", + "folder": "objects", + "type": "Texture", + "sha1": "1153e6f42f61ef10c041dc78004b9a47d5cd2a4b" + }, + { + "filename": "banjo_arm_fur", + "build-id": "ASSET_TEX3D_OBJECTS_BANJOARMFUR", + "folder": "objects", + "type": "Texture", + "sha1": "1c8008774a09cb1f4f5927c5340cc6e8e9383953" + }, + { + "filename": "banjo_neck", + "build-id": "ASSET_TEX3D_OBJECTS_BANJONECK", + "folder": "objects", + "type": "Texture", + "sha1": "fdd61e8250cf762ada2cba0fc80e31a9ff5b93ff" + }, + { + "filename": "banjo_neck_fur_back", + "build-id": "ASSET_TEX3D_OBJECTS_BANJONECKFURBACK", + "folder": "objects", + "type": "Texture", + "sha1": "09b04b625125dceb032a246795a1fda8a1c79a9c" + }, + { + "filename": "banjo_back_lowestpoly", + "build-id": "ASSET_TEX3D_OBJECTS_BANJOBACKLOWESTPOLY", + "folder": "objects", + "type": "Texture", + "sha1": "635426ad567c8f460bc853997121662cb4fe8618" + }, + { + "filename": "banjo_backpack_straps", + "build-id": "ASSET_TEX3D_OBJECTS_BANJOBACKPACKSTRAPS", + "folder": "objects", + "type": "Texture", + "sha1": "edd6be288682c8e2471fe995b1446cd7488792e6" + }, + { + "filename": "banjo_back_lowpoly", + "build-id": "ASSET_TEX3D_OBJECTS_BANJOBACKLOWPOLY", + "folder": "objects", + "type": "Texture", + "sha1": "b4a6dc3329c5202a9e8b51cd106be7764eac1d4c" + }, + { + "filename": "diddy_nose", + "build-id": "ASSET_TEX3D_OBJECTS_DIDDYNOSE", + "folder": "objects", + "type": "Texture", + "sha1": "ad02b7abe47d75893be7cd273beb13f6057dff48" + }, + { + "filename": "racer_common_black", + "build-id": "ASSET_TEX3D_OBJECTS_RACERCOMMONBLACK", + "folder": "objects", + "type": "Texture", + "sha1": "4cdeb98beb846273651ac52b55eed6cc40d6b587" + }, + { + "filename": "tt_vehicle_silver", + "build-id": "ASSET_TEX3D_OBJECTS_TTVEHICLESILVER", + "folder": "objects", + "type": "Texture", + "sha1": "164a133233c5e10cb28e07d34f7ba04d99c69201" + }, + { + "filename": "bubbler_tentacles_top", + "build-id": "ASSET_TEX3D_OBJECTS_BUBBLERTENTACLESTOP", + "folder": "objects", + "type": "Texture", + "sha1": "efbc19c27ceda33a9b2e4789a7c9fd8f3a94489e" + }, + { + "filename": "drumstick_vehicle_cyan", + "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKVEHICLECYAN", + "folder": "objects", + "type": "Texture", + "sha1": "40b8d35baa1d28b4a9ed307b7eec15234c82401a" + }, + { + "filename": "beta_tiptup_balloon_envmap", + "build-id": "ASSET_TEX3D_OBJECTS_BETATIPTUPBALLOONENVMAP", + "folder": "objects", + "type": "Texture", + "sha1": "3bc96699ea15e4d693fca3157382ad78f31a3bda" + }, + { + "filename": "banjo_car_envmap", + "build-id": "ASSET_TEX3D_OBJECTS_BANJOCARENVMAP", + "folder": "objects", + "type": "Texture", + "sha1": "8788601162ca80e5dedcbe3fcdfb393edfac7122" + }, + { + "filename": "tiptup_car_envmap", + "build-id": "ASSET_TEX3D_OBJECTS_TIPTUPCARENVMAP", + "folder": "objects", + "type": "Texture", + "sha1": "1f913ad09fe19bb7f1f44bbb260a60716ddb7120" + }, + { + "filename": "conker_shirt", + "build-id": "ASSET_TEX3D_OBJECTS_CONKERSHIRT", + "folder": "objects", + "type": "Texture", + "sha1": "b945e271600f224a30f7bb4e90bc1e98d9c2f183" + }, + { + "filename": "bonus", + "build-id": "ASSET_TEX3D_OBJECTS_BONUS", + "folder": "objects", + "type": "Texture", + "sha1": "6ae2e175085b11c09a3f459a550f680d34d77fe1" + }, + { + "filename": "racer_common_underside", + "build-id": "ASSET_TEX3D_OBJECTS_RACERCOMMONUNDERSIDE", + "folder": "objects", + "type": "Texture", + "sha1": "3f819ba76d1bd06dd8da6b7012ccdfa2f60c1358" + }, + { + "filename": "timber_cap_brim", + "build-id": "ASSET_TEX3D_OBJECTS_TIMBERCAPBRIM", + "folder": "objects", + "type": "Texture", + "sha1": "c499620179f9f8bc3fa02850cc5c98523425362c" + }, + { + "filename": "timber_cap_brim_charselect", + "build-id": "ASSET_TEX3D_OBJECTS_TIMBERCAPBRIMCHARSELECT", + "folder": "objects", + "type": "Texture", + "sha1": "e0cbfde1d18751cd926163d2b915457fd953f0f5" + }, + { + "filename": "timber_hands", + "build-id": "ASSET_TEX3D_OBJECTS_TIMBERHANDS", + "folder": "objects", + "type": "Texture", + "sha1": "6c6391bed8e7fedb91b05f5e2d209d90e78b390b" + }, + { + "filename": "drumstick_vest", + "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKVEST", + "folder": "objects", + "type": "Texture", + "sha1": "14f2937e5b7b173e99fd9192e4f9667ff45cd26d" + }, + { + "filename": "drumstick_back_lowpoly", + "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKBACKLOWPOLY", + "folder": "objects", + "type": "Texture", + "sha1": "2ad2e9dadf25bca47bca3acd247517c880d61265" + }, + { + "filename": "drumstick_beak", + "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKBEAK", + "folder": "objects", + "type": "Texture", + "sha1": "d19c7c9ff2d36420e1f2dd746a4182c98f1a510f" + }, + { + "filename": "drumstick_feathers", + "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKFEATHERS", + "folder": "objects", + "type": "Texture", + "sha1": "d51c8a389d6c5cd927b6c982602d666259eeec30" + }, + { + "filename": "tt_amulet_eye", + "build-id": "ASSET_TEX3D_OBJECTS_TTAMULETEYE", + "folder": "objects", + "type": "Texture", + "sha1": "bf213b8bd95b2ec98f86618439c5b591f8a57b8f" + }, + { + "filename": "beta_drumstick_balloon_0", + "build-id": "ASSET_TEX3D_UNUSED_BETADRUMSTICKBALLOON_0", + "folder": "unused", + "type": "Texture", + "sha1": "5abbfd54b3597575b43fabf9a9e931b928fce68e" + }, + { + "filename": "beta_drumstick_balloon_1", + "build-id": "ASSET_TEX3D_UNUSED_BETADRUMSTICKBALLOON_1", + "folder": "unused", + "type": "Texture", + "sha1": "b01b94db3b5b2662c310d292e2b16d31a34dc6fa" + }, + { + "filename": "beta_drumstick_balloon_2", + "build-id": "ASSET_TEX3D_UNUSED_BETADRUMSTICKBALLOON_2", + "folder": "unused", + "type": "Texture", + "sha1": "def266b38957970909ea5487981e230588d93c81" + }, + { + "filename": "beta_drumstick_balloon_3", + "build-id": "ASSET_TEX3D_UNUSED_BETADRUMSTICKBALLOON_3", + "folder": "unused", + "type": "Texture", + "sha1": "ba778ebdcfbe30201c09d72140b1e23731779ce0" + }, + { + "filename": "drumstick_lowerback", + "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKLOWERBACK", + "folder": "objects", + "type": "Texture", + "sha1": "961950ee6b37a0890bf227fd9fbd417edb78d1e7" + }, + { + "filename": "drumstick_front_lowpoly", + "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKFRONTLOWPOLY", + "folder": "objects", + "type": "Texture", + "sha1": "229526045ee61082d66122f6dd3eb45b5ec978d1" + }, + { + "filename": "drumstick_feet_charselect", + "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKFEETCHARSELECT", + "folder": "objects", + "type": "Texture", + "sha1": "7fe0e259daf3fa67e3b9f8d5fc0d8b4a3901592b" + }, + { + "filename": "drumstick_feathers2", + "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKFEATHERS2", + "folder": "objects", + "type": "Texture", + "sha1": "4106f18d10b18a1367025f44a43c0630b9aad827" + }, + { + "filename": "drumstick_pants_bottom_charselect", + "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKPANTSBOTTOMCHARSELECT", + "folder": "objects", + "type": "Texture", + "sha1": "ea25eccf3cf3640f1f67901f68614c7bd29476c5" + }, + { + "filename": "diddy_mouth_charselect", + "build-id": "ASSET_TEX3D_OBJECTS_DIDDYMOUTHCHARSELECT", + "folder": "objects", + "type": "Texture", + "sha1": "9c68e2cf63b794be433a81f193f07146c1438634" + }, + { + "filename": "drumstick_eyes", + "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKEYES", + "folder": "objects", + "type": "Texture", + "sha1": "c9a1cab35432d5ddeb2c7d3f2a52168ab63d6883" + }, + { + "filename": "racer_common_plane_underside", + "build-id": "ASSET_TEX3D_OBJECTS_RACERCOMMONPLANEUNDERSIDE", + "folder": "objects", + "type": "Texture", + "sha1": "9a90980a23cc16e04fd292eaaad068a1ab1001c3" + }, + { + "filename": "bluey_tuxedo_piece", + "build-id": "ASSET_TEX3D_OBJECTS_BLUEYTUXEDOPIECE", + "folder": "objects", + "type": "Texture", + "sha1": "96262f75a64ee4770438004a6065addd29e7e52b" + }, + { + "filename": "conker_fur", + "build-id": "ASSET_TEX3D_OBJECTS_CONKERFUR", + "folder": "objects", + "type": "Texture", + "sha1": "945d73c660c28fea7d904b9760c70e246c46b37b" + }, + { + "filename": "conker_eyes", + "build-id": "ASSET_TEX3D_OBJECTS_CONKEREYES", + "folder": "objects", + "type": "Texture", + "sha1": "70b3b43f1770872d5d51d0492c7624718c576b6f" + }, + { + "filename": "conkey_mouth", + "build-id": "ASSET_TEX3D_OBJECTS_CONKEYMOUTH", + "folder": "objects", + "type": "Texture", + "sha1": "aebd0b60b497adbcd9f4b8cce826e60faebaa339" + }, + { + "filename": "conker_fur_solid", + "build-id": "ASSET_TEX3D_OBJECTS_CONKERFURSOLID", + "folder": "objects", + "type": "Texture", + "sha1": "77c82c40d9931f1cc0e7dddd969a022c2e0aae94" + }, + { + "filename": "conker_shoes_charselect", + "build-id": "ASSET_TEX3D_OBJECTS_CONKERSHOESCHARSELECT", + "folder": "objects", + "type": "Texture", + "sha1": "4bb3d0e45f1d5b0040692bdc8b56d262995d6a91" + }, + { + "filename": "conker_back", + "build-id": "ASSET_TEX3D_OBJECTS_CONKERBACK", + "folder": "objects", + "type": "Texture", + "sha1": "93eafc541133cb21f11ea8249889ca691b19e5cf" + }, + { + "filename": "beta_banjo_balloon_envmap", + "build-id": "ASSET_TEX3D_UNUSED_BETABANJOBALLOONENVMAP", + "folder": "unused", + "type": "Texture", + "sha1": "8b1eb6578b6bd61ac795bbdc52010222f43bef1b" + }, + { + "filename": "racer_common_break_light", + "build-id": "ASSET_TEX3D_OBJECTS_RACERCOMMONBREAKLIGHT", + "folder": "objects", + "type": "Texture", + "sha1": "fef9d1c84442113837f1bf29ea8d98219b11e061" + }, + { + "filename": "banjo_break_light1", + "build-id": "ASSET_TEX3D_OBJECTS_BANJOBREAKLIGHT1", + "folder": "objects", + "type": "Texture", + "sha1": "de46cbfacca8c8fcebcb9391c3dfa70b1f07e4b4" + }, + { + "filename": "banjo_break_light2", + "build-id": "ASSET_TEX3D_OBJECTS_BANJOBREAKLIGHT2", + "folder": "objects", + "type": "Texture", + "sha1": "fbca0fba196b6d6f1d9d16c4c4f948ce3d70298a" + }, + { + "filename": "banjo_break_light3", + "build-id": "ASSET_TEX3D_OBJECTS_BANJOBREAKLIGHT3", + "folder": "objects", + "type": "Texture", + "sha1": "13cdf7e1bcf6fe02c0d7232d1cf8598952d16653" + }, + { + "filename": "banjo_break_light4", + "build-id": "ASSET_TEX3D_OBJECTS_BANJOBREAKLIGHT4", + "folder": "objects", + "type": "Texture", + "sha1": "19269f15715a148684fb0ce3044be79cd2c61c63" + }, + { + "filename": "banjo_break_light5", + "build-id": "ASSET_TEX3D_OBJECTS_BANJOBREAKLIGHT5", + "folder": "objects", + "type": "Texture", + "sha1": "fa793f5bb4abb7621abdbbeee0f309529c6e5088" + }, + { + "filename": "racer_common_plane_break_light", + "build-id": "ASSET_TEX3D_UNUSED_RACERCOMMONPLANEBREAKLIGHT", + "folder": "unused", + "type": "Texture", + "sha1": "41e1718389991ab3cb4239f161dcc21950409ec3" + }, + { + "filename": "drumstick_straps", + "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKSTRAPS", + "folder": "objects", + "type": "Texture", + "sha1": "9476ce6bb2d5429690b7b2688dbb83549e552b0d" + }, + { + "filename": "diddy_lower_back", + "build-id": "ASSET_TEX3D_OBJECTS_DIDDYLOWERBACK", + "folder": "objects", + "type": "Texture", + "sha1": "2a5b3ef480d86bb97d64b6d71a0641239b483d9e" + }, + { + "filename": "diddy_lower_front", + "build-id": "ASSET_TEX3D_OBJECTS_DIDDYLOWERFRONT", + "folder": "objects", + "type": "Texture", + "sha1": "db609f7417c0894e3d7e4245fb249678c427880b" + }, + { + "filename": "diddy_unknown", + "build-id": "ASSET_TEX3D_UNUSED_DIDDYUNKNOWN", + "folder": "unused", + "type": "Texture", + "sha1": "72dbab470ad370c08abd707a3118778f029fda91" + }, + { + "filename": "diddy_eye_noblink", + "build-id": "ASSET_TEX3D_UNUSED_DIDDYEYENOBLINK", + "folder": "unused", + "type": "Texture", + "sha1": "d0dd2d059008c3ded714f4307f07daf60c33244a" + }, + { + "filename": "diddy_cap_strap", + "build-id": "ASSET_TEX3D_OBJECTS_DIDDYCAPSTRAP", + "folder": "objects", + "type": "Texture", + "sha1": "12b78ffb32758027e48f1a429fe71bee811df998" + }, + { + "filename": "diddy_cap", + "build-id": "ASSET_TEX3D_OBJECTS_DIDDYCAP", + "folder": "objects", + "type": "Texture", + "sha1": "f4f185e8ff76ca74a3ade85afacef6f98f7282d2" + }, + { + "filename": "diddy_back_lowpoly", + "build-id": "ASSET_TEX3D_OBJECTS_DIDDYBACKLOWPOLY", + "folder": "objects", + "type": "Texture", + "sha1": "2be839dae86042d7b17a87a8073b971c193b0042" + }, + { + "filename": "diddy_back_star", + "build-id": "ASSET_TEX3D_OBJECTS_DIDDYBACKSTAR", + "folder": "objects", + "type": "Texture", + "sha1": "41ada8f7420be59a49c9f7f089dfcd4c2059a25a" + }, + { + "filename": "diddy_wrist", + "build-id": "ASSET_TEX3D_OBJECTS_DIDDYWRIST", + "folder": "objects", + "type": "Texture", + "sha1": "18456248be5f77b4a295c0c2a5db786d229f40d2" + }, + { + "filename": "diddy_eye", + "build-id": "ASSET_TEX3D_OBJECTS_DIDDYEYE", + "folder": "objects", + "type": "Texture", + "sha1": "4e9ea22e41c80a5f8d864b8ed0ce78180d141cf4" + }, + { + "filename": "yellow_dinosaur_feet", + "build-id": "ASSET_TEX3D_OBJECTS_YELLOWDINOSAURFEET", + "folder": "objects", + "type": "Texture", + "sha1": "4f6f93a89d44c956223effddae4f74acc771b381" + }, + { + "filename": "green_dinosaur_underside", + "build-id": "ASSET_TEX3D_OBJECTS_GREENDINOSAURUNDERSIDE", + "folder": "objects", + "type": "Texture", + "sha1": "106f0ac959848fe5f42d895b837827aa2b264bb9" + }, + { + "filename": "yellow_dinosaur_neck_transition", + "build-id": "ASSET_TEX3D_OBJECTS_YELLOWDINOSAURNECKTRANSITION", + "folder": "objects", + "type": "Texture", + "sha1": "26f0fe3e15fc97af76f020268e30bd73c5f50a5d" + }, + { + "filename": "green_dinosaur_face_smile", + "build-id": "ASSET_TEX3D_OBJECTS_GREENDINOSAURFACESMILE", + "folder": "objects", + "type": "Texture", + "sha1": "2e4b721b318e2366e282fe2cf056a9bc31ac1040" + }, + { + "filename": "yellow_dinosaur_nose", + "build-id": "ASSET_TEX3D_OBJECTS_YELLOWDINOSAURNOSE", + "folder": "objects", + "type": "Texture", + "sha1": "fab97be55b6cb1b046db18607b4c022a90c5856e" + }, + { + "filename": "green_dinosaur_nose", + "build-id": "ASSET_TEX3D_OBJECTS_GREENDINOSAURNOSE", + "folder": "objects", + "type": "Texture", + "sha1": "c0caf562d27b10345cb3760d9d92be6df496c08e" + }, + { + "filename": "green_dinosaur_skin", + "build-id": "ASSET_TEX3D_OBJECTS_GREENDINOSAURSKIN", + "folder": "objects", + "type": "Texture", + "sha1": "309f25b43994ca99cc99acf77726447a5315fe36" + }, + { + "filename": "yellow_dinosaur_neck_back", + "build-id": "ASSET_TEX3D_OBJECTS_YELLOWDINOSAURNECKBACK", + "folder": "objects", + "type": "Texture", + "sha1": "03f99b16b5f8c8fc9f33bb1737e9b722b1a92111" + }, + { + "filename": "yellow_dinosaur_limbs", + "build-id": "ASSET_TEX3D_OBJECTS_YELLOWDINOSAURLIMBS", + "folder": "objects", + "type": "Texture", + "sha1": "58a4a49666844a98a294f8984ec402a481fee958" + }, + { + "filename": "racer_common_steering_wheel", + "build-id": "ASSET_TEX3D_OBJECTS_RACERCOMMONSTEERINGWHEEL", + "folder": "objects", + "type": "Texture", + "sha1": "923395663fce99e21b4250264328daf927f70390" + }, + { + "filename": "diddy_front_neckloop", + "build-id": "ASSET_TEX3D_OBJECTS_DIDDYFRONTNECKLOOP", + "folder": "objects", + "type": "Texture", + "sha1": "49505eea9c1c480713aaafc79d55b40d55a1330c" + }, + { + "filename": "smokey_tricky_tongue", + "build-id": "ASSET_TEX3D_OBJECTS_SMOKEYTRICKYTONGUE", + "folder": "objects", + "type": "Texture", + "sha1": "1ca00c880c5a3b800cce269997f4047208146b1a" + }, + { + "filename": "smokey_arms_back_scales", + "build-id": "ASSET_TEX3D_OBJECTS_SMOKEYARMSBACKSCALES", + "folder": "objects", + "type": "Texture", + "sha1": "a2ae394344a05131df7170fcd327f07be7859e1e" + }, + { + "filename": "smokey_back_head_scales", + "build-id": "ASSET_TEX3D_OBJECTS_SMOKEYBACKHEADSCALES", + "folder": "objects", + "type": "Texture", + "sha1": "2fd92b060c2471abba803fabc408f5d8373b6a4e" + }, + { + "filename": "smokey_underside", + "build-id": "ASSET_TEX3D_OBJECTS_SMOKEYUNDERSIDE", + "folder": "objects", + "type": "Texture", + "sha1": "3d70a47608cea547c1a3099ec17337430a1f16a8" + }, + { + "filename": "smokey_eye", + "build-id": "ASSET_TEX3D_OBJECTS_SMOKEYEYE", + "folder": "objects", + "type": "Texture", + "sha1": "da82241101211d3ea86c078e1057ea6f69c5799a" + }, + { + "filename": "spacecolumn_smokey_eye", + "build-id": "ASSET_TEX3D_OBJECTS_SPACECOLUMNSMOKEYEYE", + "folder": "objects", + "type": "Texture", + "sha1": "4b3d79e2434fdf335e7cd88c3e18e3866f0b52cb" + }, + { + "filename": "smokey_feet_bottom", + "build-id": "ASSET_TEX3D_OBJECTS_SMOKEYFEETBOTTOM", + "folder": "objects", + "type": "Texture", + "sha1": "ef3d6832b08428a390a991e0fbc8deb116bf6659" + }, + { + "filename": "smokey_cheek", + "build-id": "ASSET_TEX3D_OBJECTS_SMOKEYCHEEK", + "folder": "objects", + "type": "Texture", + "sha1": "229f43298a045a19dbcb4fddb12ff97b2832c96d" + }, + { + "filename": "drumstick_straps_lowpoly", + "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKSTRAPSLOWPOLY", + "folder": "objects", + "type": "Texture", + "sha1": "d32f594c9997356e37aa1c26a19debc2e8851442" + }, + { + "filename": "dome_blue_sky_clouds_0", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKYCLOUDS_0", + "folder": "objects", + "type": "Texture", + "sha1": "744e4c820a8ab6fd015728e61a523fe111ec2dc2" + }, + { + "filename": "dome_blue_sky_clouds_1", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKYCLOUDS_1", + "folder": "objects", + "type": "Texture", + "sha1": "35ba18afa3de3e8bf8c436c70d3f747736b0e680" + }, + { + "filename": "racer_common_car_exhaust", + "build-id": "ASSET_TEX3D_OBJECTS_RACERCOMMONCAREXHAUST", + "folder": "objects", + "type": "Texture", + "sha1": "33432e14df6f6ce210e8ac1a25593b6928ba9bd4" + }, + { + "filename": "racer_common_car_exhaust_lowpoly", + "build-id": "ASSET_TEX3D_OBJECTS_RACERCOMMONCAREXHAUSTLOWPOLY", + "folder": "objects", + "type": "Texture", + "sha1": "1d368996262f62c61a660890bfeeba8f04af443f" + }, + { + "filename": "exit", + "build-id": "ASSET_TEX3D_OBJECTS_EXIT", + "folder": "objects", + "type": "Texture", + "sha1": "79ec9899e2678c6f758aa03bbce53ee028c1ac80" + }, + { + "filename": "stopwatch_eye_0", + "build-id": "ASSET_TEX3D_OBJECTS_STOPWATCHEYE_0", + "folder": "objects", + "type": "Texture", + "sha1": "f03193f991a84bdc056cf893c5e2c9655c99f699" + }, + { + "filename": "stopwatch_eye_1", + "build-id": "ASSET_TEX3D_OBJECTS_STOPWATCHEYE_1", + "folder": "objects", + "type": "Texture", + "sha1": "b4d49b3351cf359a0989280593bdd8c69cbfcd4d" + }, + { + "filename": "stopwatch_eye_2", + "build-id": "ASSET_TEX3D_OBJECTS_STOPWATCHEYE_2", + "folder": "objects", + "type": "Texture", + "sha1": "8695acd527ab9f6f6658eb220c9f0294571512b2" + }, + { + "filename": "frog_belly", + "build-id": "ASSET_TEX3D_OBJECTS_FROGBELLY", + "folder": "objects", + "type": "Texture", + "sha1": "0f32755e64cd7cd32a9a03805d55d9fe73bc0bdf" + }, + { + "filename": "blue", + "build-id": "ASSET_TEX3D_UNUSED_BLUE", + "folder": "unused", + "type": "Texture", + "sha1": "dc1c881ad8c3416e511712fff5d0cc8b35f322b8" + }, + { + "filename": "tiptup_shell_outline", + "build-id": "ASSET_TEX3D_OBJECTS_TIPTUPSHELLOUTLINE", + "folder": "objects", + "type": "Texture", + "sha1": "d51c8a389d6c5cd927b6c982602d666259eeec30" + }, + { + "filename": "beta_balloon_bumper_0", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONBUMPER_0", + "folder": "unused", + "type": "Texture", + "sha1": "954369965881aa317f63390cd9d70009c65efe6d" + }, + { + "filename": "beta_balloon_bumper_1", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONBUMPER_1", + "folder": "unused", + "type": "Texture", + "sha1": "9015547854c4aefa99becea03f6e601eaca1fec9" + }, + { + "filename": "beta_balloon_bumper_2", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONBUMPER_2", + "folder": "unused", + "type": "Texture", + "sha1": "47df8965f4519162ad08442f986851e68b6f4d5c" + }, + { + "filename": "beta_balloon_bumper_3", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONBUMPER_3", + "folder": "unused", + "type": "Texture", + "sha1": "d92466840c177e9e358ce27ce340a5f9d799d589" + }, + { + "filename": "bumper_eyes", + "build-id": "ASSET_TEX3D_OBJECTS_BUMPEREYES", + "folder": "objects", + "type": "Texture", + "sha1": "9741726274917698bee981c9dddd823115ee71c7" + }, + { + "filename": "gold_envmap", + "build-id": "ASSET_TEX3D_OBJECTS_GOLDENVMAP", + "folder": "objects", + "type": "Texture", + "sha1": "61f3d80bf958791f9d5e7e47443a0b9e839f18dd" + }, + { + "filename": "gold_envmap2", + "build-id": "ASSET_TEX3D_OBJECTS_GOLDENVMAP2", + "folder": "objects", + "type": "Texture", + "sha1": "181eac5387c18223294ad244615204ed48178c42" + }, + { + "filename": "gold_balloon_envmap", + "build-id": "ASSET_TEX3D_OBJECTS_GOLDBALLOONENVMAP", + "folder": "objects", + "type": "Texture", + "sha1": "97e0ab2f54f191b606f30e1c71a5cd1b6b61e8bf" + }, + { + "filename": "green_envmap", + "build-id": "ASSET_TEX3D_OBJECTS_GREENENVMAP", + "folder": "objects", + "type": "Texture", + "sha1": "78fb4d1fa275765ffb09e90bff453f139bbb8118" + }, + { + "filename": "diddy_car_envmap", + "build-id": "ASSET_TEX3D_OBJECTS_DIDDYCARENVMAP", + "folder": "objects", + "type": "Texture", + "sha1": "d3f59744ec26ad2bbaf4fc62b16601fa70af9238" + }, + { + "filename": "racer_common_plane_tail_light", + "build-id": "ASSET_TEX3D_OBJECTS_RACERCOMMONPLANETAILLIGHT", + "folder": "objects", + "type": "Texture", + "sha1": "084892c2e8bd4d3ce4722c869c5dcd42fa2c6843" + }, + { + "filename": "timber_car_envmap", + "build-id": "ASSET_TEX3D_OBJECTS_TIMBERCARENVMAP", + "folder": "objects", + "type": "Texture", + "sha1": "6f819e7b4f416955502d63d007d554447de45fe0" + }, + { + "filename": "debug_gray", + "build-id": "ASSET_TEX3D_COMMON_DEBUGGRAY", + "folder": "common", + "type": "Texture", + "sha1": "0a3518e01371a6091c96ceb68f74fe986dc232f7" + }, + { + "filename": "timber_cap_back", + "build-id": "ASSET_TEX3D_OBJECTS_TIMBERCAPBACK", + "folder": "objects", + "type": "Texture", + "sha1": "a228d434612b0f639804b6d16f0da89a76182b50" + }, + { + "filename": "timber_cap_front", + "build-id": "ASSET_TEX3D_OBJECTS_TIMBERCAPFRONT", + "folder": "objects", + "type": "Texture", + "sha1": "24f26692e9c49c9e384c5e95adcb1d63bc432588" + }, + { + "filename": "timber_cap_top", + "build-id": "ASSET_TEX3D_OBJECTS_TIMBERCAPTOP", + "folder": "objects", + "type": "Texture", + "sha1": "b79d2dc520c789727ea357b4313e4a95c9311ed2" + }, + { + "filename": "timber_head_fur", + "build-id": "ASSET_TEX3D_OBJECTS_TIMBERHEADFUR", + "folder": "objects", + "type": "Texture", + "sha1": "2af8e64a14757a779ceac6e8513f876e02f7933a" + }, + { + "filename": "timber_stripes_arms_nape", + "build-id": "ASSET_TEX3D_OBJECTS_TIMBERSTRIPESARMSNECKBACK", + "folder": "objects", + "type": "Texture", + "sha1": "90a9373c481e1f77b53bf74140be72e62c08bdae" + }, + { + "filename": "timber_stripes_arms_nape_plane", + "build-id": "ASSET_TEX3D_OBJECTS_TIMBERSTRIPESARMSNECKBACKPLANE", + "folder": "objects", + "type": "Texture", + "sha1": "32d3b6a8bc23956e8c8e9e9089741ca5d6e73a3c" + }, + { + "filename": "timber_stripes_limbs_back_charselect", + "build-id": "ASSET_TEX3D_OBJECTS_TIMBERSTRIPESLIMBSBACKCHARSELECT", + "folder": "objects", + "type": "Texture", + "sha1": "90a9373c481e1f77b53bf74140be72e62c08bdae" + }, + { + "filename": "white_wall_with_pipes", + "build-id": "ASSET_TEX3D_SPACE_WHITEWALLWITHPIPES", + "folder": "space", + "type": "Texture", + "sha1": "90d30a75d9cb2229043dc943ea98e6f5bddb2da0" + }, + { + "filename": "smokey_legs", + "build-id": "ASSET_TEX3D_OBJECTS_SMOKEYLEGS", + "folder": "objects", + "type": "Texture", + "sha1": "771b508b3593a29782d17b168bce4d6e1fbef04b" + }, + { + "filename": "rings_metal_envmap", + "build-id": "ASSET_TEX3D_SPACE_RINGSMETALENVMAP", + "folder": "space", + "type": "Texture", + "sha1": "70e91ec8d25a7aebbde534151f5f4365e5f0388b" + }, + { + "filename": "krunch_jacket_sides", + "build-id": "ASSET_TEX3D_OBJECTS_KRUNCHJACKETSIDES", + "folder": "objects", + "type": "Texture", + "sha1": "38f4be02fb94c6ce15e3edf6798f227bdb3549b8" + }, + { + "filename": "dots", + "build-id": "ASSET_TEX3D_OBJECTS_DOTS", + "folder": "objects", + "type": "Texture", + "sha1": "9ea0eabafbf47899cf11e5f1f04380e7a76fc047" + }, + { + "filename": "krunch_scutes", + "build-id": "ASSET_TEX3D_OBJECTS_KRUNCHSCUTES", + "folder": "objects", + "type": "Texture", + "sha1": "4cf7d39a38fd7e7c768a0d43d6ec50a3676439bc" + }, + { + "filename": "beta_balloon_krunch_0", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONKRUNCH_0", + "folder": "unused", + "type": "Texture", + "sha1": "f1ead0e4019f799946ec73ffa9e9f001a4bac135" + }, + { + "filename": "beta_balloon_krunch_1", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONKRUNCH_1", + "folder": "unused", + "type": "Texture", + "sha1": "d8e6f7ec277cad3c997d51e71191a6a7bf544a14" + }, + { + "filename": "beta_balloon_krunch_2", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONKRUNCH_2", + "folder": "unused", + "type": "Texture", + "sha1": "8351df3d16eddc66626dd317f69c0065a55dd56b" + }, + { + "filename": "beta_balloon_krunch_3", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONKRUNCH_3", + "folder": "unused", + "type": "Texture", + "sha1": "cb4c00abd4e0a09bc69af3293d069d0267d710df" + }, + { + "filename": "krunch_underside", + "build-id": "ASSET_TEX3D_OBJECTS_KRUNCHUNDERSIDE", + "folder": "objects", + "type": "Texture", + "sha1": "bc3b90854b6479aff14b014fddd3106bf825145c" + }, + { + "filename": "krunch_eye", + "build-id": "ASSET_TEX3D_OBJECTS_KRUNCHEYE", + "folder": "objects", + "type": "Texture", + "sha1": "d7d7958fb94c735946324212aa99aed80e3e7da2" + }, + { + "filename": "krunch_eye_lowpoly", + "build-id": "ASSET_TEX3D_OBJECTS_KRUNCHEYELOWPOLY", + "folder": "objects", + "type": "Texture", + "sha1": "92fc355ccbd73516deec68c27d70b23fc5b5f2a5" + }, + { + "filename": "krunch_skull", + "build-id": "ASSET_TEX3D_OBJECTS_KRUNCHSKULL", + "flip-tex": false, + "folder": "objects", + "type": "Texture", + "sha1": "05a4e06126849515192b6dddc275f5e24add33ba" + }, + { + "filename": "krunch_toes", + "build-id": "ASSET_TEX3D_OBJECTS_KRUNCHTOES", + "folder": "objects", + "type": "Texture", + "sha1": "d02033e80477aa3134a93f4a3ed7608d43b97181" + }, + { + "filename": "krunch_skin", + "build-id": "ASSET_TEX3D_OBJECTS_KRUNCHSKIN", + "folder": "objects", + "type": "Texture", + "sha1": "88fdaccb0246bc04362818bf5b0ab07049c7683f" + }, + { + "filename": "krunch_head_sides", + "build-id": "ASSET_TEX3D_OBJECTS_KRUNCHHEADSIDES", + "folder": "objects", + "type": "Texture", + "sha1": "a9dcee389e2a323cd429f9fa0b0b781dda755308" + }, + { + "filename": "krunch_head_top_lowpoly", + "build-id": "ASSET_TEX3D_OBJECTS_KRUNCHHEADTOPLOWPOLY", + "folder": "objects", + "type": "Texture", + "sha1": "7da643e928c34c3cbc2ac4553a242135b14ba9b8" + }, + { + "filename": "krunch_mouth", + "build-id": "ASSET_TEX3D_OBJECTS_KRUNCHMOUTH", + "folder": "objects", + "type": "Texture", + "sha1": "04e6a87986d347332ee0819deb564d065c6eaa82" + }, + { + "filename": "krunch_back_lowpoly", + "build-id": "ASSET_TEX3D_OBJECTS_KRUNCHBACKLOWPOLY", + "folder": "objects", + "type": "Texture", + "sha1": "a2545da091a2f59e99d787129037843b4cd0d74f" + }, + { + "filename": "empty_car_break_lights", + "build-id": "ASSET_TEX3D_OBJECTS_EMPTYCARBREAKLIGHTS", + "folder": "objects", + "type": "Texture", + "sha1": "2667fb7b0db8a6f6906e72f56265030300051528" + }, + { + "filename": "trophy_race_flag", + "build-id": "ASSET_TEX3D_COMMON_TROPHYRACEFLAG", + "folder": "common", + "type": "Texture", + "sha1": "fb068658da75967df0da477684234c3000e6292f" + }, + { + "filename": "diddy_skin", + "build-id": "ASSET_TEX3D_OBJECTS_DIDDYSKIN", + "folder": "objects", + "type": "Texture", + "sha1": "a7a7a90ce6225d56d18e23abeda9ec4afb540f21" + }, + { + "filename": "taj_trunk_top", + "build-id": "ASSET_TEX3D_OBJECTS_TAJTRUNKTOP", + "folder": "objects", + "type": "Texture", + "sha1": "ccec194248283936af43be0e802796171f5e0a59" + }, + { + "filename": "mode", + "build-id": "ASSET_TEX3D_OBJECTS_MODE", + "folder": "objects", + "type": "Texture", + "sha1": "ed6a4069cc0a9198728e95838db64d4d9f6c0992" + }, + { + "filename": "pipsy_ears", + "build-id": "ASSET_TEX3D_OBJECTS_PIPSYEARS", + "folder": "objects", + "type": "Texture", + "sha1": "ba73f861845db2195d590e5c48f7e0b40ec5c39f" + }, + { + "filename": "pipsy_head_top", + "build-id": "ASSET_TEX3D_OBJECTS_PIPSYHEADTOP", + "folder": "objects", + "type": "Texture", + "sha1": "ceddc68dc9cc3d4a23c8042a59cfb3c35cf53f65" + }, + { + "filename": "snow_char_bow", + "build-id": "ASSET_TEX3D_WINTER_SNOWCHARBOW", + "folder": "winter", + "type": "Texture", + "sha1": "b33aa5c3b212030e5c42ce75d23d48f1c89ea15d" + }, + { + "filename": "pipsy_bow", + "build-id": "ASSET_TEX3D_OBJECTS_PIPSYBOW", + "folder": "objects", + "type": "Texture", + "sha1": "6343c4d1569beb7b2a70816d8e4d4358da204d91" + }, + { + "filename": "pipsy_belly", + "build-id": "ASSET_TEX3D_OBJECTS_PIPSYBELLY", + "folder": "objects", + "type": "Texture", + "sha1": "cb0b6cd11d52169ee3fa84f772c6cea87b51d255" + }, + { + "filename": "pipsy_sailor_suit", + "build-id": "ASSET_TEX3D_OBJECTS_PIPSYSAILORSUIT", + "folder": "objects", + "type": "Texture", + "sha1": "cb1a0260550f7fb8f4bca1b3b3f3887543885a41" + }, + { + "filename": "pipsy_eyes", + "build-id": "ASSET_TEX3D_OBJECTS_PIPSYEYES", + "folder": "objects", + "type": "Texture", + "sha1": "05912c4aa43df56e111d7108584197df4f3da0e6" + }, + { + "filename": "pterodactyl_eye", + "build-id": "ASSET_TEX3D_OBJECTS_PTERODACTYLEYE", + "folder": "objects", + "type": "Texture", + "sha1": "9a68bf4e9f4c3a9c20cfbac883941414adb6deb4" + }, + { + "filename": "beta_balloon_pipsy_0", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPIPSY_0", + "folder": "unused", + "type": "Texture", + "sha1": "767e02f95cdadaf77f2a3216c7cd0f14570fcd78" + }, + { + "filename": "beta_balloon_pipsy_1", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPIPSY_1", + "folder": "unused", + "type": "Texture", + "sha1": "3c0c8b59752e5e52b23cbf63ffe7136216748263" + }, + { + "filename": "beta_balloon_pipsy_2", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPIPSY_2", + "folder": "unused", + "type": "Texture", + "sha1": "4a064800be3b4c43c77e0ffc87224c1fe68a93f9" + }, + { + "filename": "beta_balloon_pipsy_3", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPIPSY_3", + "folder": "unused", + "type": "Texture", + "sha1": "5b9ec20e8d52aa2c840ebd4a1aa21e5c2e6245bc" + }, + { + "filename": "pipsy_gloves", + "build-id": "ASSET_TEX3D_OBJECTS_PIPSYGLOVES", + "folder": "objects", + "type": "Texture", + "sha1": "aab9b71f8e40e1356b54bad1041417d450478314" + }, + { + "filename": "pipsy_arms", + "build-id": "ASSET_TEX3D_OBJECTS_PIPSYARMS", + "folder": "objects", + "type": "Texture", + "sha1": "2a3e3292a4b6d1df4be210415131fd5c86fff83f" + }, + { + "filename": "pipsy_nose_whiskers", + "build-id": "ASSET_TEX3D_OBJECTS_PIPSYNOSEWHISKERS", + "folder": "objects", + "type": "Texture", + "sha1": "6cfb1e7c81632801e26cec1a72119bb26fd51275" + }, + { + "filename": "pipsy_head", + "build-id": "ASSET_TEX3D_OBJECTS_PIPSYHEAD", + "folder": "objects", + "type": "Texture", + "sha1": "a8fa7078a38a61810d05966013aede1f30d7cda0" + }, + { + "filename": "pipsy_back_charselect", + "build-id": "ASSET_TEX3D_OBJECTS_PIPSYBACKCHARSELECT", + "folder": "objects", + "type": "Texture", + "sha1": "49f84f77edefa9aa171cf8aba83d78bf6ee56fc0" + }, + { + "filename": "timber_mouth_lowpoly", + "build-id": "ASSET_TEX3D_OBJECTS_TIMBERMOUTHLOWPOLY", + "folder": "objects", + "type": "Texture", + "sha1": "b1fa649776f646f75fd983443a2578581c016d8e" + }, + { + "filename": "green_dinosaur_inside_mouth", + "build-id": "ASSET_TEX3D_OBJECTS_GREENDINOSAURINSIDEMOUTH", + "folder": "objects", + "type": "Texture", + "sha1": "ac3f61af4d761545cd130620d8c1fcd43dac815b" + }, + { + "filename": "stopwatch_mouth_worried", + "build-id": "ASSET_TEX3D_OBJECTS_STOPWATCHMOUTHWORRIED", + "folder": "objects", + "type": "Texture", + "sha1": "921947fc22323d25bd99b9170e54c08a53d8c62a" + }, + { + "filename": "stopwatch_mouth_happy", + "build-id": "ASSET_TEX3D_OBJECTS_STOPWATCHMOUTHHAPPY", + "folder": "objects", + "type": "Texture", + "sha1": "adaa6bbddf411d26cc4419ce1854c09b01c906e2" + }, + { + "filename": "stopwatch_mouth_open_mouth", + "build-id": "ASSET_TEX3D_OBJECTS_STOPWATCHMOUTHOPENMOUTH", + "folder": "objects", + "type": "Texture", + "sha1": "d588518f83367458ec38f614ed15f4c2bf31d79e" + }, + { + "filename": "bumper_goggles_front_charselect", + "build-id": "ASSET_TEX3D_OBJECTS_BUMPERGOGGLESFRONTCHARSELECT", + "folder": "objects", + "type": "Texture", + "sha1": "c14b88940837a14ab83864e02463974e2491f181" + }, + { + "filename": "timber_ears_lowpoly", + "build-id": "ASSET_TEX3D_OBJECTS_TIMBEREARSLOWPOLY", + "folder": "objects", + "type": "Texture", + "sha1": "534862c8dec5ab7d6933912f7c6e730b11e07fb1" + }, + { + "filename": "drumstick_car_envmap", + "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKCARENVMAP", + "folder": "objects", + "type": "Texture", + "sha1": "bac2eb9715524b64c03994843042861276d0a454" + }, + { + "filename": "player_1_select", + "build-id": "ASSET_TEX3D_OBJECTS_PLAYER1SELECT", + "folder": "objects", + "type": "Texture", + "sha1": "30e2d253aeb5ef0fd9589fd9aaef4dafc99c7a50" + }, + { + "filename": "player_2_select", + "build-id": "ASSET_TEX3D_OBJECTS_PLAYER2SELECT", + "folder": "objects", + "type": "Texture", + "sha1": "27975025ea69516e17d997eb5a8700475f0dbc07" + }, + { + "filename": "player_3_select", + "build-id": "ASSET_TEX3D_OBJECTS_PLAYER3SELECT", + "folder": "objects", + "type": "Texture", + "sha1": "f3a1e7138aa908ce7182feb7522f2c4e54e68870" + }, + { + "filename": "player_4_select", + "build-id": "ASSET_TEX3D_OBJECTS_PLAYER4SELECT", + "folder": "objects", + "type": "Texture", + "sha1": "db4a9880bf89a9a6d6ca397d3440c1971cbbae6a" + }, + { + "filename": "beta_balloon_player_1_0", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYER1_0", + "folder": "unused", + "type": "Texture", + "sha1": "0cc459677dc99cf1e1f7056c1fb8988ec2bab938" + }, + { + "filename": "beta_balloon_player_1_1", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYER1_1", + "folder": "unused", + "type": "Texture", + "sha1": "94a5f60a693e169539c07fd723a65253c5b8184c" + }, + { + "filename": "beta_balloon_player_1_2", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYER1_2", + "folder": "unused", + "type": "Texture", + "sha1": "f99bdf423fd4242f536fd129b70eff1444e840c7" + }, + { + "filename": "beta_balloon_player_1_3", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYER1_3", + "folder": "unused", + "type": "Texture", + "sha1": "6369bdb20c4faa6f2d6efdc8f4ce6e250c9bf583" + }, + { + "filename": "beta_balloon_player_2_0", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYER2_0", + "folder": "unused", + "type": "Texture", + "sha1": "64187cbd47187bcb7bae8229fb30c0576136db96" + }, + { + "filename": "beta_balloon_player_2_1", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYER2_1", + "folder": "unused", + "type": "Texture", + "sha1": "d68cd19a68dcf9a2f3affcb9e90f0776f2a07cf3" + }, + { + "filename": "beta_balloon_player_2_2", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYER2_2", + "folder": "unused", + "type": "Texture", + "sha1": "09ebf6545b165ccfbcee04afeea22436bd60954e" + }, + { + "filename": "beta_balloon_player_2_3", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYER2_3", + "folder": "unused", + "type": "Texture", + "sha1": "ef50066b6d83295ea8a07c1a32df7eed58d81f65" + }, + { + "filename": "beta_balloon_player_3_0", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYER3_0", + "folder": "unused", + "type": "Texture", + "sha1": "a63d8d84d0a13d43901446e746145f2baf692a7a" + }, + { + "filename": "beta_balloon_player_3_1", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYER3_1", + "folder": "unused", + "type": "Texture", + "sha1": "da483cb10610c4402f7fa04dff11e718529ddf0f" + }, + { + "filename": "beta_balloon_player_3_2", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYER3_2", + "folder": "unused", + "type": "Texture", + "sha1": "08466f8f03d197c147a41c42ac6dbe1d59595683" + }, + { + "filename": "beta_balloon_player_3_3", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYER3_3", + "folder": "unused", + "type": "Texture", + "sha1": "e298f24ae1191db219ec58346f193c9eea66718c" + }, + { + "filename": "beta_balloon_player_4_0", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYER4_0", + "folder": "unused", + "type": "Texture", + "sha1": "9de1a26a22820961db5295d1d2690f03341c6852" + }, + { + "filename": "beta_balloon_player_4_1", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYER4_1", + "folder": "unused", + "type": "Texture", + "sha1": "a3ba2aee9ee756f7e36fd129eb94d2cf3243f721" + }, + { + "filename": "beta_balloon_player_4_2", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYER4_2", + "folder": "unused", + "type": "Texture", + "sha1": "88d3da7abf95be7a7e715f5987bbd33e2fa73722" + }, + { + "filename": "beta_balloon_player_4_3", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYER4_3", + "folder": "unused", + "type": "Texture", + "sha1": "8c7cf60d7045f8b780cfe5517b7f746c827c0a87" + }, + { + "filename": "sign_shield", + "build-id": "ASSET_TEX3D_MEDIEVAL_SIGNSHIELD", + "folder": "medieval", + "type": "Texture", + "sha1": "899fb858324b39025554e79016ed5cd74d470843" + }, + { + "filename": "cobble_ground", + "build-id": "ASSET_TEX3D_MEDIEVAL_COBBLEGROUND", + "folder": "medieval", + "type": "Texture", + "sha1": "dbee8312c9f3f05d14aee5db71823511b1ee76e5" + }, + { + "filename": "yellow_cobble_ground", + "build-id": "ASSET_TEX3D_MEDIEVAL_YELLOWCOBBLEGROUND", + "folder": "medieval", + "type": "Texture", + "sha1": "ae53d1379fedb54f0e7d863201e7f0fe2df73620" + }, + { + "filename": "bubbler_skin_sides_smooth", + "build-id": "ASSET_TEX3D_OBJECTS_BUBBLERSKINSIDESSMOOTH", + "folder": "objects", + "type": "Texture", + "sha1": "66e7c9c66b52a2a8285365472f6b6998047854f1" + }, + { + "filename": "bubbler_eye", + "build-id": "ASSET_TEX3D_OBJECTS_BUBBLEREYE", + "folder": "objects", + "type": "Texture", + "sha1": "e84cf3f4bf79a9ab7a964b7c0e1fe5d54d75e228" + }, + { + "filename": "bubbler_skin_sides_dots", + "build-id": "ASSET_TEX3D_OBJECTS_BUBBLERSKINSIDESDOTS", + "folder": "objects", + "type": "Texture", + "sha1": "0ec319ebc46fd290bcf9c6c0e858f198802bb5a0" + }, + { + "filename": "bubbler_eye_socket", + "build-id": "ASSET_TEX3D_OBJECTS_BUBBLEREYESOCKET", + "folder": "objects", + "type": "Texture", + "sha1": "7be6237d4a65eaae5e55acbf66544190a11723b7" + }, + { + "filename": "tiptup_shell", + "build-id": "ASSET_TEX3D_OBJECTS_TIPTUPSHELL", + "folder": "objects", + "type": "Texture", + "sha1": "959daefb79ec695f18cd14dd42a4435720bfaf82" + }, + { + "filename": "krunch_car_envmap", + "build-id": "ASSET_TEX3D_OBJECTS_KRUNCHCARENVMAP", + "folder": "objects", + "type": "Texture", + "sha1": "b19acf681207c402b3b1200be8cc835d8a7352fc" + }, + { + "filename": "beta_balloon_krunch_envmap", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONKRUNCHENVMAP", + "folder": "unused", + "type": "Texture", + "sha1": "bda025960b8d8cfec8758902af48f76b78b12e5f" + }, + { + "filename": "turn_sign", + "build-id": "ASSET_TEX3D_MEDIEVAL_TURNSIGN", + "folder": "medieval", + "type": "Texture", + "sha1": "75eb0e69d4dc8673e38b98fe6bd2630cb71110ee" + }, + { + "filename": "yellow_dinosaur_back", + "build-id": "ASSET_TEX3D_OBJECTS_YELLOWDINOSAURBACK", + "folder": "objects", + "type": "Texture", + "sha1": "b6c08593a5b11522349246606dc8432d9f4e71a1" + }, + { + "filename": "green_dinosaur_back", + "build-id": "ASSET_TEX3D_OBJECTS_GREENDINOSAURBACK", + "folder": "objects", + "type": "Texture", + "sha1": "b3db29f031cb151f3de0574e54814625342743b4" + }, + { + "filename": "wizpig_cape", + "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGCAPE", + "folder": "objects", + "type": "Texture", + "sha1": "d5fbf4fb783deb10ed331238cc52ea934b6d7465" + }, + { + "filename": "wizpig_nose_side", + "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGNOSESIDE", + "folder": "objects", + "type": "Texture", + "sha1": "b4531b4ae2174a50058f8f7cbc3d7b6e1dc3f477" + }, + { + "filename": "wizpig_nose_front", + "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGNOSEFRONT", + "folder": "objects", + "type": "Texture", + "sha1": "eef6cfcb7cc5b8c1452ca29ec7ca20f15e31e007" + }, + { + "filename": "wizpig_hoof", + "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGHOOF", + "folder": "objects", + "type": "Texture", + "sha1": "5501610ce6f48cac07c7655b77a6191068f579fc" + }, + { + "filename": "smokey_skin", + "build-id": "ASSET_TEX3D_OBJECTS_SMOKEYSKIN", + "folder": "objects", + "type": "Texture", + "sha1": "aab9b71f8e40e1356b54bad1041417d450478314" + }, + { + "filename": "smokey_wings_outline", + "build-id": "ASSET_TEX3D_OBJECTS_SMOKEYWINGSOUTLINE", + "folder": "objects", + "type": "Texture", + "sha1": "8e731e1bbe9d75e40586bad427d0b01e9fa81491" + }, + { + "filename": "wizpig_amulet_nose", + "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGAMULETNOSE", + "folder": "objects", + "type": "Texture", + "sha1": "dbeda1e6b69e31fb60862fdde1f015e30709b2ad" + }, + { + "filename": "wizpig_head_eye", + "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGHEADEYE", + "folder": "objects", + "type": "Texture", + "sha1": "9b9a18db5aa923bbe31fd6805740a21a5c581a89" + }, + { + "filename": "trickytops_mouth_edge", + "build-id": "ASSET_TEX3D_OBJECTS_TRICKYTOPSMOUTHEDGE", + "folder": "objects", + "type": "Texture", + "sha1": "7ea9533be59507c9204883a74110c0b8cbdfdef4" + }, + { + "filename": "wizpig_head_below_ears", + "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGHEADBELOWEARS", + "folder": "objects", + "type": "Texture", + "sha1": "c10495e9bc0551c283d349e41b699bd4ede08f52" + }, + { + "filename": "wizpig_forehead", + "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGFOREHEAD", + "folder": "objects", + "type": "Texture", + "sha1": "e0f702f370af881fc04db3b3281718a7688218de" + }, + { + "filename": "wizpig_clothes", + "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGCLOTHES", + "folder": "objects", + "type": "Texture", + "sha1": "be038ba36408e66e075cd2721974722a87333f99" + }, + { + "filename": "wizpig_jewel_eye", + "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGJEWELEYE", + "folder": "objects", + "type": "Texture", + "sha1": "c53e160e2d6018296af07a5e69373db7cceb456a" + }, + { + "filename": "wizpig_hair", + "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGHAIR", + "folder": "objects", + "type": "Texture", + "sha1": "324bb664005166eb783d665a4c203cee138f19fd" + }, + { + "filename": "wizpig_ear", + "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGEAR", + "folder": "objects", + "type": "Texture", + "sha1": "835344b25f6d6cc0ebbb9bbb64e7d537a1e9ea26" + }, + { + "filename": "wizpig_head_mouth", + "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGHEADMOUTH", + "folder": "objects", + "type": "Texture", + "sha1": "9063da76fbddccd4396cc4464453b3b1884658e4" + }, + { + "filename": "trickytops_cheek", + "build-id": "ASSET_TEX3D_OBJECTS_TRICKYTOPSCHEEK", + "folder": "objects", + "type": "Texture", + "sha1": "54f9cf52f0ed3dbc648c7f2b09fbe5921d719d99" + }, + { + "filename": "trickytops_unknown", + "build-id": "ASSET_TEX3D_UNUSED_TRICKYTOPSUNKNOWN", + "folder": "unused", + "type": "Texture", + "sha1": "8d982d89a7936fc736c8108afc36938dfb055a87" + }, + { + "filename": "trickytops_frill_back", + "build-id": "ASSET_TEX3D_OBJECTS_TRICKYTOPSFRILLBACK", + "folder": "objects", + "type": "Texture", + "sha1": "0890c498cda391c29635e9c38952e215edb460a6" + }, + { + "filename": "trickytops_frill_front", + "build-id": "ASSET_TEX3D_OBJECTS_TRICKYTOPSFRILLFRONT", + "folder": "objects", + "type": "Texture", + "sha1": "2bd8cef2aa763517ad4306261a2dcaec0a56b1fd" + }, + { + "filename": "trickytops_underside", + "build-id": "ASSET_TEX3D_OBJECTS_TRICKYTOPSUNDERSIDE", + "folder": "objects", + "type": "Texture", + "sha1": "f94b206f72efe2a7acb11d02e3ee710da089ab5a" + }, + { + "filename": "trickytops_back", + "build-id": "ASSET_TEX3D_OBJECTS_TRICKYTOPSBACK", + "folder": "objects", + "type": "Texture", + "sha1": "fbae8352e21bb6896f4624550e204b4b107452a0" + }, + { + "filename": "wizpig_skin_lines", + "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGSKINLINES", + "folder": "objects", + "type": "Texture", + "sha1": "4a685f3fef8705c2fa00e0e1c2fcc193e5478f22" + }, + { + "filename": "trickytops_nape", + "build-id": "ASSET_TEX3D_OBJECTS_TRICKYTOPSNAPE", + "folder": "objects", + "type": "Texture", + "sha1": "ba8dd00533816194d4ee68cffd5671279e4365e3" + }, + { + "filename": "trickytops_nose", + "build-id": "ASSET_TEX3D_OBJECTS_TRICKYTOPSNOSE", + "folder": "objects", + "type": "Texture", + "sha1": "290fc2b6d942d98a198def8c0c6f50f7e4f6d8b9" + }, + { + "filename": "wizpig_skin", + "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGSKIN", + "folder": "objects", + "type": "Texture", + "sha1": "4fcea657815b6b7cd7562e2e115e09122a03d261" + }, + { + "filename": "char_select_hill_fence", + "build-id": "ASSET_TEX3D_COMMON_CHARSELECTHILLFENCE", + "folder": "common", + "type": "Texture", + "sha1": "0d319cd357acec2c5cf8764b630bd6a84bdd3daa" + }, + { + "filename": "beta_balloon_pipsy_envmap", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPIPSYENVMAP", + "folder": "unused", + "type": "Texture", + "sha1": "71e8491e97a61bfa3e63b06f2d00646791df8201" + }, + { + "filename": "pipsy_car_envmap", + "build-id": "ASSET_TEX3D_OBJECTS_PIPSYCARENVMAP", + "folder": "objects", + "type": "Texture", + "sha1": "7e7bc01ed62b4e398a9c3d67142e57d4c0ad6467" + }, + { + "filename": "beta_taj_pad", + "build-id": "ASSET_TEX3D_UNUSED_BETATAJPAD", + "folder": "unused", + "type": "Texture", + "sha1": "429330071bbad53b9435845ab0db06e0c68b7fc5" + }, + { + "filename": "beta_taj_pad2", + "build-id": "ASSET_TEX3D_UNUSED_BETATAJPAD2", + "folder": "unused", + "type": "Texture", + "sha1": "429330071bbad53b9435845ab0db06e0c68b7fc5" + }, + { + "filename": "taj_skin", + "build-id": "ASSET_TEX3D_OBJECTS_TAJSKIN", + "folder": "objects", + "type": "Texture", + "sha1": "1e71d45ae67f87a553a1a96dd9c374a986da24d0" + }, + { + "filename": "bluey_tusks", + "build-id": "ASSET_TEX3D_OBJECTS_BLUEYTUSKS", + "folder": "objects", + "type": "Texture", + "sha1": "bcc4b59c2be9b97876679119ff1455b87a12b6bd" + }, + { + "filename": "drumstick_feathers_charselect", + "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKFEATHERSCHARSELECT", + "folder": "objects", + "type": "Texture", + "sha1": "4c8b7d00812d5dfd560d9c23987c3fbee73e9280" + }, + { + "filename": "beta_balloon_drumstick_envmap", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONDRUMSTICKENVMAP", + "folder": "unused", + "type": "Texture", + "sha1": "b1b0121aa7b3e59582822e1dcd7dfe530d7b26a6" + }, + { + "filename": "tt_clock_hand", + "build-id": "ASSET_TEX3D_OBJECTS_TTCLOCKHAND", + "folder": "objects", + "type": "Texture", + "sha1": "24f26692e9c49c9e384c5e95adcb1d63bc432588" + }, + { + "filename": "tt_screw", + "build-id": "ASSET_TEX3D_OBJECTS_TTSCREW", + "folder": "objects", + "type": "Texture", + "sha1": "bee2ea8d1f7f6318c20bfc63fad1fe95f09501b1" + }, + { + "filename": "pipsy_head_lowpoly", + "build-id": "ASSET_TEX3D_OBJECTS_PIPSYHEADLOWPOLY", + "folder": "objects", + "type": "Texture", + "sha1": "3182f5680c4371faa40052840ff16abc676d73fb" + }, + { + "filename": "tiptup_nose", + "build-id": "ASSET_TEX3D_OBJECTS_TIPTUPNOSE", + "folder": "objects", + "type": "Texture", + "sha1": "9ca4268a286ef77c16f3f6ae412e3c414c27fe99" + }, + { + "filename": "tiptup_toes_charselect", + "build-id": "ASSET_TEX3D_OBJECTS_TIPTUPTOESCHARSELECT", + "folder": "objects", + "type": "Texture", + "sha1": "56a8767c662c02ea5a6a70348786e663b0aaad60" + }, + { + "filename": "tiptup_shell_back_center", + "build-id": "ASSET_TEX3D_OBJECTS_TIPTUPSHELLBACKCENTER", + "folder": "objects", + "type": "Texture", + "sha1": "b62151bf20bb99c21dbf32f8532ef506fb32a1b2" + }, + { + "filename": "tiptup_front", + "build-id": "ASSET_TEX3D_OBJECTS_TIPTUPFRONT", + "folder": "objects", + "type": "Texture", + "sha1": "e1a3838a48ce8f76cb712a5225a80ac6f56f4dd4" + }, + { + "filename": "tiptup_eye", + "build-id": "ASSET_TEX3D_OBJECTS_TIPTUPEYE", + "folder": "objects", + "type": "Texture", + "sha1": "69ab042b563cad72cae0a65469ee601032b9f16a" + }, + { + "filename": "tiptup_neck", + "build-id": "ASSET_TEX3D_OBJECTS_TIPTUPNECK", + "folder": "objects", + "type": "Texture", + "sha1": "7f1cbe999b910b1dfbb59f147b4a5f4b3ac281e5" + }, + { + "filename": "tiptup_front_frame", + "build-id": "ASSET_TEX3D_OBJECTS_TIPTUPFRONTFRAME", + "folder": "objects", + "type": "Texture", + "sha1": "064f1d82cb9cbeb0a822734d2d068a7a7e889166" + }, + { + "filename": "beta_balloon_players_envmap", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONPLAYERSENVMAP", + "folder": "unused", + "type": "Texture", + "sha1": "1e9be07976c490f8a439c800285404ed66798fd6" + }, + { + "filename": "conker_car_envmap", + "build-id": "ASSET_TEX3D_OBJECTS_CONKERCARENVMAP", + "folder": "objects", + "type": "Texture", + "sha1": "09bb1d20feebc1a684d6afbdb3a8471d2f39eb4c" + }, + { + "filename": "conker_back_lowpoly", + "build-id": "ASSET_TEX3D_OBJECTS_CONKERBACKLOWPOLY", + "folder": "objects", + "type": "Texture", + "sha1": "f1887416f919b0603504690f6a6545651ac09bb0" + }, + { + "filename": "pipsy_back_lowpoly", + "build-id": "ASSET_TEX3D_OBJECTS_PIPSYBACKLOWPOLY", + "folder": "objects", + "type": "Texture", + "sha1": "2bc1e8893af0bb77128082860c4eb8aeb9d248a8" + }, + { + "filename": "racer_common_steering_wheel2", + "build-id": "ASSET_TEX3D_OBJECTS_RACERCOMMONSTEERINGWHEEL2", + "folder": "objects", + "type": "Texture", + "sha1": "4e56bed789b0e93b2643d2572416b932232f5f1e" + }, + { + "filename": "tt_eye", + "build-id": "ASSET_TEX3D_OBJECTS_TTEYE", + "folder": "objects", + "type": "Texture", + "sha1": "9b1571631aae77ca54d9bb076fcf819b2cfb89fb" + }, + { + "filename": "tt_eye_still", + "build-id": "ASSET_TEX3D_UNUSED_TTEYESTILL", + "folder": "unused", + "type": "Texture", + "sha1": "b6bbca44a482bb198490a8f76f3f2ca78a4e33dd" + }, + { + "filename": "drumstick_straps_button_lowpoly", + "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKSTRAPSBUTTONLOWPOLY", + "folder": "objects", + "type": "Texture", + "sha1": "d9b9fa15aa12e030c4eaaf749d87d0049498384e" + }, + { + "filename": "drumstick_straps_button", + "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKSTRAPSBUTTON", + "folder": "objects", + "type": "Texture", + "sha1": "caa3691e35ceb362522d461dc0f6462ac02f8672" + }, + { + "filename": "tt_crown", + "build-id": "ASSET_TEX3D_OBJECTS_TTCROWN", + "folder": "objects", + "type": "Texture", + "sha1": "321e7ea1905f285679dd379fb9a78a83c46892b6" + }, + { + "filename": "tt_glove", + "build-id": "ASSET_TEX3D_OBJECTS_TTGLOVE", + "folder": "objects", + "type": "Texture", + "sha1": "0c0b2485e907886520e97f2da570d75c4bacf9f0" + }, + { + "filename": "tt_mouth_smile", + "build-id": "ASSET_TEX3D_OBJECTS_TTMOUTHSMILE", + "folder": "objects", + "type": "Texture", + "sha1": "ea75bf2576a983c716a207c6f063a7c5abe16b43" + }, + { + "filename": "tt_rim", + "build-id": "ASSET_TEX3D_OBJECTS_TTRIM", + "folder": "objects", + "type": "Texture", + "sha1": "4739625791e490cf5bc6cfa6cb2e021729d43991" + }, + { + "filename": "tt_shoe", + "build-id": "ASSET_TEX3D_OBJECTS_TTSHOE", + "folder": "objects", + "type": "Texture", + "sha1": "c7b8f67ab7eef3371dc3740f654be720eb66a748" + }, + { + "filename": "bubbler_tentacles_back_side", + "build-id": "ASSET_TEX3D_OBJECTS_BUBBLERTENTACLESBACKSIDE", + "folder": "objects", + "type": "Texture", + "sha1": "627b20b572c3706fe2144ee24f0e7fc7a5ed3c05" + }, + { + "filename": "smokey_shadow", + "build-id": "ASSET_TEX3D_OBJECTS_SMOKEYSHADOW", + "flip-tex": false, + "folder": "objects", + "type": "Texture", + "sha1": "a046f05dd03edd112103eb796a95d4a7dcabdc95" + }, + { + "filename": "yellow_dinosaur_eye", + "build-id": "ASSET_TEX3D_OBJECTS_YELLOWDINOSAUREYE", + "flip-tex": false, + "folder": "objects", + "type": "Texture", + "sha1": "3150855a6fef41a268b71e3b474e2a2d5029c9d3" + }, + { + "filename": "green_dinosaur_eye", + "build-id": "ASSET_TEX3D_OBJECTS_GREENDINOSAUREYE", + "flip-tex": false, + "folder": "objects", + "type": "Texture", + "sha1": "10de2c60bf4dc563297efb149b61043369c3902e" + }, + { + "filename": "racer_common_black2", + "build-id": "ASSET_TEX3D_OBJECTS_RACERCOMMONBLACK2", + "folder": "objects", + "type": "Texture", + "sha1": "104d58530cb68ef9f18b57b6ca59e2198c23a3ce" + }, + { + "filename": "timber_front", + "build-id": "ASSET_TEX3D_OBJECTS_TIMBERFRONT", + "folder": "objects", + "type": "Texture", + "sha1": "fa3c9862fcda76fb6bb23c6cf7558d8271b62037" + }, + { + "filename": "timber_mouth", + "build-id": "ASSET_TEX3D_OBJECTS_TIMBERMOUTH", + "folder": "objects", + "type": "Texture", + "sha1": "5336692e1a6ffa3c38d0b64166842ce427650a6e" + }, + { + "filename": "beta_balloon_timber_0", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONTIMBER_0", + "folder": "unused", + "type": "Texture", + "sha1": "ab5ce60c76bf1e34fbe43a1827ed773bb737202e" + }, + { + "filename": "beta_balloon_timber_1", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONTIMBER_1", + "folder": "unused", + "type": "Texture", + "sha1": "4cb401a49972d705b394c978758da8c5adb7c72a" + }, + { + "filename": "beta_balloon_timber_2", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONTIMBER_2", + "folder": "unused", + "type": "Texture", + "sha1": "5a3cea2477a3512c7b3137509ce9c166f39b1690" + }, + { + "filename": "beta_balloon_timber_3", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONTIMBER_3", + "folder": "unused", + "type": "Texture", + "sha1": "90415a03172dd54e5632accb4993f321a974f56b" + }, + { + "filename": "timber_face_white_fur", + "build-id": "ASSET_TEX3D_OBJECTS_TIMBERFACEWHITEFUR", + "folder": "objects", + "type": "Texture", + "sha1": "d51c8a389d6c5cd927b6c982602d666259eeec30" + }, + { + "filename": "timber_eye", + "build-id": "ASSET_TEX3D_OBJECTS_TIMBEREYE", + "folder": "objects", + "type": "Texture", + "sha1": "0ed1fbda6d0e3910310c8afdbbad743a8a1efce6" + }, + { + "filename": "trickytops_skin_limbs", + "build-id": "ASSET_TEX3D_OBJECTS_TRICKYTOPSSKINLIMBS", + "folder": "objects", + "type": "Texture", + "sha1": "c4f130feb8c932de1ad2f877f40a4df265c0f699" + }, + { + "filename": "smokey_mouth", + "build-id": "ASSET_TEX3D_OBJECTS_SMOKEYMOUTH", + "folder": "objects", + "type": "Texture", + "sha1": "4af85858b85bdef2ec26fe16990a8412a9b460ee" + }, + { + "filename": "timber_front_charselect", + "build-id": "ASSET_TEX3D_OBJECTS_TIMBERFRONTCHARSELECT", + "folder": "objects", + "type": "Texture", + "sha1": "5b2e5f3fff3023495a33d39f02fd80af756bddd0" + }, + { + "filename": "timber_nose", + "build-id": "ASSET_TEX3D_OBJECTS_TIMBERNOSE", + "folder": "objects", + "type": "Texture", + "sha1": "131d78e47a65cd3e3c6bccd19499621c2b7900f8" + }, + { + "filename": "timber_fur", + "build-id": "ASSET_TEX3D_OBJECTS_TIMBERFUR", + "folder": "objects", + "type": "Texture", + "sha1": "911e82a05ad368838b0208b30345b6dca190533f" + }, + { + "filename": "timber_foot", + "build-id": "ASSET_TEX3D_OBJECTS_TIMBERFOOT", + "folder": "objects", + "type": "Texture", + "sha1": "70e576f749163e71ba2d6e73a6ff8e690875c4ec" + }, + { + "filename": "timber_back_lowpoly", + "build-id": "ASSET_TEX3D_OBJECTS_TIMBERBACKLOWPOLY", + "folder": "objects", + "type": "Texture", + "sha1": "c93821e212b8a816095c7ecd6cce2b25f2b1ea88" + }, + { + "filename": "timber_cheek", + "build-id": "ASSET_TEX3D_OBJECTS_TIMBERCHEEK", + "folder": "objects", + "type": "Texture", + "sha1": "90c632ce75aaffe9ab9a4f75eb67e6a416af57a2" + }, + { + "filename": "timber_cheek_plane", + "build-id": "ASSET_TEX3D_OBJECTS_TIMBERCHEEKPLANE", + "folder": "objects", + "type": "Texture", + "sha1": "a6552817874c9c56debaa6ed8c1f798feba8c66d" + }, + { + "filename": "timber_cheek_charselect", + "build-id": "ASSET_TEX3D_OBJECTS_TIMBERCHEEKCHARSELECT", + "folder": "objects", + "type": "Texture", + "sha1": "13d2e5af425717ac45cdaccc2086def69ab0af8a" + }, + { + "filename": "beta_balloon_tiptup_0", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONTIPTUP_0", + "folder": "unused", + "type": "Texture", + "sha1": "e50b9e8ae3af1b4b3ec408963c531d73a2e1ce56" + }, + { + "filename": "beta_balloon_tiptup_1", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONTIPTUP_1", + "folder": "unused", + "type": "Texture", + "sha1": "49323e610371ab93581581153789876d26213f8f" + }, + { + "filename": "beta_balloon_tiptup_2", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONTIPTUP_2", + "folder": "unused", + "type": "Texture", + "sha1": "34a5f5dd2bb2b3380b13430fb116873b9743c8af" + }, + { + "filename": "beta_balloon_tiptup_3", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONTIPTUP_3", + "folder": "unused", + "type": "Texture", + "sha1": "889ee340e5ac230a27bfe58e738176b1997303a2" + }, + { + "filename": "tiptup_skin", + "build-id": "ASSET_TEX3D_OBJECTS_TIPTUPSKIN", + "folder": "objects", + "type": "Texture", + "sha1": "98820f44303c3c6a96172e8eb2e9aef6cb7f9e11" + }, + { + "filename": "tiptup_back_lowpoly", + "build-id": "ASSET_TEX3D_OBJECTS_TIPTUPBACKLOWPOLY", + "folder": "objects", + "type": "Texture", + "sha1": "dd0f4e0055869a960372e8f41188095211a16539" + }, + { + "filename": "tiptup_nape", + "build-id": "ASSET_TEX3D_OBJECTS_TIPTUPNAPE", + "folder": "objects", + "type": "Texture", + "sha1": "eea1cffe33792629715f6a18a90ac1b5c4c1f981" + }, + { + "filename": "wizpig_eye", + "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGEYE", + "folder": "objects", + "type": "Texture", + "sha1": "59e8e3f13d3ae72d179c1e5af241ccc274acefd4" + }, + { + "filename": "trickytops_limbs", + "build-id": "ASSET_TEX3D_OBJECTS_TRICKYTOPSLIMBS", + "folder": "objects", + "type": "Texture", + "sha1": "7057d5a8a98effda6665dba364693f4d346f5cd4" + }, + { + "filename": "trickytops_bottom_light", + "build-id": "ASSET_TEX3D_OBJECTS_TRICKYTOPSBOTTOMLIGHT", + "folder": "objects", + "type": "Texture", + "sha1": "8143b9348ca374a55f692276dd0cfbf1ccd3e79b" + }, + { + "filename": "trickytops_forehead", + "build-id": "ASSET_TEX3D_OBJECTS_TRICKYTOPSFOREHEAD", + "folder": "objects", + "type": "Texture", + "sha1": "88b7ad9b9e9b88f5fec8bc95a231b589ba9a4853" + }, + { + "filename": "wizpig_rocket_unused_shadow", + "build-id": "ASSET_TEX3D_UNUSED_WIZPIGROCKETUNUSEDSHADOW", + "flip-tex": false, + "folder": "unused", + "type": "Texture", + "sha1": "0bdf91d7c103e54d33754c427b442e0e7b2101c9" + }, + { + "filename": "trickytops_toes", + "build-id": "ASSET_TEX3D_OBJECTS_TRICKYTOPSTOES", + "folder": "objects", + "type": "Texture", + "sha1": "12960209df9b33492073011b36b6780c4c5ab640" + }, + { + "filename": "widescreen", + "build-id": "ASSET_TEX3D_OBJECTS_WIDESCREEN", + "folder": "objects", + "type": "Texture", + "sha1": "4cdeb98beb846273651ac52b55eed6cc40d6b587" + }, + { + "filename": "racer_common_hover_bottom", + "build-id": "ASSET_TEX3D_OBJECTS_RACERCOMMONHOVERBOTTOM", + "folder": "objects", + "type": "Texture", + "sha1": "ed381496e294489bd03a7081867a61543a1cdeaf" + }, + { + "filename": "bumper_hover_top_lowpoly", + "build-id": "ASSET_TEX3D_OBJECTS_BUMPERHOVERTOPLOWPOLY", + "folder": "objects", + "type": "Texture", + "sha1": "48a908e5a3977cab1b4052c0f91e3f716d68a95c" + }, + { + "filename": "tiptup_hover_top", + "build-id": "ASSET_TEX3D_OBJECTS_TIPTUPHOVERTOP", + "folder": "objects", + "type": "Texture", + "sha1": "3bcd13497c9050580d94d89afb4bea5cd6a89132" + }, + { + "filename": "conker_hover_top", + "build-id": "ASSET_TEX3D_OBJECTS_CONKERHOVERTOP", + "folder": "objects", + "type": "Texture", + "sha1": "35e9d5374fc205f162bf918583a19dee5e16d8a2" + }, + { + "filename": "banjo_hover_top", + "build-id": "ASSET_TEX3D_OBJECTS_BANJOHOVERTOP", + "folder": "objects", + "type": "Texture", + "sha1": "152beab2c989cda956d9536bc416e050d8d49c15" + }, + { + "filename": "diddy_hover_top", + "build-id": "ASSET_TEX3D_OBJECTS_DIDDYHOVERTOP", + "folder": "objects", + "type": "Texture", + "sha1": "c06f3f58b431ebcf3c30e33a634629bd2a79b48c" + }, + { + "filename": "timber_hover_top", + "build-id": "ASSET_TEX3D_OBJECTS_TIMBERHOVERTOP", + "folder": "objects", + "type": "Texture", + "sha1": "2a61fd7b8704180ca6fcf8ff28dc13ae538200fe" + }, + { + "filename": "krunch_hover_top", + "build-id": "ASSET_TEX3D_OBJECTS_KRUNCHHOVERTOP", + "folder": "objects", + "type": "Texture", + "sha1": "ae4ac990185d0e4ef261b85b6de12659fabb5115" + }, + { + "filename": "pipsy_hover_top", + "build-id": "ASSET_TEX3D_OBJECTS_PIPSYHOVERTOP", + "folder": "objects", + "type": "Texture", + "sha1": "2c81995332b1363b0d8a8389628994132e691684" + }, + { + "filename": "drumstick_hover_top", + "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKHOVERTOP", + "folder": "objects", + "type": "Texture", + "sha1": "08391d0e318a457d81f2a5008d40af34c7f28f61" + }, + { + "filename": "bumper_hover_top", + "build-id": "ASSET_TEX3D_OBJECTS_BUMPERHOVERTOP", + "folder": "objects", + "type": "Texture", + "sha1": "865033006eb4626b572e02efce7838685353aee2" + }, + { + "filename": "taj_turban", + "build-id": "ASSET_TEX3D_OBJECTS_TAJTURBAN", + "folder": "objects", + "type": "Texture", + "sha1": "92e38a240674879935959769f47be49f4f1540a2" + }, + { + "filename": "taj_tusks", + "build-id": "ASSET_TEX3D_OBJECTS_TAJTUSKS", + "folder": "objects", + "type": "Texture", + "sha1": "eb88e7f1ec48bdfea7d6cdce2134a448b7410cd1" + }, + { + "filename": "racer_common_red_lowpoly", + "build-id": "ASSET_TEX3D_OBJECTS_RACERCOMMONREDLOWPOLY", + "folder": "objects", + "type": "Texture", + "sha1": "434cea0efa1018b63d3feb3e4e785adff16eecc9" + }, + { + "filename": "stopwatch_frame_envmap", + "build-id": "ASSET_TEX3D_OBJECTS_STOPWATCHFRAMEENVMAP", + "folder": "objects", + "type": "Texture", + "sha1": "da8c944052f10048d7d96cd5a67d9600c0fe63d3" + }, + { + "filename": "bluey_skin_envmap", + "build-id": "ASSET_TEX3D_OBJECTS_BLUEYSKINENVMAP", + "folder": "objects", + "type": "Texture", + "sha1": "11665a17037a5745eb9ec26d4ebd25622af775da" + }, + { + "filename": "taj_front", + "build-id": "ASSET_TEX3D_OBJECTS_TAJFRONT", + "folder": "objects", + "type": "Texture", + "sha1": "01da7343f717eb19fbf8dde1e2c85cbf8e6f3d8b" + }, + { + "filename": "taj_cheek", + "build-id": "ASSET_TEX3D_OBJECTS_TAJCHEEK", + "folder": "objects", + "type": "Texture", + "sha1": "8fcadb01c6fe4a37f2fd89d395f38bb2e8ed465e" + }, + { + "filename": "taj_limbs", + "build-id": "ASSET_TEX3D_OBJECTS_TAJLIMBS", + "folder": "objects", + "type": "Texture", + "sha1": "3c0928091c3778457bf62d7d475c72938c05a6a3" + }, + { + "filename": "taj_vest", + "build-id": "ASSET_TEX3D_OBJECTS_TAJVEST", + "folder": "objects", + "type": "Texture", + "sha1": "b00e152c76080c7f9b7915d20410f95389e54a4f" + }, + { + "filename": "taj_leg_sides", + "build-id": "ASSET_TEX3D_OBJECTS_TAJLEGSIDES", + "folder": "objects", + "type": "Texture", + "sha1": "84ebfbc6e8220b5cb1e5da4f36c68f2f5934009b" + }, + { + "filename": "bluey_cheek", + "build-id": "ASSET_TEX3D_OBJECTS_BLUEYCHEEK", + "folder": "objects", + "type": "Texture", + "sha1": "3da7092983e6b9a276a77923fb49a2f50358b343" + }, + { + "filename": "racer_common_white", + "build-id": "ASSET_TEX3D_OBJECTS_RACERCOMMONWHITE", + "folder": "objects", + "type": "Texture", + "sha1": "4106f18d10b18a1367025f44a43c0630b9aad827" + }, + { + "filename": "drumstick_wings_top", + "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKWINGSTOP", + "folder": "objects", + "type": "Texture", + "sha1": "4106f18d10b18a1367025f44a43c0630b9aad827" + }, + { + "filename": "tiptup_plane_wing", + "build-id": "ASSET_TEX3D_OBJECTS_TIPTUPPLANEWING", + "folder": "objects", + "type": "Texture", + "sha1": "7457d52570f0feb187935200e58b2d9b4ad8c2a4" + }, + { + "filename": "conker_plane_wing", + "build-id": "ASSET_TEX3D_OBJECTS_CONKERPLANEWING", + "folder": "objects", + "type": "Texture", + "sha1": "600436d7e8b97f8a766c3cb468f8c86a8beb424d" + }, + { + "filename": "banjo_plane_wing", + "build-id": "ASSET_TEX3D_OBJECTS_BANJOPLANEWING", + "folder": "objects", + "type": "Texture", + "sha1": "abfd46a62a8d48b0779d668ed4c2992ee0fafa30" + }, + { + "filename": "diddy_plane_wing", + "build-id": "ASSET_TEX3D_OBJECTS_DIDDYPLANEWING", + "folder": "objects", + "type": "Texture", + "sha1": "8190326eadc106c405087c4e49d053139d6cb7b5" + }, + { + "filename": "timber_plane_wing", + "build-id": "ASSET_TEX3D_OBJECTS_TIMBERPLANEWING", + "folder": "objects", + "type": "Texture", + "sha1": "5529847c228243c59610357a14177081501025be" + }, + { + "filename": "krunch_plane_wing", + "build-id": "ASSET_TEX3D_OBJECTS_KRUNCHPLANEWING", + "folder": "objects", + "type": "Texture", + "sha1": "3157085db8bf21fc540c80658fd6e2e78032ba3d" + }, + { + "filename": "pipsy_plane_wing", + "build-id": "ASSET_TEX3D_OBJECTS_PIPSYPLANEWING", + "folder": "objects", + "type": "Texture", + "sha1": "1708709747bc4a70043d64db80f1b526325ea60b" + }, + { + "filename": "drumstick_plane_wing", + "build-id": "ASSET_TEX3D_OBJECTS_DRUMSTICKPLANEWING", + "folder": "objects", + "type": "Texture", + "sha1": "9c9942e336ed7e9db6daa1a02db9df080dae31b5" + }, + { + "filename": "bumper_plane_wing", + "build-id": "ASSET_TEX3D_OBJECTS_BUMPERPLANEWING", + "folder": "objects", + "type": "Texture", + "sha1": "e3779ea6cbb428b2131e19902ad2c0c5424ce16b" + }, + { + "filename": "bumper_car_envmap", + "build-id": "ASSET_TEX3D_OBJECTS_BUMPERCARENVMAP", + "folder": "objects", + "type": "Texture", + "sha1": "2b87cddae3f20eb88c9044da6674a9a5fa5ce334" + }, + { + "filename": "beta_balloon_bumper_envmap", + "build-id": "ASSET_TEX3D_UNUSED_BETABALLOONBUMPERENVMAP", + "folder": "unused", + "type": "Texture", + "sha1": "ba126000122bab04ca1a2c5d8ad6556f5cd32bf1" + }, + { + "filename": "gold_balloon_stripes", + "build-id": "ASSET_TEX3D_UNUSED_GOLDBALLOONSTRIPES", + "folder": "unused", + "type": "Texture", + "sha1": "21513c37596c3cb071b7899b94ffc8fba91c4b7a" + }, + { + "filename": "brown_dirt_path", + "build-id": "ASSET_TEX3D_COMMON_BROWNDIRTPATH", + "folder": "common", + "type": "Texture", + "sha1": "cd050b8d04a80559c22a4720c29d8a3efa22dd5d" + }, + { + "filename": "fossil_holes", + "build-id": "ASSET_TEX3D_DINO_FOSSILHOLES", + "folder": "dino", + "type": "Texture", + "sha1": "22d1f89dc0c5fe0cd29a7829633f81589d0bfa65" + }, + { + "filename": "green_wall_with_dials", + "build-id": "ASSET_TEX3D_SPACE_GREENWALLWITHDIALS", + "folder": "space", + "type": "Texture", + "sha1": "1f05e776bc35eeb598d5fb50d729539285acef34" + }, + { + "filename": "dirt_wall_sandy2", + "build-id": "ASSET_TEX3D_COMMON_DIRTWALLSANDY2", + "folder": "common", + "type": "Texture", + "sha1": "ca567a0985856f5fd06a34e287afa9918ebe5941" + }, + { + "filename": "white_wall_yellow_arrow_down", + "build-id": "ASSET_TEX3D_SPACE_WHITEWALLYELLOWARROWDOWN", + "folder": "space", + "type": "Texture", + "sha1": "b2dec54b56f4867556b2b5c8509416c0e959a9b7" + }, + { + "filename": "spaceship_earth", + "build-id": "ASSET_TEX3D_SPACE_SPACESHIPEARTH", + "folder": "space", + "type": "Texture", + "sha1": "5c1b1faf0084cbe380a4f89b94a6fd3c7391c19d" + }, + { + "filename": "vent_fan_grate", + "build-id": "ASSET_TEX3D_SPACE_VENTFANGRATE", + "folder": "space", + "type": "Texture", + "sha1": "4416fb107fef7f96267df65e48847e6786a61894" + }, + { + "filename": "fan_blade", + "build-id": "ASSET_TEX3D_OBJECTS_FANBLADE", + "folder": "objects", + "type": "Texture", + "sha1": "9bd43716ec2d371cf11dec3d04818c4b54f73e8a" + }, + { + "filename": "dome_orange_sky_0", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEORANGESKY_0", + "folder": "objects", + "type": "Texture", + "sha1": "5663046a2f2f7c7b4bd9719ab6779f1d1d074fbd" + }, + { + "filename": "dome_orange_sky_1", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEORANGESKY_1", + "folder": "objects", + "type": "Texture", + "sha1": "0c64985acacc157f76d74dc1c675ccacabaa52da" + }, + { + "filename": "dome_orange_sky_2", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEORANGESKY_2", + "folder": "objects", + "type": "Texture", + "sha1": "8b861bfbc00479e8450d1ade2586c65d9f53ba04" + }, + { + "filename": "dome_orange_sky_3", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEORANGESKY_3", + "folder": "objects", + "type": "Texture", + "sha1": "ca538ba1585f3baf9123df2f6c3016a5950842fd" + }, + { + "filename": "glass_window", + "build-id": "ASSET_TEX3D_SPACE_GLASSWINDOW", + "folder": "space", + "type": "Texture", + "sha1": "4f8e62c90e491e59ba4f6fde835f8ae66197217c" + }, + { + "filename": "blinking_light", + "build-id": "ASSET_TEX3D_SPACE_BLINKINGLIGHT", + "folder": "space", + "type": "Texture", + "sha1": "8e58a0e522057796d178e1ccbbb579966c41ba0f" + }, + { + "filename": "hanging_moss3", + "build-id": "ASSET_TEX3D_COMMON_HANGINGMOSS3", + "folder": "common", + "type": "Texture", + "sha1": "2e8bde8d840983dee174a2ed3610e3d77a66dcc4" + }, + { + "filename": "yellow_house_front", + "build-id": "ASSET_TEX3D_MEDIEVAL_YELLOWHOUSEFRONT", + "folder": "medieval", + "type": "Texture", + "sha1": "4ba03940753acd7369f56a440bc55c00d9ae2de9" + }, + { + "filename": "yellow_house_side", + "build-id": "ASSET_TEX3D_MEDIEVAL_YELLOWHOUSESIDE", + "folder": "medieval", + "type": "Texture", + "sha1": "07307f27bad769f728735ec2a7baae623e9b0ace" + }, + { + "filename": "green_wall_graph", + "build-id": "ASSET_TEX3D_SPACE_GREENWALLGRAPH", + "folder": "space", + "type": "Texture", + "sha1": "743a3e88499065156dcbabfd21ce17047336a719" + }, + { + "filename": "green_wall_tanks", + "build-id": "ASSET_TEX3D_SPACE_GREENWALLTANKS", + "folder": "space", + "type": "Texture", + "sha1": "c84272d763fa37720c1f6dc5fe705233782c19a2" + }, + { + "filename": "blue_stone_sandy_mossy", + "build-id": "ASSET_TEX3D_COMMON_BLUESTONESANDYMOSSY", + "folder": "common", + "type": "Texture", + "sha1": "16469ebd7b75d1d2ff46e2ced6a591d7f926e2d9" + }, + { + "filename": "orange_stone_sandy", + "build-id": "ASSET_TEX3D_DINO_ORANGESTONESANDY", + "folder": "dino", + "type": "Texture", + "sha1": "9597aee98cccc3df60046d604aa5d0d31fcf2720" + }, + { + "filename": "debug_purple_hit", + "build-id": "ASSET_TEX3D_COMMON_DEBUGPURPLEHIT", + "folder": "common", + "type": "Texture", + "sha1": "db314e873eb1155a20fe4c87f9d62cfe686a2b6d" + }, + { + "filename": "arch_support", + "build-id": "ASSET_TEX3D_SPACE_ARCHSUPPORT", + "folder": "space", + "type": "Texture", + "sha1": "50b96f12c98bb8da421869edb77a87fa50ef87ef" + }, + { + "filename": "stars_sign", + "build-id": "ASSET_TEX3D_SPACE_STARSSIGN", + "folder": "space", + "type": "Texture", + "sha1": "bfc0143a77c545ca7866948c08e168e5746b5493" + }, + { + "filename": "killer_instinct_sign", + "build-id": "ASSET_TEX3D_SPACE_KILLERINSTINCTSIGN", + "folder": "space", + "type": "Texture", + "sha1": "7de6f3958c892b60408278226a55fc4051556c01" + }, + { + "filename": "dome_orange_sky2_0", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEORANGESKY2_0", + "folder": "objects", + "type": "Texture", + "sha1": "587bba78f499eb1590c21b64ceb658bf5a9f466a" + }, + { + "filename": "dome_orange_sky2_1", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEORANGESKY2_1", + "folder": "objects", + "type": "Texture", + "sha1": "5ae4a06e659afc8c0455184aa2b9fa78499ea71a" + }, + { + "filename": "dome_orange_sky2_2", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEORANGESKY2_2", + "folder": "objects", + "type": "Texture", + "sha1": "4d4fc4179c9d7a26e4669e33b05bee8c95c97ab2" + }, + { + "filename": "dome_orange_sky2_3", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEORANGESKY2_3", + "folder": "objects", + "type": "Texture", + "sha1": "98b26727300f473776df6afeae2c7e23605f1f07" + }, + { + "filename": "blue_wall_light", + "build-id": "ASSET_TEX3D_SPACE_BLUEWALLLIGHT", + "folder": "space", + "type": "Texture", + "sha1": "282aa898de9af4e1bfc056574949a29ea881e667" + }, + { + "filename": "blue_wall_light2", + "build-id": "ASSET_TEX3D_SPACE_BLUEWALLLIGHT2", + "folder": "space", + "type": "Texture", + "sha1": "282aa898de9af4e1bfc056574949a29ea881e667" + }, + { + "filename": "blue_wall_stripes", + "build-id": "ASSET_TEX3D_SPACE_BLUEWALLSTRIPES", + "folder": "space", + "type": "Texture", + "sha1": "a006a4c914782d5e821b8ca878283af26befec2b" + }, + { + "filename": "white_wall_bricks_details", + "build-id": "ASSET_TEX3D_SPACE_WHITEWALLBRICKSDETAILS", + "folder": "space", + "type": "Texture", + "sha1": "2bf8e9276c6c3135faae671be014dadbc015fbe2" + }, + { + "filename": "blue_tunnel_light", + "build-id": "ASSET_TEX3D_SPACE_BLUETUNNELLIGHT", + "folder": "space", + "type": "Texture", + "sha1": "b65f9b43fcf7de76e09462620a7988ffdff141df" + }, + { + "filename": "lilypad_edge", + "build-id": "ASSET_TEX3D_DINO_LILYPADEDGE", + "folder": "dino", + "type": "Texture", + "sha1": "97961c799bc1c92580d8c087ea99ed46a1c62ad0" + }, + { + "filename": "blue_wall_frame", + "build-id": "ASSET_TEX3D_MEDIEVAL_BLUEWALLFRAME", + "folder": "medieval", + "type": "Texture", + "sha1": "6898e14e8ff79d96848a24a14430b9cb231a3b92" + }, + { + "filename": "blue_wall_window_and_flags", + "build-id": "ASSET_TEX3D_MEDIEVAL_BLUEWALLWINDOWANDFLAGS", + "folder": "medieval", + "type": "Texture", + "sha1": "a8bb330bcb96555c0ba4bf6dfdb6503fb800b307" + }, + { + "filename": "blue_wall_window_and_door", + "build-id": "ASSET_TEX3D_MEDIEVAL_BLUEWALLWINDOWANDDOOR", + "folder": "medieval", + "type": "Texture", + "sha1": "818ebbcb2b428ca73e7e6652182d26a1a4c78342" + }, + { + "filename": "blue_wall_rope", + "build-id": "ASSET_TEX3D_MEDIEVAL_BLUEWALLROPE", + "folder": "medieval", + "type": "Texture", + "sha1": "ed1d804c0495c354c63c0f15e4e694adc28eef76" + }, + { + "filename": "dome_grass_0", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEGRASS_0", + "folder": "objects", + "type": "Texture", + "sha1": "aea966ffeddd2dd27194c424f061a0bde7658491" + }, + { + "filename": "dome_grass_1", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEGRASS_1", + "folder": "objects", + "type": "Texture", + "sha1": "512e713722d3d97be0239252fc735890430b0e51" + }, + { + "filename": "dome_grass_2", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEGRASS_2", + "folder": "objects", + "type": "Texture", + "sha1": "80c200341038fc76bcc228681b8cc5638568bf97" + }, + { + "filename": "dome_grass_3", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEGRASS_3", + "folder": "objects", + "type": "Texture", + "sha1": "f2a8b38fe179d1b2b785f9cedb80f2536883a22c" + }, + { + "filename": "monorail_n64_logo", + "build-id": "ASSET_TEX3D_OBJECTS_MONORAILN64LOGO", + "folder": "objects", + "type": "Texture", + "sha1": "d33bf882ba33bfa4254d9fdf15e909fc65ad7944" + }, + { + "filename": "temple_brick2", + "build-id": "ASSET_TEX3D_DINO_TEMPLEBRICK2", + "folder": "dino", + "type": "Texture", + "sha1": "058e9b1f502963f37937be182b487735dfc5f2ce" + }, + { + "filename": "white_wall_pipes", + "build-id": "ASSET_TEX3D_SPACE_WHITEWALLPIPES", + "folder": "space", + "type": "Texture", + "sha1": "6b10a9bd5ed25fbe31b6956bd95c1ac51b20375b" + }, + { + "filename": "n64_logo_ship_sail_0", + "build-id": "ASSET_TEX3D_TROPICAL_N64LOGOSHIPSAIL_0", + "folder": "tropical", + "type": "Texture", + "sha1": "6271b4425dda6e8e5f954e7c87b50a2c9f6d9918" + }, + { + "filename": "n64_logo_ship_sail_1", + "build-id": "ASSET_TEX3D_TROPICAL_N64LOGOSHIPSAIL_1", + "folder": "tropical", + "type": "Texture", + "sha1": "e313fc2ccc1df87d5e4ce759f931f38583becb16" + }, + { + "filename": "white_wall_n64_tank", + "build-id": "ASSET_TEX3D_SPACE_WHITEWALLN64TANK", + "folder": "space", + "type": "Texture", + "sha1": "1388904ec136296fdae5887623a3f02530e7128b" + }, + { + "filename": "black_unknown", + "build-id": "ASSET_TEX3D_UNUSED_BLACKUNKNOWN", + "folder": "unused", + "type": "Texture", + "sha1": "6aa033c4cdf550e3bd44acf639036cee34f5b483" + }, + { + "filename": "n64_sign_square", + "build-id": "ASSET_TEX3D_SPACE_N64SIGNSQUARE", + "folder": "space", + "type": "Texture", + "sha1": "1ba18e5279a93eb14446ffa5fc36ea9e06c6f65f" + }, + { + "filename": "sun_neon_sign", + "build-id": "ASSET_TEX3D_SPACE_SUNNEONSIGN", + "folder": "space", + "type": "Texture", + "sha1": "9e1d8731fa68ba315699f145ce35b9fbc89ad22e" + }, + { + "filename": "street_road", + "build-id": "ASSET_TEX3D_SPACE_STREETROAD", + "folder": "space", + "type": "Texture", + "sha1": "c244f4cacc7cb804bd0480652a6516791e297d09" + }, + { + "filename": "dome_blue_sky2_0", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY2_0", + "folder": "objects", + "type": "Texture", + "sha1": "41ac9c2f6df2f4b40247d0dcc7bf983b30976d20" + }, + { + "filename": "dome_blue_sky2_1", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY2_1", + "folder": "objects", + "type": "Texture", + "sha1": "be1a413cf7954e2b00ffdd66bc0f0dd2daf9ae20" + }, + { + "filename": "dome_blue_sky2_2", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY2_2", + "folder": "objects", + "type": "Texture", + "sha1": "b3df0f4668258f022fd2f1b30d87f66665869164" + }, + { + "filename": "dome_blue_sky2_3", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY2_3", + "folder": "objects", + "type": "Texture", + "sha1": "90f3069251ff98b9b7e5b3770bfe869798072b21" + }, + { + "filename": "dome_desert_0", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEDESERT_0", + "folder": "objects", + "type": "Texture", + "sha1": "ad201e90635de7223c2a20479a8a64a866d41802" + }, + { + "filename": "dome_desert_1", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEDESERT_1", + "folder": "objects", + "type": "Texture", + "sha1": "962502f26c351e5b5e5054ced96d7c5fc6c3332e" + }, + { + "filename": "dome_desert_2", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEDESERT_2", + "folder": "objects", + "type": "Texture", + "sha1": "bc1d83d60950874a752d98bfd7040e48f08c31ee" + }, + { + "filename": "dome_desert_3", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEDESERT_3", + "folder": "objects", + "type": "Texture", + "sha1": "d60e3f1c7018d0a8955a18bbf06338d4bfc28efc" + }, + { + "filename": "nintendo_logo_negative_0", + "build-id": "ASSET_TEX3D_UNUSED_NINTENDOLOGONEGATIVE_0", + "folder": "unused", + "type": "Texture", + "sha1": "4f67c51b5d3b111ab64a1e81e74f305000519954" + }, + { + "filename": "nintendo_logo_negative_1", + "build-id": "ASSET_TEX3D_UNUSED_NINTENDOLOGONEGATIVE_1", + "folder": "unused", + "type": "Texture", + "sha1": "f4c538f16d21ae9e43957be0c796c977c49ff8f7" + }, + { + "filename": "nintendo_logo_negative_2", + "build-id": "ASSET_TEX3D_UNUSED_NINTENDOLOGONEGATIVE_2", + "folder": "unused", + "type": "Texture", + "sha1": "9ac9c9ac6d3f4e78c369f5a59e4bc619aea61e86" + }, + { + "filename": "nintendo_logo_negative_3", + "build-id": "ASSET_TEX3D_UNUSED_NINTENDOLOGONEGATIVE_3", + "folder": "unused", + "type": "Texture", + "sha1": "43b6c431edb72f24a58bebde32dfbbd887b1e4b9" + }, + { + "filename": "dome_space_stars_0", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACESTARS_0", + "folder": "objects", + "type": "Texture", + "sha1": "b47ff1bbcca0730cbdee7969b140630a12fb04fe" + }, + { + "filename": "dome_space_stars_1", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACESTARS_1", + "folder": "objects", + "type": "Texture", + "sha1": "65c590399326da4419a49aedf4c7f280031318d8" + }, + { + "filename": "dome_space_stars_2", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACESTARS_2", + "folder": "objects", + "type": "Texture", + "sha1": "886eee3694ab2baea99f461c1d96255f0e5dcaa3" + }, + { + "filename": "dome_space_orange_sky_0", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEORANGESKY_0", + "folder": "objects", + "type": "Texture", + "sha1": "6c00010d4a7843f71267a7747bcdd3ae4c478c9a" + }, + { + "filename": "dome_space_orange_sky_1", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEORANGESKY_1", + "folder": "objects", + "type": "Texture", + "sha1": "c2f97732270d19791025af9186c62921ef2b571a" + }, + { + "filename": "dome_space_orange_sky_2", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEORANGESKY_2", + "folder": "objects", + "type": "Texture", + "sha1": "f051bb27e4069d3f40d8bf2d00bca144a009799e" + }, + { + "filename": "dome_space_yellow_sky_0", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEYELLOWSKY_0", + "folder": "objects", + "type": "Texture", + "sha1": "58444d127a4e1eff7c0e6ecb47af3fd5acfbc9f9" + }, + { + "filename": "dome_space_yellow_sky_1", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEYELLOWSKY_1", + "folder": "objects", + "type": "Texture", + "sha1": "f90a9efdf9dd556bbf7adff3ddbcf400b92ae3d3" + }, + { + "filename": "dome_space_yellow_sky_2", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEYELLOWSKY_2", + "folder": "objects", + "type": "Texture", + "sha1": "7b22d9ee6d26c61129f31a86b866a35b6198a603" + }, + { + "filename": "village_stone_wall", + "build-id": "ASSET_TEX3D_MEDIEVAL_VILLAGESTONEWALL", + "folder": "medieval", + "type": "Texture", + "sha1": "b3c448a3be09594c8335bc1d2e92f27edced2aee" + }, + { + "filename": "red_arrow_sign2", + "build-id": "ASSET_TEX3D_COMMON_REDARROWSIGN2", + "folder": "common", + "type": "Texture", + "sha1": "cfd448cdd3f12b47e93d7195941e28d7047a1b62" + }, + { + "filename": "village_roof_n64_logo", + "build-id": "ASSET_TEX3D_MEDIEVAL_VILLAGEROOFN64LOGO", + "folder": "medieval", + "type": "Texture", + "sha1": "06a1a1e97e944ef79e1709ec3fe8d0c0ef677894" + }, + { + "filename": "skyscraper_lights", + "build-id": "ASSET_TEX3D_SPACE_SKYSCRAPERLIGHTS", + "folder": "space", + "type": "Texture", + "sha1": "fd746ec79e514e9b93c76df6b13e986900b76955" + }, + { + "filename": "white_wall_bricks2", + "build-id": "ASSET_TEX3D_SPACE_WHITEWALLBRICKS2", + "folder": "space", + "type": "Texture", + "sha1": "a6bcd6252735e81bc5ad41cb306561ccd1715db0" + }, + { + "filename": "white_wall_n64_logo", + "build-id": "ASSET_TEX3D_SPACE_WHITEWALLN64LOGO", + "folder": "space", + "type": "Texture", + "sha1": "65f3d714fc534484261eb74a2616bfdfd37c4a16" + }, + { + "filename": "wood_bridge_dark_brown", + "build-id": "ASSET_TEX3D_COMMON_WOODBRIDGEDARKBROWN", + "folder": "common", + "type": "Texture", + "sha1": "8e61872d2e4f8934937a5a5fb0978d1f86a2fa59" + }, + { + "filename": "finish_line_flag_black_yellow", + "build-id": "ASSET_TEX3D_WINTER_FINISHLINEFLAGBLACKYELLOW", + "folder": "winter", + "type": "Texture", + "sha1": "36c35101568ef8895887db72f74b379904ab4735" + }, + { + "filename": "dome_blue_sky3_0", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY3_0", + "folder": "objects", + "type": "Texture", + "sha1": "3203d9085a544207aedae2bd612aaf031ed7a8ca" + }, + { + "filename": "dome_blue_sky3_1", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY3_1", + "folder": "objects", + "type": "Texture", + "sha1": "2c341974564c4b0ef30cb37a468b9a338851a0bc" + }, + { + "filename": "dome_blue_sky3_2", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY3_2", + "folder": "objects", + "type": "Texture", + "sha1": "a89d6add2f99840cea3245c82c0a752a76d21e65" + }, + { + "filename": "dome_blue_sky3_3", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY3_3", + "folder": "objects", + "type": "Texture", + "sha1": "8e6583f1fcdccf35c4ecc47cf7122e3fbf6175f6" + }, + { + "filename": "space_grass", + "build-id": "ASSET_TEX3D_SPACE_SPACEGRASS", + "folder": "space", + "type": "Texture", + "sha1": "cddf7b441fcee45e934f44a2544bf1d9e535e0a4" + }, + { + "filename": "castle_wall_tile_mossy", + "build-id": "ASSET_TEX3D_UNUSED_CASTLEWALLTILEMOSSY", + "folder": "unused", + "type": "Texture", + "sha1": "16544902dc1623dce853c5406fe909f97191060b" + }, + { + "filename": "vent_fan_border", + "build-id": "ASSET_TEX3D_SPACE_VENTFANBORDER", + "folder": "space", + "type": "Texture", + "sha1": "9a614372cb3bee07900c19226adac8950639ebbe" + }, + { + "filename": "white_wall_blue_pipe", + "build-id": "ASSET_TEX3D_SPACE_WHITEWALLBLUEPIPE", + "folder": "space", + "type": "Texture", + "sha1": "7ed62ca05dc79ecd42a2c8a2115738e2e2d010a7" + }, + { + "filename": "dome_top_brown", + "build-id": "ASSET_TEX3D_OBJECTS_DOMETOPBROWN", + "folder": "objects", + "type": "Texture", + "sha1": "91379dfdb7785944545dd8328aa9e39ee3ffb30a" + }, + { + "filename": "village_plank_fence", + "build-id": "ASSET_TEX3D_MEDIEVAL_VILLAGEPLANKFENCE", + "folder": "medieval", + "type": "Texture", + "sha1": "efb98c642a80f35094b48bb8be14733ca180c0d5" + }, + { + "filename": "pterodactyl_underside", + "build-id": "ASSET_TEX3D_OBJECTS_PTERODACTYLUNDERSIDE", + "folder": "objects", + "type": "Texture", + "sha1": "ce79e0c337d10dfab9e2f9ecd6e1a270362f329d" + }, + { + "filename": "pterodactyl_nose", + "build-id": "ASSET_TEX3D_OBJECTS_PTERODACTYLNOSE", + "folder": "objects", + "type": "Texture", + "sha1": "0c777b386aeef4d304d13e712b09fc7e2be52d2a" + }, + { + "filename": "pterodactyl_skin", + "build-id": "ASSET_TEX3D_OBJECTS_PTERODACTYLSKIN", + "folder": "objects", + "type": "Texture", + "sha1": "498844dc23ad88cbd24fe3b3a282dd36784c789d" + }, + { + "filename": "pterodactyl_spine_head", + "build-id": "ASSET_TEX3D_OBJECTS_PTERODACTYLSPINEHEAD", + "folder": "objects", + "type": "Texture", + "sha1": "d8d16b2e91b654d9f71740b93afe35370d47e681" + }, + { + "filename": "pterodactyl_wings", + "build-id": "ASSET_TEX3D_OBJECTS_PTERODACTYLWINGS", + "folder": "objects", + "type": "Texture", + "sha1": "6d33bf58651567a98f266d07c726d423ccb03e15" + }, + { + "filename": "red_wall_small_levers", + "build-id": "ASSET_TEX3D_SPACE_REDWALLSMALLLEVERS", + "folder": "space", + "type": "Texture", + "sha1": "99a5c8f30f2fe80a0f33a662165557930ce46a9c" + }, + { + "filename": "red_wall_big_levers", + "build-id": "ASSET_TEX3D_SPACE_REDWALLBIGLEVERS", + "folder": "space", + "type": "Texture", + "sha1": "cabba6afbe4d4e597f2cf060ec2a490ebb725717" + }, + { + "filename": "red_wall_r4300", + "build-id": "ASSET_TEX3D_SPACE_REDWALLR4300", + "folder": "space", + "type": "Texture", + "sha1": "53f8e6cc879a979274b5073e850656f85e8b802d" + }, + { + "filename": "red_wall_computer", + "build-id": "ASSET_TEX3D_SPACE_REDWALLCOMPUTER", + "folder": "space", + "type": "Texture", + "sha1": "6d357f226eaec35b3d9b3ccaf474de29f18957d7" + }, + { + "filename": "roof_tile_shingles", + "build-id": "ASSET_TEX3D_MEDIEVAL_ROOFTILESHINGLES", + "folder": "medieval", + "type": "Texture", + "sha1": "aa372488b61f178937622e99b613854263b8e555" + }, + { + "filename": "colored_stone", + "build-id": "ASSET_TEX3D_SPACE_COLOREDSTONE", + "folder": "space", + "type": "Texture", + "sha1": "326c1f160c9594899232145e1872e33e69ee7b21" + }, + { + "filename": "blue_castle_merlon", + "build-id": "ASSET_TEX3D_MEDIEVAL_BLUECASTLEMERLON", + "folder": "medieval", + "type": "Texture", + "sha1": "b2fe13d3ad83ee487b2fd48b6c94395f57cd0a98" + }, + { + "filename": "rare_sign_flashing", + "build-id": "ASSET_TEX3D_SPACE_RARESIGNFLASHING", + "folder": "space", + "type": "Texture", + "sha1": "71df331468c9f9a71c3682f787ea93b787f2c5a0" + }, + { + "filename": "red_ground_arrow", + "build-id": "ASSET_TEX3D_SPACE_REDGROUNDARROW", + "folder": "space", + "type": "Texture", + "sha1": "c85a3e4e3dbe1207084a7c88a12096418c0c3f83" + }, + { + "filename": "red_wall_big_levers2", + "build-id": "ASSET_TEX3D_SPACE_REDWALLBIGLEVERS2", + "folder": "space", + "type": "Texture", + "sha1": "1e1ee4102954a533b57aa440edb9d22936732e10" + }, + { + "filename": "orange_house_wall_window", + "build-id": "ASSET_TEX3D_MEDIEVAL_ORANGEHOUSEWALLWINDOW", + "folder": "medieval", + "type": "Texture", + "sha1": "2699774a860cde29c2b7936aa42260235e30a863" + }, + { + "filename": "orange_house_guard_rail", + "build-id": "ASSET_TEX3D_MEDIEVAL_ORANGEHOUSEGUARDRAIL", + "folder": "medieval", + "type": "Texture", + "sha1": "e8865d52f717ceba130c3aa0c25bb8cbe6ef9c26" + }, + { + "filename": "arch_support_base", + "build-id": "ASSET_TEX3D_SPACE_ARCHSUPPORTBASE", + "folder": "space", + "type": "Texture", + "sha1": "cdf6b207bdcf02593ae42c40f4c41c82b62c36d2" + }, + { + "filename": "spaceship_booster", + "build-id": "ASSET_TEX3D_OBJECTS_SPACESHIPBOOSTER", + "folder": "objects", + "type": "Texture", + "sha1": "ee589328505b2261947122d2ae338a658a4bb603" + }, + { + "filename": "red_pillar_spike", + "build-id": "ASSET_TEX3D_SPACE_REDPILLARSPIKE", + "folder": "space", + "type": "Texture", + "sha1": "52210f2b9b0b21203b9dbc198610fbe14c2be267" + }, + { + "filename": "fossil_bone", + "build-id": "ASSET_TEX3D_DINO_FOSSILBONE", + "folder": "dino", + "type": "Texture", + "sha1": "2c2070b637411466f47cd1f5e0f85b7117ce8a9f" + }, + { + "filename": "white_wall_rare_logo", + "build-id": "ASSET_TEX3D_SPACE_WHITEWALLRARELOGO", + "folder": "space", + "type": "Texture", + "sha1": "ba9289ae296d7da0e9f0358c68472a048f26394f" + }, + { + "filename": "roof_tile_shingles_red", + "build-id": "ASSET_TEX3D_MEDIEVAL_ROOFTILESHINGLESRED", + "folder": "medieval", + "type": "Texture", + "sha1": "c0c31daf24b30b0a7c4780a2c124da5d2c777b7e" + }, + { + "filename": "roof_tile_shingles2", + "build-id": "ASSET_TEX3D_MEDIEVAL_ROOFTILESHINGLES2", + "folder": "medieval", + "type": "Texture", + "sha1": "1a7c21fb904045065e431988cef26ea6b74bf87f" + }, + { + "filename": "charselect_shadow", + "build-id": "ASSET_TEX3D_OBJECTS_CHARSELECTSHADOW", + "folder": "objects", + "type": "Texture", + "sha1": "2c910d23ed7cc0bd7ba6cd8631badf9126a6badc" + }, + { + "filename": "blue_pavement", + "build-id": "ASSET_TEX3D_SPACE_BLUEPAVEMENT", + "folder": "space", + "type": "Texture", + "sha1": "300bc9c44ef0b9a34e0d493279f1ccc823a7234f" + }, + { + "filename": "dome_sun_rays", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESUNRAYS", + "folder": "objects", + "type": "Texture", + "sha1": "f37ff6bbb731d6cfb9be5c75a1d1aef992565ef5" + }, + { + "filename": "dirt_road_sandy", + "build-id": "ASSET_TEX3D_COMMON_DIRTROADSANDY", + "folder": "common", + "type": "Texture", + "sha1": "b3872b0fc84ba81542c11e2e675e6f14a3b66cac" + }, + { + "filename": "dome_blue_sky_island", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKYISLAND", + "folder": "objects", + "type": "Texture", + "sha1": "28b65a63a47a7c22da2e3f5bf2f79aec814b6d35" + }, + { + "filename": "dome_black_bottom", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLACKBOTTOM", + "folder": "objects", + "type": "Texture", + "sha1": "6aa033c4cdf550e3bd44acf639036cee34f5b483" + }, + { + "filename": "dome_snowy_night_0", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_0", + "folder": "objects", + "type": "Texture", + "sha1": "e4ad6e3e7fc8c356326cd0719519896aa8917692" + }, + { + "filename": "dome_snowy_night_1", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_1", + "folder": "objects", + "type": "Texture", + "sha1": "5a5b9c579f68e6f6daf21be4187d27f42e859806" + }, + { + "filename": "dome_snowy_night_2", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_2", + "folder": "objects", + "type": "Texture", + "sha1": "37c30b2321f00e8267fffc536de89850b2e2c2e7" + }, + { + "filename": "dome_snowy_night_3", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_3", + "folder": "objects", + "type": "Texture", + "sha1": "444e53caed64b53fcd3a0e3e5fbd356ef0149f2b" + }, + { + "filename": "dome_snowy_night_4", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_4", + "folder": "objects", + "type": "Texture", + "sha1": "f2c511f2b0edf7d101c228b38a2ec3fc144a86e9" + }, + { + "filename": "dome_snowy_night_5", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_5", + "folder": "objects", + "type": "Texture", + "sha1": "2ba2c2fcbced32630b3dc44c825b31413538d266" + }, + { + "filename": "dome_snowy_night_6", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_6", + "folder": "objects", + "type": "Texture", + "sha1": "f5be2ff2b4d5957a060909e3e4d8155910c022ff" + }, + { + "filename": "dome_snowy_night_7", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_7", + "folder": "objects", + "type": "Texture", + "sha1": "54db8dc18a321945ab00148c8b42d99ebd159907" + }, + { + "filename": "dome_snowy_night_8", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_8", + "folder": "objects", + "type": "Texture", + "sha1": "d4008e075da67a5643456c3e77ba059a768bedf5" + }, + { + "filename": "dome_snowy_night_9", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_9", + "folder": "objects", + "type": "Texture", + "sha1": "e1f37a1d56c26b7093a5882cb2413dc3e578ced6" + }, + { + "filename": "dome_snowy_night_10", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_10", + "folder": "objects", + "type": "Texture", + "sha1": "ef63854592d55bc9607cb56a908548c71d3a4f3d" + }, + { + "filename": "dome_snowy_night_11", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHT_11", + "folder": "objects", + "type": "Texture", + "sha1": "da266d1be632e197a5be46b1a88c797595ca3539" + }, + { + "filename": "black_semitransparent", + "build-id": "ASSET_TEX3D_COMMON_BLACKSEMITRANSPARENT", + "folder": "common", + "type": "Texture", + "sha1": "af099a07ee2d8c03ec63828eb2b3db8895809bd8" + }, + { + "filename": "spaceship_blaster", + "build-id": "ASSET_TEX3D_OBJECTS_SPACESHIPBLASTER", + "folder": "objects", + "type": "Texture", + "sha1": "57d914e8167a9f1f50eefbe609c2d6c897342324" + }, + { + "filename": "dome_volcano_0", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEVOLCANO_0", + "folder": "objects", + "type": "Texture", + "sha1": "ed380fcd37f9db7722ba7dba15c1755ec4867e2f" + }, + { + "filename": "dome_volcano_1", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEVOLCANO_1", + "folder": "objects", + "type": "Texture", + "sha1": "2bd8e5ebadf85162e23f13893811282fb6ef45d3" + }, + { + "filename": "dome_volcano_2", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEVOLCANO_2", + "folder": "objects", + "type": "Texture", + "sha1": "f8755f7da5ed4565cf77eb1da909d6ea957aadd2" + }, + { + "filename": "dome_volcano_3", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEVOLCANO_3", + "folder": "objects", + "type": "Texture", + "sha1": "d6d6133c809f5cc06da3cc2dea8bd7d1e740a274" + }, + { + "filename": "dome_volcano_4", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEVOLCANO_4", + "folder": "objects", + "type": "Texture", + "sha1": "36c604131f3a15aea0e9ea744df26e731d80f322" + }, + { + "filename": "dome_volcano_5", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEVOLCANO_5", + "folder": "objects", + "type": "Texture", + "sha1": "ec7e3ec4d3b548b47c90fdbf4b294da22a759c7b" + }, + { + "filename": "dome_volcano_6", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEVOLCANO_6", + "folder": "objects", + "type": "Texture", + "sha1": "d9d99db0e953ff0d392076677fe789d76c08c7f9" + }, + { + "filename": "dome_volcano_7", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEVOLCANO_7", + "folder": "objects", + "type": "Texture", + "sha1": "3155db16b9eb72f4238a1473830d7faaa453a2de" + }, + { + "filename": "dome_volcano_8", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEVOLCANO_8", + "folder": "objects", + "type": "Texture", + "sha1": "6d918cbb795fa7634ccbf4e76bd79bd615cf5119" + }, + { + "filename": "dome_volcano_9", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEVOLCANO_9", + "folder": "objects", + "type": "Texture", + "sha1": "a99f873be642716aa0c02b02dc200fee54fa89a2" + }, + { + "filename": "dome_volcano_10", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEVOLCANO_10", + "folder": "objects", + "type": "Texture", + "sha1": "8fb2dffa4314e183480fd3ee30622675f1380873" + }, + { + "filename": "dome_volcano_11", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEVOLCANO_11", + "folder": "objects", + "type": "Texture", + "sha1": "d58e20ec4d10562c6e3c14327871a0647f4fb794" + }, + { + "filename": "dome_snowy_night_top", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESNOWYNIGHTTOP", + "folder": "objects", + "type": "Texture", + "sha1": "528fb6e4a05158fd40548eb51a035bd2ff999c39" + }, + { + "filename": "icy_path_snowy", + "build-id": "ASSET_TEX3D_WINTER_ICYPATHSNOWY", + "folder": "winter", + "type": "Texture", + "sha1": "10c004a1dcaee261d3f2d827fe38ceb184919b0d" + }, + { + "filename": "space_wall", + "build-id": "ASSET_TEX3D_SPACE_SPACEWALL", + "folder": "space", + "type": "Texture", + "sha1": "0606caeb5b26ce542718915f696ef76f5ed82796" + }, + { + "filename": "dome_space_blue_0", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_0", + "folder": "objects", + "type": "Texture", + "sha1": "d784fa76fddaee51761dd43cd3f24351d3695bf7" + }, + { + "filename": "dome_space_blue_1", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_1", + "folder": "objects", + "type": "Texture", + "sha1": "c448d59c0038146323531630a09f989f0610470d" + }, + { + "filename": "dome_space_blue_2", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_2", + "folder": "objects", + "type": "Texture", + "sha1": "d5280ea7681c3e4f2061616ab47b6c08d5e24347" + }, + { + "filename": "dome_space_blue_3", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_3", + "folder": "objects", + "type": "Texture", + "sha1": "b8d0c8179cdce92b98e0da0f99152cbd97584d77" + }, + { + "filename": "dome_space_blue_4", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_4", + "folder": "objects", + "type": "Texture", + "sha1": "baaa31a18cf563b67d83cbea7226e15f00c4d11f" + }, + { + "filename": "dome_space_blue_5", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_5", + "folder": "objects", + "type": "Texture", + "sha1": "eb12410eaefa172f46f65d528f7d985cd0ac4ec7" + }, + { + "filename": "dome_space_blue_6", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_6", + "folder": "objects", + "type": "Texture", + "sha1": "e1c2bded2a6e411545dd71bc79d2c0af9d8be296" + }, + { + "filename": "dome_space_blue_7", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_7", + "folder": "objects", + "type": "Texture", + "sha1": "b0fd12efbf2a28a2c5021cb28bd6c3311d4fe31e" + }, + { + "filename": "dome_space_blue_8", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_8", + "folder": "objects", + "type": "Texture", + "sha1": "88162a76e26d85c6d4fad1f84ec64c333b76cbba" + }, + { + "filename": "dome_space_blue_9", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_9", + "folder": "objects", + "type": "Texture", + "sha1": "0673e93c6d72d484cf43440b7271f76d841eefb8" + }, + { + "filename": "dome_space_blue_10", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_10", + "folder": "objects", + "type": "Texture", + "sha1": "f38f1bcfaf1f3fced40dd8d0a8206f9142da55d0" + }, + { + "filename": "dome_space_blue_11", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_11", + "folder": "objects", + "type": "Texture", + "sha1": "e86954fd937a17481c853481048c019c76d7c5d7" + }, + { + "filename": "dome_space_blue_12", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_12", + "folder": "objects", + "type": "Texture", + "sha1": "916be65c08abb96e0749d26898ae4ef51ff1b338" + }, + { + "filename": "dome_space_blue_13", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_13", + "folder": "objects", + "type": "Texture", + "sha1": "59e0830c69ceef7ac2345304c80bdadbb8797864" + }, + { + "filename": "dome_space_blue_14", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_14", + "folder": "objects", + "type": "Texture", + "sha1": "8572dc839e721b6553c484e2b1495e058dacd7cb" + }, + { + "filename": "dome_space_blue_15", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_15", + "folder": "objects", + "type": "Texture", + "sha1": "f00d9bede112001263058279fc7beb22bc2e1986" + }, + { + "filename": "dome_space_blue_16", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_16", + "folder": "objects", + "type": "Texture", + "sha1": "3601bbb2b17c2b3b164123816115c306bf970c59" + }, + { + "filename": "dome_space_blue_17", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_17", + "folder": "objects", + "type": "Texture", + "sha1": "83bebc126c8043308566d3f6da5d3a2e17ebfaab" + }, + { + "filename": "dome_space_blue_18", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_18", + "folder": "objects", + "type": "Texture", + "sha1": "adbdbe5134ebb55d2a6b3d202608d3cfd8643148" + }, + { + "filename": "dome_space_blue_19", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEBLUE_19", + "folder": "objects", + "type": "Texture", + "sha1": "e0bb1bb01f17a1f5605e59004c11ad1f13949e63" + }, + { + "filename": "finish_line_white_space_0", + "build-id": "ASSET_TEX3D_SPACE_FINISHLINEWHITESPACE_0", + "folder": "space", + "type": "Texture", + "sha1": "1ca08a623b800b94c9949be0ae72fb220afa3423" + }, + { + "filename": "finish_line_white_space_1", + "build-id": "ASSET_TEX3D_SPACE_FINISHLINEWHITESPACE_1", + "folder": "space", + "type": "Texture", + "sha1": "83a0111a57198d59f567dd81d39619c7e9ebc0c7" + }, + { + "filename": "white_wall_blocks_large", + "build-id": "ASSET_TEX3D_SPACE_WHITEWALLBLOCKSLARGE", + "folder": "space", + "type": "Texture", + "sha1": "c33be1f58c85ade88f1714c99e400a259d3b6ad4" + }, + { + "filename": "fog_white", + "build-id": "ASSET_TEX3D_COMMON_FOGWHITE", + "folder": "common", + "type": "Texture", + "sha1": "f580ee0702caa7f0cfddca5627d9e7d1acc28fc7" + }, + { + "filename": "finish_line_space2_0", + "build-id": "ASSET_TEX3D_SPACE_FINISHLINESPACE2_0", + "folder": "space", + "type": "Texture", + "sha1": "f29a355a79dc8d8210238130314f5e44671741b9" + }, + { + "filename": "finish_line_space2_1", + "build-id": "ASSET_TEX3D_SPACE_FINISHLINESPACE2_1", + "folder": "space", + "type": "Texture", + "sha1": "68bdb2c53faad408756c2ee2767b60ebb6246763" + }, + { + "filename": "stadium_lights", + "build-id": "ASSET_TEX3D_SPACE_STADIUMLIGHTS", + "folder": "space", + "type": "Texture", + "sha1": "330c8b056612a8ded571fc792b641474be3e8d85" + }, + { + "filename": "dome_space_pink_0", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEPINK_0", + "folder": "objects", + "type": "Texture", + "sha1": "3238940f7da1f97b2794a14652d9a653eb31a603" + }, + { + "filename": "dome_space_pink_1", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEPINK_1", + "folder": "objects", + "type": "Texture", + "sha1": "bab60111a998193bb9fb1ffc232cb7e08c506f68" + }, + { + "filename": "dome_space_pink_2", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEPINK_2", + "folder": "objects", + "type": "Texture", + "sha1": "a1dccaa127823722d8b3d3046ca94ad0f1cf2af7" + }, + { + "filename": "dome_space_pink_3", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEPINK_3", + "folder": "objects", + "type": "Texture", + "sha1": "3cb026686cdab417807db15202a98006ee49a77d" + }, + { + "filename": "dome_space_pink_top", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESPACEPINKTOP", + "folder": "objects", + "type": "Texture", + "sha1": "765b04f265df47beef42a056b4fa782ae49c79a8" + }, + { + "filename": "white_wall_small_yellow_arrow", + "build-id": "ASSET_TEX3D_SPACE_WHITEWALLSMALLYELLOWARROW", + "folder": "space", + "type": "Texture", + "sha1": "da03f127e8e89da459d7d2aa1716e354c94cd0c3" + }, + { + "filename": "white_wall_vent", + "build-id": "ASSET_TEX3D_SPACE_WHITEWALLVENT", + "folder": "space", + "type": "Texture", + "sha1": "996f018e3dcf316bb5470f650f4e3e6bc27d802f" + }, + { + "filename": "pole", + "build-id": "ASSET_TEX3D_SPACE_POLE", + "folder": "space", + "type": "Texture", + "sha1": "2cfcd3ba6333f77223ff4e4cef3e4d3b6b267394" + }, + { + "filename": "building_edge", + "build-id": "ASSET_TEX3D_SPACE_BUILDINGEDGE", + "folder": "space", + "type": "Texture", + "sha1": "249e6ac7209578df23467d08341df8745bf6c196" + }, + { + "filename": "ancient_stone", + "build-id": "ASSET_TEX3D_DINO_ANCIENTSTONE", + "folder": "dino", + "type": "Texture", + "sha1": "2ff94c5a0952361a09dc9b3a622afbc14a2d4c07" + }, + { + "filename": "dome_orange_sky3_0", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEORANGESKY3_0", + "folder": "objects", + "type": "Texture", + "sha1": "c90f332bec9d820adb03866cfe5135e9df146c03" + }, + { + "filename": "dome_orange_sky3_1", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEORANGESKY3_1", + "folder": "objects", + "type": "Texture", + "sha1": "aca41a2bb468f973d51620066f6322c339661cdd" + }, + { + "filename": "dome_orange_sky3_2", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEORANGESKY3_2", + "folder": "objects", + "type": "Texture", + "sha1": "21cc21d64a4876010393498ffc89e00a085f0d27" + }, + { + "filename": "dome_orange_sky3_3", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEORANGESKY3_3", + "folder": "objects", + "type": "Texture", + "sha1": "c1671829e59876f7dab35d60e7abe240d11fbd91" + }, + { + "filename": "white_wall_blue_tanks", + "build-id": "ASSET_TEX3D_SPACE_WHITEWALLBLUETANKS", + "folder": "space", + "type": "Texture", + "sha1": "e8982a2e9775785b4646995e4bd58a40eabfde6d" + }, + { + "filename": "tree_trunks_woods_0", + "build-id": "ASSET_TEX3D_MEDIEVAL_TREETRUNKSWOODS_0", + "folder": "medieval", + "type": "Texture", + "sha1": "1d28ab454ec0e96bd99a4dc4175c810be5cf50f8" + }, + { + "filename": "tree_trunks_woods_1", + "build-id": "ASSET_TEX3D_MEDIEVAL_TREETRUNKSWOODS_1", + "folder": "medieval", + "type": "Texture", + "sha1": "0511e5b3e016b864ba8726eba1845e28fb277cf3" + }, + { + "filename": "tree_trunks_woods_2", + "build-id": "ASSET_TEX3D_MEDIEVAL_TREETRUNKSWOODS_2", + "folder": "medieval", + "type": "Texture", + "sha1": "71667fc6e1d9d11c6f09cdc25300926e1ea28ad9" + }, + { + "filename": "thatch_roofing2", + "build-id": "ASSET_TEX3D_MEDIEVAL_THATCHROOFING2", + "folder": "medieval", + "type": "Texture", + "sha1": "cd1375c0cb0e45a7abfd6317c068e854d47d8660" + }, + { + "filename": "village_door_round", + "build-id": "ASSET_TEX3D_MEDIEVAL_VILLAGEDOORROUND", + "folder": "medieval", + "type": "Texture", + "sha1": "7d4610ecf1e2966bbc69f30ce545ea1422477d74" + }, + { + "filename": "white_house_wall", + "build-id": "ASSET_TEX3D_MEDIEVAL_WHITEHOUSEWALL", + "folder": "medieval", + "type": "Texture", + "sha1": "bb4d06482494140734bd4d486f87dba700b94e63" + }, + { + "filename": "white_house_wall_window", + "build-id": "ASSET_TEX3D_MEDIEVAL_WHITEHOUSEWALLWINDOW", + "folder": "medieval", + "type": "Texture", + "sha1": "35635ac99d1f4a6efb9654a070a7625b7b0e0cc8" + }, + { + "filename": "uturn", + "build-id": "ASSET_TEX3D_UNUSED_UTURN", + "folder": "unused", + "type": "Texture", + "sha1": "69523ea3d64bddb4d38a97bdb9a1a61c154a49f9" + }, + { + "filename": "icy_waterfall", + "build-id": "ASSET_TEX3D_WINTER_ICYWATERFALL", + "folder": "winter", + "type": "Texture", + "sha1": "e8b0becd1426e7fbe36b97fb5d3730371bc685cc" + }, + { + "filename": "white_wall_screen", + "build-id": "ASSET_TEX3D_SPACE_WHITEWALLSCREEN", + "folder": "space", + "type": "Texture", + "sha1": "c3a66fdea9222eaf9fee273f37bd71a5014638f7" + }, + { + "filename": "silver_trophy_eye", + "build-id": "ASSET_TEX3D_OBJECTS_SILVERTROPHYEYE", + "folder": "objects", + "type": "Texture", + "sha1": "dcce2a360391d825b6a462f300740da60474bac5" + }, + { + "filename": "dome_blue_sky4_0", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY4_0", + "folder": "objects", + "type": "Texture", + "sha1": "4dd36ee69de53027c2612456205b8c190e78e1b3" + }, + { + "filename": "dome_blue_sky4_1", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY4_1", + "folder": "objects", + "type": "Texture", + "sha1": "831528804f201ec83491dfccc9d07f78cb7c57fa" + }, + { + "filename": "village_white_wall5", + "build-id": "ASSET_TEX3D_MEDIEVAL_VILLAGEWHITEWALL5", + "folder": "medieval", + "type": "Texture", + "sha1": "b1e04b49cce5db9bc08ee50b497297e022c61575" + }, + { + "filename": "white_wall_steel_cylinder", + "build-id": "ASSET_TEX3D_SPACE_WHITEWALLSTEELCYLINDER", + "folder": "space", + "type": "Texture", + "sha1": "eee9caacb8cf012a7f4f1c2914e39c0492713b59" + }, + { + "filename": "city_lights_yellow_white", + "build-id": "ASSET_TEX3D_SPACE_CITYLIGHTSYELLOWWHITE", + "folder": "space", + "type": "Texture", + "sha1": "71985afd015be52dda325a2e837d15d955ef9f1d" + }, + { + "filename": "beta_bumper_icon", + "build-id": "ASSET_TEX3D_UNUSED_BETABUMPERICON", + "folder": "unused", + "type": "Texture", + "sha1": "db2ad5bf0661e4e9b6c4a083491c2dd55c4bb144" + }, + { + "filename": "log_exposed_side2", + "build-id": "ASSET_TEX3D_COMMON_LOGEXPOSEDSIDE2", + "folder": "common", + "type": "Texture", + "sha1": "84279116ce1ab2fc99a833d585021c1dd34a5f01" + }, + { + "filename": "log_bark", + "build-id": "ASSET_TEX3D_COMMON_LOGBARK", + "folder": "common", + "type": "Texture", + "sha1": "19b7ffea0eec62be77d68f0668646e1360ec8a24" + }, + { + "filename": "log_bark2", + "build-id": "ASSET_TEX3D_COMMON_LOGBARK2", + "folder": "common", + "type": "Texture", + "sha1": "19b7ffea0eec62be77d68f0668646e1360ec8a24" + }, + { + "filename": "log_exposed_side3", + "build-id": "ASSET_TEX3D_COMMON_LOGEXPOSEDSIDE3", + "folder": "common", + "type": "Texture", + "sha1": "84279116ce1ab2fc99a833d585021c1dd34a5f01" + }, + { + "filename": "dome_coast_0", + "build-id": "ASSET_TEX3D_OBJECTS_DOMECOAST_0", + "folder": "objects", + "type": "Texture", + "sha1": "c39359ef327ad619548d611eddb98eeed155b78f" + }, + { + "filename": "dome_coast_1", + "build-id": "ASSET_TEX3D_OBJECTS_DOMECOAST_1", + "folder": "objects", + "type": "Texture", + "sha1": "276858cf714184c02037d841e8f62d0427a6fb72" + }, + { + "filename": "dome_coast_2", + "build-id": "ASSET_TEX3D_OBJECTS_DOMECOAST_2", + "folder": "objects", + "type": "Texture", + "sha1": "7d41bca8fbd82cd0985edc74e91200d88f1b44f6" + }, + { + "filename": "dome_coast_3", + "build-id": "ASSET_TEX3D_OBJECTS_DOMECOAST_3", + "folder": "objects", + "type": "Texture", + "sha1": "1da2fcbf702b421476d96579885857c9da1428db" + }, + { + "filename": "dome_coast_4", + "build-id": "ASSET_TEX3D_OBJECTS_DOMECOAST_4", + "folder": "objects", + "type": "Texture", + "sha1": "6270faea7df8c1fda87aabeb25fee4e37c642625" + }, + { + "filename": "dome_coast_5", + "build-id": "ASSET_TEX3D_OBJECTS_DOMECOAST_5", + "folder": "objects", + "type": "Texture", + "sha1": "7eb20972045d62a7983762766ce1ae5886ed6802" + }, + { + "filename": "dome_coast_6", + "build-id": "ASSET_TEX3D_OBJECTS_DOMECOAST_6", + "folder": "objects", + "type": "Texture", + "sha1": "03cee5816d1f84facc4d0d5c33b5a99ed3e9b3d7" + }, + { + "filename": "dome_coast_7", + "build-id": "ASSET_TEX3D_OBJECTS_DOMECOAST_7", + "folder": "objects", + "type": "Texture", + "sha1": "6080b2827b386115abc96187b1979c9133a833d5" + }, + { + "filename": "red_arrow_sign3", + "build-id": "ASSET_TEX3D_COMMON_REDARROWSIGN3", + "folder": "common", + "type": "Texture", + "sha1": "f3d98665f9346a06e1a70da2c1edc78c848b05f2" + }, + { + "filename": "red_spaceship", + "build-id": "ASSET_TEX3D_OBJECTS_REDSPACESHIP", + "folder": "objects", + "type": "Texture", + "sha1": "21969fa135ff562d5253712130088884f7fe3f16" + }, + { + "filename": "unknown_sign_texture", + "build-id": "ASSET_TEX3D_UNUSED_UNKNOWNSIGNTEXTURE", + "folder": "unused", + "type": "Texture", + "sha1": "6a3628fea3bf6a03eadd9162b03f2f2d826f5400" + }, + { + "filename": "arrow_neon_flashing", + "build-id": "ASSET_TEX3D_SPACE_ARROWNEONFLASHING", + "folder": "space", + "type": "Texture", + "sha1": "cc31f54f5a5ca132d78d12b4ddf053ffb6efc4f9" + }, + { + "filename": "pirateship_trim", + "build-id": "ASSET_TEX3D_TROPICAL_PIRATESHIPTRIM", + "folder": "tropical", + "type": "Texture", + "sha1": "41346f11cda6fe2453ab76c3be80b13a361929a8" + }, + { + "filename": "door_boss_top", + "build-id": "ASSET_TEX3D_OBJECTS_DOORBOSSTOP", + "folder": "objects", + "type": "Texture", + "sha1": "652f767660c1839b6dea6c6e6fbadc5c427db91b" + }, + { + "filename": "door_boss_bottom", + "build-id": "ASSET_TEX3D_OBJECTS_DOORBOSSBOTTOM", + "folder": "objects", + "type": "Texture", + "sha1": "aa37223d72d353df8ee375a3d1c5c07c982826cd" + }, + { + "filename": "door_boss_wizpig_deco", + "build-id": "ASSET_TEX3D_OBJECTS_DOORBOSSWIZPIGDECO", + "folder": "objects", + "type": "Texture", + "sha1": "54fe60971a27d3159d817ef0db9719a676bd70d7" + }, + { + "filename": "water_frozen", + "build-id": "ASSET_TEX3D_WINTER_WATERFROZEN", + "folder": "winter", + "type": "Texture", + "sha1": "3c8ba85842e3eb896b6d82a5a2283e5991bb90bd" + }, + { + "filename": "bronze_trophy_envmap", + "build-id": "ASSET_TEX3D_OBJECTS_BRONZETROPHYENVMAP", + "folder": "objects", + "type": "Texture", + "sha1": "b00bad9625aaa0e4c6d7447875449465d3329686" + }, + { + "filename": "brown_stone", + "build-id": "ASSET_TEX3D_COMMON_BROWNSTONE", + "folder": "common", + "type": "Texture", + "sha1": "a5918a98daa7657c3cd11da24ac11eaa40b1ff88" + }, + { + "filename": "magic_carpet_middle", + "build-id": "ASSET_TEX3D_OBJECTS_MAGICCARPETMIDDLE", + "folder": "objects", + "type": "Texture", + "sha1": "aba7bee46d712672adc535e823eebfd150ac3c62" + }, + { + "filename": "magic_carpet_edge", + "build-id": "ASSET_TEX3D_OBJECTS_MAGICCARPETEDGE", + "folder": "objects", + "type": "Texture", + "sha1": "77330804d9bcafbdf1c3a2d71be42b9208cbdfb5" + }, + { + "filename": "rareware_logo_gold", + "build-id": "ASSET_TEX3D_OBJECTS_RAREWARELOGOGOLD", + "folder": "objects", + "type": "Texture", + "sha1": "6305cb5c96cad26b1b40796b1093fbe7bb1e4ea8" + }, + { + "filename": "beta_tt_door_top", + "build-id": "ASSET_TEX3D_UNUSED_BETATTDOORTOP", + "folder": "unused", + "type": "Texture", + "sha1": "033715b08d3110c02deb9b71a55bbe9da09dd23f" + }, + { + "filename": "beta_tt_door_botton", + "build-id": "ASSET_TEX3D_UNUSED_BETATTDOORBOTTON", + "folder": "unused", + "type": "Texture", + "sha1": "d2d81a95945cd977d2df41d28067e04315fac7de" + }, + { + "filename": "checkpoint", + "build-id": "ASSET_TEX3D_OBJECTS_CHECKPOINT", + "folder": "objects", + "type": "Texture", + "sha1": "e5b9c9aac61dfc23199edd69b783da819748d4ff" + }, + { + "filename": "beta_drumstick_icon", + "build-id": "ASSET_TEX3D_UNUSED_BETADRUMSTICKICON", + "folder": "unused", + "type": "Texture", + "sha1": "bc2fcda4dd2eb2ff9a1a86f9044e5d3e13931b75" + }, + { + "filename": "dome_sun", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESUN", + "folder": "objects", + "type": "Texture", + "sha1": "127e205a735a25e9306743625f3e6ee3d1b6b27a" + }, + { + "filename": "n64_logo_blue", + "build-id": "ASSET_TEX3D_OBJECTS_N64LOGOBLUE", + "folder": "objects", + "type": "Texture", + "sha1": "6f773909a56fffc588b80b0e26a044360c81cc06" + }, + { + "filename": "orange_wood", + "build-id": "ASSET_TEX3D_COMMON_ORANGEWOOD", + "folder": "common", + "type": "Texture", + "sha1": "5fc8cbb8be7e90d6d740cf410bb4081c561e198a" + }, + { + "filename": "n64_logo_green", + "build-id": "ASSET_TEX3D_OBJECTS_N64LOGOGREEN", + "folder": "objects", + "type": "Texture", + "sha1": "c0adf2642c395d23b603645054e5e556030011be" + }, + { + "filename": "seamonster_eye", + "build-id": "ASSET_TEX3D_OBJECTS_SEAMONSTEREYE", + "folder": "objects", + "type": "Texture", + "sha1": "25c9b6c0bbc1b5a64b4b1ee652c5332bd5ad6372" + }, + { + "filename": "seamonster_unknown", + "build-id": "ASSET_TEX3D_UNUSED_SEAMONSTERUNKNOWN", + "folder": "unused", + "type": "Texture", + "sha1": "efe9f626b66abfc463172c288d052c95ce7c6049" + }, + { + "filename": "yellow_dinosaur_underside", + "build-id": "ASSET_TEX3D_OBJECTS_YELLOWDINOSAURUNDERSIDE", + "folder": "objects", + "type": "Texture", + "sha1": "0325883129d817f5407690d4714aee8a7a24a41c" + }, + { + "filename": "seamonster_underside", + "build-id": "ASSET_TEX3D_OBJECTS_SEAMONSTERUNDERSIDE", + "folder": "objects", + "type": "Texture", + "sha1": "1b51adbb67ab334a1ad2ad76aa55558d668b22f8" + }, + { + "filename": "seamonster_head_bottom", + "build-id": "ASSET_TEX3D_OBJECTS_SEAMONSTERHEADBOTTOM", + "folder": "objects", + "type": "Texture", + "sha1": "990fd002523b50138a68e285d3ea58dfa841702c" + }, + { + "filename": "seamonster_cheek", + "build-id": "ASSET_TEX3D_OBJECTS_SEAMONSTERCHEEK", + "folder": "objects", + "type": "Texture", + "sha1": "4b2af723a3fb246ae83636316d0ec6f64d1b80e7" + }, + { + "filename": "yellow_dinosaur_cheek", + "build-id": "ASSET_TEX3D_OBJECTS_YELLOWDINOSAURCHEEK", + "folder": "objects", + "type": "Texture", + "sha1": "19b5cfa2f2c1215334526c5afd529b7473cc6a21" + }, + { + "filename": "seamonster_nose", + "build-id": "ASSET_TEX3D_OBJECTS_SEAMONSTERNOSE", + "folder": "objects", + "type": "Texture", + "sha1": "7d0dd41cab85ac9fdd5e371ff8232e3061c19e7b" + }, + { + "filename": "seamonster_head_top", + "build-id": "ASSET_TEX3D_OBJECTS_SEAMONSTERHEADTOP", + "folder": "objects", + "type": "Texture", + "sha1": "b520c2c6e3993f72b0f127c112d9336f5b1b8316" + }, + { + "filename": "yellow_dinosaur_mouth", + "build-id": "ASSET_TEX3D_OBJECTS_YELLOWDINOSAURMOUTH", + "folder": "objects", + "type": "Texture", + "sha1": "80f4a2856bbc68ab187d39ae29759d3a9631a9f9" + }, + { + "filename": "yellow_dinosaur_eyebrows", + "build-id": "ASSET_TEX3D_OBJECTS_YELLOWDINOSAUREYEBROWS", + "folder": "objects", + "type": "Texture", + "sha1": "daf4c0ac20b0cfd1e3a52b40a6503cb6b5ca853c" + }, + { + "filename": "smokey_ears", + "build-id": "ASSET_TEX3D_OBJECTS_SMOKEYEARS", + "folder": "objects", + "type": "Texture", + "sha1": "a5e39bb39c62ae31acdaf58871f53fb891d1bd56" + }, + { + "filename": "smokey_nose", + "build-id": "ASSET_TEX3D_OBJECTS_SMOKEYNOSE", + "folder": "objects", + "type": "Texture", + "sha1": "3df6dc72899090e0ea03548035ac17737215bbbd" + }, + { + "filename": "smokey_head_top", + "build-id": "ASSET_TEX3D_OBJECTS_SMOKEYHEADTOP", + "folder": "objects", + "type": "Texture", + "sha1": "f650fa79076cbaf460d23f344dbf369f7124279e" + }, + { + "filename": "n64_logo_red", + "build-id": "ASSET_TEX3D_OBJECTS_N64LOGORED", + "folder": "objects", + "type": "Texture", + "sha1": "3801588440cfe6ea218a0d8c6628d7555ca01d9a" + }, + { + "filename": "blue_stone_floor", + "build-id": "ASSET_TEX3D_SPACE_BLUESTONEFLOOR", + "folder": "space", + "type": "Texture", + "sha1": "6bb9a2e134848dfffa600abb7c2f428be96a0c09" + }, + { + "filename": "exit_sign_small", + "build-id": "ASSET_TEX3D_OBJECTS_EXITSIGNSMALL", + "folder": "objects", + "type": "Texture", + "sha1": "cb9e756b991cb86d1c238ee4722e61e10afc435d" + }, + { + "filename": "exit_sign", + "build-id": "ASSET_TEX3D_OBJECTS_EXITSIGN", + "folder": "objects", + "type": "Texture", + "sha1": "26367d824f860b4c61aa5e5ad6c1aad96127e571" + }, + { + "filename": "wood_guardrail", + "build-id": "ASSET_TEX3D_TROPICAL_WOODGUARDRAIL", + "folder": "tropical", + "type": "Texture", + "sha1": "25dc44020c6b5650438db9d1cfa14d13bfe63ea9" + }, + { + "filename": "icy_pink_wall_snowy", + "build-id": "ASSET_TEX3D_WINTER_ICYPINKWALLSNOWY", + "folder": "winter", + "type": "Texture", + "sha1": "2af17323cf537f9bc1246e1c8ccc7dbcf3aa3592" + }, + { + "filename": "fog2", + "build-id": "ASSET_TEX3D_TROPICAL_FOG2", + "folder": "tropical", + "type": "Texture", + "sha1": "8ba4a4ecdd6341cadfa532896b8adbd62b158c23" + }, + { + "filename": "dome_yellow_sky_0", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEYELLOWSKY_0", + "folder": "objects", + "type": "Texture", + "sha1": "a195c74e55792ee352af4abc31d9626c4a2ad9b5" + }, + { + "filename": "dome_yellow_sky_1", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEYELLOWSKY_1", + "folder": "objects", + "type": "Texture", + "sha1": "eb1427bdcb599107d6665301a84ad02cef268ed9" + }, + { + "filename": "dome_yellow_sky_2", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEYELLOWSKY_2", + "folder": "objects", + "type": "Texture", + "sha1": "472c38ee2023abf5b4bda2c131a08d4b46349fcf" + }, + { + "filename": "dome_yellow_sky_3", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEYELLOWSKY_3", + "folder": "objects", + "type": "Texture", + "sha1": "020ce669daedb0e6088055acbf04f3e0403f40db" + }, + { + "filename": "dinosaur_tracks", + "build-id": "ASSET_TEX3D_DINO_DINOSAURTRACKS", + "folder": "dino", + "type": "Texture", + "sha1": "2364016885d178c049d02db1f805332137bd2ced" + }, + { + "filename": "sand_path_grassy", + "build-id": "ASSET_TEX3D_TROPICAL_SANDPATHGRASSY", + "folder": "tropical", + "type": "Texture", + "sha1": "422eb12d9dca225c8dbd06c4478fe1f165780177" + }, + { + "filename": "village_house_wall", + "build-id": "ASSET_TEX3D_WINTER_VILLAGEHOUSEWALL", + "folder": "winter", + "type": "Texture", + "sha1": "44b06a1a84284f5eb30c2972f81aa66f3dee0a3d" + }, + { + "filename": "gold_trophy_sleave", + "build-id": "ASSET_TEX3D_OBJECTS_GOLDTROPHYSLEAVE", + "folder": "objects", + "type": "Texture", + "sha1": "fadf8ec1a28d45fdff35a8021448a98b3b1d7679" + }, + { + "filename": "gold_silver_trophy_mouth", + "build-id": "ASSET_TEX3D_OBJECTS_GOLDSILVERTROPHYMOUTH", + "folder": "objects", + "type": "Texture", + "sha1": "03bc32a27ddafa29f44d22591a2cbdcae5198644" + }, + { + "filename": "lighthouse_brick_dark", + "build-id": "ASSET_TEX3D_OBJECTS_LIGHTHOUSEBRICKDARK", + "folder": "objects", + "type": "Texture", + "sha1": "37e3882221b67a3d40e1af876c02419534f801fd" + }, + { + "filename": "lighthouse_brick", + "build-id": "ASSET_TEX3D_OBJECTS_LIGHTHOUSEBRICK", + "folder": "objects", + "type": "Texture", + "sha1": "035a4f0e1f92b3e10c03dc7bb9d690286854ede8" + }, + { + "filename": "dome_planets_0", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEPLANETS_0", + "folder": "objects", + "type": "Texture", + "sha1": "6a9dc3ab7a7de6b3497314a57b3d5aac538e4937" + }, + { + "filename": "dome_planets_1", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEPLANETS_1", + "folder": "objects", + "type": "Texture", + "sha1": "0940002e515c4a8d172544c9824a8f996d8107a6" + }, + { + "filename": "dome_planets_2", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEPLANETS_2", + "folder": "objects", + "type": "Texture", + "sha1": "7c9270654fdd3c262f86716af206cc7f8a3aedc6" + }, + { + "filename": "dome_planets_3", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEPLANETS_3", + "folder": "objects", + "type": "Texture", + "sha1": "18e2cf2696270b0a68903fbf77c990cc104668a8" + }, + { + "filename": "dome_planets_4", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEPLANETS_4", + "folder": "objects", + "type": "Texture", + "sha1": "f323fe89dab001d9d89697221c924506ce053f3d" + }, + { + "filename": "dome_planets_5", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEPLANETS_5", + "folder": "objects", + "type": "Texture", + "sha1": "e7db2bb2f1c1633eaa78b56168f6fc5bd005946d" + }, + { + "filename": "dome_planets_6", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEPLANETS_6", + "folder": "objects", + "type": "Texture", + "sha1": "d8a99c9138e0b55b58fa0780476df256594e9052" + }, + { + "filename": "dome_sky_gradient", + "build-id": "ASSET_TEX3D_OBJECTS_DOMESKYGRADIENT", + "folder": "objects", + "type": "Texture", + "sha1": "fa70854729039712af5d782f6977dfda83e9ecb8" + }, + { + "filename": "gold_gradient_dark", + "build-id": "ASSET_TEX3D_OBJECTS_GOLDGRADIENTDARK", + "folder": "objects", + "type": "Texture", + "sha1": "f752899742c45fba2070485c44e168055c8662ab" + }, + { + "filename": "gold_gradient", + "build-id": "ASSET_TEX3D_OBJECTS_GOLDGRADIENT", + "folder": "objects", + "type": "Texture", + "sha1": "181eac5387c18223294ad244615204ed48178c42" + }, + { + "filename": "gold_trophy_sign", + "build-id": "ASSET_TEX3D_OBJECTS_GOLDTROPHYSIGN", + "folder": "objects", + "type": "Texture", + "sha1": "582975b77a43165a151e9263e9ec9edd7e808f2e" + }, + { + "filename": "grass_charselect", + "build-id": "ASSET_TEX3D_COMMON_GRASSCHARSELECT", + "folder": "common", + "type": "Texture", + "sha1": "941a4545076fa8eb08fac01584719440c88c5248" + }, + { + "filename": "dome_green_bottom", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEGREENBOTTOM", + "folder": "objects", + "type": "Texture", + "sha1": "787884e5a8c0bc6c2703396cc39afbf96a657c77" + }, + { + "filename": "spaceship_14", + "build-id": "ASSET_TEX3D_OBJECTS_SPACESHIP14", + "folder": "objects", + "type": "Texture", + "sha1": "533409a2b069ed334aef0393e06cef3e674c0526" + }, + { + "filename": "small_green_lights", + "build-id": "ASSET_TEX3D_SPACE_SMALLGREENLIGHTS", + "folder": "space", + "type": "Texture", + "sha1": "287e96577a992b59d22807fba017c54dd77422bf" + }, + { + "filename": "hanging_moss4", + "build-id": "ASSET_TEX3D_COMMON_HANGINGMOSS4", + "folder": "common", + "type": "Texture", + "sha1": "1aebd7114dcae88d4460f5222ca8505e15b0ad25" + }, + { + "filename": "space_pole_green", + "build-id": "ASSET_TEX3D_SPACE_SPACEPOLEGREEN", + "folder": "space", + "type": "Texture", + "sha1": "ffce89f77a1ff4d289d0ce9f9fbd5ddef72df867" + }, + { + "filename": "green_wall_module", + "build-id": "ASSET_TEX3D_SPACE_GREENWALLMODULE", + "folder": "space", + "type": "Texture", + "sha1": "036c8c94da3012f2c4a5c5e07a29d40e0359f548" + }, + { + "filename": "spaceship2_side", + "build-id": "ASSET_TEX3D_OBJECTS_SPACESHIP2SIDE", + "folder": "objects", + "type": "Texture", + "sha1": "f3807b6cd555729fd2389b983145f30230fa44ea" + }, + { + "filename": "spaceship2_connector", + "build-id": "ASSET_TEX3D_OBJECTS_SPACESHIP2CONNECTOR", + "folder": "objects", + "type": "Texture", + "sha1": "47bc3cfb3b70e09dfcfee31259991370630481d1" + }, + { + "filename": "red_wall_green_screen", + "build-id": "ASSET_TEX3D_SPACE_REDWALLGREENSCREEN", + "folder": "space", + "type": "Texture", + "sha1": "d0cc4b6bd44866ffad0f348fc063131d79cae939" + }, + { + "filename": "spaceship2_small_lights", + "build-id": "ASSET_TEX3D_OBJECTS_SPACESHIP2SMALLLIGHTS", + "folder": "objects", + "type": "Texture", + "sha1": "287e96577a992b59d22807fba017c54dd77422bf" + }, + { + "filename": "spaceship2_14", + "build-id": "ASSET_TEX3D_OBJECTS_SPACESHIP214", + "folder": "objects", + "type": "Texture", + "sha1": "1b4c114a3ee118ccdebf53f67830492767754d97" + }, + { + "filename": "grey_stone", + "build-id": "ASSET_TEX3D_COMMON_GREYSTONE", + "folder": "common", + "type": "Texture", + "sha1": "5deb79610cb5fa62edde5cbe7c2c125af1724b10" + }, + { + "filename": "coloured_stone", + "build-id": "ASSET_TEX3D_SPACE_COLOUREDSTONE", + "folder": "space", + "type": "Texture", + "sha1": "04a53dc1312fe983a12f2ef29ec14969b6fb5558" + }, + { + "filename": "grey_pavement", + "build-id": "ASSET_TEX3D_COMMON_GREYPAVEMENT", + "folder": "common", + "type": "Texture", + "sha1": "547e5d0cb3732c7c92fed278509c091ac2118499" + }, + { + "filename": "dome_unused", + "build-id": "ASSET_TEX3D_UNUSED_DOMEUNUSED", + "folder": "unused", + "type": "Texture", + "sha1": "1a963b0e75192034257bcf27f5e7492f3cc351a3" + }, + { + "filename": "beta_air_zipper", + "build-id": "ASSET_TEX3D_UNUSED_BETAAIRZIPPER", + "folder": "unused", + "type": "Texture", + "sha1": "983fea9bb16009e32f1158520ce6f4ff7e4d35a5" + }, + { + "filename": "sign_100", + "build-id": "ASSET_TEX3D_UNUSED_SIGN100", + "folder": "unused", + "type": "Texture", + "sha1": "d011b7d90ed6ad3ee699530566a074463adc50f6" + }, + { + "filename": "snow_wall_small", + "build-id": "ASSET_TEX3D_WINTER_SNOWWALLSMALL", + "folder": "winter", + "type": "Texture", + "sha1": "0dcf3a7aad817464d841ce1428e1ea6e8ce93603" + }, + { + "filename": "snow_wall_large", + "build-id": "ASSET_TEX3D_WINTER_SNOWWALLLARGE", + "folder": "winter", + "type": "Texture", + "sha1": "9e551567a877c80869e52200aaefafd4c5d39292" + }, + { + "filename": "unknown_decal", + "build-id": "ASSET_TEX3D_UNUSED_UNKNOWNDECAL", + "folder": "unused", + "type": "Texture", + "sha1": "7cc4cf962ba865a222c59cff5dbe34e00c85a931" + }, + { + "filename": "unknown_green_dots", + "build-id": "ASSET_TEX3D_UNUSED_UNKNOWNGREENDOTS", + "folder": "unused", + "type": "Texture", + "sha1": "0b0f3f7b20feb136366b9dc717c4ac8aa9917ad7" + }, + { + "filename": "dome_grassy_hills", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEGRASSYHILLS", + "folder": "objects", + "type": "Texture", + "sha1": "c2c52e93ec3436e914b006ff7b1b147d1d34cdd9" + }, + { + "filename": "dome_grass", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEGRASS", + "folder": "objects", + "type": "Texture", + "sha1": "95317d601b0cc8c6b546a097b9c10a0b4b1742fc" + }, + { + "filename": "beta_krunch_icon", + "build-id": "ASSET_TEX3D_UNUSED_BETAKRUNCHICON", + "folder": "unused", + "type": "Texture", + "sha1": "f5baaef62e47e93d90dbd75feb518707080641eb" + }, + { + "filename": "door_level_bottom", + "build-id": "ASSET_TEX3D_OBJECTS_DOORLEVELBOTTOM", + "folder": "objects", + "type": "Texture", + "sha1": "d7d4744d8b50162dfa78128171bd8a3da1d8f605" + }, + { + "filename": "door_level_top", + "build-id": "ASSET_TEX3D_OBJECTS_DOORLEVELTOP", + "folder": "objects", + "type": "Texture", + "sha1": "a957cdca4b6c385589cd8c2431e1e3947a04d67d" + }, + { + "filename": "door_level_top_done", + "build-id": "ASSET_TEX3D_OBJECTS_DOORLEVELTOPDONE", + "folder": "objects", + "type": "Texture", + "sha1": "3308f7a305d416ca2e8076a1d12ebbcc79e38ef8" + }, + { + "filename": "door_level_top_unused", + "build-id": "ASSET_TEX3D_UNUSED_DOORLEVELTOPUNUSED", + "folder": "unused", + "type": "Texture", + "sha1": "5b2ef9f655c4a8dd2e04d51bc4c97a21b41cd9ec" + }, + { + "filename": "door_level_bottom_done", + "build-id": "ASSET_TEX3D_OBJECTS_DOORLEVELBOTTOMDONE", + "folder": "objects", + "type": "Texture", + "sha1": "c08086d9595519115922ca4ae590d704b8134adc" + }, + { + "filename": "door_level_bottom_unused", + "build-id": "ASSET_TEX3D_UNUSED_DOORLEVELBOTTOMUNUSED", + "folder": "unused", + "type": "Texture", + "sha1": "41cfdd76a6a4285b467ea5d127eff2dc6834861b" + }, + { + "filename": "door_level_bottom_unused_qmark", + "build-id": "ASSET_TEX3D_UNUSED_DOORLEVELBOTTOMUNUSEDQMARK", + "folder": "unused", + "type": "Texture", + "sha1": "47d4fa231d1dc41153ab826718e8b791d941d8bc" + }, + { + "filename": "door_numbers_ones_digit", + "build-id": "ASSET_TEX3D_OBJECTS_DOORNUMBERSONESDIGIT", + "folder": "objects", + "type": "Texture", + "sha1": "99c87e935fe99cac004a43dc2471019861dd548c" + }, + { + "filename": "door_numbers_tens_digit", + "build-id": "ASSET_TEX3D_OBJECTS_DOORNUMBERSTENSDIGIT", + "folder": "objects", + "type": "Texture", + "sha1": "09bfcb647f345219cc978500e9bf930dfc332400" + }, + { + "filename": "spaceship2_front", + "build-id": "ASSET_TEX3D_OBJECTS_SPACESHIP2FRONT", + "folder": "objects", + "type": "Texture", + "sha1": "a2824af6b8639e73417791c9ef28db8462b86030" + }, + { + "filename": "lighthouse_door", + "build-id": "ASSET_TEX3D_OBJECTS_LIGHTHOUSEDOOR", + "folder": "objects", + "type": "Texture", + "sha1": "6e90abb42043880ecaddec7535b87f89beaba787" + }, + { + "filename": "lighthouse_brick2", + "build-id": "ASSET_TEX3D_OBJECTS_LIGHTHOUSEBRICK2", + "folder": "objects", + "type": "Texture", + "sha1": "2913fe2fad3d1b883519d73f0cc959786a00cd5c" + }, + { + "filename": "lighthouse_beacon_bottom", + "build-id": "ASSET_TEX3D_OBJECTS_LIGHTHOUSEBEACONBOTTOM", + "folder": "objects", + "type": "Texture", + "sha1": "4816235d6399eea065f874db1c539de1fc90090e" + }, + { + "filename": "lighthouse_rocket_wings", + "build-id": "ASSET_TEX3D_OBJECTS_LIGHTHOUSEROCKETWINGS", + "folder": "objects", + "type": "Texture", + "sha1": "f304ee006686615c24a14f1478df319276cde5fe" + }, + { + "filename": "lighthouse_window", + "build-id": "ASSET_TEX3D_OBJECTS_LIGHTHOUSEWINDOW", + "folder": "objects", + "type": "Texture", + "sha1": "5a53e4ea523f1d8da98f2a9a573fbe0b73e49dc2" + }, + { + "filename": "electricity_animated", + "build-id": "ASSET_TEX3D_COMMON_ELECTRICITYANIMATED", + "folder": "common", + "type": "Texture", + "sha1": "803a818303bc791dbd0b46a511ae69fde5a0ba9c" + }, + { + "filename": "lighthouse_glass_window", + "build-id": "ASSET_TEX3D_OBJECTS_LIGHTHOUSEGLASSWINDOW", + "folder": "objects", + "type": "Texture", + "sha1": "94ceb37614c51273ec9d8d1be0e670544cd51c5c" + }, + { + "filename": "glass_window2", + "build-id": "ASSET_TEX3D_SPACE_GLASSWINDOW2", + "folder": "space", + "type": "Texture", + "sha1": "9542e073ecb6d28d4ca4c4b96dacc90b5b7ad17c" + }, + { + "filename": "log_end", + "build-id": "ASSET_TEX3D_OBJECTS_LOGEND", + "folder": "objects", + "type": "Texture", + "sha1": "44a2199cbab828f2e5d43be4f1b26b4fd2deca42" + }, + { + "filename": "loop_guardrail", + "build-id": "ASSET_TEX3D_SPACE_LOOPGUARDRAIL", + "folder": "space", + "type": "Texture", + "sha1": "6428465b8e6b88c77043614816fe567acc98b371" + }, + { + "filename": "midi_fade", + "build-id": "ASSET_TEX3D_OBJECTS_MIDIFADE", + "folder": "objects", + "type": "Texture", + "sha1": "bd5e022aa4510d5adfdf45f3cdb0bde9b3b8cdf8" + }, + { + "filename": "missle_body", + "build-id": "ASSET_TEX3D_OBJECTS_MISSLEBODY", + "folder": "objects", + "type": "Texture", + "sha1": "17a1851aa2ad0989ec4db61f55baf5cc58af4fd6" + }, + { + "filename": "missle_back", + "build-id": "ASSET_TEX3D_OBJECTS_MISSLEBACK", + "folder": "objects", + "type": "Texture", + "sha1": "c79eaddcaaeac8a6fe7619195f7a8bfb06c013d3" + }, + { + "filename": "mode2", + "build-id": "ASSET_TEX3D_UNUSED_MODE2", + "folder": "unused", + "type": "Texture", + "sha1": "1e01b41a574fce48a59dc430fce14385d5398612" + }, + { + "filename": "monorail_front", + "build-id": "ASSET_TEX3D_OBJECTS_MONORAILFRONT", + "folder": "objects", + "type": "Texture", + "sha1": "657689852fa609711cbedeea08b11ebe593c43fb" + }, + { + "filename": "monorail_rail_skirt", + "build-id": "ASSET_TEX3D_OBJECTS_MONORAILRAILSKIRT", + "folder": "objects", + "type": "Texture", + "sha1": "12f3c69fec5d34242f25e6628d6832e8527bfc28" + }, + { + "filename": "monorail_front_top", + "build-id": "ASSET_TEX3D_OBJECTS_MONORAILFRONTTOP", + "folder": "objects", + "type": "Texture", + "sha1": "794c3845d14faa0ac167b1cd10fa0739999930cc" + }, + { + "filename": "beta_pipsy_icon", + "build-id": "ASSET_TEX3D_UNUSED_BETAPIPSYICON", + "folder": "unused", + "type": "Texture", + "sha1": "25888246b5c3036226fb1c4c8792df34c57f70e5" + }, + { + "filename": "old_forest_tree_bark", + "build-id": "ASSET_TEX3D_UNUSED_OLDFORESTTREEBARK", + "folder": "unused", + "type": "Texture", + "sha1": "2ef3e1ab7c8ee15468b0b060f67baf4fa2bc3bda" + }, + { + "filename": "dome_blue_top", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUETOP", + "folder": "objects", + "type": "Texture", + "sha1": "967025b7c398138ccf5ddbca05d6886d5e3c4113" + }, + { + "filename": "ice_tunnel_ceiling", + "build-id": "ASSET_TEX3D_WINTER_ICETUNNELCEILING", + "folder": "winter", + "type": "Texture", + "sha1": "8e001d0fb5267c29d5e8eee9941b491046fe68b5" + }, + { + "filename": "dome_green_unknown", + "build-id": "ASSET_TEX3D_UNUSED_DOMEGREENUNKNOWN", + "folder": "unused", + "type": "Texture", + "sha1": "ece7c407031059c6ddbd2d35d118ece61e4740ad" + }, + { + "filename": "trophy_sign_qmark", + "build-id": "ASSET_TEX3D_OBJECTS_TROPHYSIGNQMARK", + "folder": "objects", + "type": "Texture", + "sha1": "2158f86f4a781950789440c9c41bb2166fa0e78c" + }, + { + "filename": "bubbler_head", + "build-id": "ASSET_TEX3D_OBJECTS_BUBBLERHEAD", + "folder": "objects", + "type": "Texture", + "sha1": "c3b10936313f387ad411c9ae9befe574a119cb3d" + }, + { + "filename": "bubbler_underside", + "build-id": "ASSET_TEX3D_OBJECTS_BUBBLERUNDERSIDE", + "folder": "objects", + "type": "Texture", + "sha1": "60aeb5c9846c0334e190e59096a88a8ec3dedbde" + }, + { + "filename": "orange_stone3", + "build-id": "ASSET_TEX3D_DINO_ORANGESTONE3", + "folder": "dino", + "type": "Texture", + "sha1": "9d35fe44b3358499c08806c75aead67e16c7f1f8" + }, + { + "filename": "palm_tree_leaves2", + "build-id": "ASSET_TEX3D_TROPICAL_PALMTREELEAVES2", + "folder": "tropical", + "type": "Texture", + "sha1": "af701c785cee54e857e70edb272e93866a4d7e2e" + }, + { + "filename": "palm_tree_barkbrown2", + "build-id": "ASSET_TEX3D_TROPICAL_PALMTREEBARKBROWN2", + "folder": "tropical", + "type": "Texture", + "sha1": "30966069bdcacc0496c5ece37862331b89f8f022" + }, + { + "filename": "palm_tree_shadow2", + "build-id": "ASSET_TEX3D_TROPICAL_PALMTREESHADOW2", + "folder": "tropical", + "type": "Texture", + "sha1": "3c31b9b92c98dc9253ac29505167d5893263d8ab" + }, + { + "filename": "paper_center", + "build-id": "ASSET_TEX3D_UNUSED_PAPERCENTER", + "folder": "unused", + "type": "Texture", + "sha1": "849d8525083f86eab2594cdce22343f06d331073" + }, + { + "filename": "paper_edge", + "build-id": "ASSET_TEX3D_UNUSED_PAPEREDGE", + "folder": "unused", + "type": "Texture", + "sha1": "8b9c6b76dd318290efef2acd62c9d1a922eac663" + }, + { + "filename": "seamonster_spine", + "build-id": "ASSET_TEX3D_OBJECTS_SEAMONSTERSPINE", + "folder": "objects", + "type": "Texture", + "sha1": "1bf2a60215c60fee706874949f1e181ce146a08c" + }, + { + "filename": "door_wizpig_0", + "build-id": "ASSET_TEX3D_OBJECTS_DOORWIZPIG_0", + "folder": "objects", + "type": "Texture", + "sha1": "305ba14881f7b86056aad411453dcd516538e093" + }, + { + "filename": "door_wizpig_1", + "build-id": "ASSET_TEX3D_OBJECTS_DOORWIZPIG_1", + "folder": "objects", + "type": "Texture", + "sha1": "a015cfdaba41ca55c521c7dcc9905e7637690939" + }, + { + "filename": "door_wizpig_2", + "build-id": "ASSET_TEX3D_OBJECTS_DOORWIZPIG_2", + "folder": "objects", + "type": "Texture", + "sha1": "0b0567f9dbd0b7ee62a02306bc7e0f34f293766a" + }, + { + "filename": "door_wizpig_3", + "build-id": "ASSET_TEX3D_OBJECTS_DOORWIZPIG_3", + "folder": "objects", + "type": "Texture", + "sha1": "d2865b5d0553d8cb3cd15701edd707dd66aaffa2" + }, + { + "filename": "sepia_stone", + "build-id": "ASSET_TEX3D_COMMON_SEPIASTONE", + "folder": "common", + "type": "Texture", + "sha1": "fb893956b7610f08e4a4dcde2d3ed433e43a96d1" + }, + { + "filename": "water_frozen2", + "build-id": "ASSET_TEX3D_WINTER_WATERFROZEN2", + "folder": "winter", + "type": "Texture", + "sha1": "057dcdf91d548081490d0e238c212a458bdbd472" + }, + { + "filename": "gold_trophy_eye", + "build-id": "ASSET_TEX3D_OBJECTS_GOLDTROPHYEYE", + "folder": "objects", + "type": "Texture", + "sha1": "d6ac989f058f62681e22857693fce2f67917eab9" + }, + { + "filename": "wizpig_mountain_eye", + "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGMOUNTAINEYE", + "folder": "objects", + "type": "Texture", + "sha1": "d46c547caace06462cad21d49d254658d4d86d6f" + }, + { + "filename": "wizpig_mountain_nose", + "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGMOUNTAINNOSE", + "folder": "objects", + "type": "Texture", + "sha1": "13d576a12a970c053a2cbe6710042ff2c98b31c1" + }, + { + "filename": "gold_trophy_nose", + "build-id": "ASSET_TEX3D_OBJECTS_GOLDTROPHYNOSE", + "folder": "objects", + "type": "Texture", + "sha1": "a076d89ecf6e85bb6dab634aa1c8152cde435300" + }, + { + "filename": "proam64_balloon_logo", + "build-id": "ASSET_TEX3D_UNUSED_PROAM64BALLOONLOGO", + "folder": "unused", + "type": "Texture", + "sha1": "a5f6faf8605744fa07184fcf0af1597c62374704" + }, + { + "filename": "rainbow", + "build-id": "ASSET_TEX3D_COMMON_RAINBOW", + "folder": "common", + "type": "Texture", + "sha1": "f8ede13d0d14fdf3fc7b5d9e677a555e3cd8cc43" + }, + { + "filename": "blue_dark", + "build-id": "ASSET_TEX3D_COMMON_BLUEDARK", + "folder": "common", + "type": "Texture", + "sha1": "1cd9f413effe44d3a3aa1896dacad27686cdaffd" + }, + { + "filename": "rare_logo_gray", + "build-id": "ASSET_TEX3D_COMMON_RARELOGOGRAY", + "folder": "common", + "type": "Texture", + "sha1": "8f42b80beb021e869177195d18a77b78f42aa7f4" + }, + { + "filename": "rare_logo_gold", + "build-id": "ASSET_TEX3D_COMMON_RARELOGOGOLD", + "folder": "common", + "type": "Texture", + "sha1": "04b77628e85d015be643ad5c1b579ae56d302cf3" + }, + { + "filename": "rareware", + "build-id": "ASSET_TEX3D_OBJECTS_RAREWARE", + "folder": "objects", + "type": "Texture", + "sha1": "4afe20743be5767d6dd1761879a81f95552617eb" + }, + { + "filename": "spaceship_5", + "build-id": "ASSET_TEX3D_OBJECTS_SPACESHIP5", + "folder": "objects", + "type": "Texture", + "sha1": "1b1add3739c632e54f76157b3663b4ff3df7383a" + }, + { + "filename": "red_path", + "build-id": "ASSET_TEX3D_SPACE_REDPATH", + "folder": "space", + "type": "Texture", + "sha1": "f79319df29b208598124c0d9479f797f97fbcf78" + }, + { + "filename": "red_yellow_lamp", + "build-id": "ASSET_TEX3D_COMMON_REDYELLOWLAMP", + "folder": "common", + "type": "Texture", + "sha1": "f95edc88bac6faa4ddb8941960b2967ac860b76f" + }, + { + "filename": "red_bricks", + "build-id": "ASSET_TEX3D_SPACE_REDBRICKS", + "folder": "space", + "type": "Texture", + "sha1": "851b01c4157ba02bc4a5d81e700081423d90e823" + }, + { + "filename": "spaceship_front", + "build-id": "ASSET_TEX3D_OBJECTS_SPACESHIPFRONT", + "folder": "objects", + "type": "Texture", + "sha1": "660a495ff65a7463198b5bd19b7b89ebf18f3a60" + }, + { + "filename": "eroded_canyon_rock_shadow", + "build-id": "ASSET_TEX3D_DINO_ERODEDCANYONROCKSHADOW", + "folder": "dino", + "type": "Texture", + "sha1": "58b689a25c5ad1f66f9c614b7cb00a23ff84e295" + }, + { + "filename": "pirateship_rope", + "build-id": "ASSET_TEX3D_TROPICAL_PIRATESHIPROPE", + "folder": "tropical", + "type": "Texture", + "sha1": "169bde25852f4d059fde04cef129de32dafa5f78" + }, + { + "filename": "yellow_brick", + "build-id": "ASSET_TEX3D_COMMON_YELLOWBRICK", + "folder": "common", + "type": "Texture", + "sha1": "c9341a9afee886e70a9ccdbefe382b227fec788c" + }, + { + "filename": "yellow_stone_ground", + "build-id": "ASSET_TEX3D_COMMON_YELLOWSTONEGROUND", + "folder": "common", + "type": "Texture", + "sha1": "25fc98aa3ea2ac6d8b7587df91a003e18080c042" + }, + { + "filename": "grass_sandy_unknown", + "build-id": "ASSET_TEX3D_UNUSED_GRASSSANDYUNKNOWN", + "folder": "unused", + "type": "Texture", + "sha1": "b81aa98477ce440b092917042516f0199faf7300" + }, + { + "filename": "grey_pavement_edge", + "build-id": "ASSET_TEX3D_COMMON_GREYPAVEMENTEDGE", + "folder": "common", + "type": "Texture", + "sha1": "1994f79726fd177839ccc69418eddb18f9e5279b" + }, + { + "filename": "yellow_brick_tile_sandy", + "build-id": "ASSET_TEX3D_TROPICAL_YELLOWBRICKTILESANDY", + "folder": "tropical", + "type": "Texture", + "sha1": "663549f5fbfc4c8ca678d59b5c70fc8493e19fb0" + }, + { + "filename": "dark_stone_wall", + "build-id": "ASSET_TEX3D_WINTER_DARKSTONEWALL", + "folder": "winter", + "type": "Texture", + "sha1": "f1376d3dee39866b9eaab81fcb8f000b3a4f7d1c" + }, + { + "filename": "orange_stone4", + "build-id": "ASSET_TEX3D_DINO_ORANGESTONE4", + "folder": "dino", + "type": "Texture", + "sha1": "03c6936fc4a48fb416e423f60d493d8f938a88cb" + }, + { + "filename": "orange_stone5", + "build-id": "ASSET_TEX3D_DINO_ORANGESTONE5", + "folder": "dino", + "type": "Texture", + "sha1": "55399007cc30b6ac54a82765cb63fda78e50bc4c" + }, + { + "filename": "paper_unknown", + "build-id": "ASSET_TEX3D_UNUSED_PAPERUNKNOWN", + "folder": "unused", + "type": "Texture", + "sha1": "a70eb8a6cdc0f182c447abb534afb6951951d5f8" + }, + { + "filename": "shield_level1", + "build-id": "ASSET_TEX3D_OBJECTS_SHIELDLEVEL1", + "folder": "objects", + "type": "Texture", + "sha1": "bb8166ebfe08ab51566b2e543ffc2ec529e7a4eb" + }, + { + "filename": "shield_level2", + "build-id": "ASSET_TEX3D_OBJECTS_SHIELDLEVEL2", + "folder": "objects", + "type": "Texture", + "sha1": "5676238ebfd2ac25d863ccf4bb6164e5ba5699ff" + }, + { + "filename": "shield_level3", + "build-id": "ASSET_TEX3D_OBJECTS_SHIELDLEVEL3", + "folder": "objects", + "type": "Texture", + "sha1": "e01339d9386f08e236af1d619a8afd407f7a2d10" + }, + { + "filename": "sign_balloon", + "build-id": "ASSET_TEX3D_UNUSED_SIGNBALLOON", + "folder": "unused", + "type": "Texture", + "sha1": "011bfa6373afe67f568fb7e2c2e53ecbcc1a031a" + }, + { + "filename": "sign_white", + "build-id": "ASSET_TEX3D_UNUSED_SIGNWHITE", + "folder": "unused", + "type": "Texture", + "sha1": "ecfd027a4db8b8cda1cb4316316a2a7ac7462128" + }, + { + "filename": "sign_yellow", + "build-id": "ASSET_TEX3D_UNUSED_SIGNYELLOW", + "folder": "unused", + "type": "Texture", + "sha1": "02129bab89034adc9dd5ffc4d340ee8db7f749a2" + }, + { + "filename": "silver_trophy_envmap", + "build-id": "ASSET_TEX3D_OBJECTS_SILVERTROPHYENVMAP", + "folder": "objects", + "type": "Texture", + "sha1": "b835e13f6644a0ac3db2db1cd76020ccf53f1601" + }, + { + "filename": "sign_60", + "build-id": "ASSET_TEX3D_UNUSED_SIGN60", + "folder": "unused", + "type": "Texture", + "sha1": "70482757e32662f169d215257b7e853c3170d36a" + }, + { + "filename": "domebluesky5_0", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY5_0", + "folder": "objects", + "type": "Texture", + "sha1": "d04361e0d8a3a0298218600dda8caf1ce7a8ca9a" + }, + { + "filename": "domebluesky5_1", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY5_1", + "folder": "objects", + "type": "Texture", + "sha1": "4b48b4a2b1c10fdb5a553c11b85763f257663493" + }, + { + "filename": "domebluesky5_2", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY5_2", + "folder": "objects", + "type": "Texture", + "sha1": "f3605a7e06cac2d2a79a58fb16d993e9c73a3323" + }, + { + "filename": "domebluesky5_3", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY5_3", + "folder": "objects", + "type": "Texture", + "sha1": "ea80b9eb31820eacb235b87e18c5fe145fa1ddcc" + }, + { + "filename": "domebluesky5_4", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY5_4", + "folder": "objects", + "type": "Texture", + "sha1": "30bf116d2b242909cf51d6219642ef52045766f4" + }, + { + "filename": "domebluesky5_5", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY5_5", + "folder": "objects", + "type": "Texture", + "sha1": "b58dbbce0b980bfe442753dc0d8b459339100a8a" + }, + { + "filename": "domebluesky5_6", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY5_6", + "folder": "objects", + "type": "Texture", + "sha1": "8b41de0f77341a5e76c9a5b77974cc0bc6b1c164" + }, + { + "filename": "domebluesky5_7", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEBLUESKY5_7", + "folder": "objects", + "type": "Texture", + "sha1": "a1ec2ca6969c629f2ad300a00eb9e6f46a0bbf4d" + }, + { + "filename": "wall_tile_lights2", + "build-id": "ASSET_TEX3D_SPACE_WALLTILELIGHTS2", + "folder": "space", + "type": "Texture", + "sha1": "05a0244e6f57cb48092af91475c3f45e8dff5d86" + }, + { + "filename": "paper_decoration", + "build-id": "ASSET_TEX3D_UNUSED_PAPERDECORATION", + "folder": "unused", + "type": "Texture", + "sha1": "179bd0dbb725a71eb76b9041dfce99a5d402fb52" + }, + { + "filename": "wall_tile_lights_large", + "build-id": "ASSET_TEX3D_SPACE_WALLTILELIGHTSLARGE", + "folder": "space", + "type": "Texture", + "sha1": "720f1a3aaea15dda6477356f3e3df11d4c081a83" + }, + { + "filename": "village_door", + "build-id": "ASSET_TEX3D_WINTER_VILLAGEDOOR", + "folder": "winter", + "type": "Texture", + "sha1": "9b1e55b0304018e4c4a07a178fe5801c43920e59" + }, + { + "filename": "hanging_snow5", + "build-id": "ASSET_TEX3D_WINTER_HANGINGSNOW5", + "folder": "winter", + "type": "Texture", + "sha1": "1f76aaca70d057a6a0cb60fd3037157db4c09b4d" + }, + { + "filename": "wooden_guardrail_snowy", + "build-id": "ASSET_TEX3D_WINTER_WOODENGUARDRAILSNOWY", + "folder": "winter", + "type": "Texture", + "sha1": "42c39afcc9dc9d6b47153568d4e68351155504a9" + }, + { + "filename": "dark_stone_wall_snowy3", + "build-id": "ASSET_TEX3D_WINTER_DARKSTONEWALLSNOWY3", + "folder": "winter", + "type": "Texture", + "sha1": "43cecabb97a781dab8c528b9878406f487385cc3" + }, + { + "filename": "hanging_snow6", + "build-id": "ASSET_TEX3D_WINTER_HANGINGSNOW6", + "folder": "winter", + "type": "Texture", + "sha1": "b9197711e7679900c147d0ac69faf74566557f33" + }, + { + "filename": "snowball_face", + "build-id": "ASSET_TEX3D_OBJECTS_SNOWBALLFACE", + "folder": "objects", + "type": "Texture", + "sha1": "7f8570b2c2a970aa79739ec2a298cdfa534117bc" + }, + { + "filename": "snow5", + "build-id": "ASSET_TEX3D_WINTER_SNOW5", + "folder": "winter", + "type": "Texture", + "sha1": "91986cb29ede591e6effa243bb458e46d6a5920e" + }, + { + "filename": "dome_planets2", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEPLANETS2", + "folder": "objects", + "type": "Texture", + "sha1": "c5edbe9f317c81b007dd183788dad20c4470fc1f" + }, + { + "filename": "blue_light_stone", + "build-id": "ASSET_TEX3D_SPACE_BLUELIGHTSTONE", + "folder": "space", + "type": "Texture", + "sha1": "35bcf881c1f2a1bce279ba0b69197ec7c4efe30a" + }, + { + "filename": "purple_path", + "build-id": "ASSET_TEX3D_SPACE_PURPLEPATH", + "folder": "space", + "type": "Texture", + "sha1": "c204cd45e9e4ada88324c5c7c3f554278ff2aa22" + }, + { + "filename": "pink_stone", + "build-id": "ASSET_TEX3D_SPACE_PINKSTONE", + "folder": "space", + "type": "Texture", + "sha1": "e172799aa435f7fa400007a1afd4440f9ffddd29" + }, + { + "filename": "arch_inner", + "build-id": "ASSET_TEX3D_SPACE_ARCHINNER", + "folder": "space", + "type": "Texture", + "sha1": "b9cf904f37469b02641494f3ddb4672779c9ff63" + }, + { + "filename": "spaceship_unknown5", + "build-id": "ASSET_TEX3D_UNUSED_SPACESHIPUNKNOWN5", + "folder": "unused", + "type": "Texture", + "sha1": "1ce0c2940b18fd8403af4ce33028194195a58cad" + }, + { + "filename": "spaceship_unknown6", + "build-id": "ASSET_TEX3D_UNUSED_SPACESHIPUNKNOWN6", + "folder": "unused", + "type": "Texture", + "sha1": "696302e03fcb1e0d9d809e8e2fb5d3d5fa2c69d0" + }, + { + "filename": "spaceship_unknown7", + "build-id": "ASSET_TEX3D_UNUSED_SPACESHIPUNKNOWN7", + "folder": "unused", + "type": "Texture", + "sha1": "95023ac9d6e4f9398935a7f2a9cc51fa58f713aa" + }, + { + "filename": "moon", + "build-id": "ASSET_TEX3D_COMMON_MOON", + "folder": "common", + "type": "Texture", + "sha1": "ff7332c33cfe14dff598023490cf41d25491529e" + }, + { + "filename": "saturn", + "build-id": "ASSET_TEX3D_UNUSED_SATURN", + "folder": "unused", + "type": "Texture", + "sha1": "4f5c2e8b4e2ecc0f6b5d3eb9221bdf3f93c1c6aa" + }, + { + "filename": "spaceship_front_lowres", + "build-id": "ASSET_TEX3D_UNUSED_SPACESHIPFRONTLOWRES", + "folder": "unused", + "type": "Texture", + "sha1": "32ffb47895198356685cd13685ddadd40723ddb4" + }, + { + "filename": "asteroid", + "build-id": "ASSET_TEX3D_OBJECTS_ASTEROID", + "folder": "objects", + "type": "Texture", + "sha1": "759e616c9e15bdd5575c59bf9b51b058eeae52e3" + }, + { + "filename": "sun", + "build-id": "ASSET_TEX3D_COMMON_SUN", + "folder": "common", + "type": "Texture", + "sha1": "cb45bf7b89ac44f03b35af572350453c7d67b219" + }, + { + "filename": "sun2", + "build-id": "ASSET_TEX3D_COMMON_SUN2", + "folder": "common", + "type": "Texture", + "sha1": "ced156fc1b9ff18c16f4f8972ca697bcb3c5d776" + }, + { + "filename": "spaceship_unknown8", + "build-id": "ASSET_TEX3D_UNUSED_SPACESHIPUNKNOWN8", + "folder": "unused", + "type": "Texture", + "sha1": "962f61e5cd229e7e5f02db08227e6b18cc75da0c" + }, + { + "filename": "spaceship_unknown9", + "build-id": "ASSET_TEX3D_UNUSED_SPACESHIPUNKNOWN9", + "folder": "unused", + "type": "Texture", + "sha1": "4c960e6ec95a0cfb6429d99bc6d6c799d2ca92eb" + }, + { + "filename": "finish_line_flag_orange2_0", + "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGORANGE2_0", + "folder": "common", + "type": "Texture", + "sha1": "9f7d5e28713ecd0e5596f00c77ff8a38aa0ac340" + }, + { + "filename": "finish_line_flag_orange2_1", + "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGORANGE2_1", + "folder": "common", + "type": "Texture", + "sha1": "e137e67af1ceda705c987f71b81e0cd074d337f8" + }, + { + "filename": "finish_line_flag_snowy_0", + "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGSNOWY_0", + "folder": "common", + "type": "Texture", + "sha1": "091f88cc651981070485ebca27baad8f376e77d2" + }, + { + "filename": "finish_line_flag_snowy_1", + "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGSNOWY_1", + "folder": "common", + "type": "Texture", + "sha1": "e5671787d56083b930dd17425d723a6042d1646f" + }, + { + "filename": "finish_line_flag_snowy_2", + "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGSNOWY_2", + "folder": "common", + "type": "Texture", + "sha1": "5244eeac2d43e2b77656bd3b61a9522b2e953c9c" + }, + { + "filename": "finish_line_flag_snowy_3", + "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGSNOWY_3", + "folder": "common", + "type": "Texture", + "sha1": "bfdfb3be63bbee0011996cfce4805a7aec575d21" + }, + { + "filename": "finish_line_flag_snowy_4", + "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGSNOWY_4", + "folder": "common", + "type": "Texture", + "sha1": "080db18cd5f3378f6a4057d6d9c76473d60ba195" + }, + { + "filename": "level_name_border", + "build-id": "ASSET_TEX3D_COMMON_LEVELNAMEBORDER", + "folder": "common", + "type": "Texture", + "sha1": "c24cafd0519e2b139861c0a112421f1ea6d39af8" + }, + { + "filename": "bronze_trophy_eye", + "build-id": "ASSET_TEX3D_OBJECTS_BRONZETROPHYEYE", + "folder": "objects", + "type": "Texture", + "sha1": "10ebe4d3b3c07df0b936d045e37ec1cc930bd306" + }, + { + "filename": "bronze_trophy_smile", + "build-id": "ASSET_TEX3D_OBJECTS_BRONZETROPHYSMILE", + "folder": "objects", + "type": "Texture", + "sha1": "1f9f854dcc6badd0e79ef4b3c01b6c6f70a86f74" + }, + { + "filename": "bronze_trophy_screw", + "build-id": "ASSET_TEX3D_OBJECTS_BRONZETROPHYSCREW", + "folder": "objects", + "type": "Texture", + "sha1": "01bb1fae7942a499422ba7e307ec5b110788e290" + }, + { + "filename": "effect_box", + "build-id": "ASSET_TEX3D_OBJECTS_EFFECTBOX", + "folder": "objects", + "type": "Texture", + "sha1": "1985970f05327dc8068f215cc7b5529f9f838f02" + }, + { + "filename": "dome_yellow_sun", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEYELLOWSUN", + "folder": "objects", + "type": "Texture", + "sha1": "9e1d6d08866e3f473c786ed580ab62e091da933b" + }, + { + "filename": "dome_bottom_snow", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEBOTTOMSNOW", + "folder": "objects", + "type": "Texture", + "sha1": "2fd80d6a16ee2373f1b8eb80930fb47051a47ed2" + }, + { + "filename": "seamonster_unknown2", + "build-id": "ASSET_TEX3D_UNUSED_SEAMONSTERUNKNOWN2", + "folder": "unused", + "type": "Texture", + "sha1": "8d345e7b40b09c55cae53e115483cb127f409f08" + }, + { + "filename": "seamonster_unknown_eye", + "build-id": "ASSET_TEX3D_UNUSED_SEAMONSTERUNKNOWNEYE", + "folder": "unused", + "type": "Texture", + "sha1": "164a363a95f98a9384fba00a5a42e06fb7382d43" + }, + { + "filename": "dome_moon_crescent", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEMOONCRESCENT", + "folder": "objects", + "type": "Texture", + "sha1": "97814c26a6e11e78ec05156abbdf699ffdf570de" + }, + { + "filename": "lighthouse_rocket_booster", + "build-id": "ASSET_TEX3D_OBJECTS_LIGHTHOUSEROCKETBOOSTER", + "folder": "objects", + "type": "Texture", + "sha1": "0a23a2cd7a613d0b337e196e6209df04e648923a" + }, + { + "filename": "beta_tiptup_icon", + "build-id": "ASSET_TEX3D_UNUSED_BETATIPTUPICON", + "folder": "unused", + "type": "Texture", + "sha1": "c6058a25c8c2ffc86975a931078fbcb2abb25c02" + }, + { + "filename": "fallen_tree_log_shadow", + "build-id": "ASSET_TEX3D_DINO_FALLENTREELOGSHADOW", + "folder": "dino", + "type": "Texture", + "sha1": "8d5dbb20166a06d978c1cd37116aaf376930e289" + }, + { + "filename": "sign_30", + "build-id": "ASSET_TEX3D_UNUSED_SIGN30", + "folder": "unused", + "type": "Texture", + "sha1": "c7e9aa545bc3179d8a4749d14939d4879e7e1fe0" + }, + { + "filename": "trickytops_face_eye_bottom", + "build-id": "ASSET_TEX3D_OBJECTS_TRICKYTOPSFACEEYEBOTTOM", + "folder": "objects", + "type": "Texture", + "sha1": "25c919f60f08e1b52b03c8298dbac762a99cfe3d" + }, + { + "filename": "trickytops_eyesocket", + "build-id": "ASSET_TEX3D_OBJECTS_TRICKYTOPSEYESOCKET", + "folder": "objects", + "type": "Texture", + "sha1": "a858415f5fdeddd376e0521f0d67f113b761a6d7" + }, + { + "filename": "trickytops_statue_eye", + "build-id": "ASSET_TEX3D_DINO_TRICKYTOPSSTATUEEYE", + "folder": "dino", + "type": "Texture", + "sha1": "4f5110c1eece87f64627f1343571580420f41411" + }, + { + "filename": "bronze_trophy_decoration", + "build-id": "ASSET_TEX3D_OBJECTS_BRONZETROPHYDECORATION", + "folder": "objects", + "type": "Texture", + "sha1": "b7d31c8d4d10fae58d3f9f391af9ada8287f78e0" + }, + { + "filename": "gold_trophy_decoration", + "build-id": "ASSET_TEX3D_OBJECTS_GOLDTROPHYDECORATION", + "folder": "objects", + "type": "Texture", + "sha1": "0ea463bb1afbb9b54b3651421a19ece0502684f7" + }, + { + "filename": "gold_trophy_number", + "build-id": "ASSET_TEX3D_OBJECTS_GOLDTROPHYNUMBER", + "folder": "objects", + "type": "Texture", + "sha1": "f0cd14765bc6e0f8d452b826183c1ee48b5f8bd9" + }, + { + "filename": "silver_trophy_number", + "build-id": "ASSET_TEX3D_OBJECTS_SILVERTROPHYNUMBER", + "folder": "objects", + "type": "Texture", + "sha1": "beb95fd08352fd07910c27e1a5d866d9d5042ef9" + }, + { + "filename": "bronze_trophy_number", + "build-id": "ASSET_TEX3D_OBJECTS_BRONZETROPHYNUMBER", + "folder": "objects", + "type": "Texture", + "sha1": "1422a44ce043a572ccd1bce6483ed59f76a25c90" + }, + { + "filename": "silver_trophy_decoration", + "build-id": "ASSET_TEX3D_OBJECTS_SILVERTROPHYDECORATION", + "folder": "objects", + "type": "Texture", + "sha1": "171bb9e81691f276aa30a1c3927473336f9d4f9a" + }, + { + "filename": "bluey_statue_eye", + "build-id": "ASSET_TEX3D_WINTER_BLUEYSTATUEEYE", + "folder": "winter", + "type": "Texture", + "sha1": "06cc5edc43d3d3901a8b91b1cafeede45e64503f" + }, + { + "filename": "water5", + "build-id": "ASSET_TEX3D_COMMON_WATER5", + "folder": "common", + "type": "Texture", + "sha1": "e79d60701d77b4d631fe66c470103ae0fbd3045f" + }, + { + "filename": "dome_island_coast_0", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEISLANDCOAST_0", + "folder": "objects", + "type": "Texture", + "sha1": "dbee346d0b6970a98cc681dc79b0724dddcd6b9d" + }, + { + "filename": "dome_island_coast_1", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEISLANDCOAST_1", + "folder": "objects", + "type": "Texture", + "sha1": "91c56778d429f0f9d55e34154dbdaacf8386e60e" + }, + { + "filename": "dome_island_coast_2", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEISLANDCOAST_2", + "folder": "objects", + "type": "Texture", + "sha1": "2a8b42666fa372d67fcabf6943f52b0ccfe67210" + }, + { + "filename": "dome_island_coast_3", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEISLANDCOAST_3", + "folder": "objects", + "type": "Texture", + "sha1": "3399d55bd5b4ae1e679c86f74d8db5007ac08170" + }, + { + "filename": "dome_island_coast_4", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEISLANDCOAST_4", + "folder": "objects", + "type": "Texture", + "sha1": "54debabc6dd03eb787d704052c9107fe50c58965" + }, + { + "filename": "dome_island_coast_5", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEISLANDCOAST_5", + "folder": "objects", + "type": "Texture", + "sha1": "d763724fb6f46d56adc6d8e8416805fea4dfe1c3" + }, + { + "filename": "dome_island_coast_6", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEISLANDCOAST_6", + "folder": "objects", + "type": "Texture", + "sha1": "78f37ade16aded5d28ba291b1665e0d05bf3403a" + }, + { + "filename": "dome_island_coast_7", + "build-id": "ASSET_TEX3D_OBJECTS_DOMEISLANDCOAST_7", + "folder": "objects", + "type": "Texture", + "sha1": "424edbcef547ea50706c7892a86f304106a1f750" + }, + { + "filename": "door_worldgate_back_bottom", + "build-id": "ASSET_TEX3D_OBJECTS_DOORWORLDGATEBACKBOTTOM", + "folder": "objects", + "type": "Texture", + "sha1": "c9ada566949f409e4336d298fb31b23580f89578" + }, + { + "filename": "door_worldgate_side", + "build-id": "ASSET_TEX3D_OBJECTS_DOORWORLDGATESIDE", + "folder": "objects", + "type": "Texture", + "sha1": "9bc04ebd33b07c6dd12917313600dc66bcb910bf" + }, + { + "filename": "door_worldgate_front_top", + "build-id": "ASSET_TEX3D_OBJECTS_DOORWORLDGATEFRONTTOP", + "folder": "objects", + "type": "Texture", + "sha1": "4a908ae6e2eae43f5ea5397e5da11de5282a306f" + }, + { + "filename": "door_worldgate_front_bottom", + "build-id": "ASSET_TEX3D_OBJECTS_DOORWORLDGATEFRONTBOTTOM", + "folder": "objects", + "type": "Texture", + "sha1": "13eef82b0200e098e7d0200a62de862a2a1e1977" + }, + { + "filename": "door_worldgate_back_top", + "build-id": "ASSET_TEX3D_OBJECTS_DOORWORLDGATEBACKTOP", + "folder": "objects", + "type": "Texture", + "sha1": "988c5af63b54568922c4b7f79b75f2bb7f0afa9a" + }, + { + "filename": "whale_underside", + "build-id": "ASSET_TEX3D_OBJECTS_WHALEUNDERSIDE", + "folder": "objects", + "type": "Texture", + "sha1": "bdbf22e02d4a388087f5eef829f0e22d698d2f92" + }, + { + "filename": "whale_fin", + "build-id": "ASSET_TEX3D_OBJECTS_WHALEFIN", + "folder": "objects", + "type": "Texture", + "sha1": "50cca6df102d8f290bf9098087e14e8dd8fff8a0" + }, + { + "filename": "whale_eye", + "build-id": "ASSET_TEX3D_OBJECTS_WHALEEYE", + "folder": "objects", + "type": "Texture", + "sha1": "4235e2f5a3ad72fe18fc4a2a1f447680c05a03a2" + }, + { + "filename": "whale_blowhole", + "build-id": "ASSET_TEX3D_OBJECTS_WHALEBLOWHOLE", + "folder": "objects", + "type": "Texture", + "sha1": "e2cf6d5af349a9a2002a636af2ea34817917856e" + }, + { + "filename": "whale_mouth_top", + "build-id": "ASSET_TEX3D_OBJECTS_WHALEMOUTHTOP", + "folder": "objects", + "type": "Texture", + "sha1": "795b90dc3de96c18a4f2c48bd1f6ba23b8b3a1ca" + }, + { + "filename": "whale_mouth_bottom", + "build-id": "ASSET_TEX3D_OBJECTS_WHALEMOUTHBOTTOM", + "folder": "objects", + "type": "Texture", + "sha1": "6bd96750596454a291228acc42260371c5f76dfd" + }, + { + "filename": "whale_nose", + "build-id": "ASSET_TEX3D_OBJECTS_WHALENOSE", + "folder": "objects", + "type": "Texture", + "sha1": "945b07eab386d96f8894685ff48ef49297186388" + }, + { + "filename": "waterfall2", + "build-id": "ASSET_TEX3D_COMMON_WATERFALL2", + "folder": "common", + "type": "Texture", + "sha1": "ec04e2a8e5bb4babeb43694f89f5ee14f66c1953" + }, + { + "filename": "red_glass_window", + "build-id": "ASSET_TEX3D_SPACE_REDGLASSWINDOW", + "folder": "space", + "type": "Texture", + "sha1": "09c6a824caac6a0f3d39739d5aaca7c4492e85a9" + }, + { + "filename": "wood_block", + "build-id": "ASSET_TEX3D_OBJECTS_WOODBLOCK", + "folder": "objects", + "type": "Texture", + "sha1": "0346652d153b973b5f5684acb895d5556d8358f2" + }, + { + "filename": "wood_sign", + "build-id": "ASSET_TEX3D_OBJECTS_WOODSIGN", + "folder": "objects", + "type": "Texture", + "sha1": "7010c75b3a22dc2abb6d9a550373e47ba201e3a2" + }, + { + "filename": "door_level_single_done_top", + "build-id": "ASSET_TEX3D_OBJECTS_DOORLEVELSINGLEDONETOP", + "folder": "objects", + "type": "Texture", + "sha1": "f38a26841fc5a3eb0d49444a5ae0c9b53ad7fc8c" + }, + { + "filename": "door_level_single_done_bottom", + "build-id": "ASSET_TEX3D_OBJECTS_DOORLEVELSINGLEDONEBOTTOM", + "folder": "objects", + "type": "Texture", + "sha1": "d935093c1891445e50841d022ef861b79b1b876b" + }, + { + "filename": "door_level_checkmark", + "build-id": "ASSET_TEX3D_UNUSED_DOORLEVELCHECKMARK", + "folder": "unused", + "type": "Texture", + "sha1": "44cd96727ef71beb884968fed6d3e7ecfcc28e5b" + }, + { + "filename": "door_level_done_checkmark_top", + "build-id": "ASSET_TEX3D_UNUSED_DOORLEVELDONECHECKMARKTOP", + "folder": "unused", + "type": "Texture", + "sha1": "cbf773063d244929538fe6ee14fa2df0e05ab0b9" + }, + { + "filename": "door_level_done_checkmark_bottom", + "build-id": "ASSET_TEX3D_UNUSED_DOORLEVELDONECHECKMARKBOTTOM", + "folder": "unused", + "type": "Texture", + "sha1": "887c04d01dbeb5b0328361e729c55119b938611d" + }, + { + "filename": "wood_unknown", + "build-id": "ASSET_TEX3D_UNUSED_WOODUNKNOWN", + "folder": "unused", + "type": "Texture", + "sha1": "0a8ad8398430e27829c6ba203b2e391740e5715d" + }, + { + "filename": "whale_bay_programmer_art_sign", + "build-id": "ASSET_TEX3D_UNUSED_WHALEBAYPROGRAMMERARTSIGN", + "folder": "unused", + "type": "Texture", + "sha1": "03a21c9e3189630a7d48a3229693f00097a85619" + }, + { + "filename": "treasure_caves_programmer_art_sign", + "build-id": "ASSET_TEX3D_UNUSED_TREASURECAVESPROGRAMMERARTSIGN", + "folder": "unused", + "type": "Texture", + "sha1": "d20b0e0f373b921ab1f70e4dac81eae5e7574e42" + }, + { + "filename": "crescent_island_programmer_art_sign", + "build-id": "ASSET_TEX3D_UNUSED_CRESCENTISLANDPROGRAMMERARTSIGN", + "folder": "unused", + "type": "Texture", + "sha1": "8b87eac51b0f66b135f93303d83599c6ce134989" + }, + { + "filename": "pirate_lagoon_programmer_art_sign", + "build-id": "ASSET_TEX3D_UNUSED_PIRATELAGOONPROGRAMMERARTSIGN", + "folder": "unused", + "type": "Texture", + "sha1": "28b5c563eca7ad533deffc265c847d7271518b06" + }, + { + "filename": "wood_unknown2", + "build-id": "ASSET_TEX3D_UNUSED_WOODUNKNOWN2", + "folder": "unused", + "type": "Texture", + "sha1": "0a8ad8398430e27829c6ba203b2e391740e5715d" + }, + { + "filename": "volcano_stone", + "build-id": "ASSET_TEX3D_UNUSED_VOLCANOSTONE", + "folder": "unused", + "type": "Texture", + "sha1": "0d918ac9e388ceb425180809b76e5f6911b52efb" + }, + { + "filename": "door_tt_icon_left", + "build-id": "ASSET_TEX3D_OBJECTS_DOORTTICONLEFT", + "folder": "objects", + "type": "Texture", + "sha1": "941a994bd4500e134f7facc3ede590d6d6d69516" + }, + { + "filename": "door_tt_icon_right", + "build-id": "ASSET_TEX3D_OBJECTS_DOORTTICONRIGHT", + "folder": "objects", + "type": "Texture", + "sha1": "67e9b1f268e615f220beded610bfd92b31c049bb" + }, + { + "filename": "door_tt_top_right", + "build-id": "ASSET_TEX3D_OBJECTS_DOORTTTOPRIGHT", + "folder": "objects", + "type": "Texture", + "sha1": "a4f4337d8eb4d9692211652ca1a81bfa14e93c60" + }, + { + "filename": "door_tt_bottom_right", + "build-id": "ASSET_TEX3D_OBJECTS_DOORTTBOTTOMRIGHT", + "folder": "objects", + "type": "Texture", + "sha1": "485cbb79a275fb59e037a1a8d890421fec58b557" + }, + { + "filename": "door_tt_top_right_active", + "build-id": "ASSET_TEX3D_OBJECTS_DOORTTTOPRIGHTACTIVE", + "folder": "objects", + "type": "Texture", + "sha1": "81d097a909978ed779360e0ae12ebf3c927f5201" + }, + { + "filename": "door_tt_bottom_right_top_active", + "build-id": "ASSET_TEX3D_OBJECTS_DOORTTBOTTOMRIGHTTOPACTIVE", + "folder": "objects", + "type": "Texture", + "sha1": "8d2051e2ae0ff308b65769b7d408b8b46ad0c57e" + }, + { + "filename": "door_tt_bottom_right_active", + "build-id": "ASSET_TEX3D_OBJECTS_DOORTTBOTTOMRIGHTACTIVE", + "folder": "objects", + "type": "Texture", + "sha1": "4bcb0068258e927a650f5d5983841447465f0da0" + }, + { + "filename": "door_boss_bottom2", + "build-id": "ASSET_TEX3D_OBJECTS_DOORBOSSBOTTOM2", + "folder": "objects", + "type": "Texture", + "sha1": "471ce20d1fb25993833af306ab408b85ae163fbb" + }, + { + "filename": "roof_tile_shingles4", + "build-id": "ASSET_TEX3D_MEDIEVAL_ROOFTILESHINGLES4", + "folder": "medieval", + "type": "Texture", + "sha1": "aa372488b61f178937622e99b613854263b8e555" + }, + { + "filename": "village_white_wall2", + "build-id": "ASSET_TEX3D_MEDIEVAL_VILLAGEWHITEWALL2", + "folder": "medieval", + "type": "Texture", + "sha1": "b1e04b49cce5db9bc08ee50b497297e022c61575" + }, + { + "filename": "taj_pad_snow", + "build-id": "ASSET_TEX3D_UNUSED_TAJPADSNOW", + "folder": "unused", + "type": "Texture", + "sha1": "5febe6c4c5d1c998b2ce3527561bed79566b2d83" + }, + { + "filename": "door_challenge_top", + "build-id": "ASSET_TEX3D_OBJECTS_DOORCHALLENGETOP", + "folder": "objects", + "type": "Texture", + "sha1": "9eeb2c28c9037ac22eb9ca1f14e3cd31b51b6a09" + }, + { + "filename": "door_challenge_bottom", + "build-id": "ASSET_TEX3D_OBJECTS_DOORCHALLENGEBOTTOM", + "folder": "objects", + "type": "Texture", + "sha1": "9ca007a684af19e0f85413c4f8248de27eedac1b" + }, + { + "filename": "vines_on_wood", + "build-id": "ASSET_TEX3D_UNUSED_VINESONWOOD", + "folder": "unused", + "type": "Texture", + "sha1": "c7974fd11adc1d64c1ba77a68151056434ce52af" + }, + { + "filename": "hanging_ice2", + "build-id": "ASSET_TEX3D_WINTER_HANGINGICE2", + "folder": "winter", + "type": "Texture", + "sha1": "4f6f7dfe75ae54c84d9cf674dab0af9cfef5a003" + }, + { + "filename": "unknown_balcony", + "build-id": "ASSET_TEX3D_UNUSED_UNKNOWNBALCONY", + "folder": "unused", + "type": "Texture", + "sha1": "6c268737969f85961ce04773c8d04cb6ad58f10f" + }, + { + "filename": "ground_cobble", + "build-id": "ASSET_TEX3D_UNUSED_GROUNDCOBBLE", + "folder": "unused", + "type": "Texture", + "sha1": "109f12b09b9d868326fe666618969cb4f28a0fa9" + }, + { + "filename": "green_brick_wall", + "build-id": "ASSET_TEX3D_UNUSED_GREENBRICKWALL", + "folder": "unused", + "type": "Texture", + "sha1": "e59c1a9ebb5afc3e1ab2f1745d0c7441198ed6c7" + }, + { + "filename": "old_brick_wall", + "build-id": "ASSET_TEX3D_UNUSED_OLDBRICKWALL", + "folder": "unused", + "type": "Texture", + "sha1": "46aae94f22686234987e6c53183aa8283d6881c9" + }, + { + "filename": "orange_gate_tip", + "build-id": "ASSET_TEX3D_MEDIEVAL_ORANGEGATETIP", + "folder": "medieval", + "type": "Texture", + "sha1": "5f908cdd091c8c6d92698dfed679b2c7287643c3" + }, + { + "filename": "sand_wet_dry_transition2", + "build-id": "ASSET_TEX3D_COMMON_SANDWETDRYTRANSITION2", + "folder": "common", + "type": "Texture", + "sha1": "f056db64db032bbec5eb16c971180d74c250038e" + }, + { + "filename": "roof_tile_shingles3", + "build-id": "ASSET_TEX3D_MEDIEVAL_ROOFTILESHINGLES3", + "folder": "medieval", + "type": "Texture", + "sha1": "aa372488b61f178937622e99b613854263b8e555" + }, + { + "filename": "steel_gate", + "build-id": "ASSET_TEX3D_MEDIEVAL_STEELGATE", + "folder": "medieval", + "type": "Texture", + "sha1": "1c5f280604e4edff1ca1c5dfdffd9a0c02161224" + }, + { + "filename": "steel_gate_tip", + "build-id": "ASSET_TEX3D_MEDIEVAL_STEELGATETIP", + "folder": "medieval", + "type": "Texture", + "sha1": "05e24a7473d95dbb163f8b9d58ef88822ac48759" + }, + { + "filename": "dirt_wall_mossy", + "build-id": "ASSET_TEX3D_COMMON_DIRTWALLMOSSY", + "folder": "common", + "type": "Texture", + "sha1": "f6cbf9a343b643ca2fb90c8ccd9db532b060d17a" + }, + { + "filename": "blue_lightning_bolt", + "build-id": "ASSET_TEX3D_SPACE_BLUELIGHTNINGBOLT", + "folder": "space", + "type": "Texture", + "sha1": "7cc485ca50d39d40b77dcc18269cb42009b92652" + }, + { + "filename": "wizpigship_eye", + "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGSHIPEYE", + "folder": "objects", + "type": "Texture", + "sha1": "48052ac32b2501cdd81c46959404c7aa5ee9765b" + }, + { + "filename": "wizpigship_nose", + "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGSHIPNOSE", + "folder": "objects", + "type": "Texture", + "sha1": "39f4a2eda5689ccb04b0d7583b763c19fbcfea42" + }, + { + "filename": "wizpigship_exhast_bottom", + "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGSHIPEXHASTBOTTOM", + "folder": "objects", + "type": "Texture", + "sha1": "4eb49ff9d4c650512d9aee51717f2b608c999ebc" + }, + { + "filename": "wizpigship_exhast_top", + "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGSHIPEXHASTTOP", + "folder": "objects", + "type": "Texture", + "sha1": "6fad54540740e07ea68e6c2113cff9613ca1000f" + }, + { + "filename": "red_stripes_for_spaceship", + "build-id": "ASSET_TEX3D_OBJECTS_REDSTRIPESFORSPACESHIP", + "folder": "objects", + "type": "Texture", + "sha1": "f2b04d945c207ac93bcfe319949428580f2c280e" + }, + { + "filename": "party_post_0", + "build-id": "ASSET_TEX3D_OBJECTS_PARTYPOST_0", + "folder": "objects", + "type": "Texture", + "sha1": "e4689e51870203dab9aee944417959b3458a387a" + }, + { + "filename": "party_post_1", + "build-id": "ASSET_TEX3D_OBJECTS_PARTYPOST_1", + "folder": "objects", + "type": "Texture", + "sha1": "b7852af05a3c9812fe2362cd19ec8b86f2bd4e53" + }, + { + "filename": "party_post_2", + "build-id": "ASSET_TEX3D_OBJECTS_PARTYPOST_2", + "folder": "objects", + "type": "Texture", + "sha1": "10426929baf89f23f98c435c24f1d3c394a06dab" + }, + { + "filename": "party_post_3", + "build-id": "ASSET_TEX3D_OBJECTS_PARTYPOST_3", + "folder": "objects", + "type": "Texture", + "sha1": "76d42ea59a085f6af650c7628d9a42eaada5da22" + }, + { + "filename": "party_post_4", + "build-id": "ASSET_TEX3D_OBJECTS_PARTYPOST_4", + "folder": "objects", + "type": "Texture", + "sha1": "a1f9263ed0ab0194f4aa5b31afb2497ba64f8a71" + }, + { + "filename": "party_post_5", + "build-id": "ASSET_TEX3D_OBJECTS_PARTYPOST_5", + "folder": "objects", + "type": "Texture", + "sha1": "70e98afecc0f7e4bfde7f51aa1c09d0776c28496" + }, + { + "filename": "door_boss_taj_top", + "build-id": "ASSET_TEX3D_OBJECTS_DOORBOSSTAJTOP", + "folder": "objects", + "type": "Texture", + "sha1": "63825ed3159bed5ae6294b592d2ca991b2a9d34d" + }, + { + "filename": "door_boss_taj_bottom", + "build-id": "ASSET_TEX3D_OBJECTS_DOORBOSSTAJBOTTOM", + "folder": "objects", + "type": "Texture", + "sha1": "5da2a85105f3f4716342f8d0aeb69060d15bbdf6" + }, + { + "filename": "door_level_gb_number_top_right", + "build-id": "ASSET_TEX3D_OBJECTS_DOORLEVELGBNUMBERTOPRIGHT", + "folder": "objects", + "type": "Texture", + "sha1": "dc0be5ddfbf821df5629d0c36b57f1f6c4be505a" + }, + { + "filename": "door_level_gb_number_top_left", + "build-id": "ASSET_TEX3D_OBJECTS_DOORLEVELGBNUMBERTOPLEFT", + "folder": "objects", + "type": "Texture", + "sha1": "125642846377bf8339a0c29d6a2e62e4f5394049" + }, + { + "filename": "door_level_gb_number_bottom_right", + "build-id": "ASSET_TEX3D_OBJECTS_DOORLEVELGBNUMBERBOTTOMRIGHT", + "folder": "objects", + "type": "Texture", + "sha1": "1e0150306f8f13feb5f4e989899005ac2ccc2539" + }, + { + "filename": "door_level_gb_number_bottom_left", + "build-id": "ASSET_TEX3D_OBJECTS_DOORLEVELGBNUMBERBOTTOMLEFT", + "folder": "objects", + "type": "Texture", + "sha1": "d95e9f9cce21e53386b4b293fecf88dd0b0bfa0a" + }, + { + "filename": "forest_billboard", + "build-id": "ASSET_TEX3D_UNUSED_FORESTBILLBOARD", + "folder": "unused", + "type": "Texture", + "sha1": "9b9e15ca5fe9cf194923ad81556d9ab9baa378ff" + }, + { + "filename": "brown_stone2", + "build-id": "ASSET_TEX3D_COMMON_BROWNSTONE2", + "folder": "common", + "type": "Texture", + "sha1": "e1e51ab083bfd9fb10e6b949226805732c444ea8" + }, + { + "filename": "grey_stone_large", + "build-id": "ASSET_TEX3D_UNUSED_GREYSTONELARGE", + "folder": "unused", + "type": "Texture", + "sha1": "ed0435447a6d68494aa5141a673545fc0f4253c8" + }, + { + "filename": "log_large_mossy", + "build-id": "ASSET_TEX3D_COMMON_LOGLARGEMOSSY", + "folder": "common", + "type": "Texture", + "sha1": "2ef3e1ab7c8ee15468b0b060f67baf4fa2bc3bda" + }, + { + "filename": "log_exposed_side4", + "build-id": "ASSET_TEX3D_COMMON_LOGEXPOSEDSIDE4", + "folder": "common", + "type": "Texture", + "sha1": "43d9686172c6cd2da497852cc4fd1b7c4843f557" + }, + { + "filename": "water_fountain", + "build-id": "ASSET_TEX3D_MEDIEVAL_WATERFOUNTAIN", + "folder": "medieval", + "type": "Texture", + "sha1": "5d644d1c4fb8c15547e352220d09fba5d2caf4d7" + }, + { + "filename": "unknown_purple", + "build-id": "ASSET_TEX3D_UNUSED_UNKNOWNPURPLE", + "folder": "unused", + "type": "Texture", + "sha1": "4f6044fabe35461da07f688917482746ef196980" + }, + { + "filename": "unknown_red", + "build-id": "ASSET_TEX3D_UNUSED_UNKNOWNRED", + "folder": "unused", + "type": "Texture", + "sha1": "0f23e5b1067cfbbed3e6abdbde7e6d0019e56d9a" + }, + { + "filename": "unknown_red2", + "build-id": "ASSET_TEX3D_UNUSED_UNKNOWNRED2", + "folder": "unused", + "type": "Texture", + "sha1": "e55afcca0b4d570702fe4e146718836ebe47f7b2" + }, + { + "filename": "village_white_wall3", + "build-id": "ASSET_TEX3D_MEDIEVAL_VILLAGEWHITEWALL3", + "folder": "unused", + "type": "Texture", + "sha1": "b1e04b49cce5db9bc08ee50b497297e022c61575" + }, + { + "filename": "wood_guardrail_top", + "build-id": "ASSET_TEX3D_COMMON_WOODGUARDRAILTOP", + "folder": "common", + "type": "Texture", + "sha1": "247cf509dbe242a81ba190e560dfcd8146145a7a" + }, + { + "filename": "village_grey_wall", + "build-id": "ASSET_TEX3D_UNUSED_VILLAGEGREYWALL", + "folder": "unused", + "type": "Texture", + "sha1": "b3c448a3be09594c8335bc1d2e92f27edced2aee" + }, + { + "filename": "village_white_wall4", + "build-id": "ASSET_TEX3D_MEDIEVAL_VILLAGEWHITEWALL4", + "folder": "medieval", + "type": "Texture", + "sha1": "db000a4a8bc47221d207b60da8761258ea885ffe" + }, + { + "filename": "finish_line_red_tape", + "build-id": "ASSET_TEX3D_COMMON_FINISHLINEREDTAPE", + "folder": "common", + "type": "Texture", + "sha1": "c35370d7285a447d7640eed982052e054a6c8116" + }, + { + "filename": "bluey_eye", + "build-id": "ASSET_TEX3D_OBJECTS_BLUEYEYE", + "folder": "objects", + "type": "Texture", + "sha1": "778db8e53a40c0e5f7fc97dd4e964cae17970961" + }, + { + "filename": "transparent2", + "build-id": "ASSET_TEX3D_COMMON_TRANSPARENT2", + "folder": "common", + "type": "Texture", + "sha1": "d8b75407744add33393ed88f32e95b23333fc8c0" + }, + { + "filename": "green_cyan_gradient", + "build-id": "ASSET_TEX3D_UNUSED_GREENCYANGRADIENT", + "folder": "unused", + "type": "Texture", + "sha1": "9da4ace9e6ef79ed699b6f7c3cdfd55148eab1a4" + }, + { + "filename": "gold_unknown", + "build-id": "ASSET_TEX3D_UNUSED_GOLDUNKNOWN", + "folder": "unused", + "type": "Texture", + "sha1": "4215faeeab3d63def965d9204913b05929809626" + }, + { + "filename": "shrubbery", + "build-id": "ASSET_TEX3D_MEDIEVAL_SHRUBBERY", + "folder": "medieval", + "type": "Texture", + "sha1": "8c07d947483f7aad7ea4fcbba7714c3c8b06afdf" + }, + { + "filename": "cyan_yellow_arrow_sign2", + "build-id": "ASSET_TEX3D_COMMON_CYANYELLOWARROWSIGN2", + "folder": "common", + "type": "Texture", + "sha1": "010b2c4fd039911aa73dcc6f1822eedc1e8f7db3" + }, + { + "filename": "debug_yellow_blue_invisible", + "build-id": "ASSET_TEX3D_COMMON_DEBUGYELLOWBLUEINVISIBLE", + "folder": "common", + "type": "Texture", + "sha1": "ea007ca46da6e8ea77babbcef2c846686146c1d1" + }, + { + "filename": "brown_stone_grassy", + "build-id": "ASSET_TEX3D_COMMON_BROWNSTONEGRASSY", + "folder": "common", + "type": "Texture", + "sha1": "f61350c6b989d970d8fe17013e8c44db96722571" + }, + { + "filename": "brown_stone_grassy2", + "build-id": "ASSET_TEX3D_COMMON_BROWNSTONEGRASSY2", + "folder": "common", + "type": "Texture", + "sha1": "f61350c6b989d970d8fe17013e8c44db96722571" + }, + { + "filename": "wizpig_mouth", + "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGMOUTH", + "folder": "objects", + "type": "Texture", + "sha1": "a240650baa5816e922cfc0d52f5777f82ec00e3b" + }, + { + "filename": "walrus_cove_sign", + "build-id": "ASSET_TEX3D_WINTER_WALRUSCOVESIGN", + "folder": "winter", + "type": "Texture", + "sha1": "47f96de00112f23327b0bd5918efa360fc8a6eda" + }, + { + "filename": "everfrost_peak_sign", + "build-id": "ASSET_TEX3D_WINTER_EVERFROSTPEAKSIGN", + "folder": "winter", + "type": "Texture", + "sha1": "54673f45e243cf80782cc6a0ff7b7ecaab36bbc4" + }, + { + "filename": "frosty_village_sign", + "build-id": "ASSET_TEX3D_WINTER_FROSTYVILLAGESIGN", + "folder": "winter", + "type": "Texture", + "sha1": "4542ffe573880170424f6695e582696b9d9c95f6" + }, + { + "filename": "snowball_valley", + "build-id": "ASSET_TEX3D_WINTER_SNOWBALLVALLEY", + "folder": "winter", + "type": "Texture", + "sha1": "5ed815fce87ef6db7ae239ce599ec7b798784291" + }, + { + "filename": "wizpig_robe_lowres", + "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGROBELOWRES", + "folder": "objects", + "type": "Texture", + "sha1": "91925fc85ba4042c06058c21391245f10700af8d" + }, + { + "filename": "wizpig_skin_lowres", + "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGSKINLOWRES", + "folder": "objects", + "type": "Texture", + "sha1": "b2d858ae77ad0eceb944d00fed4718e57b802d6b" + }, + { + "filename": "cyan_yellow_arrown_sign_with_border", + "build-id": "ASSET_TEX3D_COMMON_CYANYELLOWARROWNSIGNWITHBORDER", + "folder": "common", + "type": "Texture", + "sha1": "ca8ba415beeee4a70c202db9b4716b77bd89e6c1" + }, + { + "filename": "whale_bay_sign", + "build-id": "ASSET_TEX3D_TROPICAL_WHALEBAYSIGN", + "folder": "tropical", + "type": "Texture", + "sha1": "651ba424f75a6d0d69c5dd616101a22065ab6c81" + }, + { + "filename": "treasure_caves_sign", + "build-id": "ASSET_TEX3D_TROPICAL_TREASURECAVESSIGN", + "folder": "tropical", + "type": "Texture", + "sha1": "9ce77e27928d2df5458e13599919e05c200e5a11" + }, + { + "filename": "crescent_island_sign", + "build-id": "ASSET_TEX3D_TROPICAL_CRESCENTISLANDSIGN", + "folder": "tropical", + "type": "Texture", + "sha1": "ff609ffd2ad9e8bffd536bd5cc4076959cba80e2" + }, + { + "filename": "pirate_lagoon_sign", + "build-id": "ASSET_TEX3D_TROPICAL_PIRATELAGOONSIGN", + "folder": "tropical", + "type": "Texture", + "sha1": "1b694dcbcbb873e2b92f69998be693ab53041f77" + }, + { + "filename": "rocket_envmap", + "build-id": "ASSET_TEX3D_OBJECTS_ROCKETENVMAP", + "folder": "objects", + "type": "Texture", + "sha1": "8027f9f38bd1f3624e47a9f47830eab4cd98b3e0" + }, + { + "filename": "wizpig_belt_lowres", + "build-id": "ASSET_TEX3D_OBJECTS_WIZPIGBELTLOWRES", + "folder": "objects", + "type": "Texture", + "sha1": "37007a845b7dfaaa907d5f97c7ed78986602d142" + }, + { + "filename": "purple_wizpig_stone_dark", + "build-id": "ASSET_TEX3D_SPACE_PURPLEWIZPIGSTONEDARK", + "folder": "space", + "type": "Texture", + "sha1": "bfa28b05f9e832e956cec5fa31175b969266eaa0" + }, + { + "filename": "purple_wizpig_stone", + "build-id": "ASSET_TEX3D_SPACE_PURPLEWIZPIGSTONE", + "folder": "space", + "type": "Texture", + "sha1": "db9371268a684d58085b5486fc2413bc3a7a285b" + }, + { + "filename": "purple_wizpig_stone_wall", + "build-id": "ASSET_TEX3D_SPACE_PURPLEWIZPIGSTONEWALL", + "folder": "space", + "type": "Texture", + "sha1": "7d74c749ab367a354457c577b8a90b733654368f" + }, + { + "filename": "purple_wizpig_sand", + "build-id": "ASSET_TEX3D_SPACE_PURPLEWIZPIGSAND", + "folder": "space", + "type": "Texture", + "sha1": "fe46ab4e386c9f3c9e19cd2220042091b41b34b4" + }, + { + "filename": "wizpig_chair_seat_cushion", + "build-id": "ASSET_TEX3D_SPACE_WIZPIGCHAIRSEATCUSHION", + "folder": "space", + "type": "Texture", + "sha1": "a037f107a4f9a02c536c259f83e5e3171aee5d7a" + }, + { + "filename": "wizpig_char_seat", + "build-id": "ASSET_TEX3D_SPACE_WIZPIGCHARSEAT", + "folder": "space", + "type": "Texture", + "sha1": "0bb717d3088753ff116676f5674833da37f5f6e1" + }, + { + "filename": "rocket_envmap2", + "build-id": "ASSET_TEX3D_OBJECTS_ROCKETENVMAP2", + "folder": "objects", + "type": "Texture", + "sha1": "0eee4ed89584ca303d5a0f9957c3597825a9aca4" + }, + { + "filename": "haunted_wood_sign", + "build-id": "ASSET_TEX3D_MEDIEVAL_HAUNTEDWOODSIGN", + "folder": "medieval", + "type": "Texture", + "sha1": "9098e576869080c6758f48323d34bfe3c1ac4c83" + }, + { + "filename": "windmill_plains_sign", + "build-id": "ASSET_TEX3D_MEDIEVAL_WINDMILLPLAINSSIGN", + "folder": "medieval", + "type": "Texture", + "sha1": "52891acb84a9814320be94d68716e497836daf4e" + }, + { + "filename": "boulder_canyon_sign", + "build-id": "ASSET_TEX3D_MEDIEVAL_BOULDERCANYONSIGN", + "folder": "medieval", + "type": "Texture", + "sha1": "e0e22104fa8f7ca7d0548765d4e0f75aa43fdec9" + }, + { + "filename": "greenwood_village_sign_0", + "build-id": "ASSET_TEX3D_MEDIEVAL_GREENWOODVILLAGESIGN_0", + "folder": "medieval", + "type": "Texture", + "sha1": "43f99742518df8cf06aa67b234ae6817d5684f8e" + }, + { + "filename": "greenwood_village_sign_1", + "build-id": "ASSET_TEX3D_MEDIEVAL_GREENWOODVILLAGESIGN_1", + "folder": "medieval", + "type": "Texture", + "sha1": "83c127ece5caf209a76fc76c7d75ec7d9a64dedc" + }, + { + "filename": "spacedust_alley_sign", + "build-id": "ASSET_TEX3D_SPACE_SPACEDUSTALLEYSIGN", + "folder": "space", + "type": "Texture", + "sha1": "5b3163086d4cb8f970ed4ea432a5dc6d203fd39e" + }, + { + "filename": "darkmoon_caverns_sign_0", + "build-id": "ASSET_TEX3D_SPACE_DARKMOONCAVERNSSIGN_0", + "folder": "space", + "type": "Texture", + "sha1": "797780db5a65bbcf95a141c7556c663872fab4f3" + }, + { + "filename": "darkmoon_caverns_sign_1", + "build-id": "ASSET_TEX3D_SPACE_DARKMOONCAVERNSSIGN_1", + "folder": "space", + "type": "Texture", + "sha1": "6f65acb0901674123e443a3d776da59617a36963" + }, + { + "filename": "twilight_city_sign", + "build-id": "ASSET_TEX3D_UNUSED_TWILIGHTCITYSIGN", + "folder": "unused", + "type": "Texture", + "sha1": "e100bdd7759debf42d3e66b71f6ddfa13ae6f479" + }, + { + "filename": "spaceport_alpha_sign", + "build-id": "ASSET_TEX3D_SPACE_SPACEPORTALPHASIGN", + "folder": "space", + "type": "Texture", + "sha1": "3c5ea60f7bb6b5d96b018bf0a8f989c40b0d999e" + }, + { + "filename": "wizpig_room_arch_side_top", + "build-id": "ASSET_TEX3D_SPACE_WIZPIGROOMARCHSIDETOP", + "folder": "space", + "type": "Texture", + "sha1": "1b111f2593a647a27f7ccfac881dda1a210e9889" + }, + { + "filename": "wizpig_room_arch_front", + "build-id": "ASSET_TEX3D_SPACE_WIZPIGROOMARCHFRONT", + "folder": "space", + "type": "Texture", + "sha1": "d917ae3ef4dbfe434565355368a8af42f93c334a" + }, + { + "filename": "wizpig_room_arch_bottom", + "build-id": "ASSET_TEX3D_SPACE_WIZPIGROOMARCHBOTTOM", + "folder": "space", + "type": "Texture", + "sha1": "26e363819f44af87995e7bf75aeba61f449ffbee" + }, + { + "filename": "wizpig_room_arch_side_bottom", + "build-id": "ASSET_TEX3D_SPACE_WIZPIGROOMARCHSIDEBOTTOM", + "folder": "space", + "type": "Texture", + "sha1": "467556037b6f1a7f8b1fb32629cdd62565f80b33" + }, + { + "filename": "keith_pig_door", + "build-id": "ASSET_TEX3D_UNUSED_KEITHPIGDOOR", + "folder": "unused", + "type": "Texture", + "sha1": "e207435dae75538ea22a637e882be7dd8eca598f" + }, + { + "filename": "keith_pig_door2", + "build-id": "ASSET_TEX3D_UNUSED_KEITHPIGDOOR2", + "folder": "unused", + "type": "Texture", + "sha1": "f1d2c594346a25457a2780814d2a382b7f4d97e5" + }, + { + "filename": "keith_pig_door3", + "build-id": "ASSET_TEX3D_UNUSED_KEITHPIGDOOR3", + "folder": "unused", + "type": "Texture", + "sha1": "a233dcc497d64dcd847490857bfda92213351560" + }, + { + "filename": "spaceship_side_booster", + "build-id": "ASSET_TEX3D_OBJECTS_SPACESHIPSIDEBOOSTER", + "folder": "objects", + "type": "Texture", + "sha1": "9f5515bd7303e609846a62fec059a154713e3b06" + }, + { + "filename": "spaceship_unknown", + "build-id": "ASSET_TEX3D_UNUSED_SPACESHIPUNKNOWN", + "folder": "unused", + "type": "Texture", + "sha1": "70d3181534f6a20ad264faca088d535b87273a1e" + }, + { + "filename": "spaceship_unknown2", + "build-id": "ASSET_TEX3D_UNUSED_SPACESHIPUNKNOWN2", + "folder": "unused", + "type": "Texture", + "sha1": "b73000503f1bc1eb1e7d353f5bccca344ce187a9" + }, + { + "filename": "spaceship_unknown3", + "build-id": "ASSET_TEX3D_UNUSED_SPACESHIPUNKNOWN3", + "folder": "unused", + "type": "Texture", + "sha1": "23f8d7751dbbb4da7fb373f8ad33b422cb9802ec" + }, + { + "filename": "spaceship_unknown4", + "build-id": "ASSET_TEX3D_UNUSED_SPACESHIPUNKNOWN4", + "folder": "unused", + "type": "Texture", + "sha1": "59140fd42b81c167c4259d74514412b00dd41d5b" + }, + { + "filename": "big_planet", + "build-id": "ASSET_TEX3D_SPACE_BIGPLANET", + "folder": "space", + "type": "Texture", + "sha1": "0d73cf948c974662d78da282da2b2a350e8433c9" + }, + { + "filename": "wizpig_rocket_transparent", + "build-id": "ASSET_TEX3D_UNUSED_WIZPIGROCKETTRANSPARENT", + "folder": "unused", + "type": "Texture", + "sha1": "62a9d79fb37caa4eee76e219a952996b846e2e42" + }, + { + "filename": "candy_cane2", + "build-id": "ASSET_TEX3D_WINTER_CANDYCANE2", + "folder": "winter", + "type": "Texture", + "sha1": "33b673c6389dbbec06de383b692a0242feeb5e1c" + }, + { + "filename": "debug_red_green", + "build-id": "ASSET_TEX3D_COMMON_DEBUGREDGREEN", + "folder": "common", + "type": "Texture", + "sha1": "22428fd6ab56a7ca59c28dc8c1b5ac19daa12014" + }, + { + "filename": "first_place_0", + "build-id": "ASSET_TEX3D_COMMON_FIRSTPLACE_0", + "folder": "common", + "type": "Texture", + "sha1": "ab1054246e4f68c56690075b7d6cf525939a7957" + }, + { + "filename": "first_place_1", + "build-id": "ASSET_TEX3D_COMMON_FIRSTPLACE_1", + "folder": "common", + "type": "Texture", + "sha1": "edaf91edb228e2dd0302441fe4e50eba488b02f3" + }, + { + "filename": "first_place_2", + "build-id": "ASSET_TEX3D_COMMON_FIRSTPLACE_2", + "folder": "common", + "type": "Texture", + "sha1": "281e20d77d4c1bc29a82f731fb95a5d79e58fcad" + }, + { + "filename": "first_place_3", + "build-id": "ASSET_TEX3D_COMMON_FIRSTPLACE_3", + "folder": "common", + "type": "Texture", + "sha1": "3827c7e4136ff03a5a57879ed14539051099db8a" + }, + { + "filename": "small_bolt", + "build-id": "ASSET_TEX3D_UNUSED_SMALLBOLT", + "folder": "unused", + "type": "Texture", + "sha1": "ceeeb5cf14779372dd89aacfdbe9c04412c2fb50" + }, + { + "filename": "large_bolt", + "build-id": "ASSET_TEX3D_UNUSED_LARGEBOLT", + "folder": "unused", + "type": "Texture", + "sha1": "d31ec31d382db17bdd912c6af268977a4a482199" + }, + { + "filename": "purple_path", + "build-id": "ASSET_TEX3D_UNUSED_PURPLEPATH", + "folder": "unused", + "type": "Texture", + "sha1": "8cb374f8550511372885371d2843c20c48694bbf" + }, + { + "filename": "purple_path_edge", + "build-id": "ASSET_TEX3D_UNUSED_PURPLEPATHEDGE", + "folder": "unused", + "type": "Texture", + "sha1": "6c0ae85d09d3ca75ce42338a87fbbc1f2a3c1af2" + }, + { + "filename": "yellow_brick_tile3", + "build-id": "ASSET_TEX3D_COMMON_YELLOWBRICKTILE3", + "folder": "common", + "type": "Texture", + "sha1": "0af662a8c09524e4e726812809f5c6ca5a33e34f" + }, + { + "filename": "hanging_ice3", + "build-id": "ASSET_TEX3D_WINTER_HANGINGICE3", + "folder": "winter", + "type": "Texture", + "sha1": "4f6f7dfe75ae54c84d9cf674dab0af9cfef5a003" + }, + { + "filename": "brown_stone_snowy", + "build-id": "ASSET_TEX3D_WINTER_BROWNSTONESNOWY", + "folder": "winter", + "type": "Texture", + "sha1": "04e8cca0bdd8c73461b272c544ca6aafc6d0e239" + }, + { + "filename": "golden_taj_eye", + "build-id": "ASSET_TEX3D_OBJECTS_GOLDENTAJEYE", + "folder": "objects", + "type": "Texture", + "sha1": "c3f2a2be48a07845cb41f9f79ceddc3ea6885120" + }, + { + "filename": "yellow_trickytops_toes", + "build-id": "ASSET_TEX3D_OBJECTS_YELLOWTRICKYTOPSTOES", + "folder": "objects", + "type": "Texture", + "sha1": "ff935a1f5587ea1cfaba2d62947d0cd7e3dc2cbf" + }, + { + "filename": "yellow_trickytops_frill", + "build-id": "ASSET_TEX3D_OBJECTS_YELLOWTRICKYTOPSFRILL", + "folder": "objects", + "type": "Texture", + "sha1": "8ff05ad8fb2186e8ee63619fda635f44ca6f516a" + }, + { + "filename": "yellow_trickytops_back", + "build-id": "ASSET_TEX3D_OBJECTS_YELLOWTRICKYTOPSBACK", + "folder": "objects", + "type": "Texture", + "sha1": "4fe353a0789a9b0b28fd86e417015e4896ffe826" + }, + { + "filename": "pink_trickytops_toes", + "build-id": "ASSET_TEX3D_OBJECTS_PINKTRICKYTOPSTOES", + "folder": "objects", + "type": "Texture", + "sha1": "f3afa7eb6a42702a7a45ad569461f22a788893d2" + }, + { + "filename": "pink_trickytops_underside", + "build-id": "ASSET_TEX3D_OBJECTS_PINKTRICKYTOPSUNDERSIDE", + "folder": "objects", + "type": "Texture", + "sha1": "ab9c5c4e78cb29ba4e1a9e77493dbebd160a2214" + }, + { + "filename": "pink_trickytops_nose", + "build-id": "ASSET_TEX3D_OBJECTS_PINKTRICKYTOPSNOSE", + "folder": "objects", + "type": "Texture", + "sha1": "50b6a442d383305ddc2b8c531f406b21fdd2f593" + }, + { + "filename": "pink_trickytops_frill", + "build-id": "ASSET_TEX3D_OBJECTS_PINKTRICKYTOPSFRILL", + "folder": "objects", + "type": "Texture", + "sha1": "c0880d922e673bcbeb3618d955bc58c7f3478124" + }, + { + "filename": "pink_trickytops_back", + "build-id": "ASSET_TEX3D_OBJECTS_PINKTRICKYTOPSBACK", + "folder": "objects", + "type": "Texture", + "sha1": "9a80031792ee2f96e3ca4bf92d29d115e9319bd6" + }, + { + "filename": "pink_trickytops_eye", + "build-id": "ASSET_TEX3D_OBJECTS_PINKTRICKYTOPSEYE", + "folder": "objects", + "type": "Texture", + "sha1": "ddc522080f513b58e647fc1deecfa88699d5e5ac" + }, + { + "filename": "pink_trickytops_skin", + "build-id": "ASSET_TEX3D_OBJECTS_PINKTRICKYTOPSSKIN", + "folder": "objects", + "type": "Texture", + "sha1": "c91c142bb51ccb720c0ac827328444be44482765" + }, + { + "filename": "magnetfx", + "build-id": "ASSET_TEX3D_OBJECTS_MAGNETFX", + "folder": "objects", + "type": "Texture", + "sha1": "4e9de4299b4d6510a0e5a02578434661abe33863" + }, + { + "filename": "miniship_nose", + "build-id": "ASSET_TEX3D_OBJECTS_MINISHIPNOSE", + "folder": "objects", + "type": "Texture", + "sha1": "0132428fcc217f2b865bde6a07f4360091a1bef6" + }, + { + "filename": "miniship_hull", + "build-id": "ASSET_TEX3D_OBJECTS_MINISHIPHULL", + "folder": "objects", + "type": "Texture", + "sha1": "5f4b7401e0226119c0194db11b013da919a2e1b0" + }, + { + "filename": "miniship_exhast", + "build-id": "ASSET_TEX3D_OBJECTS_MINISHIPEXHAST", + "folder": "objects", + "type": "Texture", + "sha1": "d3e7fdbd613b998f7aa93ecaede305177881605e" + }, + { + "filename": "miniship_booster", + "build-id": "ASSET_TEX3D_OBJECTS_MINISHIPBOOSTER", + "folder": "objects", + "type": "Texture", + "sha1": "784669ea876a118be5412fe4a42efb7da7acf002" + }, + { + "filename": "miniship_booster_exhast", + "build-id": "ASSET_TEX3D_OBJECTS_MINISHIPBOOSTEREXHAST", + "folder": "objects", + "type": "Texture", + "sha1": "a5caf5c52b4ef14073ad6026756946b9ddbf228a" + }, + { + "filename": "fan_updraft", + "build-id": "ASSET_TEX3D_SPACE_FANUPDRAFT", + "folder": "space", + "type": "Texture", + "sha1": "fd7bea3fad2b4981aff1264b0a3bdf68a2496692" + }, + { + "filename": "n64_logo_yellow", + "build-id": "ASSET_TEX3D_OBJECTS_N64LOGOYELLOW", + "folder": "objects", + "type": "Texture", + "sha1": "b1d1cb128dc46aa23d356d7dde19743460eedf8f" + }, + { + "filename": "menu_tex_0", + "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_0", + "flip-tex": false, + "folder": "unused", + "type": "Texture", + "sha1": "fc5e937cf90f3d1ebf7001874a6f072b745dd294" + }, + { + "filename": "menu_tex_1", + "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_1", + "flip-tex": false, + "folder": "unused", + "type": "Texture", + "sha1": "d9c6164f5d648055b40a8c81bce273e5a82584d1" + }, + { + "filename": "menu_tex_2", + "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_2", + "flip-tex": false, + "folder": "unused", + "type": "Texture", + "sha1": "5769044e2beb14df0e6684e8a13b8d43df594d99" + }, + { + "filename": "menu_tex_3", + "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_3", + "flip-tex": false, + "folder": "unused", + "type": "Texture", + "sha1": "529e967836015d953bd79ad5691a4ffce9c678bf" + }, + { + "filename": "menu_tex_4", + "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_4", + "flip-tex": false, + "folder": "unused", + "type": "Texture", + "sha1": "e85e2e49841107a68b42ee26e293c0ddc760a060" + }, + { + "filename": "menu_tex_5", + "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_5", + "flip-tex": false, + "folder": "unused", + "type": "Texture", + "sha1": "45126a11303ef324ffbc47b644d582a4ad6186e0" + }, + { + "filename": "menu_tex_6", + "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_6", + "flip-tex": false, + "folder": "unused", + "type": "Texture", + "sha1": "c1058b4d93d25f7a4ce51ac100ff1443414f98fb" + }, + { + "filename": "menu_tex_7", + "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_7", + "flip-tex": false, + "folder": "unused", + "type": "Texture", + "sha1": "14c9194385ad066df670a874796d13679cf850a8" + }, + { + "filename": "menu_tex_8", + "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_8", + "flip-tex": false, + "folder": "unused", + "type": "Texture", + "sha1": "4a7d8b2ba5ffed6b9d315f3a044d14e1d671f848" + }, + { + "filename": "menu_tex_9", + "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_9", + "flip-tex": false, + "folder": "unused", + "type": "Texture", + "sha1": "166fe8e9e2e47a601a6100ee78a458210a7ee393" + }, + { + "filename": "menu_tex_10", + "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_10", + "flip-tex": false, + "folder": "unused", + "type": "Texture", + "sha1": "307877417760154c4ce9f14c70e3087dd324a023" + }, + { + "filename": "menu_tex_11", + "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_11", + "flip-tex": false, + "folder": "unused", + "type": "Texture", + "sha1": "e68af2d01025fd8d7460d2cb81bc0e08f2b09a06" + }, + { + "filename": "menu_tex_12", + "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_12", + "flip-tex": false, + "folder": "unused", + "type": "Texture", + "sha1": "0d7bc09261eec7b2bc032e8c74999f5c39ddfdbc" + }, + { + "filename": "menu_tex_13", + "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_13", + "flip-tex": false, + "folder": "unused", + "type": "Texture", + "sha1": "6e17b6f2916b8c2bad1954b25f96d5e4bd7c78d8" + }, + { + "filename": "menu_tex_14", + "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_14", + "flip-tex": false, + "folder": "unused", + "type": "Texture", + "sha1": "e037d35f0631fd97d901073d0af7f73e707e8a34" + }, + { + "filename": "menu_tex_15", + "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_15", + "flip-tex": false, + "folder": "unused", + "type": "Texture", + "sha1": "33e9016e3066b2cfe64cf744f860194871c75fdb" + }, + { + "filename": "menu_tex_16", + "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_16", + "flip-tex": false, + "folder": "unused", + "type": "Texture", + "sha1": "b122ed2b21ed1b9130f791d294c0b53c38f51630" + }, + { + "filename": "menu_tex_17", + "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_17", + "flip-tex": false, + "folder": "unused", + "type": "Texture", + "sha1": "d6cfd09625a3a803c8fed92438de0175d729c5d4" + }, + { + "filename": "menu_tex_18", + "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_18", + "flip-tex": false, + "folder": "unused", + "type": "Texture", + "sha1": "e2c5021257604c7955951b5bb7871d78c7851bcb" + }, + { + "filename": "menu_tex_19", + "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_19", + "flip-tex": false, + "folder": "unused", + "type": "Texture", + "sha1": "5feaae835ac870a6f2ac73540f3009218647bf8e" + }, + { + "filename": "menu_tex_20", + "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_20", + "flip-tex": false, + "folder": "unused", + "type": "Texture", + "sha1": "387afb0a04782f0611c4c5604dc1d7ae168b40c0" + }, + { + "filename": "menu_tex_21", + "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_21", + "flip-tex": false, + "folder": "unused", + "type": "Texture", + "sha1": "16a9dfe67639c628803de2f1f58ee27e48825645" + }, + { + "filename": "menu_tex_22", + "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_22", + "flip-tex": false, + "folder": "unused", + "type": "Texture", + "sha1": "2af3618e7c960b5f79d835cf7f08e5698b5299d4" + }, + { + "filename": "menu_tex_23", + "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_23", + "flip-tex": false, + "folder": "unused", + "type": "Texture", + "sha1": "271d383256bec2e1dc0e5802515fa31d891413a3" + }, + { + "filename": "menu_tex_24", + "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_24", + "flip-tex": false, + "folder": "unused", + "type": "Texture", + "sha1": "2ec28608e9d005836bce37e3325fbcacefccea42" + }, + { + "filename": "menu_tex_25", + "build-id": "ASSET_TEX3D_UNUSED_MENUTEX_25", + "flip-tex": false, + "folder": "unused", + "type": "Texture", + "sha1": "51d8fb45ebcda922a84bbd120414da682f28aeeb" + }, + { + "filename": "plane_shadow", + "build-id": "ASSET_TEX3D_UNUSED_PLANESHADOW", + "flip-tex": false, + "folder": "unused", + "type": "Texture", + "sha1": "7eaaa588b906c71ec72f3aea03d13512869dd3b6" + }, + { + "filename": "magic_carpet_shadow", + "build-id": "ASSET_TEX3D_UNUSED_MAGICCARPETSHADOW", + "flip-tex": false, + "folder": "unused", + "type": "Texture", + "sha1": "6664f9558866ad85f5c54bbcc652921d48b3c2e0" + }, + { + "filename": "unknown_effect", + "build-id": "ASSET_TEX3D_UNUSED_UNKNOWNEFFECT", + "folder": "unused", + "type": "Texture", + "sha1": "e4a533b3a05dbdd6b80993b2220fd80a42fd4ee8" + }, + { + "filename": "trademark", + "build-id": "ASSET_TEX3D_OBJECTS_TRADEMARK", + "folder": "objects", + "type": "Texture", + "sha1": "a58fb9bb9ed278756b44290b1baba2729ece10f2" + }, + { + "filename": "tanstonetile", + "build-id": "ASSET_TEX3D_MEDIEVAL_TANSTONETILE", + "folder": "medieval", + "type": "Texture", + "sha1": "abc305145c2e3dde5d9e94c171d5e526af5c6dd2" + }, + { + "filename": "icicle_pyramid_top_entrance_tex_unknown", + "build-id": "ASSET_TEX3D_WINTER_ICICLEPYRAMIDTOPENTRANCETEXUNKNOWN", + "folder": "winter", + "type": "Texture", + "sha1": "ed96f73f76ecd0254646f6983e577275a2f35340" + }, + { + "filename": "star_city_sign", + "build-id": "ASSET_TEX3D_SPACE_STARCITYSIGN", + "folder": "space", + "type": "Texture", + "sha1": "0327470512229b87e313600e4fe78a2e766b9cd9" + }, + { + "filename": "level_door_silver_balloon_top_right", + "build-id": "ASSET_TEX3D_OBJECTS_LEVELDOORSILVERBALLOONTOPRIGHT", + "folder": "objects", + "type": "Texture", + "sha1": "52c965fb3c983b769e244b00bb32d226c62c7b2f" + }, + { + "filename": "level_door_silver_balloon_top_left", + "build-id": "ASSET_TEX3D_OBJECTS_LEVELDOORSILVERBALLOONTOPLEFT", + "folder": "objects", + "type": "Texture", + "sha1": "89e64d8ea6dafd297cdf8a45c693735fa5a0946c" + }, + { + "filename": "level_door_silver_balloon_bottom_right", + "build-id": "ASSET_TEX3D_OBJECTS_LEVELDOORSILVERBALLOONBOTTOMRIGHT", + "folder": "objects", + "type": "Texture", + "sha1": "9f0c529509502ea8879fe1689c2812d454e1771f" + }, + { + "filename": "level_door_silver_balloon_bottom_left", + "build-id": "ASSET_TEX3D_OBJECTS_LEVELDOORSILVERBALLOONBOTTOMLEFT", + "folder": "objects", + "type": "Texture", + "sha1": "24721c094d88edc7d19440e44442f7ca56b223a5" + }, + { + "filename": "level_door_silver_balloon_bottom_fullclear", + "build-id": "ASSET_TEX3D_OBJECTS_LEVELDOORSILVERBALLOONBOTTOMFULLCLEAR", + "folder": "objects", + "type": "Texture", + "sha1": "b3aed19d3a62c6618cf1e1221c22209bc0e89397" + }, + { + "filename": "level_door_silver_balloon_top_fullclear", + "build-id": "ASSET_TEX3D_OBJECTS_LEVELDOORSILVERBALLOONTOPFULLCLEAR", + "folder": "objects", + "type": "Texture", + "sha1": "7b023d50ae1409830fceddd7533fb7cf93f20cb6" + }, + { + "filename": "silver_balloon_envmap", + "build-id": "ASSET_TEX3D_OBJECTS_SILVERBALLOONENVMAP", + "folder": "objects", + "type": "Texture", + "sha1": "ecd06fd84fb573a586a89d1f89f441e08cf7851d" + }, + { + "filename": "level_door_silver_number_top", + "build-id": "ASSET_TEX3D_OBJECTS_LEVELDOORSILVERNUMBERTOP", + "folder": "objects", + "type": "Texture", + "sha1": "a95f30c8efc687034e25996f8c8bd9277092f008" + }, + { + "filename": "level_door_silver_number_bottom", + "build-id": "ASSET_TEX3D_OBJECTS_LEVELDOORSILVERNUMBERBOTTOM", + "folder": "objects", + "type": "Texture", + "sha1": "e56e3aa371460cfeb2f55a1cd5f1dd839f6a9678" + }, + { + "filename": "spaceship3_window", + "build-id": "ASSET_TEX3D_OBJECTS_SPACESHIP3WINDOW", + "folder": "objects", + "type": "Texture", + "sha1": "e92f2448ba74f6721e83acbe8a369eb34427aa97" + }, + { + "filename": "spaceship3_hull", + "build-id": "ASSET_TEX3D_OBJECTS_SPACESHIP3HULL", + "folder": "objects", + "type": "Texture", + "sha1": "5f4b7401e0226119c0194db11b013da919a2e1b0" + }, + { + "filename": "spaceship3_booster", + "build-id": "ASSET_TEX3D_OBJECTS_SPACESHIP3BOOSTER", + "folder": "objects", + "type": "Texture", + "sha1": "169eddbdfceec6414bdc80543bf7a4a187707128" + }, + { + "filename": "spaceship3_front", + "build-id": "ASSET_TEX3D_OBJECTS_SPACESHIP3FRONT", + "folder": "objects", + "type": "Texture", + "sha1": "539d4e8e5c7dc86f274439a8c51bd3c0b0421ff9" + }, + { + "filename": "yellow_brick_tile4", + "build-id": "ASSET_TEX3D_COMMON_YELLOWBRICKTILE4", + "folder": "common", + "type": "Texture", + "sha1": "abc305145c2e3dde5d9e94c171d5e526af5c6dd2" + }, + { + "filename": "void", + "build-id": "ASSET_TEX3D_COMMON_VOID", + "folder": "common", + "type": "Texture", + "sha1": "a68eb0b7fa4107b35b1cf60477ab2bf389aadf19" + }, + { + "filename": "debug_fire_mountain_ceiling", + "build-id": "ASSET_TEX3D_COMMON_DEBUGFIREMOUNTAINCEILING", + "folder": "common", + "type": "Texture", + "sha1": "b815bc1c9bba628edd7ef5dc83332f59103e2395" + }, + { + "filename": "yellow_arrow_sign2", + "build-id": "ASSET_TEX3D_UNUSED_YELLOWARROWSIGN2", + "folder": "unused", + "type": "Texture", + "sha1": "69cad354d436abb37dd95b448277c8f20a087013" + }, + { + "filename": "finish_line_flag_snowy2_0", + "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGSNOWY2_0", + "folder": "common", + "type": "Texture", + "sha1": "091f88cc651981070485ebca27baad8f376e77d2" + }, + { + "filename": "finish_line_flag_snowy2_1", + "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGSNOWY2_1", + "folder": "common", + "type": "Texture", + "sha1": "e5671787d56083b930dd17425d723a6042d1646f" + }, + { + "filename": "finish_line_flag_snowy2_2", + "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGSNOWY2_2", + "folder": "common", + "type": "Texture", + "sha1": "5244eeac2d43e2b77656bd3b61a9522b2e953c9c" + }, + { + "filename": "finish_line_flag_snowy2_3", + "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGSNOWY2_3", + "folder": "common", + "type": "Texture", + "sha1": "bfdfb3be63bbee0011996cfce4805a7aec575d21" + }, + { + "filename": "finish_line_flag_snowy2_4", + "build-id": "ASSET_TEX3D_COMMON_FINISHLINEFLAGSNOWY2_4", + "folder": "common", + "type": "Texture", + "sha1": "080db18cd5f3378f6a4057d6d9c76473d60ba195" + }, + { + "filename": "waterfall3", + "build-id": "ASSET_TEX3D_COMMON_WATERFALL3", + "folder": "common", + "type": "Texture", + "sha1": "f98f168b1842f10b4b998153237bf3f52fed3b17" + }, + { + "filename": "yellow_brick_tile5", + "build-id": "ASSET_TEX3D_COMMON_YELLOWBRICKTILE5", + "folder": "common", + "type": "Texture", + "sha1": "abc305145c2e3dde5d9e94c171d5e526af5c6dd2" + }, + { + "filename": "red_arrow_sign4", + "build-id": "ASSET_TEX3D_COMMON_REDARROWSIGN4", + "folder": "common", + "type": "Texture", + "sha1": "cfd448cdd3f12b47e93d7195941e28d7047a1b62" + }, + { + "filename": "yellow_brick_tile6", + "build-id": "ASSET_TEX3D_COMMON_YELLOWBRICKTILE6", + "folder": "common", + "type": "Texture", + "sha1": "abc305145c2e3dde5d9e94c171d5e526af5c6dd2" + }, + { + "filename": "village_grey_wall2", + "build-id": "ASSET_TEX3D_MEDIEVAL_VILLAGEGREYWALL2", + "folder": "medieval", + "type": "Texture", + "sha1": "3ff20ce70ba43a6373ae54be7a9532dcdb5e76da" + }, + { + "filename": "yellow_brick_tile7", + "build-id": "ASSET_TEX3D_COMMON_YELLOWBRICKTILE7", + "folder": "common", + "type": "Texture", + "sha1": "4f93ca500b1dbaed2bd83100e47bb2bc6b331c9a" + }, + { + "filename": "sand6", + "build-id": "ASSET_TEX3D_COMMON_SAND6", + "folder": "common", + "type": "Texture", + "sha1": "d8ccaedb544bd1bc5b4fa4135152ee8c8ffeeeca" + }, + { + "filename": "palm_tree_shadow_long", + "build-id": "ASSET_TEX3D_TROPICAL_PALMTREESHADOWLONG", + "folder": "tropical", + "type": "Texture", + "sha1": "a8faf24769e2a2176ffd2c8ba7315f74c0c10309" + }, + { + "filename": "debug_black_white", + "build-id": "ASSET_TEX3D_COMMON_DEBUGBLACKWHITE", + "folder": "common", + "type": "Texture", + "sha1": "a1a0e6f1f6a516cd2266742e8b7dc7c383f7f346" + }, + { + "filename": "rareware_sign_non_blinking", + "build-id": "ASSET_TEX3D_SPACE_RAREWARESIGNNONBLINKING", + "folder": "space", + "type": "Texture", + "sha1": "3e774a82c6e36e4959fb8c3d536aa78589b2cfc9" + }, + { + "filename": "smallfont_0", + "build-id": "ASSET_TEX2D_SMALLFONT_0", + "folder": "font/smallfont", + "type": "Texture", + "sha1": "dda263a279c6c209a30c1bba952aa99509714475" + }, + { + "filename": "smallfont_1", + "build-id": "ASSET_TEX2D_SMALLFONT_1", + "folder": "font/smallfont", + "type": "Texture", + "sha1": "a66c6ad93e0904edf89e17e45da738849deadfb9" + }, + { + "filename": "smallfont_2", + "build-id": "ASSET_TEX2D_SMALLFONT_2", + "folder": "font/smallfont", + "type": "Texture", + "sha1": "a1ab2ff1d5cc4620362f40a41704ffdccce4f794" + }, + { + "filename": "reticle_square", + "build-id": "ASSET_TEX2D_HUD_RETICLESQUARE", + "folder": "hud", + "type": "Texture", + "sha1": "9e4a242de372222baee5d213e5d7f5f5cba74431" + }, + { + "filename": "reticle_circle", + "build-id": "ASSET_TEX2D_HUD_RETICLECIRCLE", + "folder": "hud", + "type": "Texture", + "sha1": "b657d6b1b0eedcf82be486804dd52010fb51b61a" + }, + { + "filename": "reticle_x", + "build-id": "ASSET_TEX2D_HUD_RETICLEX", + "folder": "hud", + "type": "Texture", + "sha1": "cf0523aad3cc64bef42661e6efa713c25d931fa9" + }, + { + "filename": "car_outline", + "build-id": "ASSET_TEX2D_UNUSED_CAROUTLINE", + "flip-tex": true, + "folder": "unused", + "type": "Texture", + "sha1": "faea5ed77dfcebb5763e011df076392bc9882611" + }, + { + "filename": "transparent", + "build-id": "ASSET_TEX2D_UNUSED_TRANSPARENT", + "folder": "unused", + "type": "Texture", + "sha1": "208789deba25636b742b03f4fb88f2532cf8954c" + }, + { + "filename": "car", + "build-id": "ASSET_TEX2D_SHADOW_CAR", + "folder": "shadow", + "type": "Texture", + "sha1": "d9b4128d0ef397fd2a21d1ada2805edead2b3464" + }, + { + "filename": "circle", + "build-id": "ASSET_TEX2D_SHADOW_CIRCLE", + "folder": "shadow", + "type": "Texture", + "sha1": "2c910d23ed7cc0bd7ba6cd8631badf9126a6badc" + }, + { + "filename": "plane", + "build-id": "ASSET_TEX2D_SHADOW_PLANE", + "folder": "shadow", + "type": "Texture", + "sha1": "7eaaa588b906c71ec72f3aea03d13512869dd3b6" + }, + { + "filename": "magic_carpet", + "build-id": "ASSET_TEX2D_SHADOW_MAGICCARPET", + "folder": "shadow", + "type": "Texture", + "sha1": "6664f9558866ad85f5c54bbcc652921d48b3c2e0" + }, + { + "filename": "wizpig_rocket", + "build-id": "ASSET_TEX2D_SHADOW_WIZPIGROCKET", + "folder": "shadow", + "type": "Texture", + "sha1": "0bdf91d7c103e54d33754c427b442e0e7b2101c9" + }, + { + "filename": "unknown", + "build-id": "ASSET_TEX2D_SHADOW_UNKNOWN", + "folder": "shadow", + "type": "Texture", + "sha1": "6afad45c625fc1a4d4d2add1bf55ef24e24f9c77" + }, + { + "filename": "pterodactyl", + "build-id": "ASSET_TEX2D_SHADOW_PTERODACTYL", + "folder": "shadow", + "type": "Texture", + "sha1": "a046f05dd03edd112103eb796a95d4a7dcabdc95" + }, + { + "filename": "smokey", + "build-id": "ASSET_TEX2D_SHADOW_SMOKEY", + "folder": "shadow", + "type": "Texture", + "sha1": "a345e63faf3bb8b6feb9a618287f300cbf3a0a4d" + }, + { + "filename": "ground_zipper", + "build-id": "ASSET_TEX2D_OBJECTS_GROUNDZIPPER", + "flip-tex": true, + "folder": "objects", + "type": "Texture", + "sha1": "040a042ad4fbce6153ad1493c2ef7e25eceae80a" + }, + { + "filename": "fossil_canyon", + "build-id": "ASSET_TEX2D_MINIMAP_FOSSILCANYON", + "folder": "minimap", + "type": "Texture", + "sha1": "972ee77601cb73d33d709703e25b00b4bc328f3a" + }, + { + "filename": "ancient_lake", + "build-id": "ASSET_TEX2D_MINIMAP_ANCIENTLAKE", + "folder": "minimap", + "type": "Texture", + "sha1": "91c154158f8ec59fe1c3e53c9e48c96d71a4139f" + }, + { + "filename": "pirate_lagoon", + "build-id": "ASSET_TEX2D_MINIMAP_PIRATELAGOON", + "folder": "minimap", + "type": "Texture", + "sha1": "e6cd6bd43ab8ab22aa072994940718e29647cc4b" + }, + { + "filename": "whale_bay", + "build-id": "ASSET_TEX2D_MINIMAP_WHALEBAY", + "folder": "minimap", + "type": "Texture", + "sha1": "76f5f0262f07ff1c6520e974a03549ac861bb410" + }, + { + "filename": "snowball_valley", + "build-id": "ASSET_TEX2D_MINIMAP_SNOWBALLVALLEY", + "folder": "minimap", + "type": "Texture", + "sha1": "77bb313fcd20109a85c11269ec31e237f0bff895" + }, + { + "filename": "hot_top_volcano", + "build-id": "ASSET_TEX2D_MINIMAP_HOTTOPVOLCANO", + "folder": "minimap", + "type": "Texture", + "sha1": "5a529f841ddcdd7d930942a35ba4a26ea84d0c49" + }, + { + "filename": "crescent_island", + "build-id": "ASSET_TEX2D_MINIMAP_CRESCENTISLAND", + "folder": "minimap", + "type": "Texture", + "sha1": "edaa728ddd0aeff8760ce043e4bca977e6238bca" + }, + { + "filename": "unused", + "build-id": "ASSET_TEX2D_MINIMAP_UNUSED", + "folder": "minimap", + "type": "Texture", + "sha1": "4887550bdc4857c84933c13e524a1b5c8036af80" + }, + { + "filename": "everfrost_peak", + "build-id": "ASSET_TEX2D_MINIMAP_EVERFROSTPEAK", + "folder": "minimap", + "type": "Texture", + "sha1": "d38353a71cc8396dbe24e25922ce65d777510589" + }, + { + "filename": "unused2", + "build-id": "ASSET_TEX2D_MINIMAP_UNUSED2", + "folder": "minimap", + "type": "Texture", + "sha1": "1e342fa3cd34b1472de83b0d90f7e89ecc2de1ba" + }, + { + "filename": "walrus_cove", + "build-id": "ASSET_TEX2D_MINIMAP_WALRUSCOVE", + "folder": "minimap", + "type": "Texture", + "sha1": "80c256ff32c1620947dc39ab20ca4d4ad016af92" + }, + { + "filename": "unused3", + "build-id": "ASSET_TEX2D_MINIMAP_UNUSED3", + "folder": "minimap", + "type": "Texture", + "sha1": "a93f47bb681a4c1e68a192c0a05d251ccb63981d" + }, + { + "filename": "boulder_canyon", + "build-id": "ASSET_TEX2D_MINIMAP_BOULDERCANYON", + "folder": "minimap", + "type": "Texture", + "sha1": "7908dbdd1b1564b716d0a2646517799e2579b107" + }, + { + "filename": "smokey_castle", + "build-id": "ASSET_TEX2D_MINIMAP_SMOKEYCASTLE", + "folder": "minimap", + "type": "Texture", + "sha1": "fea403395268d03c5e2343f0a34126725a259134" + }, + { + "filename": "central_area", + "build-id": "ASSET_TEX2D_MINIMAP_CENTRALAREA", + "folder": "minimap", + "type": "Texture", + "sha1": "e8422e211c5be4824abbedd544b7da2db39844c4" + }, + { + "filename": "fire_mountain", + "build-id": "ASSET_TEX2D_MINIMAP_FIREMOUNTAIN", + "folder": "minimap", + "type": "Texture", + "sha1": "b53744a58b2fe36c09f13836e86312a4f31be69d" + }, + { + "filename": "space_port_alpha", + "build-id": "ASSET_TEX2D_MINIMAP_SPACEPORTALPHA", + "folder": "minimap", + "type": "Texture", + "sha1": "48e12f3976c67ce7ab7a2c616161b960000fe968" + }, + { + "filename": "spacedust_alley", + "build-id": "ASSET_TEX2D_MINIMAP_SPACEDUSTALLEY", + "folder": "minimap", + "type": "Texture", + "sha1": "2bad30b5fe942d798180b45a37fa2bc7bd89f394" + }, + { + "filename": "treasure_caves", + "build-id": "ASSET_TEX2D_MINIMAP_TREASURECAVES", + "folder": "minimap", + "type": "Texture", + "sha1": "48a3e69777d6971f0c1b587e5c686a17cef7808c" + }, + { + "filename": "greenwood_village", + "build-id": "ASSET_TEX2D_MINIMAP_GREENWOODVILLAGE", + "folder": "minimap", + "type": "Texture", + "sha1": "fdef02f14af96a8baf1e4f6fc7ce72d78ea10dde" + }, + { + "filename": "darkmoon_caverns", + "build-id": "ASSET_TEX2D_MINIMAP_DARKMOONCAVERNS", + "folder": "minimap", + "type": "Texture", + "sha1": "b5010ab74f2d9eafbdc290b63ad8396d4be26d89" + }, + { + "filename": "star_city", + "build-id": "ASSET_TEX2D_MINIMAP_STARCITY", + "folder": "minimap", + "type": "Texture", + "sha1": "906a38efd8010e751129ee36a2fc9ae47670c638" + }, + { + "filename": "windmill_plains", + "build-id": "ASSET_TEX2D_MINIMAP_WINDMILLPLAINS", + "folder": "minimap", + "type": "Texture", + "sha1": "44ca2578a32adbf1b94d6fb3be08d5885cabbb75" + }, + { + "filename": "frosty_village", + "build-id": "ASSET_TEX2D_MINIMAP_FROSTYVILLAGE", + "folder": "minimap", + "type": "Texture", + "sha1": "8dcc4a1942d67372256f850b5cd6ba23cb826af1" + }, + { + "filename": "darkwater_beach", + "build-id": "ASSET_TEX2D_MINIMAP_DARKWATERBEACH", + "folder": "minimap", + "type": "Texture", + "sha1": "17582d87d74634e6cdc0103fa5ba25b46cd00a27" + }, + { + "filename": "jungle_falls", + "build-id": "ASSET_TEX2D_MINIMAP_JUNGLEFALLS", + "folder": "minimap", + "type": "Texture", + "sha1": "aeeade08c8a558c7795043fa7df5eefb17d37e42" + }, + { + "filename": "icicle_pyramid", + "build-id": "ASSET_TEX2D_MINIMAP_ICICLEPYRAMID", + "folder": "minimap", + "type": "Texture", + "sha1": "1bf51efb9d7a5a3b17eb6db8e42386a2413bd5a0" + }, + { + "filename": "haunted_woods", + "build-id": "ASSET_TEX2D_MINIMAP_HAUNTEDWOODS", + "folder": "minimap", + "type": "Texture", + "sha1": "8bc7de6f357f307bc119c320c80f4edba85177ba" + }, + { + "filename": "bluey", + "build-id": "ASSET_TEX2D_MINIMAP_BLUEY", + "folder": "minimap", + "type": "Texture", + "sha1": "a12479a37b8405929f31433acd74c9745eec190e" + }, + { + "filename": "bubbler", + "build-id": "ASSET_TEX2D_MINIMAP_BUBBLER", + "folder": "minimap", + "type": "Texture", + "sha1": "8c9532caa5d1cc688949ceb5023fc47ebe38ff9c" + }, + { + "filename": "smokey", + "build-id": "ASSET_TEX2D_MINIMAP_SMOKEY", + "folder": "minimap", + "type": "Texture", + "sha1": "ba3ebdb452819737c80bc01142816f5c5f176652" + }, + { + "filename": "trickytops", + "build-id": "ASSET_TEX2D_MINIMAP_TRICKYTOPS", + "folder": "minimap", + "type": "Texture", + "sha1": "104e0a8ed86f5d7c1d49d3311f3dc4a0a2e7624d" + }, + { + "filename": "wizpig1", + "build-id": "ASSET_TEX2D_MINIMAP_WIZPIG1", + "folder": "minimap", + "type": "Texture", + "sha1": "3dcab74c5beedd8adbd1bebb524e501049d59470" + }, + { + "filename": "wizpig2", + "build-id": "ASSET_TEX2D_MINIMAP_WIZPIG2", + "folder": "minimap", + "type": "Texture", + "sha1": "3b0792cea4439a6c2a4951565c66c20dda1b371f" + }, + { + "filename": "snowflake", + "build-id": "ASSET_TEX2D_WEATHER_SNOWFLAKE", + "folder": "weather", + "type": "Texture", + "sha1": "af7ea6398afbb5db73325433efcfc85ba7f33766" + }, + { + "filename": "rain", + "build-id": "ASSET_TEX2D_WEATHER_RAIN", + "folder": "weather", + "type": "Texture", + "sha1": "7567aeefe3fd81933edc87a87c59b5fe9734bddc" + }, + { + "filename": "unknown", + "build-id": "ASSET_TEX2D_WEATHER_UNKNOWN", + "folder": "weather", + "type": "Texture", + "sha1": "ca652efb3e60933f9e7e923c33fbda8e9df40572" + }, + { + "filename": "rain_drop_0", + "build-id": "ASSET_TEX2D_WEATHER_RAINDROP_0", + "folder": "weather", + "type": "Texture", + "sha1": "a66b443c5e2a0e864fc905d6e8f34f0a57abd002" + }, + { + "filename": "rain_drop_1", + "build-id": "ASSET_TEX2D_WEATHER_RAINDROP_1", + "folder": "weather", + "type": "Texture", + "sha1": "8a2082a8373f271f7b1b494865d7bf1306e54fc0" + }, + { + "filename": "rain_drop_2", + "build-id": "ASSET_TEX2D_WEATHER_RAINDROP_2", + "folder": "weather", + "type": "Texture", + "sha1": "541892487a838dd4c9e6c31208c97f8d39be70dc" + }, + { + "filename": "rain_drop_3", + "build-id": "ASSET_TEX2D_WEATHER_RAINDROP_3", + "folder": "weather", + "type": "Texture", + "sha1": "f07f49fb58424888274411f66d54ad4e719ba720" + }, + { + "filename": "rain_drop_4", + "build-id": "ASSET_TEX2D_WEATHER_RAINDROP_4", + "folder": "weather", + "type": "Texture", + "sha1": "a16c02ff01ca2fd83730698bd336d1167b94617e" + }, + { + "filename": "snowflake2", + "build-id": "ASSET_TEX2D_WEATHER_SNOWFLAKE2", + "folder": "weather", + "type": "Texture", + "sha1": "e016d5f93b376fe3b655612d46648dc3431820e1" + }, + { + "filename": "smoke", + "build-id": "ASSET_TEX2D_PARTICLE_SMOKE", + "folder": "particles", + "type": "Texture", + "sha1": "e626833755931a7b56684c3a2a7d2b0465f209cb" + }, + { + "filename": "smoke2", + "build-id": "ASSET_TEX2D_PARTICLE_SMOKE2", + "folder": "particles", + "type": "Texture", + "sha1": "03d41b8c4cbf4b85828da377bcebb1fb94fd9392" + }, + { + "filename": "animated_unknown", + "build-id": "ASSET_TEX2D_UNKNOWN_ANIMATEDUNKNOWN", + "folder": "unknown", + "type": "Texture", + "sha1": "2c2f465a39e05275277d918f27c47b0f7ab6267d" + }, + { + "filename": "animated_unknown2", + "build-id": "ASSET_TEX2D_UNKNOWN_ANIMATEDUNKNOWN2", + "folder": "unknown", + "type": "Texture", + "sha1": "d7878909153563d2472869dd70f0a36c0ef2870b" + }, + { + "filename": "lensflare_1", + "build-id": "ASSET_TEX2D_OBJECTS_LENSFLARE1", + "folder": "objects", + "type": "Texture", + "sha1": "15d66d64bdd77840b968f000a34563a5043741d8" + }, + { + "filename": "lensflare_2", + "build-id": "ASSET_TEX2D_OBJECTS_LENSFLARE2", + "folder": "objects", + "type": "Texture", + "sha1": "f6c3090abc55106de924458a90ae08f05d8ec63c" + }, + { + "filename": "lensflare_3", + "build-id": "ASSET_TEX2D_OBJECTS_LENSFLARE3", + "folder": "objects", + "type": "Texture", + "sha1": "c6e6e4195703fb93f625dbf779ad9cd42a982b31" + }, + { + "filename": "waterfall", + "build-id": "ASSET_TEX2D_UNKNOWN_WATERFALL", + "folder": "unknown", + "type": "Texture", + "sha1": "39b7c478fc9b978e01fbbc1cdefae98d74063417" + }, + { + "filename": "waterfall2", + "build-id": "ASSET_TEX2D_UNKNOWN_WATERFALL2", + "folder": "unknown", + "type": "Texture", + "sha1": "38625fee425bb4ea1b2238d93dac6ad7278b89fa" + }, + { + "filename": "white_clouds", + "build-id": "ASSET_TEX2D_UNKNOWN_WHITECLOUDS", + "folder": "unknown", + "type": "Texture", + "sha1": "1e1854c638f97e33057dbe6761465899f88587cc" + }, + { + "filename": "tree_leaf", + "build-id": "ASSET_TEX2D_PARTICLES_TREELEAF", + "folder": "particles", + "type": "Texture", + "sha1": "5e5ea9031e8c6886201266bd9cb604e0ba0c7cd3" + }, + { + "filename": "red_green_unknown", + "build-id": "ASSET_TEX2D_UNKNOWN_REDGREENUNKNOWN", + "folder": "unknown", + "type": "Texture", + "sha1": "8eacd4aa5d43dfb0333efe2e6d4044928faacc73" + }, + { + "filename": "school_of_fish", + "build-id": "ASSET_TEX2D_UNKNOWN_SCHOOLOFFISH", + "folder": "unknown", + "type": "Texture", + "sha1": "66502b0470c1b15a98062019d614e35062333dad" + }, + { + "filename": "butterfly_orange", + "build-id": "ASSET_TEX2D_UNKNOWN_BUTTERFLYORANGE", + "flip-tex": true, + "folder": "unknown", + "type": "Texture", + "sha1": "e43ccac253a17cbf6998d072f1f0e51391378057" + }, + { + "filename": "butterfly_purple", + "build-id": "ASSET_TEX2D_UNKNOWN_BUTTERFLYPURPLE", + "flip-tex": true, + "folder": "unknown", + "type": "Texture", + "sha1": "54a7c4d297a068504107c8529fc0999441e23852" + }, + { + "filename": "bat", + "build-id": "ASSET_TEX2D_UNKNOWN_BAT", + "flip-tex": true, + "folder": "unknown", + "type": "Texture", + "sha1": "1b30ad69258c8a835c7ababfd071396621bae5e8" + }, + { + "filename": "fish", + "build-id": "ASSET_TEX2D_UNKNOWN_FISH", + "folder": "unknown", + "type": "Texture", + "sha1": "f56eebec0b0099ac053507d1e2c8c88388c0b67b" + }, + { + "filename": "brown_egg", + "build-id": "ASSET_TEX2D_UNKNOWN_BROWNEGG", + "folder": "unknown", + "type": "Texture", + "sha1": "44539cc516347b41bbdcd74cb5c51da78e33482f" + }, + { + "filename": "smoke3", + "build-id": "ASSET_TEX2D_PARTICLES_SMOKE3", + "folder": "particles", + "type": "Texture", + "sha1": "9ebf482fbeb2cfaa3fce001241e781aa51cd791a" + }, + { + "filename": "smoke4_0", + "build-id": "ASSET_TEX2D_PARTICLES_SMOKE4_0", + "folder": "particles", + "type": "Texture", + "sha1": "65465e308e32d7e3aff3d29bd1a405566df5c4f1" + }, + { + "filename": "smoke4_1", + "build-id": "ASSET_TEX2D_PARTICLES_SMOKE4_1", + "folder": "particles", + "type": "Texture", + "sha1": "5db6e88122711487cc06ae4477bea7c4c39d49c1" + }, + { + "filename": "smoke4_2", + "build-id": "ASSET_TEX2D_PARTICLES_SMOKE4_2", + "folder": "particles", + "type": "Texture", + "sha1": "8c3a69d8861f990c47d8801ba9f65dec5fe6b141" + }, + { + "filename": "smoke4_3", + "build-id": "ASSET_TEX2D_PARTICLES_SMOKE4_3", + "folder": "particles", + "type": "Texture", + "sha1": "acc1d7a6fe3e4a142fe60ee8288c67c15750ecb5" + }, + { + "filename": "smoke4_4", + "build-id": "ASSET_TEX2D_PARTICLES_SMOKE4_4", + "folder": "particles", + "type": "Texture", + "sha1": "234873ce8e6d71ce93b37c3911bf1d7e591d67eb" + }, + { + "filename": "smoke4_5", + "build-id": "ASSET_TEX2D_PARTICLES_SMOKE4_5", + "folder": "particles", + "type": "Texture", + "sha1": "3826e4525aaf2fa2b2e37a0eb8405bb8f254e043" + }, + { + "filename": "smoke4_6", + "build-id": "ASSET_TEX2D_PARTICLES_SMOKE4_6", + "folder": "particles", + "type": "Texture", + "sha1": "77187e32da6bbf641e2b6ae1019fe59aaed5ed98" + }, + { + "filename": "bubbles_small_0", + "build-id": "ASSET_TEX2D_PARTICLES_BUBBLESSMALL_0", + "folder": "particles", + "type": "Texture", + "sha1": "5a61f81e1599ed132b8c75dce56de0eadd5cc37a" + }, + { + "filename": "bubbles_small_1", + "build-id": "ASSET_TEX2D_PARTICLES_BUBBLESSMALL_1", + "folder": "particles", + "type": "Texture", + "sha1": "96b7dfcb66037d99b7dfde3120374a5d1a7bf29d" + }, + { + "filename": "smoke5", + "build-id": "ASSET_TEX2D_PARTICLES_SMOKE5", + "folder": "particles", + "type": "Texture", + "sha1": "7bc5159144bb73144aebe0c2ed0c8547b5e33617" + }, + { + "filename": "funfont_0", + "build-id": "ASSET_TEX2D_FUNFONT_0", + "folder": "font/funfont", + "type": "Texture", + "sha1": "35716e34f6738b7b16bc2794e870b045b3beedf9" + }, + { + "filename": "funfont_1", + "build-id": "ASSET_TEX2D_FUNFONT_1", + "folder": "font/funfont", + "type": "Texture", + "sha1": "b8bfb532833d4c7c27815a43b6cf7bf9ea4f400f" + }, + { + "filename": "funfont_2", + "build-id": "ASSET_TEX2D_FUNFONT_2", + "folder": "font/funfont", + "type": "Texture", + "sha1": "53eb63e288c81c933e49642bd2d3eb35153293f1" + }, + { + "filename": "funfont_3", + "build-id": "ASSET_TEX2D_FUNFONT_3", + "folder": "font/funfont", + "type": "Texture", + "sha1": "582a27786d94ababb1733bc197fcd4cb2eef39ed" + }, + { + "filename": "funfont_4", + "build-id": "ASSET_TEX2D_FUNFONT_4", + "folder": "font/funfont", + "type": "Texture", + "sha1": "f0a48d1d68ada6145d1ad67c2010361e6b6e1517" + }, + { + "filename": "funfont_5", + "build-id": "ASSET_TEX2D_FUNFONT_5", + "folder": "font/funfont", + "type": "Texture", + "sha1": "64a88a32c9cae77d3d944d833eaa68e1c54d8867" + }, + { + "filename": "track_select_bg_dino_domain_0", + "build-id": "ASSET_TEX2D_MENU_TRACKSELECTBGDINODOMAIN_0", + "folder": "menu", + "type": "Texture", + "sha1": "e03def82dcb789350da6570c444b540630ba46b5" + }, + { + "filename": "track_select_bg_dino_domain_1", + "build-id": "ASSET_TEX2D_MENU_TRACKSELECTBGDINODOMAIN_1", + "folder": "menu", + "type": "Texture", + "sha1": "67b683da99f4443f1b6a35fc8b5695257a4ec97f" + }, + { + "filename": "track_select_bg_sherbet_island_0", + "build-id": "ASSET_TEX2D_MENU_TRACKSELECTBGSHERBETISLAND_0", + "folder": "menu", + "type": "Texture", + "sha1": "0270d7e11137bf62d6f24736ffd7a5bb0429b81b" + }, + { + "filename": "track_select_bg_sherbet_island_1", + "build-id": "ASSET_TEX2D_MENU_TRACKSELECTBGSHERBETISLAND_1", + "folder": "menu", + "type": "Texture", + "sha1": "78bf134e71f3a5070e5ae6de892428dc15558ade" + }, + { + "filename": "track_select_bg_snowflake_mountain_0", + "build-id": "ASSET_TEX2D_MENU_TRACKSELECTBGSNOWFLAKEMOUNTAIN_0", + "folder": "menu", + "type": "Texture", + "sha1": "6bdd88ca950559136d716eea10cb1cd3d13df327" + }, + { + "filename": "track_select_bg_snowflake_mountain_1", + "build-id": "ASSET_TEX2D_MENU_TRACKSELECTBGSNOWFLAKEMOUNTAIN_1", + "folder": "menu", + "type": "Texture", + "sha1": "a6526aaf53ad1f12108edec56aeab14aabfadeca" + }, + { + "filename": "track_select_bg_dragon_forest_0", + "build-id": "ASSET_TEX2D_MENU_TRACKSELECTBGDRAGONFOREST_0", + "folder": "menu", + "type": "Texture", + "sha1": "8d57f13ab3e3f99ef6f8e9d5f1d03d2eba2bc754" + }, + { + "filename": "track_select_bg_dragon_forest_1", + "build-id": "ASSET_TEX2D_MENU_TRACKSELECTBGDRAGONFOREST_1", + "folder": "menu", + "type": "Texture", + "sha1": "c070601ed46a3347a22ac752dafb6a640abdb332" + }, + { + "filename": "track_select_bg_future_fun_land_0", + "build-id": "ASSET_TEX2D_MENU_TRACKSELECTBGFUTUREFUNLAND_0", + "folder": "menu", + "type": "Texture", + "sha1": "d9e2fb14562ba9e7b32d3e2d410e560f3f641bed" + }, + { + "filename": "track_select_bg_future_fun_land_1", + "build-id": "ASSET_TEX2D_MENU_TRACKSELECTBGFUTUREFUNLAND_1", + "folder": "menu", + "type": "Texture", + "sha1": "9add2f3c56545721099171c5c0d68236be98087d" + }, + { + "filename": "unk_white_tex", + "build-id": "ASSET_TEX2D_UNKNOWN_UNKWHITETEX", + "folder": "unknown", + "type": "Texture", + "sha1": "34aa19079b730d0298a48652bd779287d95c99f8" + }, + { + "filename": "track_select_locked_0", + "build-id": "ASSET_TEX2D_MENU_TRACKSELECTLOCKED_0", + "folder": "menu", + "type": "Texture", + "sha1": "4c86a00ebf94078b1fe7a0726c50c61dd8e7ae8d" + }, + { + "filename": "track_select_locked_1", + "build-id": "ASSET_TEX2D_MENU_TRACKSELECTLOCKED_1", + "folder": "menu", + "type": "Texture", + "sha1": "653d41c40b1d9386eb5b8779a5d1d9248a2ebe4e" + }, + { + "filename": "track_select_locked_2", + "build-id": "ASSET_TEX2D_MENU_TRACKSELECTLOCKED_2", + "folder": "menu", + "type": "Texture", + "sha1": "d2782b67c653604cd2b9a05bed84ebf144a4322a" + }, + { + "filename": "track_select_unlocked_0", + "build-id": "ASSET_TEX2D_MENU_TRACKSELECTUNLOCKED_0", + "folder": "menu", + "type": "Texture", + "sha1": "56f8e4a9d3b79766dc999ec33c82f4f5af0e5af6" + }, + { + "filename": "track_select_unlocked_1", + "build-id": "ASSET_TEX2D_MENU_TRACKSELECTUNLOCKED_1", + "folder": "menu", + "type": "Texture", + "sha1": "67e9e781177271eebb275d765c0397c856ca0274" + }, + { + "filename": "track_select_unlocked_2", + "build-id": "ASSET_TEX2D_MENU_TRACKSELECTUNLOCKED_2", + "folder": "menu", + "type": "Texture", + "sha1": "2ece22431c662d0f94973350846632cd8a5632f3" + }, + { + "filename": "arrow_blue_right", + "build-id": "ASSET_TEX2D_MENU_ARROWBLUERIGHT", + "folder": "menu", + "type": "Texture", + "sha1": "1acc8285cea6effc1b8aa8cbc052d3ff3fada092" + }, + { + "filename": "arrow_blue_up", + "build-id": "ASSET_TEX2D_MENU_ARROWBLUEUP", + "folder": "menu", + "type": "Texture", + "sha1": "d2649b274cf87bb8b5010572bd064f21071f9665" + }, + { + "filename": "arrow_blue_left", + "build-id": "ASSET_TEX2D_MENU_ARROWBLUELEFT", + "folder": "menu", + "type": "Texture", + "sha1": "869d283501f8d33427e2712875d80352ba6759c9" + }, + { + "filename": "arrow_blue_down", + "build-id": "ASSET_TEX2D_MENU_ARROWBLUEDOWN", + "folder": "menu", + "type": "Texture", + "sha1": "3c6d3435f98313b8a5155387a983ef1b36c9b868" + }, + { + "filename": "bubble_weapon_0", + "build-id": "ASSET_TEX2D_OBJECTS_BUBBLEWEAPON_0", + "folder": "objects", + "type": "Texture", + "sha1": "ed65b52f5ccb4d6a5207033cb1b0136c534dc2c5" + }, + { + "filename": "bubble_weapon_1", + "build-id": "ASSET_TEX2D_OBJECTS_BUBBLEWEAPON_1", + "folder": "objects", + "type": "Texture", + "sha1": "57adb9ce7eccdfbaf01a3b4465aaa0a19a09a0b5" + }, + { + "filename": "bubble_weapon_2", + "build-id": "ASSET_TEX2D_OBJECTS_BUBBLEWEAPON_2", + "folder": "objects", + "type": "Texture", + "sha1": "a65f09ccaf0a871076e315d042fbb63ea057d932" + }, + { + "filename": "bubble_weapon_3", + "build-id": "ASSET_TEX2D_OBJECTS_BUBBLEWEAPON_3", + "folder": "objects", + "type": "Texture", + "sha1": "57adb9ce7eccdfbaf01a3b4465aaa0a19a09a0b5" + }, + { + "filename": "tt_beaten_icon", + "build-id": "ASSET_TEX2D_MENU_TTBEATENICON", + "folder": "menu", + "type": "Texture", + "sha1": "0611711630a1e114acb364f28390e8d7b5fe5ad7" + }, + { + "filename": "egg_icon", + "build-id": "ASSET_TEX2D_HUD_EGGICON", + "folder": "hud", + "type": "Texture", + "sha1": "b82c81d3b7c601a02466a98c06337e53a7998600" + }, + { + "filename": "krunch_icon", + "build-id": "ASSET_TEX2D_HUD_KRUNCHICON", + "folder": "hud", + "type": "Texture", + "sha1": "a3c505e25da0e8a380c266f6a7f95f3346f3c8d8" + }, + { + "filename": "bumper_icon", + "build-id": "ASSET_TEX2D_HUD_BUMPERICON", + "folder": "hud", + "type": "Texture", + "sha1": "1da13edabf84a2a825db381ba562583fb1e0bac8" + }, + { + "filename": "tiptup_icon", + "build-id": "ASSET_TEX2D_HUD_TIPTUPICON", + "folder": "hud", + "type": "Texture", + "sha1": "1c07fa21244758c76ac2c0725fc9abc5e2776223" + }, + { + "filename": "timber_icon", + "build-id": "ASSET_TEX2D_HUD_TIMBERICON", + "folder": "hud", + "type": "Texture", + "sha1": "5ef183c0359cc93f5da0d9373a80c2a66199c137" + }, + { + "filename": "conker_icon", + "build-id": "ASSET_TEX2D_HUD_CONKERICON", + "folder": "hud", + "type": "Texture", + "sha1": "66c01bab95cf2fd046b8d5e5093fcc61133426b4" + }, + { + "filename": "banjo_icon", + "build-id": "ASSET_TEX2D_HUD_BANJOICON", + "folder": "hud", + "type": "Texture", + "sha1": "d07667de9c64deb4323e11671e10e75cf24fd30d" + }, + { + "filename": "drumstick_icon", + "build-id": "ASSET_TEX2D_HUD_DRUMSTICKICON", + "folder": "hud", + "type": "Texture", + "sha1": "2b7580244c6a58a7649cbdf7520bb1af70fbab84" + }, + { + "filename": "pipsy_icon", + "build-id": "ASSET_TEX2D_HUD_PIPSYICON", + "folder": "hud", + "type": "Texture", + "sha1": "004b0f66953730c245182e44e812e078fe59f197" + }, + { + "filename": "tt_icon", + "build-id": "ASSET_TEX2D_HUD_TTICON", + "folder": "hud", + "type": "Texture", + "sha1": "fac83ff31a98ad6fa3b8402841d7ded5fd7aeeb0" + }, + { + "filename": "diddy_icon", + "build-id": "ASSET_TEX2D_HUD_DIDDYICON", + "folder": "hud", + "type": "Texture", + "sha1": "09b0a20489e10776502a20bbb3ecb1c7bcdf0e0d" + }, + { + "filename": "small_gold_cap", + "build-id": "ASSET_TEX2D_UNKNOWN_SMALLGOLDCAP", + "folder": "unknown", + "type": "Texture", + "sha1": "f20571b9781eb01d8841935503572136d22a26a6" + }, + { + "filename": "car_icon_0", + "build-id": "ASSET_TEX2D_MENU_CARICON_0", + "folder": "menu", + "type": "Texture", + "sha1": "fc5e937cf90f3d1ebf7001874a6f072b745dd294" + }, + { + "filename": "car_icon_1", + "build-id": "ASSET_TEX2D_MENU_CARICON_1", + "folder": "menu", + "type": "Texture", + "sha1": "d9c6164f5d648055b40a8c81bce273e5a82584d1" + }, + { + "filename": "hover_icon_0", + "build-id": "ASSET_TEX2D_MENU_HOVERICON_0", + "folder": "menu", + "type": "Texture", + "sha1": "e85e2e49841107a68b42ee26e293c0ddc760a060" + }, + { + "filename": "hover_icon_1", + "build-id": "ASSET_TEX2D_MENU_HOVERICON_1", + "folder": "menu", + "type": "Texture", + "sha1": "45126a11303ef324ffbc47b644d582a4ad6186e0" + }, + { + "filename": "plane_icon_0", + "build-id": "ASSET_TEX2D_MENU_PLANEICON_0", + "folder": "menu", + "type": "Texture", + "sha1": "529e967836015d953bd79ad5691a4ffce9c678bf" + }, + { + "filename": "plane_icon_1", + "build-id": "ASSET_TEX2D_MENU_PLANEICON_1", + "folder": "menu", + "type": "Texture", + "sha1": "5769044e2beb14df0e6684e8a13b8d43df594d99" + }, + { + "filename": "label_car_option_nonselected", + "build-id": "ASSET_TEX2D_MENU_LABELCAROPTIONNONSELECTED", + "folder": "menu", + "type": "Texture", + "sha1": "307877417760154c4ce9f14c70e3087dd324a023" + }, + { + "filename": "label_car_option_selected", + "build-id": "ASSET_TEX2D_MENU_LABELCAROPTIONSELECTED", + "folder": "menu", + "type": "Texture", + "sha1": "0d7bc09261eec7b2bc032e8c74999f5c39ddfdbc" + }, + { + "filename": "label_hover_option_nonselected", + "build-id": "ASSET_TEX2D_MENU_LABELHOVEROPTIONNONSELECTED", + "folder": "menu", + "type": "Texture", + "sha1": "166fe8e9e2e47a601a6100ee78a458210a7ee393" + }, + { + "filename": "label_hover_option_selected", + "build-id": "ASSET_TEX2D_MENU_LABELHOVEROPTIONSELECTED", + "folder": "menu", + "type": "Texture", + "sha1": "4a7d8b2ba5ffed6b9d315f3a044d14e1d671f848" + }, + { + "filename": "label_plane_option_nonselected", + "build-id": "ASSET_TEX2D_MENU_LABELPLANEOPTIONNONSELECTED", + "folder": "menu", + "type": "Texture", + "sha1": "e68af2d01025fd8d7460d2cb81bc0e08f2b09a06" + }, + { + "filename": "label_plane_option_selected", + "build-id": "ASSET_TEX2D_MENU_LABELPLANEOPTIONSELECTED", + "folder": "menu", + "type": "Texture", + "sha1": "6e17b6f2916b8c2bad1954b25f96d5e4bd7c78d8" + }, + { + "filename": "time_trial_on_icon_0", + "build-id": "ASSET_TEX2D_MENU_TIMETRIALONICON_0", + "folder": "menu", + "type": "Texture", + "sha1": "d6cfd09625a3a803c8fed92438de0175d729c5d4" + }, + { + "filename": "time_trial_on_icon_1", + "build-id": "ASSET_TEX2D_MENU_TIMETRIALONICON_1", + "folder": "menu", + "type": "Texture", + "sha1": "5feaae835ac870a6f2ac73540f3009218647bf8e" + }, + { + "filename": "time_trial_off_icon_0", + "build-id": "ASSET_TEX2D_MENU_TIMETRIALOFFICON_0", + "folder": "menu", + "type": "Texture", + "sha1": "387afb0a04782f0611c4c5604dc1d7ae168b40c0" + }, + { + "filename": "time_trial_off_icon_1", + "build-id": "ASSET_TEX2D_MENU_TIMETRIALOFFICON_1", + "folder": "menu", + "type": "Texture", + "sha1": "16a9dfe67639c628803de2f1f58ee27e48825645" + }, + { + "filename": "label_on_option_nonselected", + "build-id": "ASSET_TEX2D_MENU_LABELONOPTIONNONSELECTED", + "folder": "menu", + "type": "Texture", + "sha1": "51d8fb45ebcda922a84bbd120414da682f28aeeb" + }, + { + "filename": "label_on_option_selected", + "build-id": "ASSET_TEX2D_MENU_LABELONOPTIONSELECTED", + "folder": "menu", + "type": "Texture", + "sha1": "2ec28608e9d005836bce37e3325fbcacefccea42" + }, + { + "filename": "label_off_option_nonselected", + "build-id": "ASSET_TEX2D_MENU_LABELOFFOPTIONNONSELECTED", + "folder": "menu", + "type": "Texture", + "sha1": "271d383256bec2e1dc0e5802515fa31d891413a3" + }, + { + "filename": "label_off_option_selected", + "build-id": "ASSET_TEX2D_MENU_LABELOFFOPTIONSELECTED", + "folder": "menu", + "type": "Texture", + "sha1": "2af3618e7c960b5f79d835cf7f08e5698b5299d4" + }, + { + "filename": "label_player1", + "build-id": "ASSET_TEX2D_MENU_LABELPLAYER1", + "folder": "menu", + "type": "Texture", + "sha1": "c1058b4d93d25f7a4ce51ac100ff1443414f98fb" + }, + { + "filename": "label_player2", + "build-id": "ASSET_TEX2D_MENU_LABELPLAYER2", + "folder": "menu", + "type": "Texture", + "sha1": "14c9194385ad066df670a874796d13679cf850a8" + }, + { + "filename": "label_player3", + "build-id": "ASSET_TEX2D_MENU_LABELPLAYER3", + "folder": "menu", + "type": "Texture", + "sha1": "e037d35f0631fd97d901073d0af7f73e707e8a34" + }, + { + "filename": "label_player4", + "build-id": "ASSET_TEX2D_MENU_LABELPLAYER4", + "folder": "menu", + "type": "Texture", + "sha1": "33e9016e3066b2cfe64cf744f860194871c75fdb" + }, + { + "filename": "label_tt", + "build-id": "ASSET_TEX2D_MENU_LABELTT", + "folder": "menu", + "type": "Texture", + "sha1": "e2c5021257604c7955951b5bb7871d78c7851bcb" + }, + { + "filename": "label_vehicle", + "build-id": "ASSET_TEX2D_MENU_LABELVEHICLE", + "folder": "menu", + "type": "Texture", + "sha1": "b122ed2b21ed1b9130f791d294c0b53c38f51630" + }, + { + "filename": "subtitlefont_0", + "build-id": "ASSET_TEX2D_SUBTITLEFONT_0", + "folder": "font/subtitlefont", + "type": "Texture", + "sha1": "44ac9eb79822cce5fc6caef7bb7db0fbb30576c5" + }, + { + "filename": "subtitlefont_1", + "build-id": "ASSET_TEX2D_SUBTITLEFONT_1", + "folder": "font/subtitlefont", + "type": "Texture", + "sha1": "48ad067aabe3367070ef77d1107dc1a581327a64" + }, + { + "filename": "subtitlefont_2", + "build-id": "ASSET_TEX2D_SUBTITLEFONT_2", + "folder": "font/subtitlefont", + "type": "Texture", + "sha1": "0c7b36d5866344de7b47db930d34b7c8cacc9041" + }, + { + "filename": "bigfont_a", + "build-id": "ASSET_TEX2D_BIGFONT_A", + "folder": "font/bigfont", + "type": "Texture", + "sha1": "f7f42d19d68b143d597c7b705833c2eb75d711da" + }, + { + "filename": "bigfont_b", + "build-id": "ASSET_TEX2D_BIGFONT_B", + "folder": "font/bigfont", + "type": "Texture", + "sha1": "8eab8a94a1be293ca8566bce313163ac58e0d20e" + }, + { + "filename": "bigfont_c", + "build-id": "ASSET_TEX2D_BIGFONT_C", + "folder": "font/bigfont", + "type": "Texture", + "sha1": "8de016f06bf05e18f5159b2ef8d78bc3c4f2119a" + }, + { + "filename": "bigfont_d", + "build-id": "ASSET_TEX2D_BIGFONT_D", + "folder": "font/bigfont", + "type": "Texture", + "sha1": "c5e5589f37443a91d8882bb765a97c3bbc047c1e" + }, + { + "filename": "bigfont_e", + "build-id": "ASSET_TEX2D_BIGFONT_E", + "folder": "font/bigfont", + "type": "Texture", + "sha1": "ce3b264d071e4c755a3bc13a4e3050780b853d19" + }, + { + "filename": "bigfont_f", + "build-id": "ASSET_TEX2D_BIGFONT_F", + "folder": "font/bigfont", + "type": "Texture", + "sha1": "14d179769564e584604f3df2dfc4841cb89b9e8d" + }, + { + "filename": "bigfont_g", + "build-id": "ASSET_TEX2D_BIGFONT_G", + "folder": "font/bigfont", + "type": "Texture", + "sha1": "5651bbedb9006e100261b78599de626f761521d1" + }, + { + "filename": "bigfont_h", + "build-id": "ASSET_TEX2D_BIGFONT_H", + "folder": "font/bigfont", + "type": "Texture", + "sha1": "d9841e453699abcda320cf1782885aef3302fb2b" + }, + { + "filename": "bigfont_i", + "build-id": "ASSET_TEX2D_BIGFONT_I", + "folder": "font/bigfont", + "type": "Texture", + "sha1": "404da8b3ce962d44409cc4700e37ada6852d7a06" + }, + { + "filename": "bigfont_j", + "build-id": "ASSET_TEX2D_BIGFONT_J", + "folder": "font/bigfont", + "type": "Texture", + "sha1": "8480cf07cd343c808ef4e7eba532becca0749dfb" + }, + { + "filename": "bigfont_k", + "build-id": "ASSET_TEX2D_BIGFONT_K", + "folder": "font/bigfont", + "type": "Texture", + "sha1": "fefb6704f7b10931e6b5a2b194f6b557709c4bf8" + }, + { + "filename": "bigfont_l", + "build-id": "ASSET_TEX2D_BIGFONT_L", + "folder": "font/bigfont", + "type": "Texture", + "sha1": "a043c71a432d215cbfd4bf4ed59d1d87771f3adf" + }, + { + "filename": "bigfont_m", + "build-id": "ASSET_TEX2D_BIGFONT_M", + "folder": "font/bigfont", + "type": "Texture", + "sha1": "e5280a9bf2c5a31faaca209833ba2128423faffd" + }, + { + "filename": "bigfont_n", + "build-id": "ASSET_TEX2D_BIGFONT_N", + "folder": "font/bigfont", + "type": "Texture", + "sha1": "3b8b3660bfcd0d49c571c95e396ed94204ab1a63" + }, + { + "filename": "bigfont_o", + "build-id": "ASSET_TEX2D_BIGFONT_O", + "folder": "font/bigfont", + "type": "Texture", + "sha1": "69a631f13804e4059f836f9d8a9f133a544fd3f9" + }, + { + "filename": "bigfont_p", + "build-id": "ASSET_TEX2D_BIGFONT_P", + "folder": "font/bigfont", + "type": "Texture", + "sha1": "34ca8ec7569eb7aa9d0d0e3809b6ddc47f6ab2e7" + }, + { + "filename": "bigfont_q", + "build-id": "ASSET_TEX2D_BIGFONT_Q", + "folder": "font/bigfont", + "type": "Texture", + "sha1": "9108f7bc5d3dbe924969832b91ff9bb2fc28520e" + }, + { + "filename": "bigfont_r", + "build-id": "ASSET_TEX2D_BIGFONT_R", + "folder": "font/bigfont", + "type": "Texture", + "sha1": "b91c4d168b18e732e3fa98562fd178e643de5b6c" + }, + { + "filename": "bigfont_s", + "build-id": "ASSET_TEX2D_BIGFONT_S", + "folder": "font/bigfont", + "type": "Texture", + "sha1": "2004ae6011af5b7e336dcd1f2d75b8075a68b2f4" + }, + { + "filename": "bigfont_t", + "build-id": "ASSET_TEX2D_BIGFONT_T", + "folder": "font/bigfont", + "type": "Texture", + "sha1": "036fc062f3409b437beb2fcb9d8ce1c80424b720" + }, + { + "filename": "bigfont_u", + "build-id": "ASSET_TEX2D_BIGFONT_U", + "folder": "font/bigfont", + "type": "Texture", + "sha1": "ab1a03df825192b003c321bd4347013c1dc969bd" + }, + { + "filename": "bigfont_v", + "build-id": "ASSET_TEX2D_BIGFONT_V", + "folder": "font/bigfont", + "type": "Texture", + "sha1": "45a4452886261e559958be879bd2137c48ba41e5" + }, + { + "filename": "bigfont_w", + "build-id": "ASSET_TEX2D_BIGFONT_W", + "folder": "font/bigfont", + "type": "Texture", + "sha1": "80efe14f6873cc95e20912fc19e80f57a7c6c800" + }, + { + "filename": "bigfont_x", + "build-id": "ASSET_TEX2D_BIGFONT_X", + "folder": "font/bigfont", + "type": "Texture", + "sha1": "c5198f6df9edc9837fa55b3278866288461943c6" + }, + { + "filename": "bigfont_y", + "build-id": "ASSET_TEX2D_BIGFONT_Y", + "folder": "font/bigfont", + "type": "Texture", + "sha1": "9e2bded8ed65b3a10136258cd2d823404ebb5b43" + }, + { + "filename": "bigfont_z", + "build-id": "ASSET_TEX2D_BIGFONT_Z", + "folder": "font/bigfont", + "type": "Texture", + "sha1": "6839f54fe3ed95468bae7c205dce224f2ee4af24" + }, + { + "filename": "bigfont_questionmark", + "build-id": "ASSET_TEX2D_BIGFONT_QUESTIONMARK", + "folder": "font/bigfont", + "type": "Texture", + "sha1": "3ebda4ef943ac3e422dcbb41d93c1e0d302a0c8b" + }, + { + "filename": "bigfont_period", + "build-id": "ASSET_TEX2D_BIGFONT_PERIOD", + "folder": "font/bigfont", + "type": "Texture", + "sha1": "fc2b3d8bda72387c9bad8e860ed20ccb9a549bbd" + }, + { + "filename": "sparkle_0", + "build-id": "ASSET_TEX2D_OBJECTS_SPARKLE_0", + "folder": "objects", + "type": "Texture", + "sha1": "696a02763d5e69dff98eba63a8c8415d119400f1" + }, + { + "filename": "sparkle_1", + "build-id": "ASSET_TEX2D_OBJECTS_SPARKLE_1", + "folder": "objects", + "type": "Texture", + "sha1": "e4fb5c1bf87e48d042a05b2af44054da012ba0b3" + }, + { + "filename": "sparkle_2", + "build-id": "ASSET_TEX2D_OBJECTS_SPARKLE_2", + "folder": "objects", + "type": "Texture", + "sha1": "52a4860c219d90c6b431741e1bbdde1cd3288562" + }, + { + "filename": "sparkle_3", + "build-id": "ASSET_TEX2D_OBJECTS_SPARKLE_3", + "folder": "objects", + "type": "Texture", + "sha1": "a46aed0eb6bbee78ca388afe1121e0e0abb3eebc" + }, + { + "filename": "sparkle_4", + "build-id": "ASSET_TEX2D_OBJECTS_SPARKLE_4", + "folder": "objects", + "type": "Texture", + "sha1": "2d447834b015246567bd9c8bf4a6e0ac5ad15197" + }, + { + "filename": "sparkle_5", + "build-id": "ASSET_TEX2D_OBJECTS_SPARKLE_5", + "folder": "objects", + "type": "Texture", + "sha1": "ecc835bd7a7d71419a8c60250d56ce431af5e11b" + }, + { + "filename": "sparkle_6", + "build-id": "ASSET_TEX2D_OBJECTS_SPARKLE_6", + "folder": "objects", + "type": "Texture", + "sha1": "b216912a03c71299db247d68472fe236d6787940" + }, + { + "filename": "bomb_explosion_blue", + "build-id": "ASSET_TEX2D_OBJECTS_BOMBEXPLOSIONBLUE", + "folder": "objects", + "type": "Texture", + "sha1": "0155bd291b201db1ce9448ee586b853293ece41d" + }, + { + "filename": "bomb_explosion_yellow", + "build-id": "ASSET_TEX2D_OBJECTS_BOMBEXPLOSIONYELLOW", + "folder": "objects", + "type": "Texture", + "sha1": "7ccf4e1cce9b39e3f9d56d54642e75466f8a428b" + }, + { + "filename": "bomb_explosion_red", + "build-id": "ASSET_TEX2D_OBJECTS_BOMBEXPLOSIONRED", + "folder": "objects", + "type": "Texture", + "sha1": "b0fb820cc1959602316183ba92a59cf627fff6fa" + }, + { + "filename": "bomb_explosion_green", + "build-id": "ASSET_TEX2D_OBJECTS_BOMBEXPLOSIONGREEN", + "folder": "objects", + "type": "Texture", + "sha1": "671947fc173969b85f1d79b48aa038101895d80d" + }, + { + "filename": "bomb_explosion_cyan", + "build-id": "ASSET_TEX2D_OBJECTS_BOMBEXPLOSIONCYAN", + "folder": "objects", + "type": "Texture", + "sha1": "4292c1968fd77f4c177dde4dda31103ea269ca85" + }, + { + "filename": "bomb_explosion_white", + "build-id": "ASSET_TEX2D_OBJECTS_BOMBEXPLOSIONWHITE", + "folder": "objects", + "type": "Texture", + "sha1": "e575aa2602a6529c87d6e590e666b4581085c587" + }, + { + "filename": "bomb_explosion_orange", + "build-id": "ASSET_TEX2D_OBJECTS_BOMBEXPLOSIONORANGE", + "folder": "objects", + "type": "Texture", + "sha1": "fe5ec95962e1ea8c34446674825a052e4b600119" + }, + { + "filename": "bomb_explosion_purple", + "build-id": "ASSET_TEX2D_OBJECTS_BOMBEXPLOSIONPURPLE", + "folder": "objects", + "type": "Texture", + "sha1": "7ca219311341074e1bb8e86d4eee4c1abb9c37be" + }, + { + "filename": "white_grey_checkboard", + "build-id": "ASSET_TEX2D_UNKNOWN_WHITEGREYCHECKBOARD", + "folder": "unknown", + "type": "Texture", + "sha1": "8882d668cdbd0ee7ae688898cfec63771f768670" + }, + { + "filename": "negative_red", + "build-id": "ASSET_TEX2D_UNKNOWN_NEGATIVERED", + "folder": "unknown", + "type": "Texture", + "sha1": "106306b80249d3e4ea1e5f64429ec50939f73bc8" + }, + { + "filename": "negative_blue", + "build-id": "ASSET_TEX2D_UNKNOWN_NEGATIVEBLUE", + "folder": "unknown", + "type": "Texture", + "sha1": "ab30864947f7d0c584315ad9333bb2c991373aba" + }, + { + "filename": "negative_green", + "build-id": "ASSET_TEX2D_UNKNOWN_NEGATIVEGREEN", + "folder": "unknown", + "type": "Texture", + "sha1": "fd69a6d608d1a7f1c5690e0c0b880c6a5296fa99" + }, + { + "filename": "negative_purple", + "build-id": "ASSET_TEX2D_UNKNOWN_NEGATIVEPURPLE", + "folder": "unknown", + "type": "Texture", + "sha1": "bf476b721bc666b7354fa1bacf1d4c0926ea166f" + }, + { + "filename": "rainbow_0", + "build-id": "ASSET_TEX2D_OBJECTS_RAINBOW_0", + "folder": "objects", + "type": "Texture", + "sha1": "35d13f265c98bc63457283132db1c49ba270fadb" + }, + { + "filename": "rainbow_1", + "build-id": "ASSET_TEX2D_OBJECTS_RAINBOW_1", + "folder": "objects", + "type": "Texture", + "sha1": "557373cbf25f907afa452ffcb047a8bff225c2fb" + }, + { + "filename": "egg_0", + "build-id": "ASSET_TEX2D_OBJECTS_EGG_0", + "folder": "objects", + "type": "Texture", + "sha1": "b2da38ab03fd74e11132fcc0f00c717bace34c4c" + }, + { + "filename": "egg_1", + "build-id": "ASSET_TEX2D_OBJECTS_EGG_1", + "folder": "objects", + "type": "Texture", + "sha1": "02ae7df80dc919a8e4ae0deba8ae7a80542a901f" + }, + { + "filename": "egg_2", + "build-id": "ASSET_TEX2D_OBJECTS_EGG_2", + "folder": "objects", + "type": "Texture", + "sha1": "0b3e3d4d869d49a85f6b54dad01db513a6086940" + }, + { + "filename": "egg_3", + "build-id": "ASSET_TEX2D_OBJECTS_EGG_3", + "folder": "objects", + "type": "Texture", + "sha1": "0f8fcc42f54ffd72433dee2b10a0eb618ba776bc" + }, + { + "filename": "wood_panel", + "build-id": "ASSET_TEX2D_MENU_WOODPANEL", + "folder": "menu", + "type": "Texture", + "sha1": "7010c75b3a22dc2abb6d9a550373e47ba201e3a2" + }, + { + "filename": "cobble_panel", + "build-id": "ASSET_TEX2D_MENU_COBBLEPANEL", + "folder": "menu", + "type": "Texture", + "sha1": "c7d5fa5ab19b0ef3b26c3d87a811b80bb6c5a053" + }, + { + "filename": "portal_panel", + "build-id": "ASSET_TEX2D_MENU_PORTALPANEL", + "folder": "menu", + "type": "Texture", + "sha1": "0d2c73a992e5788e040c27cbc084b1199a153d3e" + }, + { + "filename": "icon_rubbishbin", + "build-id": "ASSET_TEX2D_MENU_ICONRUBBISHBIN", + "folder": "menu", + "type": "Texture", + "sha1": "882342b7c9cd91fe36ab6e612c0655292a310c3d" + }, + { + "filename": "icon_n64", + "build-id": "ASSET_TEX2D_MENU_ICONN64", + "folder": "menu", + "type": "Texture", + "sha1": "9a848ab2c343c8a55d2d9bfcce9828861daace00" + }, + { + "filename": "icon_times", + "build-id": "ASSET_TEX2D_MENU_ICONTIMES", + "folder": "menu", + "type": "Texture", + "sha1": "ec297fc79d2cc3f23aa5081f608d66891dc58284" + }, + { + "filename": "icon_controller_pak", + "build-id": "ASSET_TEX2D_MENU_ICONCONTROLLERPAK", + "folder": "menu", + "type": "Texture", + "sha1": "bbd5ea722bf7999472018d9905f525339e347e7a" + }, + { + "filename": "icon_external_data", + "build-id": "ASSET_TEX2D_MENU_ICONEXTERNALDATA", + "folder": "menu", + "type": "Texture", + "sha1": "459c379f9995dd2df78835b1a36c7aa1c9632b97" + }, + { + "filename": "icon_ghosts", + "build-id": "ASSET_TEX2D_MENU_ICONGHOSTS", + "folder": "menu", + "type": "Texture", + "sha1": "30282914267d1fa8ca96fc33efd8399f1f3cb337" + }, + { + "filename": "bomb_0", + "build-id": "ASSET_TEX2D_OBJECTS_BOMB_0", + "folder": "objects", + "type": "Texture", + "sha1": "0b0c7da190b053530d9022391e4e5ab3f0bf646a" + }, + { + "filename": "bomb_1", + "build-id": "ASSET_TEX2D_OBJECTS_BOMB_1", + "folder": "objects", + "type": "Texture", + "sha1": "2d6ebeb3ccbc0435b7c46fd1f45a5d2ca628b08c" + }, + { + "filename": "oil_puddle", + "build-id": "ASSET_TEX2D_PARTICLES_OILPUDDLE", + "folder": "particles", + "type": "Texture", + "sha1": "1bb65a01941232e7b5178f06da30e5dbc5466fad" + }, + { + "filename": "oil_slick", + "build-id": "ASSET_TEX2D_OBJECTS_OILSLICK", + "folder": "objects", + "type": "Texture", + "sha1": "7195cbc54d219726c57b2fe51d6d862fac94bc99" + }, + { + "filename": "eyes_in_dark", + "build-id": "ASSET_TEX2D_UNKNOWN_EYESINDARK", + "folder": "unknown", + "type": "Texture", + "sha1": "1ede2aa04d58dae7df23fbcd4befe474d6443574" + }, + { + "filename": "colon", + "build-id": "ASSET_TEX2D_HUD_COLON", + "folder": "hud", + "type": "Texture", + "sha1": "faa796a795e5c56dab6a2bfb1b571bac6067a751" + }, + { + "filename": "retical_homing_0", + "build-id": "ASSET_TEX2D_HUD_RETICALHOMING_0", + "folder": "hud", + "type": "Texture", + "sha1": "bc38beec5f20c8dfe3fd4b4bf2ba7a6024f8e87c" + }, + { + "filename": "retical_homing_1", + "build-id": "ASSET_TEX2D_HUD_RETICALHOMING_1", + "folder": "hud", + "type": "Texture", + "sha1": "efa94fae15dc9880382dcbb3cbb0273a176214ff" + }, + { + "filename": "debug_red_sphere", + "build-id": "ASSET_TEX2D_OBJECTS_DEBUGREDSPHERE", + "folder": "objects", + "type": "Texture", + "sha1": "218685e85ad71f1a2c247fcb6fa90731509143ab" + }, + { + "filename": "finish_0", + "build-id": "ASSET_TEX2D_HUD_FINISH_0", + "folder": "hud", + "type": "Texture", + "sha1": "5b97a92bdeb9dc80cef9cb4db0707a6d70713bdc" + }, + { + "filename": "finish_1", + "build-id": "ASSET_TEX2D_HUD_FINISH_1", + "folder": "hud", + "type": "Texture", + "sha1": "a31adcee90785bf5d792284d2d33238ff90196c9" + }, + { + "filename": "finish_2", + "build-id": "ASSET_TEX2D_HUD_FINISH_2", + "folder": "hud", + "type": "Texture", + "sha1": "1950cd989dd6bf6eb173bb7ec7197b46da41e430" + }, + { + "filename": "get_ready_0", + "build-id": "ASSET_TEX2D_HUD_GETREADY_0", + "folder": "hud", + "type": "Texture", + "sha1": "9fde3c8933231e6d0eb888d34476398ebc3dda0c" + }, + { + "filename": "get_ready_1", + "build-id": "ASSET_TEX2D_HUD_GETREADY_1", + "folder": "hud", + "type": "Texture", + "sha1": "9b4923a2fdeb4822bdb74e9539d155c4048705cc" + }, + { + "filename": "get_ready_2", + "build-id": "ASSET_TEX2D_HUD_GETREADY_2", + "folder": "hud", + "type": "Texture", + "sha1": "f85db60b32e2853dfdb91814c9a80af9cfdb815a" + }, + { + "filename": "go_0", + "build-id": "ASSET_TEX2D_HUD_GO_0", + "folder": "hud", + "type": "Texture", + "sha1": "aba541e1a14d26282f91dd3a31eba1607557c80c" + }, + { + "filename": "go_1", + "build-id": "ASSET_TEX2D_HUD_GO_1", + "folder": "hud", + "type": "Texture", + "sha1": "0920d4fce80665747e10202085097df2feaed472" + }, + { + "filename": "lap", + "build-id": "ASSET_TEX2D_HUD_LAP", + "folder": "hud", + "type": "Texture", + "sha1": "25d1f60151aa0fbe19ed5867b9c8ca5a8e51d6b5" + }, + { + "filename": "forward_slash", + "build-id": "ASSET_TEX2D_HUD_FORWARDSLASH", + "folder": "hud", + "type": "Texture", + "sha1": "0c258e41193fcf7a461679d95b7253b5d3213ac1" + }, + { + "filename": "time", + "build-id": "ASSET_TEX2D_HUD_TIME", + "folder": "hud", + "type": "Texture", + "sha1": "5ebab92de6d6c7a0bd7c4a35fad380d72ca00a39" + }, + { + "filename": "place_number_0", + "build-id": "ASSET_TEX2D_HUD_PLACENUMBER_0", + "folder": "hud", + "type": "Texture", + "sha1": "ee08c64d145d50891e198cc580a8de468ffdc3b2" + }, + { + "filename": "place_number_1", + "build-id": "ASSET_TEX2D_HUD_PLACENUMBER_1", + "folder": "hud", + "type": "Texture", + "sha1": "0d8af1b99e13e69bb32aa6819a12d40dabd81a26" + }, + { + "filename": "place_number_2", + "build-id": "ASSET_TEX2D_HUD_PLACENUMBER_2", + "folder": "hud", + "type": "Texture", + "sha1": "af4a14d22834274a6b4a8b98103e465999cf7a72" + }, + { + "filename": "place_number_3", + "build-id": "ASSET_TEX2D_HUD_PLACENUMBER_3", + "folder": "hud", + "type": "Texture", + "sha1": "4d4002d6b708ed9014494d04eb29e71790359357" + }, + { + "filename": "place_number_4", + "build-id": "ASSET_TEX2D_HUD_PLACENUMBER_4", + "folder": "hud", + "type": "Texture", + "sha1": "a2f56f5c4d826adbce7c97db520c4c54721c98d0" + }, + { + "filename": "place_number_5", + "build-id": "ASSET_TEX2D_HUD_PLACENUMBER_5", + "folder": "hud", + "type": "Texture", + "sha1": "7c3c24d902535897d92021c9bf74417d9dd6ffa0" + }, + { + "filename": "place_number_6", + "build-id": "ASSET_TEX2D_HUD_PLACENUMBER_6", + "folder": "hud", + "type": "Texture", + "sha1": "5a6cda797a39eed945980f842e03ad1edda8a741" + }, + { + "filename": "place_number_7", + "build-id": "ASSET_TEX2D_HUD_PLACENUMBER_7", + "folder": "hud", + "type": "Texture", + "sha1": "df48ad17bedee5765fa8aefe81dd7be8ac897654" + }, + { + "filename": "timer_number_0", + "build-id": "ASSET_TEX2D_HUD_TIMERNUMBER_0", + "folder": "hud", + "type": "Texture", + "sha1": "78678b7614ededb78400854a625de43e4bbf6447" + }, + { + "filename": "timer_number_1", + "build-id": "ASSET_TEX2D_HUD_TIMERNUMBER_1", + "folder": "hud", + "type": "Texture", + "sha1": "2c901068777ec5b25c942315608474f5f359a34f" + }, + { + "filename": "timer_number_2", + "build-id": "ASSET_TEX2D_HUD_TIMERNUMBER_2", + "folder": "hud", + "type": "Texture", + "sha1": "ee23cafadf58f1f32b5b4da052196c1c0cfd7b41" + }, + { + "filename": "timer_number_3", + "build-id": "ASSET_TEX2D_HUD_TIMERNUMBER_3", + "folder": "hud", + "type": "Texture", + "sha1": "2700496e77d2ca881d08f618d5e4d90d4a2d6ceb" + }, + { + "filename": "timer_number_4", + "build-id": "ASSET_TEX2D_HUD_TIMERNUMBER_4", + "folder": "hud", + "type": "Texture", + "sha1": "5dee80804f87d89adf4c93520e935ea6da3488f1" + }, + { + "filename": "timer_number_5", + "build-id": "ASSET_TEX2D_HUD_TIMERNUMBER_5", + "folder": "hud", + "type": "Texture", + "sha1": "98cc1abb60a3ceb030e24b0439987530f571ecb2" + }, + { + "filename": "timer_number_6", + "build-id": "ASSET_TEX2D_HUD_TIMERNUMBER_6", + "folder": "hud", + "type": "Texture", + "sha1": "e5267282b1ea07c910683a395225762cd64fb23e" + }, + { + "filename": "timer_number_7", + "build-id": "ASSET_TEX2D_HUD_TIMERNUMBER_7", + "folder": "hud", + "type": "Texture", + "sha1": "5ec0312e0293defbc1682b60b97de8694e4a9ea0" + }, + { + "filename": "timer_number_8", + "build-id": "ASSET_TEX2D_HUD_TIMERNUMBER_8", + "folder": "hud", + "type": "Texture", + "sha1": "1da65a85cec6a9232ea7dfa65e8a22f62ad655b9" + }, + { + "filename": "timer_number_9", + "build-id": "ASSET_TEX2D_HUD_TIMERNUMBER_9", + "folder": "hud", + "type": "Texture", + "sha1": "16579cc251260e742a58651d392252d517f0da5e" + }, + { + "filename": "colon_small", + "build-id": "ASSET_TEX2D_HUD_COLONSMALL", + "folder": "hud", + "type": "Texture", + "sha1": "c24d845574503aeff2024cc25fe5b3367083add1" + }, + { + "filename": "timer_number_small_0", + "build-id": "ASSET_TEX2D_HUD_TIMERNUMBERSMALL_0", + "folder": "hud", + "type": "Texture", + "sha1": "f55b788bfa7c4923c91a2205352654c54ab860f2" + }, + { + "filename": "timer_number_small_1", + "build-id": "ASSET_TEX2D_HUD_TIMERNUMBERSMALL_1", + "folder": "hud", + "type": "Texture", + "sha1": "74758b2467035a571ed10a1dbd93a42536981e01" + }, + { + "filename": "timer_number_small_2", + "build-id": "ASSET_TEX2D_HUD_TIMERNUMBERSMALL_2", + "folder": "hud", + "type": "Texture", + "sha1": "6ca4eb8d82aae2999cf4f5d76ba7346b413cfa47" + }, + { + "filename": "timer_number_small_3", + "build-id": "ASSET_TEX2D_HUD_TIMERNUMBERSMALL_3", + "folder": "hud", + "type": "Texture", + "sha1": "159e52a40c5a7810163eca7b8be967d6cf2b4cab" + }, + { + "filename": "timer_number_small_4", + "build-id": "ASSET_TEX2D_HUD_TIMERNUMBERSMALL_4", + "folder": "hud", + "type": "Texture", + "sha1": "d4c3e67e59d567c4cb45fe2dc95c9c9452656936" + }, + { + "filename": "timer_number_small_5", + "build-id": "ASSET_TEX2D_HUD_TIMERNUMBERSMALL_5", + "folder": "hud", + "type": "Texture", + "sha1": "fda6681ebb16a739b976dc25f61c97ddebbdca22" + }, + { + "filename": "timer_number_small_6", + "build-id": "ASSET_TEX2D_HUD_TIMERNUMBERSMALL_6", + "folder": "hud", + "type": "Texture", + "sha1": "7cc271853c8485baec870c5e2e4e70a21dbf951f" + }, + { + "filename": "timer_number_small_7", + "build-id": "ASSET_TEX2D_HUD_TIMERNUMBERSMALL_7", + "folder": "hud", + "type": "Texture", + "sha1": "dd508aeaa3a6ec11570027413d1d7d896e6e25f8" + }, + { + "filename": "timer_number_small_8", + "build-id": "ASSET_TEX2D_HUD_TIMERNUMBERSMALL_8", + "folder": "hud", + "type": "Texture", + "sha1": "caf511e8d073e0eb8ef1273b25264593bad20f4a" + }, + { + "filename": "timer_number_small_9", + "build-id": "ASSET_TEX2D_HUD_TIMERNUMBERSMALL_9", + "folder": "hud", + "type": "Texture", + "sha1": "33a562934e9327c54790bfde617d2bdb5e54e394" + }, + { + "filename": "go_small", + "build-id": "ASSET_TEX2D_HUD_GOSMALL", + "folder": "hud", + "type": "Texture", + "sha1": "73753445b3862e248a6401017b74b898afe8d105" + }, + { + "filename": "lap_small", + "build-id": "ASSET_TEX2D_HUD_LAPSMALL", + "folder": "hud", + "type": "Texture", + "sha1": "f7d6857ad2b24ca9337bade7592becd73ad776a9" + }, + { + "filename": "get_ready_small", + "build-id": "ASSET_TEX2D_HUD_GETREADYSMALL", + "folder": "hud", + "type": "Texture", + "sha1": "f84718383e7bb2f7a1b0b9c592065be79219096f" + }, + { + "filename": "final_small", + "build-id": "ASSET_TEX2D_HUD_FINALSMALL", + "folder": "hud", + "type": "Texture", + "sha1": "2304f72e2f9b64200d9818a18d328231e3ad164e" + }, + { + "filename": "finish_small", + "build-id": "ASSET_TEX2D_HUD_FINISHSMALL", + "folder": "hud", + "type": "Texture", + "sha1": "e26ffa8e49fb6260480517d8bb662888e8be5fb6" + }, + { + "filename": "lap_2_small", + "build-id": "ASSET_TEX2D_HUD_LAP2SMALL", + "folder": "hud", + "type": "Texture", + "sha1": "5fc4018bdf5899a83e33169203b9f6176c1ca1cf" + }, + { + "filename": "way_small", + "build-id": "ASSET_TEX2D_HUD_WAYSMALL", + "folder": "hud", + "type": "Texture", + "sha1": "1345fa748a6a28ffa8f87846860bbd1873d8f296" + }, + { + "filename": "wrong_small", + "build-id": "ASSET_TEX2D_HUD_WRONGSMALL", + "folder": "hud", + "type": "Texture", + "sha1": "bfa22c5f8cb2c54957dbc17f849a3df5401633c6" + }, + { + "filename": "position_arrow_0", + "build-id": "ASSET_TEX2D_OBJECTS_POSITIONARROW_0", + "folder": "objects", + "type": "Texture", + "sha1": "2c901068777ec5b25c942315608474f5f359a34f" + }, + { + "filename": "position_arrow_1", + "build-id": "ASSET_TEX2D_OBJECTS_POSITIONARROW_1", + "folder": "objects", + "type": "Texture", + "sha1": "ee23cafadf58f1f32b5b4da052196c1c0cfd7b41" + }, + { + "filename": "position_arrow_2", + "build-id": "ASSET_TEX2D_OBJECTS_POSITIONARROW_2", + "folder": "objects", + "type": "Texture", + "sha1": "2700496e77d2ca881d08f618d5e4d90d4a2d6ceb" + }, + { + "filename": "timer_numbers_singletex", + "build-id": "ASSET_TEX2D_HUD_TIMERNUMBERSSINGLETEX", + "folder": "hud", + "type": "Texture", + "sha1": "c08ed7d54aa7fdcfc6ba23c23d655b8d3d6c278d" + }, + { + "filename": "timer_numbers_small_singletex", + "build-id": "ASSET_TEX2D_HUD_TIMERNUMBERSSMALLSINGLETEX", + "folder": "hud", + "type": "Texture", + "sha1": "76c76245f5cbe0194e9466f0d5e94182c889c30f" + }, + { + "filename": "colon2", + "build-id": "ASSET_TEX2D_HUD_COLON2", + "folder": "hud", + "type": "Texture", + "sha1": "e22044234e2a4f1afb4ac42bda3843cd463c6ecd" + }, + { + "filename": "color_small2", + "build-id": "ASSET_TEX2D_HUD_COLORSMALL2", + "folder": "hud", + "type": "Texture", + "sha1": "dadb9c5327be7c673d98bef88ee0bdd3a25cf514" + }, + { + "filename": "lap2", + "build-id": "ASSET_TEX2D_HUD_LAP2", + "folder": "hud", + "type": "Texture", + "sha1": "ff12d6702cad33babf3ae94a72dbec1dfb83d84e" + }, + { + "filename": "time2", + "build-id": "ASSET_TEX2D_HUD_TIME2", + "folder": "hud", + "type": "Texture", + "sha1": "6b55640c99b076005325072a64979c43f0751e0a" + }, + { + "filename": "forward_slash_small", + "build-id": "ASSET_TEX2D_HUD_FORWARDSLASHSMALL", + "folder": "hud", + "type": "Texture", + "sha1": "8edcdf822c5335ed1255cedecc034c73b3dcd9dc" + }, + { + "filename": "forward_slash2", + "build-id": "ASSET_TEX2D_HUD_FORWARDSLASH2", + "folder": "hud", + "type": "Texture", + "sha1": "1f8e1c260ff723b77bb1ebbbad307c55928f4061" + }, + { + "filename": "x", + "build-id": "ASSET_TEX2D_HUD_X", + "folder": "hud", + "type": "Texture", + "sha1": "6109e8b1666fabcb33653d1b68455874d6f04d15" + }, + { + "filename": "place_numbers_singletex", + "build-id": "ASSET_TEX2D_HUD_PLACENUMBERSSINGLETEX", + "folder": "hud", + "type": "Texture", + "sha1": "90ada067e37615f81d25794685faf641bf02ee15" + }, + { + "filename": "place_number_suffixes", + "build-id": "ASSET_TEX2D_HUD_PLACENUMBERSUFFIXES", + "folder": "hud", + "type": "Texture", + "sha1": "767636b59952842d3913509cb973a66f16444018" + }, + { + "filename": "x_small", + "build-id": "ASSET_TEX2D_HUD_XSMALL", + "folder": "hud", + "type": "Texture", + "sha1": "8618caa6a1ba864b9433aab5f2e5b15e098173cb" + }, + { + "filename": "silver_coin_collected", + "build-id": "ASSET_TEX2D_HUD_SILVERCOINCOLLECTED", + "folder": "hud", + "type": "Texture", + "sha1": "558de2d5d90bd6573b97c3de7622d09539b5a332" + }, + { + "filename": "golden_balloon_icon", + "build-id": "ASSET_TEX2D_HUD_GOLDENBALLOONICON", + "folder": "hud", + "type": "Texture", + "sha1": "7dfea3ed7ad06f0d5030667dbd59e0ff9e7fa1cf" + }, + { + "filename": "silver_balloon_icon", + "build-id": "ASSET_TEX2D_HUD_SILVERBALLOONICON", + "folder": "hud", + "type": "Texture", + "sha1": "f321718a2497440bc61f0eab2b98ab5975401a41" + }, + { + "filename": "level_name", + "build-id": "ASSET_TEX2D_OBJECTS_LEVELNAME", + "folder": "objects", + "type": "Texture", + "sha1": "5c571803b281074f7226d7ec8a5dbfc859f9d2c9" + }, + { + "filename": "npc", + "build-id": "ASSET_TEX2D_MINIMAP_NPC", + "folder": "minimap", + "type": "Texture", + "sha1": "cf6e843151684a150e2c5c11747f9740a384fc4f" + }, + { + "filename": "player", + "build-id": "ASSET_TEX2D_MINIMAP_PLAYER", + "folder": "minimap", + "type": "Texture", + "sha1": "eca87acacfdcb5973662446a512d24e666c7c9fe" + }, + { + "filename": "weapon_icon_boost_0", + "build-id": "ASSET_TEX2D_HUD_WEAPONICONBOOST_0", + "folder": "hud", + "type": "Texture", + "sha1": "ecb170413f1b719fb4df4125c0877f1f36e256bc" + }, + { + "filename": "weapon_icon_boost_1", + "build-id": "ASSET_TEX2D_HUD_WEAPONICONBOOST_1", + "folder": "hud", + "type": "Texture", + "sha1": "f147bed75481c6c6f839fe6709cf0bd536ebb6d1" + }, + { + "filename": "weapon_icon_boost_2", + "build-id": "ASSET_TEX2D_HUD_WEAPONICONBOOST_2", + "folder": "hud", + "type": "Texture", + "sha1": "ca0917fa895ce0a3e034c892726610db346fbf81" + }, + { + "filename": "weapon_icon_rocket_0", + "build-id": "ASSET_TEX2D_HUD_WEAPONICONROCKET_0", + "folder": "hud", + "type": "Texture", + "sha1": "c30ff39f1fc9be390c318eaf6d5af097308cc700" + }, + { + "filename": "weapon_icon_rocket_1", + "build-id": "ASSET_TEX2D_HUD_WEAPONICONROCKET_1", + "folder": "hud", + "type": "Texture", + "sha1": "651da2b93d1ec0ff1b935bc85633961b1996b737" + }, + { + "filename": "weapon_icon_rocket_2", + "build-id": "ASSET_TEX2D_HUD_WEAPONICONROCKET_2", + "folder": "hud", + "type": "Texture", + "sha1": "839d0da3ffa2e19bb5761c2d3cf3ea4e2960886c" + }, + { + "filename": "weapon_icon_trap_0", + "build-id": "ASSET_TEX2D_HUD_WEAPONICONTRAP_0", + "folder": "hud", + "type": "Texture", + "sha1": "8ae5feb33401b914f293ee710aa32c0b3482ece5" + }, + { + "filename": "weapon_icon_trap_1", + "build-id": "ASSET_TEX2D_HUD_WEAPONICONTRAP_1", + "folder": "hud", + "type": "Texture", + "sha1": "e9dbc9b34c4b80a6a05f09325d83f4b3fe1a580f" + }, + { + "filename": "weapon_icon_trap_2", + "build-id": "ASSET_TEX2D_HUD_WEAPONICONTRAP_2", + "folder": "hud", + "type": "Texture", + "sha1": "4cef9300212728fbce0808ba651392a2b901c670" + }, + { + "filename": "weapon_icon_shield_0", + "build-id": "ASSET_TEX2D_HUD_WEAPONICONSHIELD_0", + "folder": "hud", + "type": "Texture", + "sha1": "abf362515b4a4281f7853343afad5255a95279cc" + }, + { + "filename": "weapon_icon_shield_1", + "build-id": "ASSET_TEX2D_HUD_WEAPONICONSHIELD_1", + "folder": "hud", + "type": "Texture", + "sha1": "79e472c2efca166ba955fa3d2c32f3aaef6a45a2" + }, + { + "filename": "weapon_icon_shield_2", + "build-id": "ASSET_TEX2D_HUD_WEAPONICONSHIELD_2", + "folder": "hud", + "type": "Texture", + "sha1": "c6f149b5e647dee4fa5bf672604c7e429083d73c" + }, + { + "filename": "weapon_icon_magnet_0", + "build-id": "ASSET_TEX2D_HUD_WEAPONICONMAGNET_0", + "folder": "hud", + "type": "Texture", + "sha1": "5ce5457400d0ca813b8f7524bbdaebb0d6761b5c" + }, + { + "filename": "weapon_icon_magnet_1", + "build-id": "ASSET_TEX2D_HUD_WEAPONICONMAGNET_1", + "folder": "hud", + "type": "Texture", + "sha1": "e7d27922b48bcb45e8c13bfad4e51ee52d7e91e9" + }, + { + "filename": "weapon_icon_magnet_2", + "build-id": "ASSET_TEX2D_HUD_WEAPONICONMAGNET_2", + "folder": "hud", + "type": "Texture", + "sha1": "fbb4521af5daa6826cb621cdc4952f9000b27fda" + }, + { + "filename": "weapon_icon_rocket_numbers_0", + "build-id": "ASSET_TEX2D_HUD_WEAPONICONROCKETNUMBERS_0", + "folder": "hud", + "type": "Texture", + "sha1": "89bab8635699b222ee1c48986ead138e76ee8bdb" + }, + { + "filename": "weapon_icon_rocket_numbers_1", + "build-id": "ASSET_TEX2D_HUD_WEAPONICONROCKETNUMBERS_1", + "folder": "hud", + "type": "Texture", + "sha1": "3832fcfb93323a8b064e45dc6f126ce66ddb3f8d" + }, + { + "filename": "weapon_icon_rocket_numbers_2", + "build-id": "ASSET_TEX2D_HUD_WEAPONICONROCKETNUMBERS_2", + "folder": "hud", + "type": "Texture", + "sha1": "4ff36a7774bd9bc9139fe3220285467529218822" + }, + { + "filename": "weapon_icon_rocket_numbers_3", + "build-id": "ASSET_TEX2D_HUD_WEAPONICONROCKETNUMBERS_3", + "folder": "hud", + "type": "Texture", + "sha1": "6ecd0f32cd5d8eb5af1b1d7be4233fd8c7aa1345" + }, + { + "filename": "weapon_icon_rocket_numbers_4", + "build-id": "ASSET_TEX2D_HUD_WEAPONICONROCKETNUMBERS_4", + "folder": "hud", + "type": "Texture", + "sha1": "1311de751a0f902795f92cb1a0d3ff0a4d627da7" + }, + { + "filename": "weapon_icon_rocket_numbers_5", + "build-id": "ASSET_TEX2D_HUD_WEAPONICONROCKETNUMBERS_5", + "folder": "hud", + "type": "Texture", + "sha1": "f30fcb704c3ed5c6eb07c1cd3250d44580dfc3cd" + }, + { + "filename": "weapon_icon_rocket_numbers_6", + "build-id": "ASSET_TEX2D_HUD_WEAPONICONROCKETNUMBERS_6", + "folder": "hud", + "type": "Texture", + "sha1": "14ee1dc255836df821b1e7525fc1968ed0e9ecbc" + }, + { + "filename": "weapon_icon_rocket_numbers_7", + "build-id": "ASSET_TEX2D_HUD_WEAPONICONROCKETNUMBERS_7", + "folder": "hud", + "type": "Texture", + "sha1": "d9852467d7822a93be22fa4ab1b12126acf5cfa4" + }, + { + "filename": "weapon_icon_rocket_numbers_8", + "build-id": "ASSET_TEX2D_HUD_WEAPONICONROCKETNUMBERS_8", + "folder": "hud", + "type": "Texture", + "sha1": "30aba2e90bbb618d5604562389b8d8517cad91a6" + }, + { + "filename": "weapon_icon_rocket_numbers_9", + "build-id": "ASSET_TEX2D_HUD_WEAPONICONROCKETNUMBERS_9", + "folder": "hud", + "type": "Texture", + "sha1": "d4c9db42c8acaf02df3b2991a2038fa426f27432" + }, + { + "filename": "beta_icon_krunch", + "build-id": "ASSET_TEX2D_UNUSED_BETAICONKRUNCH", + "folder": "unused", + "type": "Texture", + "sha1": "475d6274f49f9a1a873de25e1270f601851d9195" + }, + { + "filename": "beta_icon_bumper", + "build-id": "ASSET_TEX2D_UNUSED_BETAICONBUMPER", + "folder": "unused", + "type": "Texture", + "sha1": "cc619aed191d297041d7b0185a7c9a8c9687ddfa" + }, + { + "filename": "beta_icon_tiptup", + "build-id": "ASSET_TEX2D_UNUSED_BETAICONTIPTUP", + "folder": "unused", + "type": "Texture", + "sha1": "2f65ead8698a67c385c0f2bc6cb6732a209d62e2" + }, + { + "filename": "beta_icon_conker", + "build-id": "ASSET_TEX2D_UNUSED_BETAICONCONKER", + "folder": "unused", + "type": "Texture", + "sha1": "46a35f9e4d19ef15dc6ca3b3dc8deaab2bf86d54" + }, + { + "filename": "beta_icon_timber", + "build-id": "ASSET_TEX2D_UNUSED_BETAICONTIMBER", + "folder": "unused", + "type": "Texture", + "sha1": "0aca6364485a7b37238029fe99de705e5bd2a10d" + }, + { + "filename": "beta_icon_banjo", + "build-id": "ASSET_TEX2D_UNUSED_BETAICONBANJO", + "folder": "unused", + "type": "Texture", + "sha1": "ec4d18545195cbd3b22604320a3eebd2eb3712ba" + }, + { + "filename": "beta_icon_drumstick", + "build-id": "ASSET_TEX2D_UNUSED_BETAICONDRUMSTICK", + "folder": "unused", + "type": "Texture", + "sha1": "ec84a28ef04b7cdf6cc7f0e457c504e508f08a34" + }, + { + "filename": "beta_icon_pipsy", + "build-id": "ASSET_TEX2D_UNUSED_BETAICONPIPSY", + "folder": "unused", + "type": "Texture", + "sha1": "e8967d783133e7de40f985a7d5243fef241019e1" + }, + { + "filename": "final_lap_0", + "build-id": "ASSET_TEX2D_HUD_FINALLAP_0", + "folder": "hud", + "type": "Texture", + "sha1": "9b212904b88c58114fb00cb1912f764f033b0ec7" + }, + { + "filename": "final_lap_1", + "build-id": "ASSET_TEX2D_HUD_FINALLAP_1", + "folder": "hud", + "type": "Texture", + "sha1": "71032afa1c1c3f08b2723770fc28ad424378ac83" + }, + { + "filename": "final_lap_2", + "build-id": "ASSET_TEX2D_HUD_FINALLAP_2", + "folder": "hud", + "type": "Texture", + "sha1": "5e913c28006d76f0ceee45da6719b0eff1e42023" + }, + { + "filename": "final_lap_3", + "build-id": "ASSET_TEX2D_HUD_FINALLAP_3", + "folder": "hud", + "type": "Texture", + "sha1": "af469d76301679d49fe4ded0b49dd0dbc980a5ea" + }, + { + "filename": "final_lap_4", + "build-id": "ASSET_TEX2D_HUD_FINALLAP_4", + "folder": "hud", + "type": "Texture", + "sha1": "9e85496ca1211bf449ac18c2e97b80f6c7a1539a" + }, + { + "filename": "final_0", + "build-id": "ASSET_TEX2D_HUD_FINAL_0", + "folder": "hud", + "type": "Texture", + "sha1": "474ebb85406b6903ef11675bbe2ddf0fb67eddc1" + }, + { + "filename": "final_1", + "build-id": "ASSET_TEX2D_HUD_FINAL_1", + "folder": "hud", + "type": "Texture", + "sha1": "3211dd9055f2520b5910baa0aacee8b331af0001" + }, + { + "filename": "lap_large_0", + "build-id": "ASSET_TEX2D_HUD_LAPLARGE_0", + "folder": "hud", + "type": "Texture", + "sha1": "04a5a94fa5ecbf14d28de4fcef434bcf624923a9" + }, + { + "filename": "lap_large_1", + "build-id": "ASSET_TEX2D_HUD_LAPLARGE_1", + "folder": "hud", + "type": "Texture", + "sha1": "e8bdc2058c05a5c3f79a5cc44107f2d96fe21f1f" + }, + { + "filename": "lap2_2", + "build-id": "ASSET_TEX2D_HUD_LAP2_2", + "folder": "hud", + "type": "Texture", + "sha1": "6bea557420130c9cd8caeddfce616c094f75da28" + }, + { + "filename": "way", + "build-id": "ASSET_TEX2D_HUD_WAY", + "folder": "hud", + "type": "Texture", + "sha1": "9733915eb463bf22e8d3c07681c7f2374ae2fbe6" + }, + { + "filename": "wrong_0", + "build-id": "ASSET_TEX2D_HUD_WRONG_0", + "folder": "hud", + "type": "Texture", + "sha1": "8e5c6f7908329fba34a2d08f04ff3fb5650dac45" + }, + { + "filename": "wrong_1", + "build-id": "ASSET_TEX2D_HUD_WRONG_1", + "folder": "hud", + "type": "Texture", + "sha1": "50b3eb7182304fdf796fe7ebad9db17569b9218f" + }, + { + "filename": "proam_logo_0", + "build-id": "ASSET_TEX2D_UNUSED_PROAMLOGO_0", + "folder": "unused", + "type": "Texture", + "sha1": "3794ee968b1ceb6c5c29f0687996f3c0ba750ea6" + }, + { + "filename": "proam_logo_1", + "build-id": "ASSET_TEX2D_UNUSED_PROAMLOGO_1", + "folder": "unused", + "type": "Texture", + "sha1": "042601de0475641ed7d921c55060e43eefc1c89a" + }, + { + "filename": "proam_logo_2", + "build-id": "ASSET_TEX2D_UNUSED_PROAMLOGO_2", + "folder": "unused", + "type": "Texture", + "sha1": "a1006afdf84de7e61f4ac2c6cf1669635b49f88a" + }, + { + "filename": "speedometer_ticks", + "build-id": "ASSET_TEX2D_HUD_SPEEDOMETERTICKS", + "folder": "hud", + "type": "Texture", + "sha1": "2521516f47cb69178201b0741e95987ec6d3c498" + }, + { + "filename": "speedometer_0", + "build-id": "ASSET_TEX2D_HUD_SPEEDOMETER0", + "folder": "hud", + "type": "Texture", + "sha1": "5b4ce5c4afc49391fbffc331e9a69ac5f6da50a2" + }, + { + "filename": "speedometer_30", + "build-id": "ASSET_TEX2D_HUD_SPEEDOMETER30", + "folder": "hud", + "type": "Texture", + "sha1": "7ec4690b707ef7231ac1012a2b7f0bd43fcc8a18" + }, + { + "filename": "speedometer_60", + "build-id": "ASSET_TEX2D_HUD_SPEEDOMETER60", + "folder": "hud", + "type": "Texture", + "sha1": "b16eecb578a76a7992a4c17f7998aab8ac84e3da" + }, + { + "filename": "speedometer_90", + "build-id": "ASSET_TEX2D_HUD_SPEEDOMETER90", + "folder": "hud", + "type": "Texture", + "sha1": "6a5625b7b61202b297b93cbe37c6f5e36d9413f1" + }, + { + "filename": "speedometer_120", + "build-id": "ASSET_TEX2D_HUD_SPEEDOMETER120", + "folder": "hud", + "type": "Texture", + "sha1": "acc4b6841bcddb9a2989fa11423147c1c520e3a4" + }, + { + "filename": "speedometer_150", + "build-id": "ASSET_TEX2D_HUD_SPEEDOMETER150", + "folder": "hud", + "type": "Texture", + "sha1": "f33f2876704d573f7cc2446d2964bd6618a4def1" + }, + { + "filename": "speedometer_arrow", + "build-id": "ASSET_TEX2D_HUD_SPEEDOMETERARROW", + "folder": "hud", + "type": "Texture", + "sha1": "670f009b735cea7c9d54a47057ca6e93139253fe" + }, + { + "filename": "first_place_one_0", + "build-id": "ASSET_TEX2D_HUD_FIRSTPLACEONE_0", + "folder": "hud", + "type": "Texture", + "sha1": "2dc7312d3c52cb95bbdb909915d7c8dbee94c3ff" + }, + { + "filename": "first_place_one_1", + "build-id": "ASSET_TEX2D_HUD_FIRSTPLACEONE_1", + "folder": "hud", + "type": "Texture", + "sha1": "847df1c1251cdeb302f437ae0f6851a37a78950f" + }, + { + "filename": "first_place_st_0", + "build-id": "ASSET_TEX2D_HUD_FIRSTPLACEST_0", + "folder": "hud", + "type": "Texture", + "sha1": "85961c661196e241a4f558a37fcf37fdad458cc9" + }, + { + "filename": "first_place_st_1", + "build-id": "ASSET_TEX2D_HUD_FIRSTPLACEST_1", + "folder": "hud", + "type": "Texture", + "sha1": "ddbbd2880ca3b4f5714371af018acdf5dd9992ac" + }, + { + "filename": "balloon_string_0", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_0", + "folder": "objects", + "type": "Texture", + "sha1": "55c08949be8cccc98f5e266d05a3a02b65862e41" + }, + { + "filename": "balloon_string_1", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_1", + "folder": "objects", + "type": "Texture", + "sha1": "f075280cf5c09c546564b50a0cf360471faffdfb" + }, + { + "filename": "balloon_string_2", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_2", + "folder": "objects", + "type": "Texture", + "sha1": "5d452c281119fa2888c6632bb3f9f5b5286654c7" + }, + { + "filename": "balloon_string_3", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_3", + "folder": "objects", + "type": "Texture", + "sha1": "7fe1b2b06c13497a34b9c0b1bcc5a713f53739aa" + }, + { + "filename": "balloon_string_4", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_4", + "folder": "objects", + "type": "Texture", + "sha1": "179602ae1b2073a5a431108d33018943bbea9fbe" + }, + { + "filename": "balloon_string_5", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_5", + "folder": "objects", + "type": "Texture", + "sha1": "a500dd774b3b5e28032eb26db664e1bef4df0079" + }, + { + "filename": "balloon_string_6", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_6", + "folder": "objects", + "type": "Texture", + "sha1": "c055aa839f1f1f5ed1414d6823d1f7f74ead1a48" + }, + { + "filename": "balloon_string_7", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_7", + "folder": "objects", + "type": "Texture", + "sha1": "3d9475069eea4432672ef4612aef89e384bf7e62" + }, + { + "filename": "balloon_string_8", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_8", + "folder": "objects", + "type": "Texture", + "sha1": "8b75bab7aa78b3cdf4f058fa82df9a58fc2fd1ef" + }, + { + "filename": "balloon_string_9", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_9", + "folder": "objects", + "type": "Texture", + "sha1": "5ecbbfbb78ff17298c831ee8377f0f29e57c8b39" + }, + { + "filename": "balloon_string_10", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_10", + "folder": "objects", + "type": "Texture", + "sha1": "c6b6d528bbb9d93e641c9c0ceff08440c70bd4f3" + }, + { + "filename": "balloon_string_11", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_11", + "folder": "objects", + "type": "Texture", + "sha1": "e4e3721912d378c4863c54959c6f1007e05e70ea" + }, + { + "filename": "balloon_string_12", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_12", + "folder": "objects", + "type": "Texture", + "sha1": "29d1cabb6c92b23d7a61962048001baecd328f5f" + }, + { + "filename": "balloon_string_13", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_13", + "folder": "objects", + "type": "Texture", + "sha1": "7e362b12b318f2eba70c284ba103dfeb5ecd54f8" + }, + { + "filename": "balloon_string_14", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_14", + "folder": "objects", + "type": "Texture", + "sha1": "7d0165104c170bb1e77d7df81ee27fe9052bd846" + }, + { + "filename": "balloon_string_15", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_15", + "folder": "objects", + "type": "Texture", + "sha1": "2cffd9c313386a86a6644bdf241efe623ac7c3b7" + }, + { + "filename": "balloon_string_16", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_16", + "folder": "objects", + "type": "Texture", + "sha1": "cc0b44c875e6f2f371f32198253e72b2a6fa6cd7" + }, + { + "filename": "balloon_string_17", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_17", + "folder": "objects", + "type": "Texture", + "sha1": "2de6c6488bf524886160a13eacec4c0ff65beca6" + }, + { + "filename": "balloon_string_18", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_18", + "folder": "objects", + "type": "Texture", + "sha1": "4150e477dd593e31a729f78dc970722f1ab901c0" + }, + { + "filename": "balloon_string_19", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSTRING_19", + "folder": "objects", + "type": "Texture", + "sha1": "d623566f3ce6153334991626ef4b676e4976b6e7" + }, + { + "filename": "title_0", + "build-id": "ASSET_TEX2D_MENU_TITLE_0", + "folder": "menu", + "type": "Texture", + "sha1": "9cbfa1c7f69adda02c965ef7e0d7e39221344a90" + }, + { + "filename": "title_1", + "build-id": "ASSET_TEX2D_MENU_TITLE_1", + "folder": "menu", + "type": "Texture", + "sha1": "5fdbf2fe3f38226aabab0051dccfcd060720072c" + }, + { + "filename": "title_2", + "build-id": "ASSET_TEX2D_MENU_TITLE_2", + "folder": "menu", + "type": "Texture", + "sha1": "bcfbf650aef4b62abae3824fdf29945c741b8f80" + }, + { + "filename": "title_3", + "build-id": "ASSET_TEX2D_MENU_TITLE_3", + "folder": "menu", + "type": "Texture", + "sha1": "2ccbfed82f35bbc87afd87f5e1c3633a1a928582" + }, + { + "filename": "title_4", + "build-id": "ASSET_TEX2D_MENU_TITLE_4", + "folder": "menu", + "type": "Texture", + "sha1": "b95c0dd6294e4ba2d7070eec120347e81f704d01" + }, + { + "filename": "title_5", + "build-id": "ASSET_TEX2D_MENU_TITLE_5", + "folder": "menu", + "type": "Texture", + "sha1": "b0e613b9845e951bb89b43249f1dc728a3b7cd19" + }, + { + "filename": "title_6", + "build-id": "ASSET_TEX2D_MENU_TITLE_6", + "folder": "menu", + "type": "Texture", + "sha1": "b6615f0fa98ce05d12dafd63f5d6bf6f28117c2e" + }, + { + "filename": "title_7", + "build-id": "ASSET_TEX2D_MENU_TITLE_7", + "folder": "menu", + "type": "Texture", + "sha1": "2a2c53a6cee4b121ec8a0312716b20282f4c3b36" + }, + { + "filename": "title_8", + "build-id": "ASSET_TEX2D_MENU_TITLE_8", + "folder": "menu", + "type": "Texture", + "sha1": "c934a5bfea33088460db484dbba219028e95d30a" + }, + { + "filename": "title_9", + "build-id": "ASSET_TEX2D_MENU_TITLE_9", + "folder": "menu", + "type": "Texture", + "sha1": "e332dcba88616a76e1433a2eb5cc2193daf27c5a" + }, + { + "filename": "trademark_small", + "build-id": "ASSET_TEX2D_MENU_TRADEMARKSMALL", + "folder": "menu", + "type": "Texture", + "sha1": "6f9b28d5d5161b380dc0e22a15f01d64f5948e9f" + }, + { + "filename": "fireball_unknown_0", + "build-id": "ASSET_TEX2D_UNKNOWN_FIREBALLUNKNOWN_0", + "folder": "unknown", + "type": "Texture", + "sha1": "620c6fd2d308ce77cd1a4fdc12b04562e3ca0024" + }, + { + "filename": "fireball_unknown_1", + "build-id": "ASSET_TEX2D_UNKNOWN_FIREBALLUNKNOWN_1", + "folder": "unknown", + "type": "Texture", + "sha1": "3d39e64aee439c3ddb4d143dd006b5b06f7d0c56" + }, + { + "filename": "fireball_unknown_2", + "build-id": "ASSET_TEX2D_UNKNOWN_FIREBALLUNKNOWN_2", + "folder": "unknown", + "type": "Texture", + "sha1": "a6d5e77fcfccd158ac6ece340f630556b71f7c50" + }, + { + "filename": "fireball_unknown_3", + "build-id": "ASSET_TEX2D_UNKNOWN_FIREBALLUNKNOWN_3", + "folder": "unknown", + "type": "Texture", + "sha1": "96ceb91182ed31feac95c7c74530a76f641b1f26" + }, + { + "filename": "fireball_0", + "build-id": "ASSET_TEX2D_OBJECTS_FIREBALL_0", + "folder": "objects", + "type": "Texture", + "sha1": "a9c03c57d472645107fa9f56c33e9d9751e169bf" + }, + { + "filename": "fireball_1", + "build-id": "ASSET_TEX2D_OBJECTS_FIREBALL_1", + "folder": "objects", + "type": "Texture", + "sha1": "5078d03c8d997e7a54519618bb74d9d2d05de69d" + }, + { + "filename": "fireball_2", + "build-id": "ASSET_TEX2D_OBJECTS_FIREBALL_2", + "folder": "objects", + "type": "Texture", + "sha1": "d07f3755cb2ad77b270773dca6225288d4372868" + }, + { + "filename": "fireball_3", + "build-id": "ASSET_TEX2D_OBJECTS_FIREBALL_3", + "folder": "objects", + "type": "Texture", + "sha1": "9e23179f01d64b68cce8efb7315cfb3e9592440c" + }, + { + "filename": "fireball_4", + "build-id": "ASSET_TEX2D_OBJECTS_FIREBALL_4", + "folder": "objects", + "type": "Texture", + "sha1": "5b624b8c1681e91197f15b719af91f710a01d209" + }, + { + "filename": "fireball_5", + "build-id": "ASSET_TEX2D_OBJECTS_FIREBALL_5", + "folder": "objects", + "type": "Texture", + "sha1": "ddb2460c45e7e43653f0084f2e562424137d8892" + }, + { + "filename": "fireball_6", + "build-id": "ASSET_TEX2D_OBJECTS_FIREBALL_6", + "folder": "objects", + "type": "Texture", + "sha1": "5bdd187a4f864653895f6e6d7ddc9f0125504890" + }, + { + "filename": "fireball_7", + "build-id": "ASSET_TEX2D_OBJECTS_FIREBALL_7", + "folder": "objects", + "type": "Texture", + "sha1": "6789fc56f43ef4d22759fdc290028ff0f7c5a17a" + }, + { + "filename": "fireball_8", + "build-id": "ASSET_TEX2D_OBJECTS_FIREBALL_8", + "folder": "objects", + "type": "Texture", + "sha1": "2b65c6fc87c2b3f5c4887ce37c1d3b1848ec5c8b" + }, + { + "filename": "fireball_9", + "build-id": "ASSET_TEX2D_OBJECTS_FIREBALL_9", + "folder": "objects", + "type": "Texture", + "sha1": "bab647c5737c9bc64fca2746b88c70aa9c2c32e1" + }, + { + "filename": "wizghost_0", + "build-id": "ASSET_TEX2D_OBJECTS_WIZGHOST_0", + "folder": "objects", + "type": "Texture", + "sha1": "f756bc2a13c495096c37c167ac0ab62563c6d50c" + }, + { + "filename": "wizghost_1", + "build-id": "ASSET_TEX2D_OBJECTS_WIZGHOST_1", + "folder": "objects", + "type": "Texture", + "sha1": "cde67785605ca33443dca3c20869e1bfc78bb566" + }, + { + "filename": "wizghost_2", + "build-id": "ASSET_TEX2D_OBJECTS_WIZGHOST_2", + "folder": "objects", + "type": "Texture", + "sha1": "b034a38245df379705fb84f9208d2ba790d46593" + }, + { + "filename": "wizghost_3", + "build-id": "ASSET_TEX2D_OBJECTS_WIZGHOST_3", + "folder": "objects", + "type": "Texture", + "sha1": "aefd60fc25b4e8493436824e682f509ca04fb58a" + }, + { + "filename": "wizghost_4", + "build-id": "ASSET_TEX2D_OBJECTS_WIZGHOST_4", + "folder": "objects", + "type": "Texture", + "sha1": "7105c025afd44e5849e35bb379db0a1b62e05c03" + }, + { + "filename": "wizghost_5", + "build-id": "ASSET_TEX2D_OBJECTS_WIZGHOST_5", + "folder": "objects", + "type": "Texture", + "sha1": "9088e59922e03ab511ccb37349bb918b3da72328" + }, + { + "filename": "wizghost_6", + "build-id": "ASSET_TEX2D_OBJECTS_WIZGHOST_6", + "folder": "objects", + "type": "Texture", + "sha1": "a70e93150bfbccd50ad381f802938ccb0ae946d8" + }, + { + "filename": "wizghost_7", + "build-id": "ASSET_TEX2D_OBJECTS_WIZGHOST_7", + "folder": "objects", + "type": "Texture", + "sha1": "d6d8cc381a6ce17c2faacdf528087ca7ba58fd9c" + }, + { + "filename": "wizghost_8", + "build-id": "ASSET_TEX2D_OBJECTS_WIZGHOST_8", + "folder": "objects", + "type": "Texture", + "sha1": "793387111ecb4fec490cb58f23ad05867b0b4d80" + }, + { + "filename": "wizghost_9", + "build-id": "ASSET_TEX2D_OBJECTS_WIZGHOST_9", + "folder": "objects", + "type": "Texture", + "sha1": "1a90aec5014a912b0f349778841e19a0c5e648d1" + }, + { + "filename": "wizghost_10", + "build-id": "ASSET_TEX2D_OBJECTS_WIZGHOST_10", + "folder": "objects", + "type": "Texture", + "sha1": "40e876219f9ed655b003db24bc82909a169ad25f" + }, + { + "filename": "wizghost_11", + "build-id": "ASSET_TEX2D_OBJECTS_WIZGHOST_11", + "folder": "objects", + "type": "Texture", + "sha1": "b4bb7e46687284a9919b4e9aa417d10a6049f12a" + }, + { + "filename": "wizghost_12", + "build-id": "ASSET_TEX2D_OBJECTS_WIZGHOST_12", + "folder": "objects", + "type": "Texture", + "sha1": "70dceb83a8dbac0348531ad4eabc90a73a7df3c0" + }, + { + "filename": "unknown_light_0", + "build-id": "ASSET_TEX2D_UNKNOWN_UNKNOWNLIGHT_0", + "folder": "unknown", + "type": "Texture", + "sha1": "32625e677ead0946a2d16ac93aff50b5245c9a3c" + }, + { + "filename": "unknown_light_1", + "build-id": "ASSET_TEX2D_UNKNOWN_UNKNOWNLIGHT_1", + "folder": "unknown", + "type": "Texture", + "sha1": "bd94f1dcb1f815519d66314bac1b5ab668919672" + }, + { + "filename": "small_star", + "build-id": "ASSET_TEX2D_UNKNOWN_SMALLSTAR", + "folder": "unknown", + "type": "Texture", + "sha1": "ea4211efb1f92c9889b65af67d54f550209fbc1d" + }, + { + "filename": "buoy_0", + "build-id": "ASSET_TEX2D_OBJECTS_BUOY_0", + "folder": "objects", + "type": "Texture", + "sha1": "e28beb0c6f71b3902502ec8935c415f4adf70b64" + }, + { + "filename": "buoy_1", + "build-id": "ASSET_TEX2D_OBJECTS_BUOY_1", + "folder": "objects", + "type": "Texture", + "sha1": "43f6f9957f565b3cdfad9ac5aae4b0ebee852247" + }, + { + "filename": "buoy_2", + "build-id": "ASSET_TEX2D_OBJECTS_BUOY_2", + "folder": "objects", + "type": "Texture", + "sha1": "576285f4f271060b3b4e459b04b680e291c3c1be" + }, + { + "filename": "buoy_3", + "build-id": "ASSET_TEX2D_OBJECTS_BUOY_3", + "folder": "objects", + "type": "Texture", + "sha1": "25bcfb7e16f651f19be84f1ceb471c9114ab7196" + }, + { + "filename": "smartie_tree_0", + "build-id": "ASSET_TEX2D_OBJECTS_SMARTIETREE_0", + "folder": "objects", + "type": "Texture", + "sha1": "987bc24a933bc30b2b488ca6d557e802221f50d6" + }, + { + "filename": "smartie_tree_1", + "build-id": "ASSET_TEX2D_OBJECTS_SMARTIETREE_1", + "folder": "objects", + "type": "Texture", + "sha1": "4ba113af568713b4e560dabb794b182a306db087" + }, + { + "filename": "smartie_tree_2", + "build-id": "ASSET_TEX2D_OBJECTS_SMARTIETREE_2", + "folder": "objects", + "type": "Texture", + "sha1": "adf5ac250f60a52d6bf30e4b08e49059bb6af75e" + }, + { + "filename": "smartie_tree_3", + "build-id": "ASSET_TEX2D_OBJECTS_SMARTIETREE_3", + "folder": "objects", + "type": "Texture", + "sha1": "ad709f89fc9767a3ebeadcfef074a5bebee226f2" + }, + { + "filename": "beach_tree_0", + "build-id": "ASSET_TEX2D_OBJECTS_BEACHTREE_0", + "folder": "objects", + "type": "Texture", + "sha1": "844afde32f05788c35ccb9869ad05935991c3730" + }, + { + "filename": "beach_tree_1", + "build-id": "ASSET_TEX2D_OBJECTS_BEACHTREE_1", + "folder": "objects", + "type": "Texture", + "sha1": "aff9ecc4cd37a9fb0a8f45286ca2819f43b05574" + }, + { + "filename": "beach_tree_2", + "build-id": "ASSET_TEX2D_OBJECTS_BEACHTREE_2", + "folder": "objects", + "type": "Texture", + "sha1": "fc4c67d33ce49da0289d16e66bae77ef94fa21c6" + }, + { + "filename": "blue_berry_bush_0", + "build-id": "ASSET_TEX2D_OBJECTS_BLUEBERRYBUSH_0", + "folder": "objects", + "type": "Texture", + "sha1": "774fd0876a2f0c9d06833366a6c078240c843fc0" + }, + { + "filename": "blue_berry_bush_1", + "build-id": "ASSET_TEX2D_OBJECTS_BLUEBERRYBUSH_1", + "folder": "objects", + "type": "Texture", + "sha1": "461fc44d5779e0f65913556f6b87aca8dee0c1c1" + }, + { + "filename": "blue_berry_bush_2", + "build-id": "ASSET_TEX2D_OBJECTS_BLUEBERRYBUSH_2", + "folder": "objects", + "type": "Texture", + "sha1": "09d531730bcf68e2018008fd043c1dc163290459" + }, + { + "filename": "blue_berry_bush_3", + "build-id": "ASSET_TEX2D_OBJECTS_BLUEBERRYBUSH_3", + "folder": "objects", + "type": "Texture", + "sha1": "c6bd4c22661b13bdb75e684ebf56c27f7bb4f7ee" + }, + { + "filename": "blue_berry_bush_4", + "build-id": "ASSET_TEX2D_OBJECTS_BLUEBERRYBUSH_4", + "folder": "objects", + "type": "Texture", + "sha1": "f44f42ee49f173e0d9f6d718a8af463a77aa313a" + }, + { + "filename": "blue_berry_bush_5", + "build-id": "ASSET_TEX2D_OBJECTS_BLUEBERRYBUSH_5", + "folder": "objects", + "type": "Texture", + "sha1": "bf4478d709d1baa5d56ce428facae17bd2dfe7b1" + }, + { + "filename": "rubber_snow_tree_0", + "build-id": "ASSET_TEX2D_OBJECTS_RUBBERSNOWTREE_0", + "folder": "objects", + "type": "Texture", + "sha1": "50fa6b6dacd8738769d2c00ab852ee8c9248276f" + }, + { + "filename": "rubber_snow_tree_1", + "build-id": "ASSET_TEX2D_OBJECTS_RUBBERSNOWTREE_1", + "folder": "objects", + "type": "Texture", + "sha1": "81a7c4bf9d492816c7e42170e76650cafc35b7bb" + }, + { + "filename": "rubber_snow_tree_2", + "build-id": "ASSET_TEX2D_OBJECTS_RUBBERSNOWTREE_2", + "folder": "objects", + "type": "Texture", + "sha1": "d172fc869d1e14f261c0a433940f550f596a6745" + }, + { + "filename": "rubber_snow_tree_3", + "build-id": "ASSET_TEX2D_OBJECTS_RUBBERSNOWTREE_3", + "folder": "objects", + "type": "Texture", + "sha1": "bb3c3d2960f48aa19800700c8e1d70b8b03cb2d5" + }, + { + "filename": "skinny_snow_tree_0", + "build-id": "ASSET_TEX2D_OBJECTS_SKINNYSNOWTREE_0", + "folder": "objects", + "type": "Texture", + "sha1": "5953152db6bd1585d818b4fc16a8961bd75b7f46" + }, + { + "filename": "skinny_snow_tree_1", + "build-id": "ASSET_TEX2D_OBJECTS_SKINNYSNOWTREE_1", + "folder": "objects", + "type": "Texture", + "sha1": "cbcda8ede92bb9d432c4f9e52fbb43d2d4e269f0" + }, + { + "filename": "skinny_snow_tree_2", + "build-id": "ASSET_TEX2D_OBJECTS_SKINNYSNOWTREE_2", + "folder": "objects", + "type": "Texture", + "sha1": "70b9aa1a1a39fc096e239699a182ed6bec8382e2" + }, + { + "filename": "skinny_snow_tree_3", + "build-id": "ASSET_TEX2D_OBJECTS_SKINNYSNOWTREE_3", + "folder": "objects", + "type": "Texture", + "sha1": "a5d7095570dcb6faf3539f785d06b0bb18822b4a" + }, + { + "filename": "xmas_tree_0", + "build-id": "ASSET_TEX2D_OBJECTS_XMASTREE_0", + "folder": "objects", + "type": "Texture", + "sha1": "45bac927eb03245d6ae972c8f7f8f9bc392a5418" + }, + { + "filename": "xmas_tree_1", + "build-id": "ASSET_TEX2D_OBJECTS_XMASTREE_1", + "folder": "objects", + "type": "Texture", + "sha1": "5b0b25796a69701c8dada77d4ded6efa197d6a53" + }, + { + "filename": "xmas_tree_2", + "build-id": "ASSET_TEX2D_OBJECTS_XMASTREE_2", + "folder": "objects", + "type": "Texture", + "sha1": "088845755567ee8ae5d37187d1157f12cad6ef76" + }, + { + "filename": "xmas_tree_3", + "build-id": "ASSET_TEX2D_OBJECTS_XMASTREE_3", + "folder": "objects", + "type": "Texture", + "sha1": "4a9faee2a7adfcd773be977f8f75aad294dba715" + }, + { + "filename": "alpine_snow_tree_0", + "build-id": "ASSET_TEX2D_OBJECTS_ALPINESNOWTREE_0", + "folder": "objects", + "type": "Texture", + "sha1": "625ddd3d32ba875bcf6a2029f63403afaae546e8" + }, + { + "filename": "alpine_snow_tree_1", + "build-id": "ASSET_TEX2D_OBJECTS_ALPINESNOWTREE_1", + "folder": "objects", + "type": "Texture", + "sha1": "952a2e7e59cc4cc82b4b906cfb36a7191e644e53" + }, + { + "filename": "alpine_snow_tree_2", + "build-id": "ASSET_TEX2D_OBJECTS_ALPINESNOWTREE_2", + "folder": "objects", + "type": "Texture", + "sha1": "d5f7a468c9e8d941bf73dd6d8edc11c156d2aaa8" + }, + { + "filename": "alpine_snow_tree_3", + "build-id": "ASSET_TEX2D_OBJECTS_ALPINESNOWTREE_3", + "folder": "objects", + "type": "Texture", + "sha1": "73f77d9761da9c85975619c57f565834ba89f912" + }, + { + "filename": "rubber_tree_0", + "build-id": "ASSET_TEX2D_OBJECTS_RUBBERTREE_0", + "folder": "objects", + "type": "Texture", + "sha1": "edee6142838bb62828d9079c724343ce46dae51d" + }, + { + "filename": "rubber_tree_1", + "build-id": "ASSET_TEX2D_OBJECTS_RUBBERTREE_1", + "folder": "objects", + "type": "Texture", + "sha1": "5f9d3676faaeb949e68fb10d8681abc0df7cc1be" + }, + { + "filename": "rubber_tree_2", + "build-id": "ASSET_TEX2D_OBJECTS_RUBBERTREE_2", + "folder": "objects", + "type": "Texture", + "sha1": "cf647849ccbe88d30f09f0b25a983bbdf2a6b488" + }, + { + "filename": "rubber_tree_3", + "build-id": "ASSET_TEX2D_OBJECTS_RUBBERTREE_3", + "folder": "objects", + "type": "Texture", + "sha1": "f019094c3135858a9635b0302ffc2e6aec5a90af" + }, + { + "filename": "palm_tree_top_0", + "build-id": "ASSET_TEX2D_OBJECTS_PALMTREETOP_0", + "folder": "objects", + "type": "Texture", + "sha1": "f558e7a365d61a3fd27facaa6e3248c64442833e" + }, + { + "filename": "palm_tree_top_1", + "build-id": "ASSET_TEX2D_OBJECTS_PALMTREETOP_1", + "folder": "objects", + "type": "Texture", + "sha1": "fa48f67b66df143178d81e1a424ad5b51a5f9adb" + }, + { + "filename": "palm_tree_top_2", + "build-id": "ASSET_TEX2D_OBJECTS_PALMTREETOP_2", + "folder": "objects", + "type": "Texture", + "sha1": "c05859cc6cc3d0de3a25d5ee992dd0cf5b6690f0" + }, + { + "filename": "palm_tree_top_3", + "build-id": "ASSET_TEX2D_OBJECTS_PALMTREETOP_3", + "folder": "objects", + "type": "Texture", + "sha1": "a1b6801938625832c2570d1c460b15fde54d64fc" + }, + { + "filename": "palm_tree_top_4", + "build-id": "ASSET_TEX2D_OBJECTS_PALMTREETOP_4", + "folder": "objects", + "type": "Texture", + "sha1": "acd959762b5cd1c9ab4b20f1b663246dfdf2c393" + }, + { + "filename": "palm_plant_0", + "build-id": "ASSET_TEX2D_OBJECTS_PALMPLANT_0", + "folder": "objects", + "type": "Texture", + "sha1": "28165edfb1693e5350f0e2cb26eade48d24e8600" + }, + { + "filename": "palm_plant_1", + "build-id": "ASSET_TEX2D_OBJECTS_PALMPLANT_1", + "folder": "objects", + "type": "Texture", + "sha1": "75c7f55366d10f35a0ac3260d13fb8b5ad4590dd" + }, + { + "filename": "palm_plant_2", + "build-id": "ASSET_TEX2D_OBJECTS_PALMPLANT_2", + "folder": "objects", + "type": "Texture", + "sha1": "3aa9f262940dfaf3f1b5bf6fbcb47a171444a5e3" + }, + { + "filename": "palm_tree_top_chea_0", + "build-id": "ASSET_TEX2D_OBJECTS_PALMTREETOPCHEA_0", + "folder": "objects", + "type": "Texture", + "sha1": "c6000597d20ee23182302ac9c1d8ec5b074e9c33" + }, + { + "filename": "palm_tree_top_chea_1", + "build-id": "ASSET_TEX2D_OBJECTS_PALMTREETOPCHEA_1", + "folder": "objects", + "type": "Texture", + "sha1": "f5666906055a7e58b43a5b87db8bf8cd30f73da5" + }, + { + "filename": "fir_tree_0", + "build-id": "ASSET_TEX2D_OBJECTS_FIRTREE_0", + "folder": "objects", + "type": "Texture", + "sha1": "2b53bdf9f4cd3f890037391a7b71caded1c2bead" + }, + { + "filename": "fir_tree_1", + "build-id": "ASSET_TEX2D_OBJECTS_FIRTREE_1", + "folder": "objects", + "type": "Texture", + "sha1": "290dbb1b1309e6603061226cfd0065683f023318" + }, + { + "filename": "fir_tree_2", + "build-id": "ASSET_TEX2D_OBJECTS_FIRTREE_2", + "folder": "objects", + "type": "Texture", + "sha1": "bb6cedd177ee1910874eaba090bea6d2fa864e76" + }, + { + "filename": "fir_tree_3", + "build-id": "ASSET_TEX2D_OBJECTS_FIRTREE_3", + "folder": "objects", + "type": "Texture", + "sha1": "3cde67a0009931d889a4c01ffc014c16e1f33281" + }, + { + "filename": "space_tree_0", + "build-id": "ASSET_TEX2D_OBJECTS_SPACETREE_0", + "folder": "objects", + "type": "Texture", + "sha1": "5106553b28a126028d990b469cfcf984e27a7eb1" + }, + { + "filename": "space_tree_1", + "build-id": "ASSET_TEX2D_OBJECTS_SPACETREE_1", + "folder": "objects", + "type": "Texture", + "sha1": "7ba9a762374fbe4fd433bd0f3a53e946ac0af4a5" + }, + { + "filename": "lamp_post_0", + "build-id": "ASSET_TEX2D_OBJECTS_LAMPPOST_0", + "folder": "objects", + "type": "Texture", + "sha1": "d9580df78fca5ffecdd8ecc07fa863ea32b8e03a" + }, + { + "filename": "lamp_post_1", + "build-id": "ASSET_TEX2D_OBJECTS_LAMPPOST_1", + "folder": "objects", + "type": "Texture", + "sha1": "c83fe5df781fc72c056cebc8f779fc9f77bb2aff" + }, + { + "filename": "lamp_post_2", + "build-id": "ASSET_TEX2D_OBJECTS_LAMPPOST_2", + "folder": "objects", + "type": "Texture", + "sha1": "798219140154ce07d8126bfb185924dc4dd3f164" + }, + { + "filename": "lamp_post_3", + "build-id": "ASSET_TEX2D_OBJECTS_LAMPPOST_3", + "folder": "objects", + "type": "Texture", + "sha1": "03359b462d6199367f98cec7cb2d8f4db7d2277e" + }, + { + "filename": "white_buttercup_0", + "build-id": "ASSET_TEX2D_OBJECTS_FLOWERS_WHITEBUTTERCUP_0", + "folder": "objects/flowers", + "type": "Texture", + "sha1": "f5876def5cf28f79d1f53bf3ff635b8341755783" + }, + { + "filename": "white_buttercup_1", + "build-id": "ASSET_TEX2D_OBJECTS_FLOWERS_WHITEBUTTERCUP_1", + "folder": "objects/flowers", + "type": "Texture", + "sha1": "ee6ee4fe9ffc985950db3c265237de99ca23956e" + }, + { + "filename": "yellow_bellflower_0", + "build-id": "ASSET_TEX2D_OBJECTS_FLOWERS_YELLOWBELLFLOWER_0", + "folder": "objects/flowers", + "type": "Texture", + "sha1": "c682d69b7e9cff2e8f5534f822f62f314a509a21" + }, + { + "filename": "yellow_bellflower_1", + "build-id": "ASSET_TEX2D_OBJECTS_FLOWERS_YELLOWBELLFLOWER_1", + "folder": "objects/flowers", + "type": "Texture", + "sha1": "981acd2a3febe864fa6d8441cd7632b8929ead1e" + }, + { + "filename": "yellow_buttercup_0", + "build-id": "ASSET_TEX2D_OBJECTS_FLOWERS_YELLOWBUTTERCUP_0", + "folder": "objects/flowers", + "type": "Texture", + "sha1": "241ee8c9493c452ee25d7fe828e2c4a22d3c9c47" + }, + { + "filename": "yellow_buttercup_1", + "build-id": "ASSET_TEX2D_OBJECTS_FLOWERS_YELLOWBUTTERCUP_1", + "folder": "objects/flowers", + "type": "Texture", + "sha1": "9083e337926514aa887b6dde593d681bbc98175f" + }, + { + "filename": "blue_buttercup_0", + "build-id": "ASSET_TEX2D_OBJECTS_FLOWERS_BLUEBUTTERCUP_0", + "folder": "objects/flowers", + "type": "Texture", + "sha1": "de00ca937cdb6ee6e0882afa6e6de691f8cd574c" + }, + { + "filename": "blue_buttercup_1", + "build-id": "ASSET_TEX2D_OBJECTS_FLOWERS_BLUEBUTTERCUP_1", + "folder": "objects/flowers", + "type": "Texture", + "sha1": "da0c2dae93b970d0873264cdf001edb967545b14" + }, + { + "filename": "waterlily_0", + "build-id": "ASSET_TEX2D_OBJECTS_FLOWERS_WATERLILY_0", + "folder": "objects/flowers", + "type": "Texture", + "sha1": "828d2d981e92c507d15f86bacc531a911be0ed67" + }, + { + "filename": "waterlily_1", + "build-id": "ASSET_TEX2D_OBJECTS_FLOWERS_WATERLILY_1", + "folder": "objects/flowers", + "type": "Texture", + "sha1": "50a57064e55186baea015ef850b41dbe53ea8404" + }, + { + "filename": "reed_no_leaf_0", + "build-id": "ASSET_TEX2D_OBJECTS_REEDNOLEAF_0", + "folder": "objects", + "type": "Texture", + "sha1": "477a3f2a03097116786884d2f208118b13caf557" + }, + { + "filename": "reed_no_leaf_1", + "build-id": "ASSET_TEX2D_OBJECTS_REEDNOLEAF_1", + "folder": "objects", + "type": "Texture", + "sha1": "a220ca22eab4fd0298d03510748c9f0f72cfa1f0" + }, + { + "filename": "reed_leaves_0", + "build-id": "ASSET_TEX2D_OBJECTS_REEDLEAVES_0", + "folder": "objects", + "type": "Texture", + "sha1": "edd70680cccb60744df2de86a7ea32a343c1157c" + }, + { + "filename": "reed_leaves_1", + "build-id": "ASSET_TEX2D_OBJECTS_REEDLEAVES_1", + "folder": "objects", + "type": "Texture", + "sha1": "5c5db38e4dbdd29c5286ea9cfcc8f3dfce6c96f7" + }, + { + "filename": "reed_leaves_2", + "build-id": "ASSET_TEX2D_OBJECTS_REEDLEAVES_2", + "folder": "objects", + "type": "Texture", + "sha1": "582ea944930b7dfbaa7b559c265825dd93e94229" + }, + { + "filename": "reed_one_leaf_0", + "build-id": "ASSET_TEX2D_OBJECTS_REEDONELEAF_0", + "folder": "objects", + "type": "Texture", + "sha1": "458c7f76c5208f4e6695dbf4ad2da15075a3b8fd" + }, + { + "filename": "reed_one_leaf_1", + "build-id": "ASSET_TEX2D_OBJECTS_REEDONELEAF_1", + "folder": "objects", + "type": "Texture", + "sha1": "857d8d6c79e71d4bf7643ca9d24a4ff259fbe573" + }, + { + "filename": "reed_one_leaf_2", + "build-id": "ASSET_TEX2D_OBJECTS_REEDONELEAF_2", + "folder": "objects", + "type": "Texture", + "sha1": "78292d96162d6539cd191b80382fac31de99d60d" + }, + { + "filename": "snowman_tophat_0", + "build-id": "ASSET_TEX2D_OBJECTS_SNOWMANTOPHAT_0", + "folder": "objects", + "type": "Texture", + "sha1": "3663c9996596cee61a1429f44da2e904b4333fc1" + }, + { + "filename": "snowman_tophat_1", + "build-id": "ASSET_TEX2D_OBJECTS_SNOWMANTOPHAT_1", + "folder": "objects", + "type": "Texture", + "sha1": "caf517767f91dafabfff48e3cadba70f4bfa4deb" + }, + { + "filename": "snowman_tophat_2", + "build-id": "ASSET_TEX2D_OBJECTS_SNOWMANTOPHAT_2", + "folder": "objects", + "type": "Texture", + "sha1": "4dae4d612f49b9a08b12a8d9d9607839e733428e" + }, + { + "filename": "snowman_tophat_3", + "build-id": "ASSET_TEX2D_OBJECTS_SNOWMANTOPHAT_3", + "folder": "objects", + "type": "Texture", + "sha1": "a66c8c560fd848d03e3f7f36e34f55fa089bc6d2" + }, + { + "filename": "bell", + "build-id": "ASSET_TEX2D_OBJECTS_BELL", + "folder": "objects", + "type": "Texture", + "sha1": "175d4fc91784a4a9b25fd3e8f329fde8679789bd" + }, + { + "filename": "snowman_0", + "build-id": "ASSET_TEX2D_OBJECTS_SNOWMAN_0", + "folder": "objects", + "type": "Texture", + "sha1": "98f9b9caef3b67546459a2e49a7148fba9faa1dd" + }, + { + "filename": "snowman_1", + "build-id": "ASSET_TEX2D_OBJECTS_SNOWMAN_1", + "folder": "objects", + "type": "Texture", + "sha1": "8e9847807a65c2b874dfc60187f16ed5b35c0818" + }, + { + "filename": "snowman_2", + "build-id": "ASSET_TEX2D_OBJECTS_SNOWMAN_2", + "folder": "objects", + "type": "Texture", + "sha1": "d63126eb5ffb0815bba7e4a30e64a7e20037a2bc" + }, + { + "filename": "snowman_3", + "build-id": "ASSET_TEX2D_OBJECTS_SNOWMAN_3", + "folder": "objects", + "type": "Texture", + "sha1": "6edcb8cd1feb0a4787c2c9075fec3821811a1b46" + }, + { + "filename": "torch_with_eyes", + "build-id": "ASSET_TEX2D_UNUSED_TORCHWITHEYES", + "folder": "unused", + "type": "Texture", + "sha1": "da8734fd54f8ebab5dd8fac5f92f6d3937ebdbc1" + }, + { + "filename": "debug_orb_red", + "build-id": "ASSET_TEX2D_OBJECTS_DEBUGORBRED", + "folder": "objects", + "type": "Texture", + "sha1": "9f2db0772da93df651b39d3e0afa032424d94f0b" + }, + { + "filename": "debug_orb_yellow", + "build-id": "ASSET_TEX2D_OBJECTS_DEBUGORBYELLOW", + "folder": "objects", + "type": "Texture", + "sha1": "81996660768fc0073252168ce7eb4b533477b7e2" + }, + { + "filename": "beta_ancient_lake_sign_0", + "build-id": "ASSET_TEX2D_UNUSED_BETAANCIENTLAKESIGN_0", + "folder": "unused", + "type": "Texture", + "sha1": "a875d19736d912f76c0500972e7f7e0ae8afbc79" + }, + { + "filename": "beta_ancient_lake_sign_1", + "build-id": "ASSET_TEX2D_UNUSED_BETAANCIENTLAKESIGN_1", + "folder": "unused", + "type": "Texture", + "sha1": "575d7b8e6ae7f8357da33774b10dc6cea56e6cd4" + }, + { + "filename": "beta_ancient_lake_sign_2", + "build-id": "ASSET_TEX2D_UNUSED_BETAANCIENTLAKESIGN_2", + "folder": "unused", + "type": "Texture", + "sha1": "c74bbbd53cef57a8dd62e982661db56dd7f7df32" + }, + { + "filename": "beta_ancient_lake_sign_3", + "build-id": "ASSET_TEX2D_UNUSED_BETAANCIENTLAKESIGN_3", + "folder": "unused", + "type": "Texture", + "sha1": "75a992335ecae0220a4d6c1d9eb955d3164c4218" + }, + { + "filename": "beta_ancient_lake_sign_4", + "build-id": "ASSET_TEX2D_UNUSED_BETAANCIENTLAKESIGN_4", + "folder": "unused", + "type": "Texture", + "sha1": "aa0e15f10709c1a9d8030d0f9052cc3db2a99ee4" + }, + { + "filename": "debug_fog_changer", + "build-id": "ASSET_TEX2D_OBJECTS_DEBUGFOGCHANGER", + "folder": "objects", + "type": "Texture", + "sha1": "d841fc385b37129447f0188223e46ae0d1f0d685" + }, + { + "filename": "debug_anim_car", + "build-id": "ASSET_TEX2D_OBJECTS_DEBUGANIMCAR", + "folder": "objects", + "type": "Texture", + "sha1": "d5cba751f68046bf498e0779c73d5863cd48303f" + }, + { + "filename": "debug_sky_control", + "build-id": "ASSET_TEX2D_OBJECTS_DEBUGSKYCONTROL", + "folder": "objects", + "type": "Texture", + "sha1": "74e11f9fea47923e807c03430c9e6a4e2a168748" + }, + { + "filename": "debug_camera_control", + "build-id": "ASSET_TEX2D_OBJECTS_DEBUGCAMERACONTROL", + "folder": "objects", + "type": "Texture", + "sha1": "d8724b960a4d8061ec4771c6b21f80637a1e894b" + }, + { + "filename": "debug_unknown_exit", + "build-id": "ASSET_TEX2D_UNUSED_DEBUGUNKNOWNEXIT", + "folder": "unused", + "type": "Texture", + "sha1": "7a7ddf43e49f79b0196f4c5f4a2b9ef62dda6d5f" + }, + { + "filename": "debug_unknown_traffic_light", + "build-id": "ASSET_TEX2D_UNUSED_DEBUGUNKNOWNTRAFFICLIGHT", + "folder": "unused", + "type": "Texture", + "sha1": "22d252da8e5bd374bf2699a37db0353e8213855e" + }, + { + "filename": "debug_animator", + "build-id": "ASSET_TEX2D_OBJECTS_DEBUGANIMATOR", + "folder": "objects", + "type": "Texture", + "sha1": "515c75d41070b88c1dd94708218a65e499508371" + }, + { + "filename": "debug_audio", + "build-id": "ASSET_TEX2D_OBJECTS_DEBUGAUDIO", + "folder": "objects", + "type": "Texture", + "sha1": "0e060ddec7cf75bc5e96042c81731db24346616d" + }, + { + "filename": "debug_audio_line", + "build-id": "ASSET_TEX2D_OBJECTS_DEBUGAUDIOLINE", + "folder": "objects", + "type": "Texture", + "sha1": "54ed9599d542a8b0d28d4f520d113f37846d9819" + }, + { + "filename": "debug_audio_seq_line", + "build-id": "ASSET_TEX2D_OBJECTS_DEBUGAUDIOSEQLINE", + "folder": "objects", + "type": "Texture", + "sha1": "7e24615f8b38183bf4915b50efeeb7821ee3ddd7" + }, + { + "filename": "debug_audio_seq", + "build-id": "ASSET_TEX2D_OBJECTS_DEBUGAUDIOSEQ", + "folder": "objects", + "type": "Texture", + "sha1": "e08d902a5d212e2f5456a6e18633ddd43b74df13" + }, + { + "filename": "debug_audio_reverb_0", + "build-id": "ASSET_TEX2D_OBJECTS_DEBUGAUDIOREVERB_0", + "folder": "objects", + "type": "Texture", + "sha1": "2a7bda27891f5f9730fff4cc9e32532066667abe" + }, + { + "filename": "debug_audio_reverb_1", + "build-id": "ASSET_TEX2D_OBJECTS_DEBUGAUDIOREVERB_1", + "folder": "objects", + "type": "Texture", + "sha1": "bd216bd05a229b50bba9f1d9a38b8ebb976dea2a" + }, + { + "filename": "balloon_boost_0", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONBOOST_0", + "folder": "objects", + "type": "Texture", + "sha1": "dd32fa8e6764ec9f524e80fdbc68329df176f7a8" + }, + { + "filename": "balloon_boost_1", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONBOOST_1", + "folder": "objects", + "type": "Texture", + "sha1": "c42c59599f657ade5f633a4e86d62431c7e340fa" + }, + { + "filename": "balloon_boost_2", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONBOOST_2", + "folder": "objects", + "type": "Texture", + "sha1": "b6548f88681e48353e19696367ee19756a16f91c" + }, + { + "filename": "balloon_missile_0", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONMISSILE_0", + "folder": "objects", + "type": "Texture", + "sha1": "d3168090f31c3d54fe0f5a450c062bcaba225cb6" + }, + { + "filename": "balloon_missile_1", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONMISSILE_1", + "folder": "objects", + "type": "Texture", + "sha1": "dcd6df505897a247b9f12ababfab4e8b23ccf857" + }, + { + "filename": "balloon_missile_2", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONMISSILE_2", + "folder": "objects", + "type": "Texture", + "sha1": "88c264a9785fd2778d8e004c9fa3c6d3d015c85e" + }, + { + "filename": "balloon_trap_0", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONTRAP_0", + "folder": "objects", + "type": "Texture", + "sha1": "6df697c3233ca224bea7787ac94b817013e49378" + }, + { + "filename": "balloon_trap_1", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONTRAP_1", + "folder": "objects", + "type": "Texture", + "sha1": "602a715cc1ac985cb269607943426bbe5c45ec35" + }, + { + "filename": "balloon_trap_2", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONTRAP_2", + "folder": "objects", + "type": "Texture", + "sha1": "eff43bc47e94430ee801e7b8b5d55337127feda4" + }, + { + "filename": "balloon_shield_0", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSHIELD_0", + "folder": "objects", + "type": "Texture", + "sha1": "4118cc874326a78c9d3eb7e894dc10840e880e16" + }, + { + "filename": "balloon_shield_1", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSHIELD_1", + "folder": "objects", + "type": "Texture", + "sha1": "f559b8c46be7412a140d1a28267e06e72f871623" + }, + { + "filename": "balloon_shield_2", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSHIELD_2", + "folder": "objects", + "type": "Texture", + "sha1": "968fb5c4a15af3022da29884d6a9d98a983a549e" + }, + { + "filename": "balloon_magnet_0", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONMAGNET_0", + "folder": "objects", + "type": "Texture", + "sha1": "5573b63624c00c491049538afeb172f3bf2a7f0c" + }, + { + "filename": "balloon_magnet_1", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONMAGNET_1", + "folder": "objects", + "type": "Texture", + "sha1": "fdcc185555ea3bd50602935c10683cab05ef201a" + }, + { + "filename": "balloon_magnet_2", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONMAGNET_2", + "folder": "objects", + "type": "Texture", + "sha1": "599549f94519ab23a95211360f0ab84bab457e8a" + }, + { + "filename": "balloon_missile_gift_0", + "build-id": "ASSET_TEX2D_UNUSED_BALLOONMISSILEGIFT_0", + "folder": "unused", + "type": "Texture", + "sha1": "2be7ca89d4444fc6dc0f8cb1585bd5165919c29d" + }, + { + "filename": "balloon_missile_gift_1", + "build-id": "ASSET_TEX2D_UNUSED_BALLOONMISSILEGIFT_1", + "folder": "unused", + "type": "Texture", + "sha1": "251c7c423a70e48d77ad987f6c90d42c83578e44" + }, + { + "filename": "balloon_missile_gift_2", + "build-id": "ASSET_TEX2D_UNUSED_BALLOONMISSILEGIFT_2", + "folder": "unused", + "type": "Texture", + "sha1": "afe90cde02beb075825fe1a90feb108ee89e0e52" + }, + { + "filename": "balloon_boost_gift_0", + "build-id": "ASSET_TEX2D_UNUSED_BALLOONBOOSTGIFT_0", + "folder": "unused", + "type": "Texture", + "sha1": "0151c0a0619d96228480b23cb1b55e5e7c212e7c" + }, + { + "filename": "balloon_boost_gift_1", + "build-id": "ASSET_TEX2D_UNUSED_BALLOONBOOSTGIFT_1", + "folder": "unused", + "type": "Texture", + "sha1": "33badc2701f1e353e929a13be8cf9a6ee85ce9d8" + }, + { + "filename": "balloon_boost_gift_2", + "build-id": "ASSET_TEX2D_UNUSED_BALLOONBOOSTGIFT_2", + "folder": "unused", + "type": "Texture", + "sha1": "8fd29868cba41b8de2839adae2536e233f480192" + }, + { + "filename": "balloon_gold_0", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONGOLD_0", + "folder": "objects", + "type": "Texture", + "sha1": "92fcaaf601b047a32d6b247ca398c60a7bae4045" + }, + { + "filename": "balloon_gold_1", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONGOLD_1", + "folder": "objects", + "type": "Texture", + "sha1": "ad732c2995195f6f2716fa1d5dd68f09752b6d7c" + }, + { + "filename": "balloon_gold_2", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONGOLD_2", + "folder": "objects", + "type": "Texture", + "sha1": "432fcf61edc8de07c04f06503ec19580c225f9da" + }, + { + "filename": "balloon_silver_0", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSILVER_0", + "folder": "objects", + "type": "Texture", + "sha1": "5348f388bb86f07734264c972d7723a2e454bda4" + }, + { + "filename": "balloon_silver_1", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSILVER_1", + "folder": "objects", + "type": "Texture", + "sha1": "10d4fa07b038fdfc43ea33ea47cb80b1cfb48f57" + }, + { + "filename": "balloon_silver_2", + "build-id": "ASSET_TEX2D_OBJECTS_BALLOONSILVER_2", + "folder": "objects", + "type": "Texture", + "sha1": "e52e2eb73fb823ebe58c4d2d4ca166a8777c54d3" + }, + { + "filename": "banana_0", + "build-id": "ASSET_TEX2D_OBJECTS_BANANA_0", + "folder": "objects", + "type": "Texture", + "sha1": "8b46c98cc9a5f794cbec0584e54fdfdd79ca3e06" + }, + { + "filename": "banana_1", + "build-id": "ASSET_TEX2D_OBJECTS_BANANA_1", + "folder": "objects", + "type": "Texture", + "sha1": "5b394bfaf7f863b325a273d2f5fe820e49cb0cb5" + }, + { + "filename": "banana_2", + "build-id": "ASSET_TEX2D_OBJECTS_BANANA_2", + "folder": "objects", + "type": "Texture", + "sha1": "f7826fd7fbaea9d818e2518d8c6e190fdf2f5dfc" + }, + { + "filename": "banana_3", + "build-id": "ASSET_TEX2D_OBJECTS_BANANA_3", + "folder": "objects", + "type": "Texture", + "sha1": "06b4bb327cc98b52c8f88248d92dbd6cd5903322" + }, + { + "filename": "banana_4", + "build-id": "ASSET_TEX2D_OBJECTS_BANANA_4", + "folder": "objects", + "type": "Texture", + "sha1": "c408f3ccc5c8b18f7dc320926e67c15478199d82" + }, + { + "filename": "banana_5", + "build-id": "ASSET_TEX2D_OBJECTS_BANANA_5", + "folder": "objects", + "type": "Texture", + "sha1": "4215051f8d380a6cc5a1f58df3037efa9cdd3ab1" + }, + { + "filename": "banana_6", + "build-id": "ASSET_TEX2D_OBJECTS_BANANA_6", + "folder": "objects", + "type": "Texture", + "sha1": "13cd351711eefe0d9dc8a9c405ae86c548c76e3e" + }, + { + "filename": "banana_7", + "build-id": "ASSET_TEX2D_OBJECTS_BANANA_7", + "folder": "objects", + "type": "Texture", + "sha1": "ec10e39c185a8bcceb9a6a3e833504aec53d34ad" + }, + { + "filename": "silver_coin_0", + "build-id": "ASSET_TEX2D_OBJECTS_SILVERCOIN_0", + "folder": "objects", + "type": "Texture", + "sha1": "bf9df0ba694777c240e0802bbe141e5f2f59befd" + }, + { + "filename": "silver_coin_1", + "build-id": "ASSET_TEX2D_OBJECTS_SILVERCOIN_1", + "folder": "objects", + "type": "Texture", + "sha1": "759c340dd9d082172912a405714d6cc415a89a13" + }, + { + "filename": "silver_coin_2", + "build-id": "ASSET_TEX2D_OBJECTS_SILVERCOIN_2", + "folder": "objects", + "type": "Texture", + "sha1": "1bc3cb0484bb42dade99334e7d4173a85967a830" + }, + { + "filename": "silver_coin_3", + "build-id": "ASSET_TEX2D_OBJECTS_SILVERCOIN_3", + "folder": "objects", + "type": "Texture", + "sha1": "11f18033ea0a0f6f32725587bfa30b8030fd9cb7" + }, + { + "filename": "silver_coin_4", + "build-id": "ASSET_TEX2D_OBJECTS_SILVERCOIN_4", + "folder": "objects", + "type": "Texture", + "sha1": "d70631087f23093099874d72c9f607b0e8acd1e2" + }, + { + "filename": "silver_coin_5", + "build-id": "ASSET_TEX2D_OBJECTS_SILVERCOIN_5", + "folder": "objects", + "type": "Texture", + "sha1": "dd6468c13980fa42d192dcf74abc0a1d22819447" + }, + { + "filename": "silver_coin_6", + "build-id": "ASSET_TEX2D_OBJECTS_SILVERCOIN_6", + "folder": "objects", + "type": "Texture", + "sha1": "ab79bcb3a86588abddeeb8332c9c9fbea01986e1" + }, + { + "filename": "silver_coin_7", + "build-id": "ASSET_TEX2D_OBJECTS_SILVERCOIN_7", + "folder": "objects", + "type": "Texture", + "sha1": "124eca1019639e872bfb26ed505d8a1c65dc8221" + }, + { + "filename": "silver_coin_8", + "build-id": "ASSET_TEX2D_OBJECTS_SILVERCOIN_8", + "folder": "objects", + "type": "Texture", + "sha1": "67f684f28f8eb03559d71c277a9548d71995269e" + }, + { + "filename": "silver_coin_9", + "build-id": "ASSET_TEX2D_OBJECTS_SILVERCOIN_9", + "folder": "objects", + "type": "Texture", + "sha1": "abd6e2496de5d214fa656b193b4b005e0259fd0c" + }, + { + "filename": "silver_coin_10", + "build-id": "ASSET_TEX2D_OBJECTS_SILVERCOIN_10", + "folder": "objects", + "type": "Texture", + "sha1": "e227bd4ab7504910c02c54c284c1130bbccaa7a2" + }, + { + "filename": "checkpoint_flag_0", + "build-id": "ASSET_TEX2D_OBJECTS_CHECKPOINTFLAG_0", + "folder": "objects", + "type": "Texture", + "sha1": "fc64829c0c61a0a25961ee9c0b0e562da4c88686" + }, + { + "filename": "checkpoint_flag_1", + "build-id": "ASSET_TEX2D_OBJECTS_CHECKPOINTFLAG_1", + "folder": "objects", + "type": "Texture", + "sha1": "c5e01151ba40efa7514bbb965e1ee932c1ac5d91" + }, + { + "filename": "checkpoint_flag_2", + "build-id": "ASSET_TEX2D_OBJECTS_CHECKPOINTFLAG_2", + "folder": "objects", + "type": "Texture", + "sha1": "f4f39292c93531abd26e51c524fed852f2f481bb" + }, + { + "filename": "checkpoint_flag_3", + "build-id": "ASSET_TEX2D_OBJECTS_CHECKPOINTFLAG_3", + "folder": "objects", + "type": "Texture", + "sha1": "39b7c62d6a36cf2fac211b68e3e58ce925740439" + }, + { + "filename": "checkpoint_flag_4", + "build-id": "ASSET_TEX2D_OBJECTS_CHECKPOINTFLAG_4", + "folder": "objects", + "type": "Texture", + "sha1": "2cef48c432d65b233757c7f6be9c9d7caf2eeb61" + }, + { + "filename": "checkpoint_flag_5", + "build-id": "ASSET_TEX2D_OBJECTS_CHECKPOINTFLAG_5", + "folder": "objects", + "type": "Texture", + "sha1": "462230120116e275a621d0d0769fca7dda1456f8" + }, + { + "filename": "checkpoint_flag_6", + "build-id": "ASSET_TEX2D_OBJECTS_CHECKPOINTFLAG_6", + "folder": "objects", + "type": "Texture", + "sha1": "a7e7441323e35c7f0b015e1108640c09eb30ce9f" + }, + { + "filename": "checkpoint_flag_7", + "build-id": "ASSET_TEX2D_OBJECTS_CHECKPOINTFLAG_7", + "folder": "objects", + "type": "Texture", + "sha1": "adb6a7a632d53bf7794f30e6679877844e880c78" + }, + { + "filename": "checkpoint_flag_8", + "build-id": "ASSET_TEX2D_OBJECTS_CHECKPOINTFLAG_8", + "folder": "objects", + "type": "Texture", + "sha1": "3a6ecec59336abec7ee7df42f6ec899fa285b739" + }, + { + "filename": "rareware_coin_0", + "build-id": "ASSET_TEX2D_UNUSED_RAREWARECOIN_0", + "folder": "unused", + "type": "Texture", + "sha1": "020099fa007b8ceb9fa6574d65f4648504bd0984" + }, + { + "filename": "rareware_coin_1", + "build-id": "ASSET_TEX2D_UNUSED_RAREWARECOIN_1", + "folder": "unused", + "type": "Texture", + "sha1": "19cabcf9c3ee5a889ac2134bf7a3c69e2b62f180" + }, + { + "filename": "rareware_coin_2", + "build-id": "ASSET_TEX2D_UNUSED_RAREWARECOIN_2", + "folder": "unused", + "type": "Texture", + "sha1": "219318c130253edef6fca5e3f7e15b63ba3d863d" + }, + { + "filename": "rareware_coin_3", + "build-id": "ASSET_TEX2D_UNUSED_RAREWARECOIN_3", + "folder": "unused", + "type": "Texture", + "sha1": "d960733a1ac66c44a38436bcc8cd323a2ba2435c" + }, + { + "filename": "rareware_coin_4", + "build-id": "ASSET_TEX2D_UNUSED_RAREWARECOIN_4", + "folder": "unused", + "type": "Texture", + "sha1": "e748039b1eed5200f5abf725f3f249631c2f3104" + }, + { + "filename": "rareware_coin_5", + "build-id": "ASSET_TEX2D_UNUSED_RAREWARECOIN_5", + "folder": "unused", + "type": "Texture", + "sha1": "6152ce3a5afd4ee29327c0354c91d60ff6b35b98" + }, + { + "filename": "rareware_coin_6", + "build-id": "ASSET_TEX2D_UNUSED_RAREWARECOIN_6", + "folder": "unused", + "type": "Texture", + "sha1": "5d6e5f6d1da76f55713fb294d170a5a23c59d703" + }, + { + "filename": "rareware_coin_7", + "build-id": "ASSET_TEX2D_UNUSED_RAREWARECOIN_7", + "folder": "unused", + "type": "Texture", + "sha1": "95645fd2d507a5a422fae2c463b48c0ee4a5c1ee" + }, + { + "filename": "rareware_coin_8", + "build-id": "ASSET_TEX2D_UNUSED_RAREWARECOIN_8", + "folder": "unused", + "type": "Texture", + "sha1": "2db3ef24ef3d7b8774e7131e3cfa9194ce80769e" + }, + { + "filename": "rareware_coin_9", + "build-id": "ASSET_TEX2D_UNUSED_RAREWARECOIN_9", + "folder": "unused", + "type": "Texture", + "sha1": "091ddd7444e244fd1e19812c3a97acec784d09da" + }, + { + "filename": "rareware_coin_10", + "build-id": "ASSET_TEX2D_UNUSED_RAREWARECOIN_10", + "folder": "unused", + "type": "Texture", + "sha1": "6700cda6854aea19bfbae55a7dbf7e5ddf252504" + }, + { + "filename": "silver_coin_vertical", + "build-id": "ASSET_TEX2D_UNUSED_SILVERCOINVERTICAL", + "folder": "unused", + "type": "Texture", + "sha1": "ced048e02410bafe65f3731ab71e72d1f6b0a259" + }, + { + "filename": "banana_icon_0", + "build-id": "ASSET_TEX2D_HUD_BANANAICON_0", + "folder": "hud", + "type": "Texture", + "sha1": "0bb762fb1b656c7d48b9fbf103784e3dac93bf7d" + }, + { + "filename": "banana_icon_1", + "build-id": "ASSET_TEX2D_HUD_BANANAICON_1", + "folder": "hud", + "type": "Texture", + "sha1": "9e5681db8794034d9281e57759e9e09209544125" + }, + { + "filename": "sparkle_0", + "build-id": "ASSET_TEX2D_PARTICLES_SPARKLE_0", + "folder": "particles", + "type": "Texture", + "sha1": "01dd2f31eef828fde9f9e7705cbd980b0cfb6ecb" + }, + { + "filename": "sparkle_1", + "build-id": "ASSET_TEX2D_PARTICLES_SPARKLE_1", + "folder": "particles", + "type": "Texture", + "sha1": "e0abbac2e73abcadce57b0ec906b465c4dda6e10" + }, + { + "filename": "sparkle_2", + "build-id": "ASSET_TEX2D_PARTICLES_SPARKLE_2", + "folder": "particles", + "type": "Texture", + "sha1": "c22bcee149646cb268bbb8b3ff0855544d700938" + }, + { + "filename": "sparkle_3", + "build-id": "ASSET_TEX2D_PARTICLES_SPARKLE_3", + "folder": "particles", + "type": "Texture", + "sha1": "8c53090652ff6c21f6c837912222d76b9b5e0546" + }, + { + "filename": "sparkle_4", + "build-id": "ASSET_TEX2D_PARTICLES_SPARKLE_4", + "folder": "particles", + "type": "Texture", + "sha1": "cff4f38a3f6171e78ae1bfd54a4c6f53bcbc35c2" + }, + { + "filename": "debug_egg_creator_0", + "build-id": "ASSET_TEX2D_OBJECTS_DEBUGEGGCREATOR_0", + "folder": "objects", + "type": "Texture", + "sha1": "9f2db0772da93df651b39d3e0afa032424d94f0b" + }, + { + "filename": "debug_egg_creator_1", + "build-id": "ASSET_TEX2D_OBJECTS_DEBUGEGGCREATOR_1", + "folder": "objects", + "type": "Texture", + "sha1": "33397f2a28f3968ede8eed5298a9e2e266dd2e4d" + }, + { + "filename": "debug_egg_creator_2", + "build-id": "ASSET_TEX2D_OBJECTS_DEBUGEGGCREATOR_2", + "folder": "objects", + "type": "Texture", + "sha1": "ea406605d7584de0c6771d10a74a67727d0a4bd8" + }, + { + "filename": "debug_egg_creator_3", + "build-id": "ASSET_TEX2D_OBJECTS_DEBUGEGGCREATOR_3", + "folder": "objects", + "type": "Texture", + "sha1": "81996660768fc0073252168ce7eb4b533477b7e2" + }, + { + "filename": "debug_egg_creator_4", + "build-id": "ASSET_TEX2D_OBJECTS_DEBUGEGGCREATOR_4", + "folder": "objects", + "type": "Texture", + "sha1": "1bbe2c25d216d9e2681bc77a24720532676977c6" + }, + { + "filename": "debug_egg_creator_5", + "build-id": "ASSET_TEX2D_OBJECTS_DEBUGEGGCREATOR_5", + "folder": "objects", + "type": "Texture", + "sha1": "00b561090f2fa1fba814ab74c559d257302ff3b9" + }, + { + "filename": "bonus_gem_0", + "build-id": "ASSET_TEX2D_UNUSED_BONUSGEM_0", + "folder": "unused", + "type": "Texture", + "sha1": "550bae976f8bef192958e5f9c7baf3f8fea46256" + }, + { + "filename": "bonus_gem_1", + "build-id": "ASSET_TEX2D_UNUSED_BONUSGEM_1", + "folder": "unused", + "type": "Texture", + "sha1": "34f73a495c095774aa0f6961c954bbbe3ec7a31e" + }, + { + "filename": "bonus_gem_2", + "build-id": "ASSET_TEX2D_UNUSED_BONUSGEM_2", + "folder": "unused", + "type": "Texture", + "sha1": "cc31ca1e82541d9d382d02d0bb0bb7ae8b589742" + }, + { + "filename": "bonus_gem_3", + "build-id": "ASSET_TEX2D_UNUSED_BONUSGEM_3", + "folder": "unused", + "type": "Texture", + "sha1": "202010b150b2421a44749bcaca6a32fc90115956" + }, + { + "filename": "bonus_gem_4", + "build-id": "ASSET_TEX2D_UNUSED_BONUSGEM_4", + "folder": "unused", + "type": "Texture", + "sha1": "e105a0d7c78d5beb8a6f837126eedbeba101b90f" + }, + { + "filename": "bonus_gem_5", + "build-id": "ASSET_TEX2D_UNUSED_BONUSGEM_5", + "folder": "unused", + "type": "Texture", + "sha1": "73e6140de84e5b2ed906a8bb08c64c515c2383a1" + }, + { + "filename": "bonus_gem_6", + "build-id": "ASSET_TEX2D_UNUSED_BONUSGEM_6", + "folder": "unused", + "type": "Texture", + "sha1": "fd6b3c83afc7fe5e5542cb76bef0a5b43525bc6b" + }, + { + "filename": "bonus_gem_7", + "build-id": "ASSET_TEX2D_UNUSED_BONUSGEM_7", + "folder": "unused", + "type": "Texture", + "sha1": "dc005177635475d65298d16e5f152aba906f4ee6" + }, + { + "filename": "indicatoricon_caution", + "build-id": "ASSET_TEX2D_HUD_INDICATORICONCAUTION", + "folder": "hud", + "type": "Texture", + "sha1": "283ff27aacd1b4111317f28841a157659a2a769f" + }, + { + "filename": "indicatoricon_down", + "build-id": "ASSET_TEX2D_HUD_INDICATORICONDOWN", + "folder": "hud", + "type": "Texture", + "sha1": "5fdcd88c032efe64239299b215b1e8987660f892" + }, + { + "filename": "indicatoricon_uturn", + "build-id": "ASSET_TEX2D_HUD_INDICATORICONUTURN", + "folder": "hud", + "type": "Texture", + "sha1": "8c95a3903209810570d17c6d05dc6057a4298284" + }, + { + "filename": "indicatoricon_turn", + "build-id": "ASSET_TEX2D_HUD_INDICATORICONTURN", + "folder": "hud", + "type": "Texture", + "sha1": "3325cbd6523ff5ba2a05818f93c30ed86ca014ac" + }, + { + "filename": "indicatoricon_slight_turn", + "build-id": "ASSET_TEX2D_HUD_INDICATORICONSLIGHTTURN", + "folder": "hud", + "type": "Texture", + "sha1": "045c633969b3e784c89c401c3d688c836d741dbb" + }, + { + "filename": "smoke_object_0", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKEOBJECT_0", + "folder": "objects", + "type": "Texture", + "sha1": "5e2be5cdb271d90210e4f34efffa16474f0a67bb" + }, + { + "filename": "smoke_object_1", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKEOBJECT_1", + "folder": "objects", + "type": "Texture", + "sha1": "9cb01c86ac513fa5fd9b8883b159ee5de64f6290" + }, + { + "filename": "smoke_object_2", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKEOBJECT_2", + "folder": "objects", + "type": "Texture", + "sha1": "b2b0040b73c935ae65d09da23e57c0773253b6a2" + }, + { + "filename": "smoke_object_3", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKEOBJECT_3", + "folder": "objects", + "type": "Texture", + "sha1": "b3794625d675928572635f10e8f6bd153685d06a" + }, + { + "filename": "smoke_object_4", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKEOBJECT_4", + "folder": "objects", + "type": "Texture", + "sha1": "e3a4451bdfe615267fe197131ab63d837a508dd5" + }, + { + "filename": "smoke_object_5", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKEOBJECT_5", + "folder": "objects", + "type": "Texture", + "sha1": "95094df885798794af3de89763c60a1a44121992" + }, + { + "filename": "smoke_object_6", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKEOBJECT_6", + "folder": "objects", + "type": "Texture", + "sha1": "cf45e6e8d312c57b380cc1ba43410ae14a9096d9" + }, + { + "filename": "smoke_object_7", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKEOBJECT_7", + "folder": "objects", + "type": "Texture", + "sha1": "efb26298dec5940cd37a178131aa37f9c63f59ae" + }, + { + "filename": "smoke_object_8", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKEOBJECT_8", + "folder": "objects", + "type": "Texture", + "sha1": "9adb8b9712787983a9cce8eb6a615b813b55c83b" + }, + { + "filename": "smoke_object_9", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKEOBJECT_9", + "folder": "objects", + "type": "Texture", + "sha1": "0fbb3046ad147163911158c1d44c426eac2369ec" + }, + { + "filename": "smoke_object_10", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKEOBJECT_10", + "folder": "objects", + "type": "Texture", + "sha1": "a791cbbf1ad22dc84f29519bfd97fe2c1d96f433" + }, + { + "filename": "smoke_object_11", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKEOBJECT_11", + "folder": "objects", + "type": "Texture", + "sha1": "7323eed3044ab97cf0c24d27bac64e7fd6da316c" + }, + { + "filename": "smoke_object_12", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKEOBJECT_12", + "folder": "objects", + "type": "Texture", + "sha1": "56c565d4754e8c943f8dde7961d85d902a2463fd" + }, + { + "filename": "smoke_object_13", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKEOBJECT_13", + "folder": "objects", + "type": "Texture", + "sha1": "6793f236ba6bc665d1aeaaf7e0dd46ff4c823f00" + }, + { + "filename": "smoke_object_14", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKEOBJECT_14", + "folder": "objects", + "type": "Texture", + "sha1": "a5aaccf946dfd9b0af4fdf6f7a72820852f4daa2" + }, + { + "filename": "smoke_object_15", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKEOBJECT_15", + "folder": "objects", + "type": "Texture", + "sha1": "589e03774b378a227159b67e5f814cd524e887ab" + }, + { + "filename": "smoke_cloud_0", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKECLOUD_0", + "folder": "objects", + "type": "Texture", + "sha1": "309e4c6cbeee5d387985691d0570e98080c2b3e1" + }, + { + "filename": "smoke_cloud_1", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKECLOUD_1", + "folder": "objects", + "type": "Texture", + "sha1": "ff23299a5d103993c3f3864ecf6ed66e5040197e" + }, + { + "filename": "smoke_cloud_2", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKECLOUD_2", + "folder": "objects", + "type": "Texture", + "sha1": "a8a8e55d29bf299293fd5e3a7ae28cf30cb11ca1" + }, + { + "filename": "smoke_cloud_3", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKECLOUD_3", + "folder": "objects", + "type": "Texture", + "sha1": "af5df56bcce593302976c8550221bde271a953bb" + }, + { + "filename": "smoke_cloud_4", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKECLOUD_4", + "folder": "objects", + "type": "Texture", + "sha1": "1f5272fbfb0d0c9d5b50cd2915f596a2ca3523ba" + }, + { + "filename": "smoke_cloud_5", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKECLOUD_5", + "folder": "objects", + "type": "Texture", + "sha1": "9b1bbc123bf20fb0543031bed8aaeb385e6e9b22" + }, + { + "filename": "smoke_cloud_6", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKECLOUD_6", + "folder": "objects", + "type": "Texture", + "sha1": "ed12cbde623e61f98f2b6055d103a2ebb835874e" + }, + { + "filename": "smoke_cloud_7", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKECLOUD_7", + "folder": "objects", + "type": "Texture", + "sha1": "18e7de472ea380a42ae7aabdefbdb1bf6e7520e9" + }, + { + "filename": "smoke_cloud_8", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKECLOUD_8", + "folder": "objects", + "type": "Texture", + "sha1": "eca531cb9028e74ea8879753cd3dd46b29cc2f7d" + }, + { + "filename": "smoke_grass_0", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKEGRASS_0", + "folder": "objects", + "type": "Texture", + "sha1": "f7a882737dee2f779688aa96da69b54b0074468a" + }, + { + "filename": "smoke_grass_1", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKEGRASS_1", + "folder": "objects", + "type": "Texture", + "sha1": "961c4a19638f72763c106cd47668369b9ed4c526" + }, + { + "filename": "smoke_grass_2", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKEGRASS_2", + "folder": "objects", + "type": "Texture", + "sha1": "796ad4a18a415d9856964a64974bcc6a62133be6" + }, + { + "filename": "smoke_grass_3", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKEGRASS_3", + "folder": "objects", + "type": "Texture", + "sha1": "70d7d2f23845b5e262bffaecd6f6a09fa63bd9fe" + }, + { + "filename": "smoke_grass_4", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKEGRASS_4", + "folder": "objects", + "type": "Texture", + "sha1": "50673d24f138fdd826abc7ef1b444f8a3d8e2682" + }, + { + "filename": "smoke_grass_5", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKEGRASS_5", + "folder": "objects", + "type": "Texture", + "sha1": "1aef2a1e8ef214c93d3a054881a869b3a48a3052" + }, + { + "filename": "smoke_grass_6", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKEGRASS_6", + "folder": "objects", + "type": "Texture", + "sha1": "99d63c8784f6641139210a8123541a543c371c36" + }, + { + "filename": "smoke_grass_7", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKEGRASS_7", + "folder": "objects", + "type": "Texture", + "sha1": "8f127873a8fab129193082e9e06fd002a4273ed8" + }, + { + "filename": "smoke_grass_8", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKEGRASS_8", + "folder": "objects", + "type": "Texture", + "sha1": "4bc123c4f6aef2b77e7c4e7c91e9debe7cde5df7" + }, + { + "filename": "smoke_grass_9", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKEGRASS_9", + "folder": "objects", + "type": "Texture", + "sha1": "24b04c1f3fb5098466e3bc20950259152ec65f61" + }, + { + "filename": "smoke_grass_10", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKEGRASS_10", + "folder": "objects", + "type": "Texture", + "sha1": "f0c335070c5ddb55334951e022e41a14a1a859c2" + }, + { + "filename": "smoke_grass_11", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKEGRASS_11", + "folder": "objects", + "type": "Texture", + "sha1": "f67714ca73ba5f125195c2ef36897d07e850c7dc" + }, + { + "filename": "smoke_grass_12", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKEGRASS_12", + "folder": "objects", + "type": "Texture", + "sha1": "d7607ce1ddcc796ec1470a42719131b02c5624bd" + }, + { + "filename": "smoke_grass_13", + "build-id": "ASSET_TEX2D_OBJECTS_SMOKEGRASS_13", + "folder": "objects", + "type": "Texture", + "sha1": "d58a3d3487e8e19f08be3a9166fe3709260879b6" + }, + { + "filename": "mist_0", + "build-id": "ASSET_TEX2D_OBJECTS_MIST_0", + "folder": "objects", + "type": "Texture", + "sha1": "7c325dc05991f642fff41884efb01b8f96605a9d" + }, + { + "filename": "mist_1", + "build-id": "ASSET_TEX2D_OBJECTS_MIST_1", + "folder": "objects", + "type": "Texture", + "sha1": "f98528d7dcf1abbee03bb03270844415750ed49d" + }, + { + "filename": "mist_2", + "build-id": "ASSET_TEX2D_OBJECTS_MIST_2", + "folder": "objects", + "type": "Texture", + "sha1": "37d017fd3f9bff7bd9c12e17cfe11cb375bbecd8" + }, + { + "filename": "mist_3", + "build-id": "ASSET_TEX2D_OBJECTS_MIST_3", + "folder": "objects", + "type": "Texture", + "sha1": "a7b294d2e198d42922875e6f0e3d14d03d6bb8c9" + }, + { + "filename": "mist_4", + "build-id": "ASSET_TEX2D_OBJECTS_MIST_4", + "folder": "objects", + "type": "Texture", + "sha1": "2aff95c33b52b57e0c02481cbf4a2d1590fda486" + }, + { + "filename": "mist_5", + "build-id": "ASSET_TEX2D_OBJECTS_MIST_5", + "folder": "objects", + "type": "Texture", + "sha1": "fa0017bf024c8fb29542d04c21ad3efc0cc5a523" + }, + { + "filename": "mist_6", + "build-id": "ASSET_TEX2D_OBJECTS_MIST_6", + "folder": "objects", + "type": "Texture", + "sha1": "ea6a3e7de7016c70569692cca5ad9f2a768b2f8e" + }, + { + "filename": "mist_7", + "build-id": "ASSET_TEX2D_OBJECTS_MIST_7", + "folder": "objects", + "type": "Texture", + "sha1": "51825e5406eb3cf5b374123a51b47faf800403d2" + }, + { + "filename": "mist_8", + "build-id": "ASSET_TEX2D_OBJECTS_MIST_8", + "folder": "objects", + "type": "Texture", + "sha1": "05c684eb872dfec398df135441285154fd926bfc" + }, + { + "filename": "mist_9", + "build-id": "ASSET_TEX2D_OBJECTS_MIST_9", + "folder": "objects", + "type": "Texture", + "sha1": "ddf0272f5c2fdf53e26280448aac361e6ddad9aa" + }, + { + "filename": "mist_10", + "build-id": "ASSET_TEX2D_OBJECTS_MIST_10", + "folder": "objects", + "type": "Texture", + "sha1": "ec0ecb68f8ca6e9af683d53ce7897636cb1880bb" + }, + { + "filename": "flaming_torch_0", + "build-id": "ASSET_TEX2D_OBJECTS_FLAMINGTORCH_0", + "folder": "objects", + "type": "Texture", + "sha1": "dabf65f9752f4df1d28ce2f91a990197e289b681" + }, + { + "filename": "flaming_torch_1", + "build-id": "ASSET_TEX2D_OBJECTS_FLAMINGTORCH_1", + "folder": "objects", + "type": "Texture", + "sha1": "4cbccf8a9200e6315630a6b2f9399fdf2df7a675" + }, + { + "filename": "flaming_torch_2", + "build-id": "ASSET_TEX2D_OBJECTS_FLAMINGTORCH_2", + "folder": "objects", + "type": "Texture", + "sha1": "811a0493c6f82723eda5310dd76dade4f3e3ad7a" + }, + { + "filename": "flaming_torch_3", + "build-id": "ASSET_TEX2D_OBJECTS_FLAMINGTORCH_3", + "folder": "objects", + "type": "Texture", + "sha1": "74ca9c54e759dc2671fe2c49157213e22a58ab49" + }, + { + "filename": "flaming_torch_4", + "build-id": "ASSET_TEX2D_OBJECTS_FLAMINGTORCH_4", + "folder": "objects", + "type": "Texture", + "sha1": "f6e31c41714872d63d1fdb13519a86303cd5c7c3" + }, + { + "filename": "flaming_torch_5", + "build-id": "ASSET_TEX2D_OBJECTS_FLAMINGTORCH_5", + "folder": "objects", + "type": "Texture", + "sha1": "739a2019d09c41adba6b82e11f9d8e4f7603eaa2" + }, + { + "filename": "flaming_torch_6", + "build-id": "ASSET_TEX2D_OBJECTS_FLAMINGTORCH_6", + "folder": "objects", + "type": "Texture", + "sha1": "d0297c91208b58fafcd936ff0ab964da9fc1e6bb" + }, + { + "filename": "flaming_torch_7", + "build-id": "ASSET_TEX2D_OBJECTS_FLAMINGTORCH_7", + "folder": "objects", + "type": "Texture", + "sha1": "2f0b18dec7936ceb06f8a9c16a4edc75aea71b92" + }, + { + "filename": "flaming_torch_8", + "build-id": "ASSET_TEX2D_OBJECTS_FLAMINGTORCH_8", + "folder": "objects", + "type": "Texture", + "sha1": "895e93374fba045ceec56edb60089e1cf22310d9" + }, + { + "filename": "flaming_torch_9", + "build-id": "ASSET_TEX2D_OBJECTS_FLAMINGTORCH_9", + "folder": "objects", + "type": "Texture", + "sha1": "ad275ebf465230266cedf0bd637f538a7f2e0b3d" + }, + { + "filename": "flaming_torch_10", + "build-id": "ASSET_TEX2D_OBJECTS_FLAMINGTORCH_10", + "folder": "objects", + "type": "Texture", + "sha1": "0ffce8e515afeb4f94921aec36925c3bddbbd459" + }, + { + "filename": "flaming_torch_11", + "build-id": "ASSET_TEX2D_OBJECTS_FLAMINGTORCH_11", + "folder": "objects", + "type": "Texture", + "sha1": "ef242787a361ee75d5cfea62b71eaaba4648df08" + }, + { + "filename": "splash_0", + "build-id": "ASSET_TEX2D_UNUSED_SPLASH_0", + "folder": "unused", + "type": "Texture", + "sha1": "6bce1b5f4283ccffd03ad466d4689ac0a0352949" + }, + { + "filename": "splash_1", + "build-id": "ASSET_TEX2D_UNUSED_SPLASH_1", + "folder": "unused", + "type": "Texture", + "sha1": "31d3e6464d25d9f756038dcf6bc33c8c63063241" + }, + { + "filename": "splash_2", + "build-id": "ASSET_TEX2D_UNUSED_SPLASH_2", + "folder": "unused", + "type": "Texture", + "sha1": "c57c50519542d3e908f3020c8f90542997c3a1e1" + }, + { + "filename": "splash_3", + "build-id": "ASSET_TEX2D_UNUSED_SPLASH_3", + "folder": "unused", + "type": "Texture", + "sha1": "122cd02d27b03345432946e63c6865adca7741ce" + }, + { + "filename": "splash_4", + "build-id": "ASSET_TEX2D_UNUSED_SPLASH_4", + "folder": "unused", + "type": "Texture", + "sha1": "abb8cccd7a92d1309467d048664976b53ff840c4" + }, + { + "filename": "splash_5", + "build-id": "ASSET_TEX2D_UNUSED_SPLASH_5", + "folder": "unused", + "type": "Texture", + "sha1": "037952a33f011fbd424189703bbedd62c4192a36" + }, + { + "filename": "splash_6", + "build-id": "ASSET_TEX2D_UNUSED_SPLASH_6", + "folder": "unused", + "type": "Texture", + "sha1": "e631e4ab5c23bef9cdcc3e235e584779f7ebf841" + }, + { + "filename": "splash_7", + "build-id": "ASSET_TEX2D_UNUSED_SPLASH_7", + "folder": "unused", + "type": "Texture", + "sha1": "c66b2a0f1dc20aad756098d39b05925675306cc3" + }, + { + "filename": "splash_8", + "build-id": "ASSET_TEX2D_UNUSED_SPLASH_8", + "folder": "unused", + "type": "Texture", + "sha1": "b9f678ecd77a0aaaa005712ab3c0bf7df07c7816" + }, + { + "filename": "splash_9", + "build-id": "ASSET_TEX2D_UNUSED_SPLASH_9", + "folder": "unused", + "type": "Texture", + "sha1": "ed5bc725268895f4840b7ddbaa42e42385e8dedd" + }, + { + "filename": "splash_10", + "build-id": "ASSET_TEX2D_UNUSED_SPLASH_10", + "folder": "unused", + "type": "Texture", + "sha1": "fee3fe7c77c08ad5fec5143370233e002cb2ea30" + }, + { + "filename": "splash_11", + "build-id": "ASSET_TEX2D_UNUSED_SPLASH_11", + "folder": "unused", + "type": "Texture", + "sha1": "33757da9b7a14ef3c55209b11f695ed87c1e57ed" + }, + { + "filename": "splash_12", + "build-id": "ASSET_TEX2D_UNUSED_SPLASH_12", + "folder": "unused", + "type": "Texture", + "sha1": "25e33844674dd182ce120a1128acbdc018819c65" + }, + { + "filename": "splash_13", + "build-id": "ASSET_TEX2D_UNUSED_SPLASH_13", + "folder": "unused", + "type": "Texture", + "sha1": "dd303d42964afc6379154b6e2ba32c1a0e957b92" + }, + { + "filename": "splash_14", + "build-id": "ASSET_TEX2D_UNUSED_SPLASH_14", + "folder": "unused", + "type": "Texture", + "sha1": "ab69c25921913ea32377f3be373448edb1d158e3" + }, + { + "filename": "splash_15", + "build-id": "ASSET_TEX2D_UNUSED_SPLASH_15", + "folder": "unused", + "type": "Texture", + "sha1": "d128244570d3c83ffef818e406d7f52be95c027c" + }, + { + "filename": "splash_16", + "build-id": "ASSET_TEX2D_UNUSED_SPLASH_16", + "folder": "unused", + "type": "Texture", + "sha1": "be7fecdd238e54eba00e7408b0127f4b6751a6c9" + }, + { + "filename": "splash_17", + "build-id": "ASSET_TEX2D_UNUSED_SPLASH_17", + "folder": "unused", + "type": "Texture", + "sha1": "0571c11b1e824324929150d45bb7c7c6c4dba4f9" + }, + { + "filename": "splash_18", + "build-id": "ASSET_TEX2D_UNUSED_SPLASH_18", + "folder": "unused", + "type": "Texture", + "sha1": "1eec43cb5992ca7fe0ac28ce3e772771dc2ffa96" + }, + { + "filename": "splash_19", + "build-id": "ASSET_TEX2D_UNUSED_SPLASH_19", + "folder": "unused", + "type": "Texture", + "sha1": "7e45585307e63c4a50a0cb8a52175aa3073a53d1" + }, + { + "filename": "splash_20", + "build-id": "ASSET_TEX2D_UNUSED_SPLASH_20", + "folder": "unused", + "type": "Texture", + "sha1": "43a1d11d37b60850688ba2d39d335c56ea9cacd1" + }, + { + "filename": "splash_21", + "build-id": "ASSET_TEX2D_UNUSED_SPLASH_21", + "folder": "unused", + "type": "Texture", + "sha1": "4fa56a072d4d0edce7eccbacb2f85fb460c26cea" + }, + { + "filename": "splash_22", + "build-id": "ASSET_TEX2D_UNUSED_SPLASH_22", + "folder": "unused", + "type": "Texture", + "sha1": "d3b8a36d3a6a40b18d42d3fb3732d01ba8789a4b" + }, + { + "filename": "splash_23", + "build-id": "ASSET_TEX2D_UNUSED_SPLASH_23", + "folder": "unused", + "type": "Texture", + "sha1": "30af4c1ad44a37406a2fe1b329711dc3c63d97ce" + }, + { + "filename": "weapon_balloon_pop_0", + "build-id": "ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_0", + "folder": "unused", + "type": "Texture", + "sha1": "fb0030b9031c40095233b49a22bddd7fc6266b53" + }, + { + "filename": "weapon_balloon_pop_1", + "build-id": "ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_1", + "folder": "unused", + "type": "Texture", + "sha1": "be0f0fe7eaca2f9bb470fada0d6315d7114d06c0" + }, + { + "filename": "weapon_balloon_pop_2", + "build-id": "ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_2", + "folder": "unused", + "type": "Texture", + "sha1": "a8eeefef4993d545fb09555e8b5c50dbf8ab0b54" + }, + { + "filename": "weapon_balloon_pop_3", + "build-id": "ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_3", + "folder": "unused", + "type": "Texture", + "sha1": "dc1aad470c2d582f40a0e3c6eb4b1bc453eba8f8" + }, + { + "filename": "weapon_balloon_pop_4", + "build-id": "ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_4", + "folder": "unused", + "type": "Texture", + "sha1": "5a4d04925ddeaa3f09567f93b3c1d25767239382" + }, + { + "filename": "weapon_balloon_pop_5", + "build-id": "ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_5", + "folder": "unused", + "type": "Texture", + "sha1": "10b40adcc08f7d3da011846be8a004d2964f2382" + }, + { + "filename": "weapon_balloon_pop_6", + "build-id": "ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_6", + "folder": "unused", + "type": "Texture", + "sha1": "88fd953fe22a655148a479726895a5178c25ac56" + }, + { + "filename": "weapon_balloon_pop_7", + "build-id": "ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_7", + "folder": "unused", + "type": "Texture", + "sha1": "3e661f89e789120d7820ebc52a938e350a736261" + }, + { + "filename": "weapon_balloon_pop_8", + "build-id": "ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_8", + "folder": "unused", + "type": "Texture", + "sha1": "c4fd021f0ca41b8a0195b2306b847959c8f535ea" + }, + { + "filename": "weapon_balloon_pop_9", + "build-id": "ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_9", + "folder": "unused", + "type": "Texture", + "sha1": "8d152d7df9ef8a0ecb86b75ea84520f61009a981" + }, + { + "filename": "weapon_balloon_pop_10", + "build-id": "ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_10", + "folder": "unused", + "type": "Texture", + "sha1": "d73d280ebaaa40b5d1758ec7a30ed38eed4c71e1" + }, + { + "filename": "weapon_balloon_pop_11", + "build-id": "ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_11", + "folder": "unused", + "type": "Texture", + "sha1": "508f9490248451b5ac4dce379ac8f2a4f9dbade6" + }, + { + "filename": "weapon_balloon_pop_12", + "build-id": "ASSET_TEX2D_UNUSED_WEAPONBALLOONPOP_12", + "folder": "unused", + "type": "Texture", + "sha1": "a1e7603f888978c02c7fd11f6f97ba3b8cd37e63" + }, + { + "filename": "lava_spurt_0", + "build-id": "ASSET_TEX2D_OBJECTS_LAVASPURT_0", + "folder": "objects", + "type": "Texture", + "sha1": "cb6f42fb323a847e302d430fbd158da8889cb599" + }, + { + "filename": "lava_spurt_1", + "build-id": "ASSET_TEX2D_OBJECTS_LAVASPURT_1", + "folder": "objects", + "type": "Texture", + "sha1": "2ee0b526ca7a2b2728e6211d899ea2639b77f258" + }, + { + "filename": "lava_spurt_2", + "build-id": "ASSET_TEX2D_OBJECTS_LAVASPURT_2", + "folder": "objects", + "type": "Texture", + "sha1": "0f8c5bbc35845ca56898cd65ac3b1fb6b60ed169" + }, + { + "filename": "lava_spurt_3", + "build-id": "ASSET_TEX2D_OBJECTS_LAVASPURT_3", + "folder": "objects", + "type": "Texture", + "sha1": "60307065b3fd323387c21bbb8afa85eca46c51b9" + }, + { + "filename": "lava_spurt_4", + "build-id": "ASSET_TEX2D_OBJECTS_LAVASPURT_4", + "folder": "objects", + "type": "Texture", + "sha1": "8eb8833320b376fec66e28de54b5b5c6d07c371e" + }, + { + "filename": "lava_spurt_5", + "build-id": "ASSET_TEX2D_OBJECTS_LAVASPURT_5", + "folder": "objects", + "type": "Texture", + "sha1": "1dfbb53ee106fef43a5b043614c72bb68f9de91f" + }, + { + "filename": "lava_spurt_6", + "build-id": "ASSET_TEX2D_OBJECTS_LAVASPURT_6", + "folder": "objects", + "type": "Texture", + "sha1": "7318299773e59d1be0c87a4461d7ca43e9ddc39a" + }, + { + "filename": "lava_spurt_7", + "build-id": "ASSET_TEX2D_OBJECTS_LAVASPURT_7", + "folder": "objects", + "type": "Texture", + "sha1": "b6add4ee20b2151d8a8370de7d155fe210c10b1d" + }, + { + "filename": "lava_spurt_8", + "build-id": "ASSET_TEX2D_OBJECTS_LAVASPURT_8", + "folder": "objects", + "type": "Texture", + "sha1": "e5bff747205d074c367ceac9f94c92ec669b7e1f" + }, + { + "filename": "lava_spurt_9", + "build-id": "ASSET_TEX2D_OBJECTS_LAVASPURT_9", + "folder": "objects", + "type": "Texture", + "sha1": "31365f1cd58ece67743613a2f180c3ef8de2a047" + }, + { + "filename": "lava_spurt_10", + "build-id": "ASSET_TEX2D_OBJECTS_LAVASPURT_10", + "folder": "objects", + "type": "Texture", + "sha1": "20dd334682199f058a3692000fe3549119d8b34f" + }, + { + "filename": "lava_spurt_11", + "build-id": "ASSET_TEX2D_OBJECTS_LAVASPURT_11", + "folder": "objects", + "type": "Texture", + "sha1": "708f92f7fa8ae703f73002215af4ce86094ad4d5" + }, + { + "filename": "lava_spurt_12", + "build-id": "ASSET_TEX2D_OBJECTS_LAVASPURT_12", + "folder": "objects", + "type": "Texture", + "sha1": "51bcab0cc1867ef6395f9a7c1198fa458688810e" + }, + { + "filename": "unknown_small_pop_0", + "build-id": "ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_0", + "folder": "unknown", + "type": "Texture", + "sha1": "fe921c6d18a72205e5d346d9458a7ddfd6ad78fc" + }, + { + "filename": "unknown_small_pop_1", + "build-id": "ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_1", + "folder": "unknown", + "type": "Texture", + "sha1": "992fe03232e5c890627cb78fc408420da85e28ad" + }, + { + "filename": "unknown_small_pop_2", + "build-id": "ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_2", + "folder": "unknown", + "type": "Texture", + "sha1": "2da3650eae044d7e11121cfcc869676b160f43a1" + }, + { + "filename": "unknown_small_pop_3", + "build-id": "ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_3", + "folder": "unknown", + "type": "Texture", + "sha1": "3adcc9707b90bedf300cd5ed699ad50adf849a86" + }, + { + "filename": "unknown_small_pop_4", + "build-id": "ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_4", + "folder": "unknown", + "type": "Texture", + "sha1": "b58ed0e1be5d28a3a19c16813b8f6d7dcd38873b" + }, + { + "filename": "unknown_small_pop_5", + "build-id": "ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_5", + "folder": "unknown", + "type": "Texture", + "sha1": "f923479e2f072547506f3e72804373147476bef3" + }, + { + "filename": "unknown_small_pop_6", + "build-id": "ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_6", + "folder": "unknown", + "type": "Texture", + "sha1": "598cf847cd9a66308817ccf68b2e2450e01805ae" + }, + { + "filename": "unknown_small_pop_7", + "build-id": "ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_7", + "folder": "unknown", + "type": "Texture", + "sha1": "52e15545e780c5a4d9291c3f3c7a5f18dd0daf25" + }, + { + "filename": "unknown_small_pop_8", + "build-id": "ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_8", + "folder": "unknown", + "type": "Texture", + "sha1": "c1c6ff762d53cc2f225c504ee6747c9f42b94b26" + }, + { + "filename": "unknown_small_pop_9", + "build-id": "ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_9", + "folder": "unknown", + "type": "Texture", + "sha1": "c5d10fe240c324fab05528a0c0c6555dc4126bd6" + }, + { + "filename": "unknown_small_pop_10", + "build-id": "ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_10", + "folder": "unknown", + "type": "Texture", + "sha1": "9c032d67c325f6ad79c85162c4efa9740a97a604" + }, + { + "filename": "unknown_small_pop_11", + "build-id": "ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_11", + "folder": "unknown", + "type": "Texture", + "sha1": "26bf00c104a99b5a52a684bd896baa6939f1cb65" + }, + { + "filename": "unknown_small_pop_12", + "build-id": "ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_12", + "folder": "unknown", + "type": "Texture", + "sha1": "417c795f7eb1a12f022ee23b2af00fa26ae2d5c6" + }, + { + "filename": "unknown_small_pop_13", + "build-id": "ASSET_TEX2D_UNKNOWN_UNKNOWNSMALLPOP_13", + "folder": "unknown", + "type": "Texture", + "sha1": "2e96b783c92a8f70b4d8e90fb7eff49117b031d8" + }, + { + "filename": "tyre0_0", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE0_0", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "c0abc9211b6ebc84966e4131d4501b86c4c03199" + }, + { + "filename": "tyre0_1", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE0_1", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "edb72835f40454828f3ab883d57640202ad535ea" + }, + { + "filename": "tyre0_2", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE0_2", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "f9774ba797b635881d40f5af074a6edb50a3f083" + }, + { + "filename": "tyre0_3", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE0_3", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "56156840236b90a10ee72e6bc53ebeeb7d87510f" + }, + { + "filename": "tyre0_4", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE0_4", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "999d4874b7d072a4761c4286feccb3a5ce3aaf9f" + }, + { + "filename": "tyre0_5", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE0_5", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "22036a0fc284b749738ed4c27abf0930d46bb66e" + }, + { + "filename": "tyre0_6", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE0_6", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "a3a1e59f1c140893f3a6931b874db6646f15289f" + }, + { + "filename": "tyre0_7", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE0_7", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "be8d09e7019356b8e21235259ec217596abd7c47" + }, + { + "filename": "tyre0_8", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE0_8", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "7107926c9884843bad9d6bd591e9e3a03f1f4039" + }, + { + "filename": "tyre0_9", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE0_9", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "cea70dbec8795deb6980acd1c96c813c18e22502" + }, + { + "filename": "tyre0_10", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE0_10", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "4a113e0b3216ae374ba079ae9704a3a789b214bc" + }, + { + "filename": "tyre0_11", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE0_11", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "d49fcec6d5b9ed2c3c06e20c6530fa0c4cafba0f" + }, + { + "filename": "tyre0_12", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE0_12", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "2e49f186454ac51dea6c3e7255737236bfdec9c4" + }, + { + "filename": "tyre0_13", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE0_13", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "07fcad11d6dd16b7d716592c773ee0b69df7d1d7" + }, + { + "filename": "tyre0_14", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE0_14", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "f93be85a17d2a4d156015e0b0041dac56160d30f" + }, + { + "filename": "tyre0_15", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE0_15", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "e4cf165cc4edb86489800d2942e16fa5af77c36c" + }, + { + "filename": "tyre1_0", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE1_0", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "f3c09dbb72e63d5f6da2bbf43d0ed0cbbf5426aa" + }, + { + "filename": "tyre1_1", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE1_1", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "34e1853d78c1af41e294b6b48b112c13bd5d0941" + }, + { + "filename": "tyre1_2", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE1_2", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "ab4efe9bf7600e58ccdc1efccd7e91a78962b9f4" + }, + { + "filename": "tyre1_3", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE1_3", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "cc340fca3d9b797b145f5fbfeadccd48798cac53" + }, + { + "filename": "tyre1_4", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE1_4", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "8efa313b04a565aa90175d3775f40c48e71f4da9" + }, + { + "filename": "tyre1_5", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE1_5", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "f5a06876d784b2c58b974a9d3504f5ce9f0554d1" + }, + { + "filename": "tyre1_6", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE1_6", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "f646967e04863d2d0399a75a76b5718259934332" + }, + { + "filename": "tyre1_7", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE1_7", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "8a00b0f47f0bbd420a20415e4f41dc72dfeb5854" + }, + { + "filename": "tyre1_8", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE1_8", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "b036cd5548fca37b5b54599a8ce95204132391ba" + }, + { + "filename": "tyre1_9", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE1_9", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "e63caf221489def23b2340b874c2d6afdb6d7965" + }, + { + "filename": "tyre1_10", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE1_10", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "734df5c92f658b755b0f6afbb278a6ecd32cc9a6" + }, + { + "filename": "tyre1_11", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE1_11", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "3c5165be2984aafb6329765c496dbb32b5f4b44f" + }, + { + "filename": "tyre1_12", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE1_12", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "5da1549d32ca86995e4da8587f2fa48780bc4ec2" + }, + { + "filename": "tyre1_13", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE1_13", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "6edf6377fd2d6045edcf576a8da20dcc0a8172d3" + }, + { + "filename": "tyre1_14", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE1_14", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "8da27ec5c12603d3024b8b8e134a4c3e6e348612" + }, + { + "filename": "tyre1_15", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE1_15", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "6260f2b446afc84a168278cac6033c332ad10cf5" + }, + { + "filename": "tyre2_0", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE2_0", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "0b49c773dd644fb264f7c06cbeefe2f7732f8e34" + }, + { + "filename": "tyre2_1", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE2_1", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "436d10b1b10d26d46891c947ebd86c59396f7a91" + }, + { + "filename": "tyre2_2", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE2_2", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "d6b58419a8e09a769e5ca769b4132df555c02e9b" + }, + { + "filename": "tyre2_3", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE2_3", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "e2d7f75801adb127db3bcce00bb352c06d030c6b" + }, + { + "filename": "tyre2_4", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE2_4", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "b16123743f912dbc9de2de429c992311c2f624fa" + }, + { + "filename": "tyre2_5", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE2_5", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "46fbc7b9e81bae40bf251a232159173e6d37bc8d" + }, + { + "filename": "tyre2_6", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE2_6", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "ee9ed1bcf795711ba971e7b66c75bca52236b4fe" + }, + { + "filename": "tyre2_7", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE2_7", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "9306fdea6ddca8fd0342e6dfe1dcc0a5b5a5e858" + }, + { + "filename": "tyre2_8", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE2_8", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "e1e0c12f82cf79a7e09e9e40ab399f7004cde542" + }, + { + "filename": "tyre2_9", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE2_9", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "bf7d8be1a20884f76ab7308658dd2bd92f12d0df" + }, + { + "filename": "tyre2_10", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE2_10", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "e14145bb1a39dd9851ed664b293ec86dde5bb99f" + }, + { + "filename": "tyre2_11", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE2_11", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "54c9870e0503033a011e27d095f09ce19e898b9c" + }, + { + "filename": "tyre2_12", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE2_12", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "dccb0296018f29b380852005469267c71c4133c2" + }, + { + "filename": "tyre2_13", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE2_13", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "f40e48a5e92fbf632a6443e40d316b9e227e90d3" + }, + { + "filename": "tyre2_14", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE2_14", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "4c16009c94f9ff979ad62cbac0cd94f82a077a8a" + }, + { + "filename": "tyre2_15", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE2_15", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "3bbcc49e87a985aff63f7138a5b22ed1675143aa" + }, + { + "filename": "tyre3_0", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE3_0", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "d8a4e696973423d08ebfe8ca6686d6cffb88e369" + }, + { + "filename": "tyre3_1", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE3_1", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "ddc59ab10c904eba7c880e08dc5d8da16b69f24b" + }, + { + "filename": "tyre3_2", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE3_2", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "55db0e4876d23d389a94d01ea74cb5fe0d22ce1f" + }, + { + "filename": "tyre3_3", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE3_3", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "3124954ead2eb30cb1f36ec2822e14df445d6ab2" + }, + { + "filename": "tyre3_4", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE3_4", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "7dabdfd7abaf35e7ba8df5dc1a88d33b8919eb34" + }, + { + "filename": "tyre3_5", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE3_5", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "44b9529d335d7e8ffe4848c685e1be5f97b2ecf7" + }, + { + "filename": "tyre3_6", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE3_6", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "fbf55d982b44ce08eb8d85a8fcb1f5d444626837" + }, + { + "filename": "tyre3_7", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE3_7", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "a82dd29182aa954e4692d6089ce960ec731e60d0" + }, + { + "filename": "tyre3_8", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE3_8", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "ca882609588d8d66cea40520564c11e25cc2d79f" + }, + { + "filename": "tyre3_9", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE3_9", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "6b62a4394f5023f6d0fe9d3a15457bd60603f80e" + }, + { + "filename": "tyre3_10", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE3_10", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "3e2714b3f9ff2494ba34848ba569bf7cdc78cb18" + }, + { + "filename": "tyre3_11", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE3_11", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "6c4991d13a2fa3d0e296916506fb5c70ad6f7a7a" + }, + { + "filename": "tyre3_12", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE3_12", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "351636fc0f856617a26d6dcb6d52fbcd1763a73b" + }, + { + "filename": "tyre3_13", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE3_13", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "6d75dfc75935037e690fb20b5018014a2141ab76" + }, + { + "filename": "tyre3_14", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE3_14", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "e60e2f9dfd1c97d1aa21e9f16381ddd864c761ec" + }, + { + "filename": "tyre3_15", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_TYRE3_15", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "76fc854f42ef640c3d16600ba7e9b94b968503bf" + }, + { + "filename": "fan0_0", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN0_0", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "09ab9fac022c6f804c81513c7b33d6d25f9a9395" + }, + { + "filename": "fan0_1", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN0_1", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "692d8477fb98f138e586236df1c5fd3ad9a7d5c3" + }, + { + "filename": "fan0_2", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN0_2", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "d26126b468449aad7c8f3c22f57d3ca519c4302a" + }, + { + "filename": "fan0_3", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN0_3", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "264b4037d2211a8fb311c9a7ad872bd1333f778d" + }, + { + "filename": "fan0_4", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN0_4", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "5dea7d56854c411616f99df12c5255c20246a001" + }, + { + "filename": "fan0_5", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN0_5", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "75ccfa3b693f45eb26a74b2d0a9d0a96327dd48c" + }, + { + "filename": "fan0_6", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN0_6", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "93d0ec05b8f482d4ae28bc7b3d6e977525acd82c" + }, + { + "filename": "fan0_7", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN0_7", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "0f5ab80d2e93d4db73124cdc807ad57f0a5a6bf1" + }, + { + "filename": "fan0_8", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN0_8", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "dba043fcdcd73ef62b7f73769ae458b04f1e8bb3" + }, + { + "filename": "fan0_9", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN0_9", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "93aa513f57e74f6e9ca54409a1d6aaa7112d0e74" + }, + { + "filename": "fan0_10", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN0_10", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "ba312968e83b1e85e5e322dff84fd723f0c2d0e2" + }, + { + "filename": "fan0_11", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN0_11", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "5420ccd612192368ac4e66acfecb318860dde4b4" + }, + { + "filename": "fan0_12", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN0_12", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "41a5e2648a0cd5a977ea7a2eea43fd5f34a6565f" + }, + { + "filename": "fan0_13", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN0_13", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "7e8188326c77d84a6eda64dac1df852db4daf9b1" + }, + { + "filename": "fan0_14", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN0_14", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "ce6ebd964d6d733677c1cf7ff2fa63444b34b82a" + }, + { + "filename": "fan0_15", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN0_15", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "d6db7da11bede05bac62f3a9377d9b8cd5cd7ba2" + }, + { + "filename": "fan1_0", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN1_0", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "09ab9fac022c6f804c81513c7b33d6d25f9a9395" + }, + { + "filename": "fan1_1", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN1_1", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "ff96a347dbde76bcafc7ec2733909d47b3263fbb" + }, + { + "filename": "fan1_2", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN1_2", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "c1139a352e41ebf36c145f35b0f871fb1f2bc085" + }, + { + "filename": "fan1_3", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN1_3", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "0b190e3fb075501c915e0770642967ef3293845c" + }, + { + "filename": "fan1_4", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN1_4", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "ce1951756c77b484fdf2f2f04a1b6bdf64a4e6e9" + }, + { + "filename": "fan1_5", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN1_5", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "d6a132b08a1718571eeec2c0e2e0e456071c5a0e" + }, + { + "filename": "fan1_6", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN1_6", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "b60c155bdd683a8e77dabfeae45314339c866490" + }, + { + "filename": "fan1_7", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN1_7", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "8ca62c7aab0f81ea629b8ac689c823bc1206b423" + }, + { + "filename": "fan1_8", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN1_8", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "77f9a7fedcb835f54db89b81402238eaeca6e127" + }, + { + "filename": "fan1_9", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN1_9", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "211f5e1b028f2279aa1594f8d77f49f3c38f3af4" + }, + { + "filename": "fan1_10", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN1_10", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "80d484c7b2a7ab9ff14be260b77773ba252ed42e" + }, + { + "filename": "fan1_11", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN1_11", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "7112cd2a628cfbef496c81fa45e21242d09e5b24" + }, + { + "filename": "fan1_12", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN1_12", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "f6825558ede5491a9d2c91e8fe1229672e7c3049" + }, + { + "filename": "fan1_13", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN1_13", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "2b0a7f1c5104be04b3e606f71995702b7ede9a21" + }, + { + "filename": "fan1_14", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN1_14", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "466730f03cb295bc7e2fc06fe2ba0cf079363099" + }, + { + "filename": "fan1_15", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_FAN1_15", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "27744a2ea27c6e2c900dd3c070d78cdb740c6e04" + }, + { + "filename": "propeller0_0", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_0", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "d0b7649d539b7dad3c4a540ab3ac1fac75084897" + }, + { + "filename": "propeller0_1", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_1", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "133755f1b7216928b3dabb19b403ca7d1327948e" + }, + { + "filename": "propeller0_2", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_2", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "af956ae734bf52af89e911a12760695c9bfd4330" + }, + { + "filename": "propeller0_3", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_3", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "e2b9678767c165b8d6007345762732e42e5745a7" + }, + { + "filename": "propeller0_4", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_4", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "c7707371edae147f98f50f36dcdc349080add4ca" + }, + { + "filename": "propeller0_5", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_5", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "2856d89e60254c96628a146c0836831ed0f47c04" + }, + { + "filename": "propeller0_6", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_6", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "67667454655c308a0d1c03ef324b8533614fbc03" + }, + { + "filename": "propeller0_7", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_7", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "587cde52da0e65ef577d601a5b78825577be9d64" + }, + { + "filename": "propeller0_8", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_8", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "8ca19afc8ac0345ca207120c63d1b7bc203d1e7d" + }, + { + "filename": "propeller0_9", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_9", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "84b7a2834e107fdcdce86bdba86d7cf4f2c203c5" + }, + { + "filename": "propeller0_10", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_10", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "8856333d6b796f8b15f85106aef22ac40a1c7524" + }, + { + "filename": "propeller0_11", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_11", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "8d8ffe2b2bbb10fb74088ebb58f3da9aa0f9c137" + }, + { + "filename": "propeller0_12", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_12", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "e0d19c5c281d4417050b9cd6915ad621b1be1efd" + }, + { + "filename": "propeller0_13", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_13", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "d40205e8ba56015ef848a70206a545070290f2df" + }, + { + "filename": "propeller0_14", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_14", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "1200d1bcd6d028f4ec04190520c1ecb0cff94261" + }, + { + "filename": "propeller0_15", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER0_15", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "a4041f1169437c835311aa8c745b2158fc5eeee8" + }, + { + "filename": "propeller1_0", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_0", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "087309186082fed97f56a215e851f8676b1b6a18" + }, + { + "filename": "propeller1_1", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_1", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "ec0d1515c58c35be5baebf1be742c7bba75aeb15" + }, + { + "filename": "propeller1_2", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_2", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "9a6f7d273facf5bfe8f1a1834ad507b340c53e3a" + }, + { + "filename": "propeller1_3", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_3", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "a12f4c65b4c46edc5e9384c0890fe640b3413de2" + }, + { + "filename": "propeller1_4", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_4", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "f3c56da59c272dcb2b1b300501042a0920d03ce8" + }, + { + "filename": "propeller1_5", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_5", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "d161099c9c74f3695140d1af2dbb5cc9f7a3e39c" + }, + { + "filename": "propeller1_6", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_6", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "ea6585f0907e090043aed3db31516e9492074d6a" + }, + { + "filename": "propeller1_7", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_7", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "85616bd8a56e4e6041dad6420a5efaedd1330d35" + }, + { + "filename": "propeller1_8", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_8", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "5f874f89fc55263d1e9a75f29ea97514eb5d470e" + }, + { + "filename": "propeller1_9", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_9", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "ed77a908366c41fd414b1ae1813da9e8b81d3a0f" + }, + { + "filename": "propeller1_10", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_10", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "09a8d5f8b1971bda04530e4e9661a933cf855fe9" + }, + { + "filename": "propeller1_11", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_11", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "9321176b41535926d8bf36c9a41b81099bb2ca53" + }, + { + "filename": "propeller1_12", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_12", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "bb702ac629927c9a9ea18d572cc78c6e4d5e9592" + }, + { + "filename": "propeller1_13", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_13", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "d42d71c6435fbc304042ecaad8d95dc236f5405e" + }, + { + "filename": "propeller1_14", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_14", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "88c72947c329005bcce75b9c19f83b2a6d5f05cc" + }, + { + "filename": "propeller1_15", + "build-id": "ASSET_TEX2D_VEHICLE_PARTS_PROPELLER1_15", + "folder": "vehicle_parts", + "type": "Texture", + "sha1": "9389e2358c5e45a2659ec8f798955cdfe0c6674d" + }, + { + "filename": "rare_letters_0", + "build-id": "ASSET_TEX2D_UNUSED_RARELETTERS_0", + "folder": "unused", + "type": "Texture", + "sha1": "1ca618aa28664975ef712ab17e17970b41ddf7eb" + }, + { + "filename": "rare_letters_1", + "build-id": "ASSET_TEX2D_UNUSED_RARELETTERS_1", + "folder": "unused", + "type": "Texture", + "sha1": "c712aee5b9188c9f1f3d1ff905404c6d5eff3018" + }, + { + "filename": "rare_letters_2", + "build-id": "ASSET_TEX2D_UNUSED_RARELETTERS_2", + "folder": "unused", + "type": "Texture", + "sha1": "016f335a39b34001a5df83f4d4062e3fe4b46f6d" + }, + { + "filename": "bolt_glow_0", + "build-id": "ASSET_TEX2D_OBJECTS_BOLTGLOW_0", + "folder": "objects", + "type": "Texture", + "sha1": "d128d6114a33e8b3a2c9e3b8f81689a135dbc029" + }, + { + "filename": "bolt_glow_1", + "build-id": "ASSET_TEX2D_OBJECTS_BOLTGLOW_1", + "folder": "objects", + "type": "Texture", + "sha1": "117ec0c6f74dfb8836c4b1a50e5b4eeca7c46da1" + }, + { + "filename": "icon_trophy_not_collected", + "build-id": "ASSET_TEX2D_MENU_ICONTROPHYNOTCOLLECTED", + "folder": "menu", + "type": "Texture", + "sha1": "016789d4aa4527f0ef4c2abd9936a163b1fc21f5" + }, + { + "filename": "icon_trophy_collected", + "build-id": "ASSET_TEX2D_MENU_ICONTROPHYCOLLECTED", + "folder": "menu", + "type": "Texture", + "sha1": "e3c401d8d26037855fb36619d8866a4529751c65" + }, + { + "filename": "icon_key_not_collected", + "build-id": "ASSET_TEX2D_MENU_ICONKEYNOTCOLLECTED", + "folder": "menu", + "type": "Texture", + "sha1": "72baa769588e974f4331b2d076a470cd7e9862f9" + }, + { + "filename": "icon_key_collected", + "build-id": "ASSET_TEX2D_MENU_ICONKEYCOLLECTED", + "folder": "menu", + "type": "Texture", + "sha1": "323c09ad0e80851fcf698a221d6aabd0767b1fab" + }, + { + "filename": "icon_wizpig_amulet0_0", + "build-id": "ASSET_TEX2D_MENU_ICONWIZPIGAMULET0_0", + "folder": "menu", + "type": "Texture", + "sha1": "5cf9d32de839c5d2f186a22c193433859785bcc1" + }, + { + "filename": "icon_wizpig_amulet0_1", + "build-id": "ASSET_TEX2D_MENU_ICONWIZPIGAMULET0_1", + "folder": "menu", + "type": "Texture", + "sha1": "f71cf7ec9e764584a3bc54fe2d723e4f14e34695" + }, + { + "filename": "icon_wizpig_amulet1_0", + "build-id": "ASSET_TEX2D_MENU_ICONWIZPIGAMULET1_0", + "folder": "menu", + "type": "Texture", + "sha1": "bc6be61a0dc00989ab92d0d69e115d60cfe29ab2" + }, + { + "filename": "icon_wizpig_amulet1_1", + "build-id": "ASSET_TEX2D_MENU_ICONWIZPIGAMULET1_1", + "folder": "menu", + "type": "Texture", + "sha1": "67ebbac032e7179b91a1b0160b9e735733fd2d5f" + }, + { + "filename": "icon_wizpig_amulet2_0", + "build-id": "ASSET_TEX2D_MENU_ICONWIZPIGAMULET2_0", + "folder": "menu", + "type": "Texture", + "sha1": "baf1906ad6d6a61bb29a667b24c4a96742080b2d" + }, + { + "filename": "icon_wizpig_amulet2_1", + "build-id": "ASSET_TEX2D_MENU_ICONWIZPIGAMULET2_1", + "folder": "menu", + "type": "Texture", + "sha1": "10ab7998e9535287cd8a663e71caeba9f431c5aa" + }, + { + "filename": "icon_wizpig_amulet3_0", + "build-id": "ASSET_TEX2D_MENU_ICONWIZPIGAMULET3_0", + "folder": "menu", + "type": "Texture", + "sha1": "93e5fa847f872496ff9284ef992c2ce03ce4e270" + }, + { + "filename": "icon_wizpig_amulet3_1", + "build-id": "ASSET_TEX2D_MENU_ICONWIZPIGAMULET3_1", + "folder": "menu", + "type": "Texture", + "sha1": "fd9116a4fb729a4651e3edd891a3ed0efc46d772" + }, + { + "filename": "icon_wizpig_amulet4_0", + "build-id": "ASSET_TEX2D_MENU_ICONWIZPIGAMULET4_0", + "folder": "menu", + "type": "Texture", + "sha1": "21ba0553e7cd59e9e351aa4aa6fe9d65c4e7b42e" + }, + { + "filename": "icon_wizpig_amulet4_1", + "build-id": "ASSET_TEX2D_MENU_ICONWIZPIGAMULET4_1", + "folder": "menu", + "type": "Texture", + "sha1": "bd4f2a86d27ba3cb8f714b8d1b4d712cb7006eb1" + }, + { + "filename": "icon_tt_amulet0_0", + "build-id": "ASSET_TEX2D_MENU_ICONTTAMULET0_0", + "folder": "menu", + "type": "Texture", + "sha1": "ba5b10de52fbd6cb29ec99a0067da23109bede85" + }, + { + "filename": "icon_tt_amulet0_1", + "build-id": "ASSET_TEX2D_MENU_ICONTTAMULET0_1", + "folder": "menu", + "type": "Texture", + "sha1": "8bdb1bf8e411e05f3eb77baf886b05b2696dde42" + }, + { + "filename": "icon_tt_amulet1_0", + "build-id": "ASSET_TEX2D_MENU_ICONTTAMULET1_0", + "folder": "menu", + "type": "Texture", + "sha1": "09203882f55389862bda3a45a7b4b6351571e427" + }, + { + "filename": "icon_tt_amulet1_1", + "build-id": "ASSET_TEX2D_MENU_ICONTTAMULET1_1", + "folder": "menu", + "type": "Texture", + "sha1": "8bdb1bf8e411e05f3eb77baf886b05b2696dde42" + }, + { + "filename": "icon_tt_amulet2_0", + "build-id": "ASSET_TEX2D_MENU_ICONTTAMULET2_0", + "folder": "menu", + "type": "Texture", + "sha1": "7cf3e24ed393189a28bbad6b060717a81dd7a92d" + }, + { + "filename": "icon_tt_amulet2_1", + "build-id": "ASSET_TEX2D_MENU_ICONTTAMULET2_1", + "folder": "menu", + "type": "Texture", + "sha1": "8bdb1bf8e411e05f3eb77baf886b05b2696dde42" + }, + { + "filename": "icon_tt_amulet3_0", + "build-id": "ASSET_TEX2D_MENU_ICONTTAMULET3_0", + "folder": "menu", + "type": "Texture", + "sha1": "03c4eb13cdf91a1252ce3c785f072fba4300c27c" + }, + { + "filename": "icon_tt_amulet3_1", + "build-id": "ASSET_TEX2D_MENU_ICONTTAMULET3_1", + "folder": "menu", + "type": "Texture", + "sha1": "05f63bacc60119164ea815800b48ea9d75b494aa" + }, + { + "filename": "icon_tt_amulet4_0", + "build-id": "ASSET_TEX2D_MENU_ICONTTAMULET4_0", + "folder": "menu", + "type": "Texture", + "sha1": "ce4c3e620fe3b6cf05aae7d7d69b8b97f6491150" + }, + { + "filename": "icon_tt_amulet4_1", + "build-id": "ASSET_TEX2D_MENU_ICONTTAMULET4_1", + "folder": "menu", + "type": "Texture", + "sha1": "57a39d333000aaff3e77c5ffd19f035d4b76f540" + }, + { + "build-id": "ASSET_GAME_TEXT_0", + "filename": "asset_game_text_0", + "folder": "unknown", + "sha1": "36973783a33fe9c056c1a49e3a82313ccb12735f", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_1", + "filename": "asset_game_text_1", + "folder": "unknown", + "sha1": "ea5b395f21df04c825f55be98c9da5a21787f340", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_2", + "filename": "asset_game_text_2", + "folder": "unknown", + "sha1": "362afcda47ee6cfa644f35bf753f76e457b696a5", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_3", + "filename": "asset_game_text_3", + "folder": "unknown", + "sha1": "d1ea971e52ac5f4c868eee30653457a89d390e79", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_4", + "filename": "asset_game_text_4", + "folder": "unknown", + "sha1": "7691382ebc15c0ad470dc30b6c6e9ccafd106e69", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_5", + "filename": "asset_game_text_5", + "folder": "unknown", + "sha1": "dfe1d10ae576b0f6630d88f64f81ec495925aebf", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_6", + "filename": "asset_game_text_6", + "folder": "unknown", + "sha1": "8ccb9d1a0573264198c14cac473a77466e42a0ce", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_7", + "filename": "asset_game_text_7", + "folder": "unknown", + "sha1": "5359286787aaafc247f4e7a403268f6b055f16d7", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_8", + "filename": "asset_game_text_8", + "folder": "unknown", + "sha1": "a8e30ff3afdc737b1040ffa727bcc7a29e756713", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_9", + "filename": "asset_game_text_9", + "folder": "unknown", + "sha1": "93046895d65ea3195e70f5222452e02ac9682a4d", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_10", + "filename": "asset_game_text_10", + "folder": "unknown", + "sha1": "394e526a5fb58f0ae1bd6b5341f9563dcf08ec34", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_11", + "filename": "asset_game_text_11", + "folder": "unknown", + "sha1": "d4e7151cb774e7306f3f8146b69bca0f80f92bb9", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_12", + "filename": "asset_game_text_12", + "folder": "unknown", + "sha1": "a1f59d195bac2bcd9b7ad8c10aff38e55f6b9dca", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_13", + "filename": "asset_game_text_13", + "folder": "unknown", + "sha1": "9615f615ec686d27bc724cb042cf588298c62ea6", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_14", + "filename": "asset_game_text_14", + "folder": "unknown", + "sha1": "c7fe72a633f5601c46d7b676417b61b97be39a32", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_15", + "filename": "asset_game_text_15", + "folder": "unknown", + "sha1": "f3e50ced06998fcab080006261a07b3de11e49bb", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_16", + "filename": "asset_game_text_16", + "folder": "unknown", + "sha1": "2644359fd456a5f30da06c7f440b10c358e6abe0", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_17", + "filename": "asset_game_text_17", + "folder": "unknown", + "sha1": "ace2fdfa445d6b9a27780a74f9e2def4cf098e2b", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_18", + "filename": "asset_game_text_18", + "folder": "unknown", + "sha1": "8ecdbed08300d0e0588c0b930a7eef6714807f72", + "type": "GameText" + }, + { + "filename": "asset_game_text_19", + "build-id": "ASSET_GAME_TEXT_19", + "folder": "unknown", + "type": "GameText", + "sha1": "8ecdbed08300d0e0588c0b930a7eef6714807f72" + }, + { + "build-id": "ASSET_GAME_TEXT_20", + "filename": "asset_game_text_20", + "folder": "unknown", + "sha1": "909ad1a1ca3e98e87f541a8921fe77ada844a91a", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_21", + "filename": "asset_game_text_21", + "folder": "unknown", + "sha1": "14207bac80859bae331f19da409e6bdab25353b7", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_22", + "filename": "asset_game_text_22", + "folder": "unknown", + "sha1": "c347ab39d13323306d75d39a88a3a88b00d9fd39", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_23", + "filename": "asset_game_text_23", + "folder": "unknown", + "sha1": "db9e371a9a6f3d830eaffb8fb3a0bc2b7c3402b5", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_24", + "filename": "asset_game_text_24", + "folder": "unknown", + "sha1": "46cb8362fdbb3ab6deaadf3a2857c08374728b67", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_25", + "filename": "asset_game_text_25", + "folder": "unknown", + "sha1": "e07ed93116498eb46300bb4c7567fb57b7993dbf", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_26", + "filename": "asset_game_text_26", + "folder": "unknown", + "sha1": "37cdd6df98524424a2e143cffab261d245567e93", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_27", + "filename": "asset_game_text_27", + "folder": "unknown", + "sha1": "d9a6f832be4f29d80d6ae85d6db77b40ddc51e9f", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_28", + "filename": "asset_game_text_28", + "folder": "unknown", + "sha1": "46e8fc8ba0730b3a0b2e100421a5c48489d4bfeb", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_29", + "filename": "asset_game_text_29", + "folder": "unknown", + "sha1": "41b346193b20070a32b8eead081ef2283df34b00", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_30", + "filename": "asset_game_text_30", + "folder": "unknown", + "sha1": "fb06749bc0055d5f1eb698c6735d746698660659", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_31", + "filename": "asset_game_text_31", + "folder": "unknown", + "sha1": "8b94d766e0e6ce9d3f0c99e493b9528be80e712c", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_32", + "filename": "asset_game_text_32", + "folder": "unknown", + "sha1": "11868ae9d8635baea94d0335cec24565493de38c", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_33", + "filename": "asset_game_text_33", + "folder": "unknown", + "sha1": "75174b500dd6aeaed551f557480028bd14760133", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_34", + "filename": "asset_game_text_34", + "folder": "unknown", + "sha1": "892bd824215519271fc40778357184b69a3da514", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_35", + "filename": "asset_game_text_35", + "folder": "unknown", + "sha1": "8776cf92a828a5bcc0e976221b5cb737b04cfa15", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_36", + "filename": "asset_game_text_36", + "folder": "unknown", + "sha1": "72eb4dab230764787929701e5c8bc1dcb475973a", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_37", + "filename": "asset_game_text_37", + "folder": "unknown", + "sha1": "9887a200e0702ec50e2264b48e82d1035bf1d275", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_38", + "filename": "asset_game_text_38", + "folder": "unknown", + "sha1": "d625ddcbd0bb8f60a485f78c8808fe934bcdd773", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_39", + "filename": "asset_game_text_39", + "folder": "unknown", + "sha1": "0646a0786fc17bae5820733bd507c001e27be7a1", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_40", + "filename": "asset_game_text_40", + "folder": "unknown", + "sha1": "1479b2606b9162ad166d5e1f9792b20ed33342aa", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_41", + "filename": "asset_game_text_41", + "folder": "unknown", + "sha1": "cc0c593567a383c985fa0ef557d585b88cc8985d", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_42", + "filename": "asset_game_text_42", + "folder": "unknown", + "sha1": "b437847615cf28ad5e8cd02543afd4265f1245de", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_43", + "filename": "asset_game_text_43", + "folder": "unknown", + "sha1": "d1145605e324b8e406c62ccc82af94dc2af0a7f0", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_44", + "filename": "asset_game_text_44", + "folder": "unknown", + "sha1": "2a61db0b55080bca04ccc41decd013babb428b41", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_45", + "filename": "asset_game_text_45", + "folder": "unknown", + "sha1": "e58f340e821a1e62eaf40fa185403856ef88446d", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_46", + "filename": "asset_game_text_46", + "folder": "unknown", + "sha1": "206f9d48cd553fc7e92c2c6912bce0b90a08bbbc", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_47", + "filename": "asset_game_text_47", + "folder": "unknown", + "sha1": "fc377bdde4084bf6446b96b7e5873cff08ddda2b", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_48", + "filename": "asset_game_text_48", + "folder": "unknown", + "sha1": "c16a4c457d4878852a52610b51edfca8e8e9846c", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_49", + "filename": "asset_game_text_49", + "folder": "unknown", + "sha1": "432d11ad1b3203567cc0a52a81be871687dc9622", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_50", + "filename": "asset_game_text_50", + "folder": "unknown", + "sha1": "ddb6020980a106f20c8c2d4534a171ebc70f97dd", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_51", + "filename": "asset_game_text_51", + "folder": "unknown", + "sha1": "84183c8707e92296853a0207ca4e8092b915a699", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_52", + "filename": "asset_game_text_52", + "folder": "unknown", + "sha1": "c7a71c52bd131906982a1c7259da1caec4053d51", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_53", + "filename": "asset_game_text_53", + "folder": "unknown", + "sha1": "bddfce0e0d7deb772d639615bed551e5c9552552", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_54", + "filename": "asset_game_text_54", + "folder": "unknown", + "sha1": "0b1006612fdc7723f2830f53a1246525f4dc3ada", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_55", + "filename": "asset_game_text_55", + "folder": "unknown", + "sha1": "760796560aefa3e421e8b89e2543390abcb105da", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_56", + "filename": "asset_game_text_56", + "folder": "unknown", + "sha1": "92d01975ad56d8263835505867b6b5e496a5662d", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_57", + "filename": "asset_game_text_57", + "folder": "unknown", + "sha1": "305bfff9afdfa72844ebcaf071b3816240eec2f3", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_58", + "filename": "asset_game_text_58", + "folder": "unknown", + "sha1": "0119fa1017a36dfa1898767144f4cc9125966a7c", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_59", + "filename": "asset_game_text_59", + "folder": "unknown", + "sha1": "64d8be72009e327e4d8d98dd7a8fc4ed92f014a3", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_60", + "filename": "asset_game_text_60", + "folder": "unknown", + "sha1": "67305af8f78648bde10b6e9f0fcc77a580c54b94", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_61", + "filename": "asset_game_text_61", + "folder": "unknown", + "sha1": "cda2c0633ef1318fd7a56bb34bdc2a99e5ad64b5", + "type": "GameText" + }, + { + "filename": "asset_game_text_62", + "build-id": "ASSET_GAME_TEXT_62", + "folder": "unknown", + "type": "GameText", + "sha1": "cda2c0633ef1318fd7a56bb34bdc2a99e5ad64b5" + }, + { + "build-id": "ASSET_GAME_TEXT_63", + "filename": "asset_game_text_63", + "folder": "unknown", + "sha1": "38465f5125febdaf171d3159fada53268848756f", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_64", + "filename": "asset_game_text_64", + "folder": "unknown", + "sha1": "18a7d3282f45e1b430aca5a679ea142d761c4dac", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_65", + "filename": "asset_game_text_65", + "folder": "unknown", + "sha1": "ccb11a804e0dcb362d3bcdf32401a1ebc9dac778", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_66", + "filename": "asset_game_text_66", + "folder": "unknown", + "sha1": "c23c3954f683fbff83926c9d89f5848f83506d98", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_67", + "filename": "asset_game_text_67", + "folder": "unknown", + "sha1": "4c787c031e15c3dd60d7ff73a5e25e560ca16c37", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_68", + "filename": "asset_game_text_68", + "folder": "unknown", + "sha1": "fc64c98db0f92b6633637ccc9c46f4f935f4394e", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_69", + "filename": "asset_game_text_69", + "folder": "unknown", + "sha1": "a230a9113f37901c95b46a7d473634f6ed59ecba", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_70", + "filename": "asset_game_text_70", + "folder": "unknown", + "sha1": "81dcb99dac6e42a1d7f7a1102472aec9fdf22701", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_71", + "filename": "asset_game_text_71", + "folder": "unknown", + "sha1": "39766a7e0b40e4bdd20b684fae902c8a2273c862", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_72", + "filename": "asset_game_text_72", + "folder": "unknown", + "sha1": "f12c1dc71edf1277a9d7c118020e209f992ffbe6", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_73", + "filename": "asset_game_text_73", + "folder": "unknown", + "sha1": "b628b9b3208dde0ac414e37dbeb4b8c297537fd1", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_74", + "filename": "asset_game_text_74", + "folder": "unknown", + "sha1": "9dc57d43d85206e612880d13f2ccf6da45aee110", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_75", + "filename": "asset_game_text_75", + "folder": "unknown", + "sha1": "b86bf05b5f5768e08e07f25494080cbd6b595614", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_76", + "filename": "asset_game_text_76", + "folder": "unknown", + "sha1": "3e41fb5869b3dcceb24fa4944afe21bd4685ed44", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_77", + "filename": "asset_game_text_77", + "folder": "unknown", + "sha1": "741c936af71d72bf7a0d564324b250dbf9fdcf34", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_78", + "filename": "asset_game_text_78", + "folder": "unknown", + "sha1": "27fd4183514a18012d3a1ed66967b965b33ef46d", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_79", + "filename": "asset_game_text_79", + "folder": "unknown", + "sha1": "e7202a25a19bd97f2d940231ac3f830a42d1e8ad", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_80", + "filename": "asset_game_text_80", + "folder": "unknown", + "sha1": "d341d9da5204f85a6fd21af24df460bcae704118", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_81", + "filename": "asset_game_text_81", + "folder": "unknown", + "sha1": "424140fc3f16cad61b715467c9fd56659a54424c", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_82", + "filename": "asset_game_text_82", + "folder": "unknown", + "sha1": "a4a2450143e7d8247e861d23f996112125a24623", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_83", + "filename": "asset_game_text_83", + "folder": "unknown", + "sha1": "22471525f96f92bfc0fd230aa922659331de06d6", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_84", + "filename": "asset_game_text_84", + "folder": "unknown", + "sha1": "ec157c263dca079a6c5819133913e0909967a0be", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_85", + "filename": "asset_game_text_85", + "folder": "unknown", + "sha1": "fd700a88f0fb30430fcfa09ad4d6801279289ed0", + "type": "GameText" + }, + { + "filename": "asset_game_text_86", + "build-id": "ASSET_GAME_TEXT_86", + "folder": "unknown", + "type": "GameText", + "sha1": "ea5b395f21df04c825f55be98c9da5a21787f340" + }, + { + "filename": "asset_game_text_87", + "build-id": "ASSET_GAME_TEXT_87", + "folder": "unknown", + "type": "GameText", + "sha1": "362afcda47ee6cfa644f35bf753f76e457b696a5" + }, + { + "filename": "asset_game_text_88", + "build-id": "ASSET_GAME_TEXT_88", + "folder": "unknown", + "type": "GameText", + "sha1": "d1ea971e52ac5f4c868eee30653457a89d390e79" + }, + { + "build-id": "ASSET_GAME_TEXT_89", + "filename": "asset_game_text_89", + "folder": "unknown", + "sha1": "687ac394907742c95e02d2ff0c60d5b16eb8f69c", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_90", + "filename": "asset_game_text_90", + "folder": "unknown", + "sha1": "0167c11a14bb0d3ba58c4b61617b098f9d64c10c", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_91", + "filename": "asset_game_text_91", + "folder": "unknown", + "sha1": "e1cf081202b318cdb41d84fbdcdb713114b9b45b", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_92", + "filename": "asset_game_text_92", + "folder": "unknown", + "sha1": "def10ec4066b1fad0589cc653d22c23dcf0737b8", + "type": "GameText" + }, + { + "filename": "asset_game_text_93", + "build-id": "ASSET_GAME_TEXT_93", + "folder": "unknown", + "type": "GameText", + "sha1": "a8e30ff3afdc737b1040ffa727bcc7a29e756713" + }, + { + "build-id": "ASSET_GAME_TEXT_94", + "filename": "asset_game_text_94", + "folder": "unknown", + "sha1": "81cab04ab46e244608b9bac56ec93bcda6023730", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_95", + "filename": "asset_game_text_95", + "folder": "unknown", + "sha1": "ee6d51b20d482c0bf6b22179a52ed5675d36da5a", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_96", + "filename": "asset_game_text_96", + "folder": "unknown", + "sha1": "18fdc60877c4b0cf1b32648e9245a0dc183172fa", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_97", + "filename": "asset_game_text_97", + "folder": "unknown", + "sha1": "fecb28402c49257a7c7c34e086fa37fc7bbc795c", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_98", + "filename": "asset_game_text_98", + "folder": "unknown", + "sha1": "c96b0b1e57d82e8a7fb45c8d87637f25b4dab87f", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_99", + "filename": "asset_game_text_99", + "folder": "unknown", + "sha1": "da48a1be4ca8c022b6eab124ff89ecfda113acda", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_100", + "filename": "asset_game_text_100", + "folder": "unknown", + "sha1": "019a8746254eebb67485d708f63f5b8dcc167bb1", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_101", + "filename": "asset_game_text_101", + "folder": "unknown", + "sha1": "378af597ff2eb60bd6e0ba7b09315cd6622ea30e", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_102", + "filename": "asset_game_text_102", + "folder": "unknown", + "sha1": "7968fbb4610b7130c2a956deebe94fc7c827339c", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_103", + "filename": "asset_game_text_103", + "folder": "unknown", + "sha1": "c1cf825960c68db0950b69205e76104e78f69f46", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_104", + "filename": "asset_game_text_104", + "folder": "unknown", + "sha1": "4847edb504174960f91bb6b8c2fc04fdb330e51e", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_105", + "filename": "asset_game_text_105", + "folder": "unknown", + "sha1": "c0a6102bf2b3616d634dcd5b3f08e1a477e9c556", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_106", + "filename": "asset_game_text_106", + "folder": "unknown", + "sha1": "448f307b26b6d2c43f0462946ae281b5b2462631", + "type": "GameText" + }, + { + "filename": "asset_game_text_107", + "build-id": "ASSET_GAME_TEXT_107", + "folder": "unknown", + "type": "GameText", + "sha1": "c347ab39d13323306d75d39a88a3a88b00d9fd39" + }, + { + "filename": "asset_game_text_108", + "build-id": "ASSET_GAME_TEXT_108", + "folder": "unknown", + "type": "GameText", + "sha1": "db9e371a9a6f3d830eaffb8fb3a0bc2b7c3402b5" + }, + { + "build-id": "ASSET_GAME_TEXT_109", + "filename": "asset_game_text_109", + "folder": "unknown", + "sha1": "f78445518610ba520e79f62e3ec26b3d22275721", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_110", + "filename": "asset_game_text_110", + "folder": "unknown", + "sha1": "18ab4b06835d53f76019633d5b88a56640e4abba", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_111", + "filename": "asset_game_text_111", + "folder": "unknown", + "sha1": "c45ec5a5b3bd05ce94abffaec7404108249f1963", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_112", + "filename": "asset_game_text_112", + "folder": "unknown", + "sha1": "95f8be62115290f299e54d31176646c5e958bea2", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_113", + "filename": "asset_game_text_113", + "folder": "unknown", + "sha1": "0f8a0d5f8ef5fc9523752251dd7ee18f80d471f2", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_114", + "filename": "asset_game_text_114", + "folder": "unknown", + "sha1": "74c0ac545037af7abcc5d1a8bf4662f692e9c050", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_115", + "filename": "asset_game_text_115", + "folder": "unknown", + "sha1": "32905113cb12d2b2d7b5ce96c83ad7eef65dd23c", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_116", + "filename": "asset_game_text_116", + "folder": "unknown", + "sha1": "83cf82f338b7f5af5de600f5fbe2e818df3d4c31", + "type": "GameText" + }, + { + "filename": "asset_game_text_117", + "build-id": "ASSET_GAME_TEXT_117", + "folder": "unknown", + "type": "GameText", + "sha1": "11868ae9d8635baea94d0335cec24565493de38c" + }, + { + "build-id": "ASSET_GAME_TEXT_118", + "filename": "asset_game_text_118", + "folder": "unknown", + "sha1": "fa01ab55e8fdd89dfbc8141b759ca9ff605bfadc", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_119", + "filename": "asset_game_text_119", + "folder": "unknown", + "sha1": "557099e85ed8d118a5afd9d2487bb097863978b9", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_120", + "filename": "asset_game_text_120", + "folder": "unknown", + "sha1": "1378df0eff9c46b41ba235f9afd94a76380a2ddc", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_121", + "filename": "asset_game_text_121", + "folder": "unknown", + "sha1": "a77857ba3bfe54c1898276ce0cd31160dd5ea30a", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_122", + "filename": "asset_game_text_122", + "folder": "unknown", + "sha1": "c5faa901d0cc01f8c88aa6f220c852e19d4112bf", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_123", + "filename": "asset_game_text_123", + "folder": "unknown", + "sha1": "7ab2bfaf06ae8ba630332d3aab62dcbb1a5df349", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_124", + "filename": "asset_game_text_124", + "folder": "unknown", + "sha1": "56ade4d792362e767e2027a0b6e85c4672c1ee5e", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_125", + "filename": "asset_game_text_125", + "folder": "unknown", + "sha1": "2ab0889ecc316275e7b02cd0ba640b75325e13c8", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_126", + "filename": "asset_game_text_126", + "folder": "unknown", + "sha1": "4a666cbe4c607ebf08b3902c53c3d61bc1895e93", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_127", + "filename": "asset_game_text_127", + "folder": "unknown", + "sha1": "5ec7507965d2afd01649257f71581f520e01ff26", + "type": "GameText" + }, + { + "filename": "asset_game_text_128", + "build-id": "ASSET_GAME_TEXT_128", + "folder": "unknown", + "type": "GameText", + "sha1": "c5faa901d0cc01f8c88aa6f220c852e19d4112bf" + }, + { + "filename": "asset_game_text_129", + "build-id": "ASSET_GAME_TEXT_129", + "folder": "unknown", + "type": "GameText", + "sha1": "c5faa901d0cc01f8c88aa6f220c852e19d4112bf" + }, + { + "build-id": "ASSET_GAME_TEXT_130", + "filename": "asset_game_text_130", + "folder": "unknown", + "sha1": "51011300c2c8b53d45a81b79d61590d296c81a08", + "type": "GameText" + }, + { + "filename": "asset_game_text_131", + "build-id": "ASSET_GAME_TEXT_131", + "folder": "unknown", + "type": "GameText", + "sha1": "206f9d48cd553fc7e92c2c6912bce0b90a08bbbc" + }, + { + "filename": "asset_game_text_132", + "build-id": "ASSET_GAME_TEXT_132", + "folder": "unknown", + "type": "GameText", + "sha1": "fc377bdde4084bf6446b96b7e5873cff08ddda2b" + }, + { + "filename": "asset_game_text_133", + "build-id": "ASSET_GAME_TEXT_133", + "folder": "unknown", + "type": "GameText", + "sha1": "c16a4c457d4878852a52610b51edfca8e8e9846c" + }, + { + "build-id": "ASSET_GAME_TEXT_134", + "filename": "asset_game_text_134", + "folder": "unknown", + "sha1": "4544057c31d421cbff95878bd7f38c04374a5766", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_135", + "filename": "asset_game_text_135", + "folder": "unknown", + "sha1": "9f73556ce8db4bfb7bb95a70c68c46c447ead331", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_136", + "filename": "asset_game_text_136", + "folder": "unknown", + "sha1": "cb0e9c0926db9ef4fff04734a02826d0b5212817", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_137", + "filename": "asset_game_text_137", + "folder": "unknown", + "sha1": "c6d23c4d6f79dfb136339781d54135c7063d0230", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_138", + "filename": "asset_game_text_138", + "folder": "unknown", + "sha1": "5f3d766688b4953901931f4e425b2a0b81df920e", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_139", + "filename": "asset_game_text_139", + "folder": "unknown", + "sha1": "c886f66b639faac69740140602d201fe9ac2e904", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_140", + "filename": "asset_game_text_140", + "folder": "unknown", + "sha1": "554e893bc7898d1e523ab792749d9d5a5dfb7ba3", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_141", + "filename": "asset_game_text_141", + "folder": "unknown", + "sha1": "f4bfb05e74aab8707374be7270ad5e6697cc9329", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_142", + "filename": "asset_game_text_142", + "folder": "unknown", + "sha1": "2ec114f343cb75f0c6dd0452c6ada8747b88c7f1", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_143", + "filename": "asset_game_text_143", + "folder": "unknown", + "sha1": "0371e0cc555d0ec2cc6cbd1eaf58bd232f77893b", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_144", + "filename": "asset_game_text_144", + "folder": "unknown", + "sha1": "5c7e086b505d7277a99ae09cfc183efb293f00ef", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_145", + "filename": "asset_game_text_145", + "folder": "unknown", + "sha1": "5f1b260d7abc4cf6b1a941932b99ed8732736021", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_146", + "filename": "asset_game_text_146", + "folder": "unknown", + "sha1": "4cad19adc264c6b0c7a85497ec8e2717fbca0497", + "type": "GameText" + }, + { + "filename": "asset_game_text_147", + "build-id": "ASSET_GAME_TEXT_147", + "folder": "unknown", + "type": "GameText", + "sha1": "4cad19adc264c6b0c7a85497ec8e2717fbca0497" + }, + { + "build-id": "ASSET_GAME_TEXT_148", + "filename": "asset_game_text_148", + "folder": "unknown", + "sha1": "e146bf9ff01a21acc953fc1d6c63577c1dfe11c4", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_149", + "filename": "asset_game_text_149", + "folder": "unknown", + "sha1": "7fdc297ce0b448bfb2f072ffc88ab1d66722bc6b", + "type": "GameText" + }, + { + "filename": "asset_game_text_150", + "build-id": "ASSET_GAME_TEXT_150", + "folder": "unknown", + "type": "GameText", + "sha1": "ccb11a804e0dcb362d3bcdf32401a1ebc9dac778" + }, + { + "build-id": "ASSET_GAME_TEXT_151", + "filename": "asset_game_text_151", + "folder": "unknown", + "sha1": "d98d0735a89d432ca51588d3868b607d86f67e11", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_152", + "filename": "asset_game_text_152", + "folder": "unknown", + "sha1": "a58ab399ab252f00c4c3f1b1b2916900cd9f99d1", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_153", + "filename": "asset_game_text_153", + "folder": "unknown", + "sha1": "10ca54bfb754261dbd03ae18ceb55dcc212250de", + "type": "GameText" + }, + { + "filename": "asset_game_text_154", + "build-id": "ASSET_GAME_TEXT_154", + "folder": "unknown", + "type": "GameText", + "sha1": "c6d23c4d6f79dfb136339781d54135c7063d0230" + }, + { + "build-id": "ASSET_GAME_TEXT_155", + "filename": "asset_game_text_155", + "folder": "unknown", + "sha1": "8d1d4d8dad6a4b6de3af4864fcfef4c8ff103ccb", + "type": "GameText" + }, + { + "filename": "asset_game_text_156", + "build-id": "ASSET_GAME_TEXT_156", + "folder": "unknown", + "type": "GameText", + "sha1": "5f3d766688b4953901931f4e425b2a0b81df920e" + }, + { + "filename": "asset_game_text_157", + "build-id": "ASSET_GAME_TEXT_157", + "folder": "unknown", + "type": "GameText", + "sha1": "c6d23c4d6f79dfb136339781d54135c7063d0230" + }, + { + "filename": "asset_game_text_158", + "build-id": "ASSET_GAME_TEXT_158", + "folder": "unknown", + "type": "GameText", + "sha1": "8d1d4d8dad6a4b6de3af4864fcfef4c8ff103ccb" + }, + { + "filename": "asset_game_text_159", + "build-id": "ASSET_GAME_TEXT_159", + "folder": "unknown", + "type": "GameText", + "sha1": "c6d23c4d6f79dfb136339781d54135c7063d0230" + }, + { + "build-id": "ASSET_GAME_TEXT_160", + "filename": "asset_game_text_160", + "folder": "unknown", + "sha1": "e45b488ce5a3952c4b7f9982ce0e3a6f7d5f2732", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_161", + "filename": "asset_game_text_161", + "folder": "unknown", + "sha1": "188660081648137b365b80dae896c060911d5333", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_162", + "filename": "asset_game_text_162", + "folder": "unknown", + "sha1": "96e2ac217c0ce9c318612a801bd4a69e808fa502", + "type": "GameText" + }, + { + "filename": "asset_game_text_163", + "build-id": "ASSET_GAME_TEXT_163", + "folder": "unknown", + "type": "GameText", + "sha1": "5f3d766688b4953901931f4e425b2a0b81df920e" + }, + { + "filename": "asset_game_text_164", + "build-id": "ASSET_GAME_TEXT_164", + "folder": "unknown", + "type": "GameText", + "sha1": "c6d23c4d6f79dfb136339781d54135c7063d0230" + }, + { + "filename": "asset_game_text_165", + "build-id": "ASSET_GAME_TEXT_165", + "folder": "unknown", + "type": "GameText", + "sha1": "e45b488ce5a3952c4b7f9982ce0e3a6f7d5f2732" + }, + { + "filename": "asset_game_text_166", + "build-id": "ASSET_GAME_TEXT_166", + "folder": "unknown", + "type": "GameText", + "sha1": "188660081648137b365b80dae896c060911d5333" + }, + { + "build-id": "ASSET_GAME_TEXT_167", + "filename": "asset_game_text_167", + "folder": "unknown", + "sha1": "158d0ee2421b3f4a0117deb5e01d111db33aefd1", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_168", + "filename": "asset_game_text_168", + "folder": "unknown", + "sha1": "c2a11ff35a47cfd4f9d1806350b872adbfdd3ce6", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_169", + "filename": "asset_game_text_169", + "folder": "unknown", + "sha1": "07c6335e32c408ac39c2179cafe452ac0ad9e6b9", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_170", + "filename": "asset_game_text_170", + "folder": "unknown", + "sha1": "841539681172113a1523f4cf92b00189b8964511", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_171", + "filename": "asset_game_text_171", + "folder": "unknown", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709", + "type": "GameText" + }, + { + "filename": "asset_game_text_172", + "build-id": "ASSET_GAME_TEXT_172", + "folder": "unknown", + "type": "GameText", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709" + }, + { + "filename": "asset_game_text_173", + "build-id": "ASSET_GAME_TEXT_173", + "folder": "unknown", + "type": "GameText", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709" + }, + { + "build-id": "ASSET_GAME_TEXT_174", + "filename": "asset_game_text_174", + "folder": "unknown", + "sha1": "73e847913d1f51c2e82a31ac30206827bdbd9e28", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_175", + "filename": "asset_game_text_175", + "folder": "unknown", + "sha1": "bc9135a415c7881240e6425cf31e4d5ce39d4d2e", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_176", + "filename": "asset_game_text_176", + "folder": "unknown", + "sha1": "efe5d750cff5ce9d675bcdd1f22b3279806fa485", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_177", + "filename": "asset_game_text_177", + "folder": "unknown", + "sha1": "8bee475819aa9ce4274ea20986a0fa740b8b4c4c", + "type": "GameText" + }, + { + "filename": "asset_game_text_178", + "build-id": "ASSET_GAME_TEXT_178", + "folder": "unknown", + "type": "GameText", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709" + }, + { + "build-id": "ASSET_GAME_TEXT_179", + "filename": "asset_game_text_179", + "folder": "unknown", + "sha1": "935e4245bdf258f2b0fd43f21ed3993b298a87c0", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_180", + "filename": "asset_game_text_180", + "folder": "unknown", + "sha1": "c4cecad800d5aaa482996314321a2b318b275823", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_181", + "filename": "asset_game_text_181", + "folder": "unknown", + "sha1": "33cd994137700b59e785cc0604c738ac0c0a9035", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_182", + "filename": "asset_game_text_182", + "folder": "unknown", + "sha1": "8f9bcd6af8e606bcfae108182d65190a68be1815", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_183", + "filename": "asset_game_text_183", + "folder": "unknown", + "sha1": "fa792d79e2a202f0f812d3ebc4a7cfab9650bdab", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_184", + "filename": "asset_game_text_184", + "folder": "unknown", + "sha1": "4da4f1849681ea4cc1638a91d0d973a14211d9ca", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_185", + "filename": "asset_game_text_185", + "folder": "unknown", + "sha1": "7b21e9a75f636aa6bd3e2cd3b33b7f555b273579", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_186", + "filename": "asset_game_text_186", + "folder": "unknown", + "sha1": "e54d9b97cb9a9f84dbe490211a6b94fc1c42d322", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_187", + "filename": "asset_game_text_187", + "folder": "unknown", + "sha1": "d6c2f30362167dc37dd17363f53b8edfa2483008", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_188", + "filename": "asset_game_text_188", + "folder": "unknown", + "sha1": "4ad2daeab7bc9ce1fce3353d952aa9879a40ab0f", + "type": "GameText" + }, + { + "filename": "asset_game_text_189", + "build-id": "ASSET_GAME_TEXT_189", + "folder": "unknown", + "type": "GameText", + "sha1": "4ad2daeab7bc9ce1fce3353d952aa9879a40ab0f" + }, + { + "build-id": "ASSET_GAME_TEXT_190", + "filename": "asset_game_text_190", + "folder": "unknown", + "sha1": "93fe540706bcd0867a0f8396d72aa66036d59b84", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_191", + "filename": "asset_game_text_191", + "folder": "unknown", + "sha1": "28c03df3ddbb888a93737727349a8103bc077028", + "type": "GameText" + }, + { + "filename": "asset_game_text_192", + "build-id": "ASSET_GAME_TEXT_192", + "folder": "unknown", + "type": "GameText", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709" + }, + { + "filename": "asset_game_text_193", + "build-id": "ASSET_GAME_TEXT_193", + "folder": "unknown", + "type": "GameText", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709" + }, + { + "build-id": "ASSET_GAME_TEXT_194", + "filename": "asset_game_text_194", + "folder": "unknown", + "sha1": "e6b7995da2b7a261277b837a2a68a2d0eb90a81c", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_195", + "filename": "asset_game_text_195", + "folder": "unknown", + "sha1": "d5abb19023e55353e8df287b4b2ef39a4d2f9d86", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_196", + "filename": "asset_game_text_196", + "folder": "unknown", + "sha1": "99dc129cad196e12fd055fcfb23bf5d42019f1e6", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_197", + "filename": "asset_game_text_197", + "folder": "unknown", + "sha1": "09331b95651b1ab54739b7a0e89b977089867fcb", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_198", + "filename": "asset_game_text_198", + "folder": "unknown", + "sha1": "8578a6171c5d1f6d2f15de36aabcd73df71e955d", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_199", + "filename": "asset_game_text_199", + "folder": "unknown", + "sha1": "8eedf59106f5d911045c94ea5712b7ec071aeb85", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_200", + "filename": "asset_game_text_200", + "folder": "unknown", + "sha1": "3439ba4dd6ea5827ca4a5aeb66decd2b7818639e", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_201", + "filename": "asset_game_text_201", + "folder": "unknown", + "sha1": "c6e855b2005c4c61ad6e31262d6895bc8c5b6881", + "type": "GameText" + }, + { + "filename": "asset_game_text_202", + "build-id": "ASSET_GAME_TEXT_202", + "folder": "unknown", + "type": "GameText", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709" + }, + { + "build-id": "ASSET_GAME_TEXT_203", + "filename": "asset_game_text_203", + "folder": "unknown", + "sha1": "8678094b589c500809ce0c2fbb24cadbcc4a2e5a", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_204", + "filename": "asset_game_text_204", + "folder": "unknown", + "sha1": "c7311aad434cb62657794de45d0f0559779e3a64", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_205", + "filename": "asset_game_text_205", + "folder": "unknown", + "sha1": "c6c5ab66bf38ded479b96b5a142a15d9e35f51c3", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_206", + "filename": "asset_game_text_206", + "folder": "unknown", + "sha1": "a1477b1d2e8a7c24b480f370830ea441f0c5a8ce", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_207", + "filename": "asset_game_text_207", + "folder": "unknown", + "sha1": "ade2ba8d30caecc119461a02ab589f403f1b9143", + "type": "GameText" + }, + { + "filename": "asset_game_text_208", + "build-id": "ASSET_GAME_TEXT_208", + "folder": "unknown", + "type": "GameText", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709" + }, + { + "filename": "asset_game_text_209", + "build-id": "ASSET_GAME_TEXT_209", + "folder": "unknown", + "type": "GameText", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709" + }, + { + "filename": "asset_game_text_210", + "build-id": "ASSET_GAME_TEXT_210", + "folder": "unknown", + "type": "GameText", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709" + }, + { + "filename": "asset_game_text_211", + "build-id": "ASSET_GAME_TEXT_211", + "folder": "unknown", + "type": "GameText", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709" + }, + { + "build-id": "ASSET_GAME_TEXT_212", + "filename": "asset_game_text_212", + "folder": "unknown", + "sha1": "cc8c41e7b59d8aa03397c31072608092edce733a", + "type": "GameText" + }, + { + "filename": "asset_game_text_213", + "build-id": "ASSET_GAME_TEXT_213", + "folder": "unknown", + "type": "GameText", + "sha1": "ade2ba8d30caecc119461a02ab589f403f1b9143" + }, + { + "filename": "asset_game_text_214", + "build-id": "ASSET_GAME_TEXT_214", + "folder": "unknown", + "type": "GameText", + "sha1": "ade2ba8d30caecc119461a02ab589f403f1b9143" + }, + { + "filename": "asset_game_text_215", + "build-id": "ASSET_GAME_TEXT_215", + "folder": "unknown", + "type": "GameText", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709" + }, + { + "filename": "asset_game_text_216", + "build-id": "ASSET_GAME_TEXT_216", + "folder": "unknown", + "type": "GameText", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709" + }, + { + "filename": "asset_game_text_217", + "build-id": "ASSET_GAME_TEXT_217", + "folder": "unknown", + "type": "GameText", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709" + }, + { + "filename": "asset_game_text_218", + "build-id": "ASSET_GAME_TEXT_218", + "folder": "unknown", + "type": "GameText", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709" + }, + { + "build-id": "ASSET_GAME_TEXT_219", + "filename": "asset_game_text_219", + "folder": "unknown", + "sha1": "906f8968f42e2dde31414fbb8c29ce54a2d7a1b0", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_220", + "filename": "asset_game_text_220", + "folder": "unknown", + "sha1": "676858f947cef5018c854a0308166b529b5de963", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_221", + "filename": "asset_game_text_221", + "folder": "unknown", + "sha1": "4fe37325749e2c6663dae582a2dadd0396e0a8c3", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_222", + "filename": "asset_game_text_222", + "folder": "unknown", + "sha1": "911dd1ab4c90a4e67800fd82f55b656b8e67700a", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_223", + "filename": "asset_game_text_223", + "folder": "unknown", + "sha1": "c887e4c0c932b99040a2b7efc521ab8fd55cedde", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_224", + "filename": "asset_game_text_224", + "folder": "unknown", + "sha1": "a7930503892b4d2fd3a2b3c8dcf5d86dd92ac90a", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_225", + "filename": "asset_game_text_225", + "folder": "unknown", + "sha1": "1c203043e6f2d091a7dd85f7231c383db8dc739c", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_226", + "filename": "asset_game_text_226", + "folder": "unknown", + "sha1": "4ae2cd74ad0baa2924ea0250bb2db8ca4b44b1b9", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_227", + "filename": "asset_game_text_227", + "folder": "unknown", + "sha1": "a3a73eca72e8542f87709567bd1b2f66407b0bc1", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_228", + "filename": "asset_game_text_228", + "folder": "unknown", + "sha1": "57b8977e32197075fa2a4b7207be3a8eb7a6ae91", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_229", + "filename": "asset_game_text_229", + "folder": "unknown", + "sha1": "ace36bbae06cd7c65ebc0435025a6fcae25680ef", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_230", + "filename": "asset_game_text_230", + "folder": "unknown", + "sha1": "7db581384442403a2c3d16762e6a787f254667f1", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_231", + "filename": "asset_game_text_231", + "folder": "unknown", + "sha1": "078c173f8229b64f5b256d84badc2b9a11b5a191", + "type": "GameText" + }, + { + "filename": "asset_game_text_232", + "build-id": "ASSET_GAME_TEXT_232", + "folder": "unknown", + "type": "GameText", + "sha1": "078c173f8229b64f5b256d84badc2b9a11b5a191" + }, + { + "build-id": "ASSET_GAME_TEXT_233", + "filename": "asset_game_text_233", + "folder": "unknown", + "sha1": "d58e73581d4fd184577dc344d3b3150bb9e3ba22", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_234", + "filename": "asset_game_text_234", + "folder": "unknown", + "sha1": "ad8d642f3b5909d68c27506a782e05c88de07bbe", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_235", + "filename": "asset_game_text_235", + "folder": "unknown", + "sha1": "a3dc9a8d2dab0690bb413477709b16675992f54a", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_236", + "filename": "asset_game_text_236", + "folder": "unknown", + "sha1": "1ddb8a5472b1651cb7fab7aa629d8812ccb45936", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_237", + "filename": "asset_game_text_237", + "folder": "unknown", + "sha1": "1f14f7a8aa5b9530c9739890658f4df4ca412da5", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_238", + "filename": "asset_game_text_238", + "folder": "unknown", + "sha1": "bf6382a2f348564ced48188fd948adfabb2e31a6", + "type": "GameText" + }, + { + "filename": "asset_game_text_239", + "build-id": "ASSET_GAME_TEXT_239", + "folder": "unknown", + "type": "GameText", + "sha1": "911dd1ab4c90a4e67800fd82f55b656b8e67700a" + }, + { + "filename": "asset_game_text_240", + "build-id": "ASSET_GAME_TEXT_240", + "folder": "unknown", + "type": "GameText", + "sha1": "a7930503892b4d2fd3a2b3c8dcf5d86dd92ac90a" + }, + { + "build-id": "ASSET_GAME_TEXT_241", + "filename": "asset_game_text_241", + "folder": "unknown", + "sha1": "8f04a408345f74d86be505af9712fa6d1a485c4b", + "type": "GameText" + }, + { + "filename": "asset_game_text_242", + "build-id": "ASSET_GAME_TEXT_242", + "folder": "unknown", + "type": "GameText", + "sha1": "911dd1ab4c90a4e67800fd82f55b656b8e67700a" + }, + { + "filename": "asset_game_text_243", + "build-id": "ASSET_GAME_TEXT_243", + "folder": "unknown", + "type": "GameText", + "sha1": "a7930503892b4d2fd3a2b3c8dcf5d86dd92ac90a" + }, + { + "filename": "asset_game_text_244", + "build-id": "ASSET_GAME_TEXT_244", + "folder": "unknown", + "type": "GameText", + "sha1": "911dd1ab4c90a4e67800fd82f55b656b8e67700a" + }, + { + "build-id": "ASSET_GAME_TEXT_245", + "filename": "asset_game_text_245", + "folder": "unknown", + "sha1": "904510c5b9071bd3e706b927f28a466e8f6a398b", + "type": "GameText" + }, + { + "filename": "asset_game_text_246", + "build-id": "ASSET_GAME_TEXT_246", + "folder": "unknown", + "type": "GameText", + "sha1": "a7930503892b4d2fd3a2b3c8dcf5d86dd92ac90a" + }, + { + "build-id": "ASSET_GAME_TEXT_247", + "filename": "asset_game_text_247", + "folder": "unknown", + "sha1": "6d19b0afdccd829d628ec2f379ab33d8a768fee5", + "type": "GameText" + }, + { + "filename": "asset_game_text_248", + "build-id": "ASSET_GAME_TEXT_248", + "folder": "unknown", + "type": "GameText", + "sha1": "8f04a408345f74d86be505af9712fa6d1a485c4b" + }, + { + "filename": "asset_game_text_249", + "build-id": "ASSET_GAME_TEXT_249", + "folder": "unknown", + "type": "GameText", + "sha1": "911dd1ab4c90a4e67800fd82f55b656b8e67700a" + }, + { + "filename": "asset_game_text_250", + "build-id": "ASSET_GAME_TEXT_250", + "folder": "unknown", + "type": "GameText", + "sha1": "904510c5b9071bd3e706b927f28a466e8f6a398b" + }, + { + "filename": "asset_game_text_251", + "build-id": "ASSET_GAME_TEXT_251", + "folder": "unknown", + "type": "GameText", + "sha1": "a7930503892b4d2fd3a2b3c8dcf5d86dd92ac90a" + }, + { + "build-id": "ASSET_GAME_TEXT_252", + "filename": "asset_game_text_252", + "folder": "unknown", + "sha1": "382a5e07f8f9f5915842fc2c43e69923e3b1ffaf", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_253", + "filename": "asset_game_text_253", + "folder": "unknown", + "sha1": "7d5001d3d5dfe260193329cf43a090bb2734f3b8", + "type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_254", + "filename": "asset_game_text_254", + "folder": "unknown", + "sha1": "f9ef389775d2e1124fedb0a4b49309ebdba34345", + "type": "GameText" + }, + { + "filename": "english_menu_text", + "build-id": "ASSET_MENU_TEXT_ENGLISH", + "type": "MenuText", + "sha1": "9b935cc2d32da66eaaa06a92fa169662ea1332bd" + }, + { + "filename": "french_menu_text", + "build-id": "ASSET_MENU_TEXT_FRENCH", + "type": "MenuText", + "sha1": "42c4063e3ff85aa2af562429fbd5cfeac122fecf" + }, + { + "filename": "german_menu_text", + "build-id": "ASSET_MENU_TEXT_GERMAN", + "type": "MenuText", + "sha1": "298fa9a4c1323642aa443823cecb201d4aba9dd0" + }, + { + "filename": "japanese_menu_text", + "build-id": "ASSET_MENU_TEXT_JAPANESE", + "type": "MenuText", + "sha1": "c3c6ff8dd2afe64ca98868ddb0a9c2371d8e6083" + }, + { + "filename": "fossil_canyon", + "build-id": "ASSET_SPRITE_MINIMAP_FOSSILCANYON", + "folder": "minimap", + "type": "Sprite", + "sha1": "e0d0d46025654c7af9790de8c2edb24e16b6749a" + }, + { + "filename": "ancient_lake", + "build-id": "ASSET_SPRITE_MINIMAP_ANCIENTLAKE", + "folder": "minimap", + "type": "Sprite", + "sha1": "1da358b993007631e10168e0f39f5a2e0d1e2bbc" + }, + { + "filename": "pirate_lagoon", + "build-id": "ASSET_SPRITE_MINIMAP_PIRATELAGOON", + "folder": "minimap", + "type": "Sprite", + "sha1": "043b4ab4619617cb3331d025c1aebf422046c754" + }, + { + "filename": "whale_bay", + "build-id": "ASSET_SPRITE_MINIMAP_WHALEBAY", + "folder": "minimap", + "type": "Sprite", + "sha1": "7d40b084e4d9cd5b6047f2992bcf8b1c4a675f9e" + }, + { + "filename": "snowball_valley", + "build-id": "ASSET_SPRITE_MINIMAP_SNOWBALLVALLEY", + "folder": "minimap", + "type": "Sprite", + "sha1": "cfd1327c08dc4d589d5e2fc848350703f0e5b54b" + }, + { + "filename": "hot_top_volcano", + "build-id": "ASSET_SPRITE_MINIMAP_HOTTOPVOLCANO", + "folder": "minimap", + "type": "Sprite", + "sha1": "2c1f1b9a3ae4e108bec61be175cde9ebf8a04274" + }, + { + "filename": "crescent_island", + "build-id": "ASSET_SPRITE_MINIMAP_CRESCENTISLAND", + "folder": "minimap", + "type": "Sprite", + "sha1": "dea3f72554870780d2ec0c1a88979ca4e6306fc5" + }, + { + "filename": "unused", + "build-id": "ASSET_SPRITE_MINIMAP_UNUSED", + "folder": "minimap", + "type": "Sprite", + "sha1": "05985b3cb9ec124b4e8e54a250851c67d694a5b6" + }, + { + "filename": "everfrost_peak", + "build-id": "ASSET_SPRITE_MINIMAP_EVERFROSTPEAK", + "folder": "minimap", + "type": "Sprite", + "sha1": "4eee58901f0f16ad5a39a1994d79cd0588a86350" + }, + { + "filename": "unused2", + "build-id": "ASSET_SPRITE_MINIMAP_UNUSED2", + "folder": "minimap", + "type": "Sprite", + "sha1": "fb3e992aa0f529dfd61eb8c3cbfffc0ae72fe368" + }, + { + "filename": "walrus_cove", + "build-id": "ASSET_SPRITE_MINIMAP_WALRUSCOVE", + "folder": "minimap", + "type": "Sprite", + "sha1": "d104204aa5ef19704e1cc18edad2e8df686ef6ff" + }, + { + "filename": "unused3", + "build-id": "ASSET_SPRITE_MINIMAP_UNUSED3", + "folder": "minimap", + "type": "Sprite", + "sha1": "442a2e001ff3cffaf231a996f20aee38c6b327f2" + }, + { + "filename": "boulder_canyon", + "build-id": "ASSET_SPRITE_MINIMAP_BOULDERCANYON", + "folder": "minimap", + "type": "Sprite", + "sha1": "289072b011b91e9e5d5254fb475d6b4aaaf33ccd" + }, + { + "filename": "smokey_castle", + "build-id": "ASSET_SPRITE_MINIMAP_SMOKEYCASTLE", + "folder": "minimap", + "type": "Sprite", + "sha1": "3384afb60efa1cb45b207d95c01572fd3cd859ee" + }, + { + "filename": "central_area", + "build-id": "ASSET_SPRITE_MINIMAP_CENTRALAREA", + "folder": "minimap", + "type": "Sprite", + "sha1": "435df9ef253fcbfc7898f5d5c7400cb8b6a3ce75" + }, + { + "filename": "fire_mountain", + "build-id": "ASSET_SPRITE_MINIMAP_FIREMOUNTAIN", + "folder": "minimap", + "type": "Sprite", + "sha1": "c74d5860da8e99d93ffcfb527914af97974a01c1" + }, + { + "filename": "space_port_alpha", + "build-id": "ASSET_SPRITE_MINIMAP_SPACEPORTALPHA", + "folder": "minimap", + "type": "Sprite", + "sha1": "fff3b37204ae3e48320d79820ad2f469a86a5ddb" + }, + { + "filename": "spacedust_alley", + "build-id": "ASSET_SPRITE_MINIMAP_SPACEDUSTALLEY", + "folder": "minimap", + "type": "Sprite", + "sha1": "15eaffb5fd18d36a061792c908b1b84416e03814" + }, + { + "filename": "treasure_caves", + "build-id": "ASSET_SPRITE_MINIMAP_TREASURECAVES", + "folder": "minimap", + "type": "Sprite", + "sha1": "fa28d9ff5ce62b7133e472557bf27c44e356390f" + }, + { + "filename": "greenwood_village", + "build-id": "ASSET_SPRITE_MINIMAP_GREENWOODVILLAGE", + "folder": "minimap", + "type": "Sprite", + "sha1": "3dac99e52a1f6068458603a991148365a4682035" + }, + { + "filename": "darkmoon_caverns", + "build-id": "ASSET_SPRITE_MINIMAP_DARKMOONCAVERNS", + "folder": "minimap", + "type": "Sprite", + "sha1": "8b8a6737dd2a2bb486d3ea3ff62fc96bd57bfd1e" + }, + { + "filename": "star_city", + "build-id": "ASSET_SPRITE_MINIMAP_STARCITY", + "folder": "minimap", + "type": "Sprite", + "sha1": "c8d22439afc729ac5a0fee963376efd20d67078c" + }, + { + "filename": "windmill_plains", + "build-id": "ASSET_SPRITE_MINIMAP_WINDMILLPLAINS", + "folder": "minimap", + "type": "Sprite", + "sha1": "cf224c846e5b69aaabdbbe831bc318616d7805d6" + }, + { + "filename": "frosty_village", + "build-id": "ASSET_SPRITE_MINIMAP_FROSTYVILLAGE", + "folder": "minimap", + "type": "Sprite", + "sha1": "8b4b25b8e14018e5adcfa748b4067047ea096739" + }, + { + "filename": "darkwater_beach", + "build-id": "ASSET_SPRITE_MINIMAP_DARKWATERBEACH", + "folder": "minimap", + "type": "Sprite", + "sha1": "70dbbadbfbf0621f1df6727a09b003fb645f30b4" + }, + { + "filename": "jungle_falls", + "build-id": "ASSET_SPRITE_MINIMAP_JUNGLEFALLS", + "folder": "minimap", + "type": "Sprite", + "sha1": "e7d7636e23b44686de3392d2ca3dc311840c90e7" + }, + { + "filename": "icicle_pyramid", + "build-id": "ASSET_SPRITE_MINIMAP_ICICLEPYRAMID", + "folder": "minimap", + "type": "Sprite", + "sha1": "d35d58cdcc03d9d9a2fd9a60b9d4eb7b9f0d7ff7" + }, + { + "filename": "haunted_woods", + "build-id": "ASSET_SPRITE_MINIMAP_HAUNTEDWOODS", + "folder": "minimap", + "type": "Sprite", + "sha1": "517ec2ebdaa40f3ea6cbc0668173ce608fe7e2d1" + }, + { + "filename": "bluey", + "build-id": "ASSET_SPRITE_MINIMAP_BLUEY", + "folder": "minimap", + "type": "Sprite", + "sha1": "b9e07506032c412bc46214518606939866be88ca" + }, + { + "filename": "bubbler", + "build-id": "ASSET_SPRITE_MINIMAP_BUBBLER", + "folder": "minimap", + "type": "Sprite", + "sha1": "7c37bd7998a1e7479f414650d54303eb8cf3ecc3" + }, + { + "filename": "smokey", + "build-id": "ASSET_SPRITE_MINIMAP_SMOKEY", + "folder": "minimap", + "type": "Sprite", + "sha1": "c59993df9e356675f250afc8cf556ee67d4f6d62" + }, + { + "filename": "trickytops", + "build-id": "ASSET_SPRITE_MINIMAP_TRICKYTOPS", + "folder": "minimap", + "type": "Sprite", + "sha1": "34a871976a243c7f2befa462e0fef9e6fc840f03" + }, + { + "filename": "wizpig1", + "build-id": "ASSET_SPRITE_MINIMAP_WIZPIG1", + "folder": "minimap", + "type": "Sprite", + "sha1": "a9abc031b26ec8b2413e88f3fda9d0526b4b9f47" + }, + { + "filename": "wizpig2", + "build-id": "ASSET_SPRITE_MINIMAP_WIZPIG2", + "folder": "minimap", + "type": "Sprite", + "sha1": "d874e3e5fa38676a031ab8905507db686baa2abb" + }, + { + "filename": "rain_drop", + "build-id": "ASSET_SPRITE_WEATHER_RAINDROP", + "folder": "weather", + "type": "Sprite", + "sha1": "dc0413a95ec66e394037918beecad31acf5943bd" + }, + { + "filename": "snowflake", + "build-id": "ASSET_SPRITE_WEATHER_SNOWFLAKE", + "folder": "weather", + "type": "Sprite", + "sha1": "aded4a306b1716e742377ec47f299bc645e83d03" + }, + { + "filename": "lensflare1", + "build-id": "ASSET_SPRITE_OBJECTS_LENSFLARE1", + "folder": "objects", + "type": "Sprite", + "sha1": "87bc7f300949641c25fd3102f4b10f95cc42c0b5" + }, + { + "filename": "lensflare2", + "build-id": "ASSET_SPRITE_OBJECTS_LENSFLARE2", + "folder": "objects", + "type": "Sprite", + "sha1": "3e06d6496437900cfc9bc8975529b87220e3533e" + }, + { + "filename": "lensflare3", + "build-id": "ASSET_SPRITE_OBJECTS_LENSFLARE3", + "folder": "objects", + "type": "Sprite", + "sha1": "41ea0c96c5e9101ee50053a1d302fb705d72da83" + }, + { + "filename": "brown_egg", + "build-id": "ASSET_SPRITE_UNKNOWN_BROWNEGG", + "folder": "unknown", + "type": "Sprite", + "sha1": "3d6336cf49e99b2e9a68cdaa2b8ea17f24cd65a4" + }, + { + "filename": "smoke", + "build-id": "ASSET_SPRITE_PARTICLES_SMOKE", + "folder": "particles", + "type": "Sprite", + "sha1": "f56af2f040d1d42b29b975610aa5f2d64062b53b" + }, + { + "filename": "smoke2", + "build-id": "ASSET_SPRITE_PARTICLES_SMOKE2", + "folder": "particles", + "type": "Sprite", + "sha1": "5686dd1cf5e8d35c9d0e83bf9e7bec99b4de05e4" + }, + { + "filename": "bubbles_small", + "build-id": "ASSET_SPRITE_PARTICLES_BUBBLESSMALL", + "folder": "particles", + "type": "Sprite", + "sha1": "ae82070a6b76aa7a730ae394c95e74907b04ecde" + }, + { + "filename": "smoke3", + "build-id": "ASSET_SPRITE_PARTICLES_SMOKE3", + "folder": "particles", + "type": "Sprite", + "sha1": "a96d26dc8e21b9782d122a4b812829970a8bdf6b" + }, + { + "filename": "bubble_weapon", + "build-id": "ASSET_SPRITE_OBJECTS_BUBBLEWEAPON", + "folder": "objects", + "type": "Sprite", + "sha1": "1274810456826de91228117ae9da3143dd078ff3" + }, + { + "filename": "sparkle", + "build-id": "ASSET_SPRITE_OBJECTS_SPARKLE", + "folder": "objects", + "type": "Sprite", + "sha1": "8aaafaa6678d540e8ea824989fc44ea32ec8c1ff" + }, + { + "filename": "bomb_explosion_blue", + "build-id": "ASSET_SPRITE_OBJECTS_BOMBEXPLOSIONBLUE", + "folder": "objects", + "type": "Sprite", + "sha1": "58d20b0ae6b3f2ab5742d66aa23fced028841196" + }, + { + "filename": "bomb_explosion_yellow", + "build-id": "ASSET_SPRITE_OBJECTS_BOMBEXPLOSIONYELLOW", + "folder": "objects", + "type": "Sprite", + "sha1": "c2e881a05b1ec2bf84ef1063f517a2848072da33" + }, + { + "filename": "bomb_explosion_red", + "build-id": "ASSET_SPRITE_OBJECTS_BOMBEXPLOSIONRED", + "folder": "objects", + "type": "Sprite", + "sha1": "7a7fa0aab547dbe631817ae8404cf0566cb0d452" + }, + { + "filename": "bomb_explosion_green", + "build-id": "ASSET_SPRITE_OBJECTS_BOMBEXPLOSIONGREEN", + "folder": "objects", + "type": "Sprite", + "sha1": "535995b1043c24dbb8c9c15e3d1985a7d22ffdd3" + }, + { + "filename": "bomb_explosion_cyan", + "build-id": "ASSET_SPRITE_OBJECTS_BOMBEXPLOSIONCYAN", + "folder": "objects", + "type": "Sprite", + "sha1": "9487a75d6f8277ecec6410d5897c3bd8c92c7d0a" + }, + { + "filename": "bomb_explosion_white", + "build-id": "ASSET_SPRITE_OBJECTS_BOMBEXPLOSIONWHITE", + "folder": "objects", + "type": "Sprite", + "sha1": "bd1f472bcd4b15ea3b51ea3118dbf5956000cb1f" + }, + { + "filename": "bomb_explosion_orange", + "build-id": "ASSET_SPRITE_OBJECTS_BOMBEXPLOSIONORANGE", + "folder": "objects", + "type": "Sprite", + "sha1": "9fd156b4f92eefcae19091d80f309b69ad4fb30c" + }, + { + "filename": "bomb_explosion_purple", + "build-id": "ASSET_SPRITE_OBJECTS_BOMBEXPLOSIONPURPLE", + "folder": "objects", + "type": "Sprite", + "sha1": "068a8c3a48dd8742139c6cadfef633a29d6acf8f" + }, + { + "filename": "rainbow", + "build-id": "ASSET_SPRITE_OBJECTS_RAINBOW", + "folder": "objects", + "type": "Sprite", + "sha1": "d6d56d8d4d200579477bcd209c01c7bd8be6cbcb" + }, + { + "filename": "egg", + "build-id": "ASSET_SPRITE_OBJECTS_EGG", + "folder": "objects", + "type": "Sprite", + "sha1": "22a5a2947fd9e94c3ebd438fec106829441c3779" + }, + { + "filename": "bomb", + "build-id": "ASSET_SPRITE_OBJECTS_BOMB", + "folder": "objects", + "type": "Sprite", + "sha1": "dd9a04cdc6edc0f76f824091ef45861ba23c959c" + }, + { + "filename": "oil_slick", + "build-id": "ASSET_SPRITE_OBJECTS_OILSLICK", + "folder": "objects", + "type": "Sprite", + "sha1": "917e4bae7eee47be700dbd53ce09f3aa80fb6b6e" + }, + { + "filename": "eyes_in_dark", + "build-id": "ASSET_SPRITE_OBJECTS_EYESINDARK", + "folder": "objects", + "type": "Sprite", + "sha1": "9223441e64728b70c446d1d36585134a46ad4c48" + }, + { + "filename": "timer_colon", + "build-id": "ASSET_SPRITE_HUD_TIMERCOLON", + "folder": "hud", + "type": "Sprite", + "sha1": "4d6e607815f1622228da79ec5a75d8e8ff6b520a" + }, + { + "filename": "retical_homing", + "build-id": "ASSET_SPRITE_HUD_RETICALHOMING", + "folder": "hud", + "type": "Sprite", + "sha1": "deb43141c093285c517a1f7a4466e36faa8fb38d" + }, + { + "filename": "debug_red_sphere", + "build-id": "ASSET_SPRITE_OBJECTS_DEBUGREDSPHERE", + "folder": "objects", + "type": "Sprite", + "sha1": "4388c7aecdb128dfaf25e5e4dcfa5226b739cb38" + }, + { + "filename": "finish", + "build-id": "ASSET_SPRITE_HUD_FINISH", + "folder": "hud", + "type": "Sprite", + "sha1": "de93f46fb3a0b6f9d417f21b26a0e1d18842ac75" + }, + { + "filename": "get_ready", + "build-id": "ASSET_SPRITE_HUD_GETREADY", + "folder": "hud", + "type": "Sprite", + "sha1": "7c60e12f1772a6efa0ee308f607dfb4a57ac9c0f" + }, + { + "filename": "go", + "build-id": "ASSET_SPRITE_HUD_GO", + "folder": "hud", + "type": "Sprite", + "sha1": "70fb434ba734379ecf688ddf02dcdb36fb4ab0b3" + }, + { + "filename": "lap", + "build-id": "ASSET_SPRITE_HUD_LAP", + "folder": "hud", + "type": "Sprite", + "sha1": "dd7e2a63d305dbe0c77d174874799e11a85144d7" + }, + { + "filename": "forward_slash", + "build-id": "ASSET_SPRITE_HUD_FORWARDSLASH", + "folder": "hud", + "type": "Sprite", + "sha1": "5d344432e54dcd29297a9bf5d1379013b79e9ecf" + }, + { + "filename": "time", + "build-id": "ASSET_SPRITE_HUD_TIME", + "folder": "hud", + "type": "Sprite", + "sha1": "f09f25166be16e12f10126a3f8162a6a779a594e" + }, + { + "filename": "place_numbers", + "build-id": "ASSET_SPRITE_HUD_PLACENUMBERS", + "folder": "hud", + "type": "Sprite", + "sha1": "254b32998c1b8403a6bdca2ccd96fc6580f0ee25" + }, + { + "filename": "timer_numbers", + "build-id": "ASSET_SPRITE_HUD_TIMERNUMBERS", + "folder": "hud", + "type": "Sprite", + "sha1": "37c224a93c460754825082af7d60e90b387a2734" + }, + { + "filename": "timer_color_small", + "build-id": "ASSET_SPRITE_HUD_TIMERCOLORSMALL", + "folder": "hud", + "type": "Sprite", + "sha1": "e48f98efdde142b5196b27d5fde911f18df69863" + }, + { + "filename": "timer_numbers_small", + "build-id": "ASSET_SPRITE_HUD_TIMERNUMBERSSMALL", + "folder": "hud", + "type": "Sprite", + "sha1": "5cc2b8819447cd69cc099cb163bbe717ae8f6dac" + }, + { + "filename": "go_small", + "build-id": "ASSET_SPRITE_HUD_GOSMALL", + "folder": "hud", + "type": "Sprite", + "sha1": "588d31cb04e948e4270dc0b8462fbaff59c6440c" + }, + { + "filename": "lap_small", + "build-id": "ASSET_SPRITE_HUD_LAPSMALL", + "folder": "hud", + "type": "Sprite", + "sha1": "02a18783f3dcde9c386221be3737f1a407dcea7f" + }, + { + "filename": "get_ready2", + "build-id": "ASSET_SPRITE_HUD_GETREADY2", + "folder": "hud", + "type": "Sprite", + "sha1": "47f7cc7c4fb3e7b2208c6b0a89e4aedf7813bdfd" + }, + { + "filename": "final_small", + "build-id": "ASSET_SPRITE_HUD_FINALSMALL", + "folder": "hud", + "type": "Sprite", + "sha1": "a75a48181df7fe2402d7a1b093f9a57a54eb5e86" + }, + { + "filename": "finish_small", + "build-id": "ASSET_SPRITE_HUD_FINISHSMALL", + "folder": "hud", + "type": "Sprite", + "sha1": "9b6d73ada692196b2a7100c3a34cc7d4ecafc48f" + }, + { + "filename": "lap2_small", + "build-id": "ASSET_SPRITE_HUD_LAP2SMALL", + "folder": "hud", + "type": "Sprite", + "sha1": "e0d498f060c1b9ec68a9425b56f1483d9862e1ba" + }, + { + "filename": "way_small", + "build-id": "ASSET_SPRITE_HUD_WAYSMALL", + "folder": "hud", + "type": "Sprite", + "sha1": "794a08599a1f406802decde9e1c31efc135d62f2" + }, + { + "filename": "wrong_small", + "build-id": "ASSET_SPRITE_HUD_WRONGSMALL", + "folder": "hud", + "type": "Sprite", + "sha1": "5b0d246c7b3b7668df84ece903e428e3159503f5" + }, + { + "filename": "position_arrow", + "build-id": "ASSET_SPRITE_OBJECTS_POSITIONARROW", + "folder": "objects", + "type": "Sprite", + "sha1": "98d2f865e1386ccf79b1dc3a98d37ec94e93a406" + }, + { + "filename": "golden_balloon_icon", + "build-id": "ASSET_SPRITE_HUD_GOLDENBALLOONICON", + "folder": "hud", + "type": "Sprite", + "sha1": "d1b64e468fcdaeeaef4361403dc8e163d32d1e4c" + }, + { + "filename": "silver_balloon_icon", + "build-id": "ASSET_SPRITE_HUD_SILVERBALLOONICON", + "folder": "hud", + "type": "Sprite", + "sha1": "fe09bc94e2e695bf8d42c77f14d2fa4b82baf918" + }, + { + "filename": "level_name", + "build-id": "ASSET_SPRITE_OBJECTS_LEVELNAME", + "folder": "objects", + "type": "Sprite", + "sha1": "b93079aaa274e4e2ebc716853a8a828129e52b01" + }, + { + "filename": "npc", + "build-id": "ASSET_SPRITE_MINIMAP_NPC", + "folder": "minimap", + "type": "Sprite", + "sha1": "9569b9b21df3611860e479a329beea41dc9926b1" + }, + { + "filename": "player", + "build-id": "ASSET_SPRITE_MINIMAP_PLAYER", + "folder": "minimap", + "type": "Sprite", + "sha1": "edb4bde4e6b85c542e54149bf7b5227394fc9fd9" + }, + { + "filename": "weapon_icons", + "build-id": "ASSET_SPRITE_HUD_WEAPONICONS", + "folder": "hud", + "type": "Sprite", + "sha1": "bee929a7554b596fe2a92e59e09d5567732bea5f" + }, + { + "filename": "weapon_icon_numbers", + "build-id": "ASSET_SPRITE_HUD_WEAPONICONNUMBERS", + "folder": "hud", + "type": "Sprite", + "sha1": "54cbf16fceda7e3107758ecbd39611e6f7d72628" + }, + { + "filename": "beta_character_icon", + "build-id": "ASSET_SPRITE_UNUSED_BETACHARACTERICON", + "folder": "unused", + "type": "Sprite", + "sha1": "b666c86a832a4870b9b875a63ab58710e03836cb" + }, + { + "filename": "final_lap_flag", + "build-id": "ASSET_SPRITE_HUD_FINALLAPFLAG", + "folder": "hud", + "type": "Sprite", + "sha1": "502d8043662e797e3e231e33069be53d7e0b39f0" + }, + { + "filename": "final", + "build-id": "ASSET_SPRITE_HUD_FINAL", + "folder": "hud", + "type": "Sprite", + "sha1": "2344fa7a91800570c6f19fbb88b5a7486db3d974" + }, + { + "filename": "lap_large", + "build-id": "ASSET_SPRITE_HUD_LAPLARGE", + "folder": "hud", + "type": "Sprite", + "sha1": "3f5215cc6abaf753f97a249028813a9b1d87d83a" + }, + { + "filename": "lap2_2", + "build-id": "ASSET_SPRITE_HUD_LAP22", + "folder": "hud", + "type": "Sprite", + "sha1": "85fc938e1f4bd8e3413951461726812fe46a6acf" + }, + { + "filename": "way", + "build-id": "ASSET_SPRITE_HUD_WAY", + "folder": "hud", + "type": "Sprite", + "sha1": "ec5d7733c401ad1543d82749d6cc625348b19004" + }, + { + "filename": "wrong", + "build-id": "ASSET_SPRITE_HUD_WRONG", + "folder": "hud", + "type": "Sprite", + "sha1": "39664dd8dff3e5f7c92df88ddb125a8fd659f236" + }, + { + "filename": "pro_am_logo", + "build-id": "ASSET_SPRITE_UNUSED_PROAMLOGO", + "folder": "unused", + "type": "Sprite", + "sha1": "09d34b4c32b9eb0767ba02ebbb641378ce14f960" + }, + { + "filename": "speedometer_arrow", + "build-id": "ASSET_SPRITE_HUD_SPEEDOMETERARROW", + "folder": "hud", + "type": "Sprite", + "sha1": "e2bed1fd8bba4694a0981d9860d28d30dc326634" + }, + { + "filename": "first_place_one", + "build-id": "ASSET_SPRITE_HUD_FIRSTPLACEONE", + "folder": "hud", + "type": "Sprite", + "sha1": "3ba47f6d095ff7dbf68493269d40a0d17f5daaf2" + }, + { + "filename": "first_place_st", + "build-id": "ASSET_SPRITE_HUD_FIRSTPLACEST", + "folder": "hud", + "type": "Sprite", + "sha1": "1668c3c54968eb3e8a05952d8569a6b6c72c2242" + }, + { + "filename": "balloon_string", + "build-id": "ASSET_SPRITE_OBJECTS_BALLOONSTRING", + "folder": "objects", + "type": "Sprite", + "sha1": "0bc3eb63510f342642e19095e3099f587fcdd33f" + }, + { + "filename": "fireball_unknown", + "build-id": "ASSET_SPRITE_UNKNOWN_FIREBALLUNKNOWN", + "folder": "unknown", + "type": "Sprite", + "sha1": "f88c4984e14f0dc9c612f009af75f6823724fdff" + }, + { + "filename": "fireball", + "build-id": "ASSET_SPRITE_OBJECTS_FIREBALL", + "folder": "objects", + "type": "Sprite", + "sha1": "30f8cd68c30174c5fb0db2c010f67ea820e9c0cf" + }, + { + "filename": "wizghost", + "build-id": "ASSET_SPRITE_OBJECTS_WIZGHOST", + "folder": "objects", + "type": "Sprite", + "sha1": "a0b2506caf9b9d97fbb914611324e4c13d0c8ab8" + }, + { + "filename": "unknown_light", + "build-id": "ASSET_SPRITE_UNKNOWN_UNKNOWNLIGHT", + "folder": "unknown", + "type": "Sprite", + "sha1": "d98362b906bccf53503b5ca5d008842d7b5bd580" + }, + { + "filename": "small_star", + "build-id": "ASSET_SPRITE_UNKNOWN_SMALLSTAR", + "folder": "unknown", + "type": "Sprite", + "sha1": "87ad5d99effaef88c0ffae16af4e664e48db23a9" + }, + { + "filename": "buoy", + "build-id": "ASSET_SPRITE_OBJECTS_BUOY", + "folder": "objects", + "type": "Sprite", + "sha1": "ae5685723d23577bb133a13f15df9b37b971ae41" + }, + { + "filename": "smartie_tree", + "build-id": "ASSET_SPRITE_OBJECTS_SMARTIETREE", + "folder": "objects", + "type": "Sprite", + "sha1": "364d62ace93cac8308536d41c183f806f814f711" + }, + { + "filename": "beach_tree", + "build-id": "ASSET_SPRITE_OBJECTS_BEACHTREE", + "folder": "objects", + "type": "Sprite", + "sha1": "158bb55d9c876e9dcfb4553027ae53ad68de3909" + }, + { + "filename": "blue_berry_bush", + "build-id": "ASSET_SPRITE_OBJECTS_BLUEBERRYBUSH", + "folder": "objects", + "type": "Sprite", + "sha1": "ea37ed7e0f88603c14097444884c1ea307f632bb" + }, + { + "filename": "rubber_snow_tree", + "build-id": "ASSET_SPRITE_OBJECTS_RUBBERSNOWTREE", + "folder": "objects", + "type": "Sprite", + "sha1": "4f82a14a46b6f86bcb19d81e2f93b84be8d25773" + }, + { + "filename": "skinny_snow_tree", + "build-id": "ASSET_SPRITE_OBJECTS_SKINNYSNOWTREE", + "folder": "objects", + "type": "Sprite", + "sha1": "173370b0dec8b92164a24706a0af83deb0de8cc1" + }, + { + "filename": "xmas_tree", + "build-id": "ASSET_SPRITE_OBJECTS_XMASTREE", + "folder": "objects", + "type": "Sprite", + "sha1": "698a3657d6a4329ab7275890303260f4eb05e4cf" + }, + { + "filename": "alpine_snow_tree", + "build-id": "ASSET_SPRITE_OBJECTS_ALPINESNOWTREE", + "folder": "objects", + "type": "Sprite", + "sha1": "429738c7106cd2be13dd3304beff5831b19cabdb" + }, + { + "filename": "rubber_tree", + "build-id": "ASSET_SPRITE_OBJECTS_RUBBERTREE", + "folder": "objects", + "type": "Sprite", + "sha1": "41fe214ef5c898424ae868e054b4a74c06603ae9" + }, + { + "filename": "palm_tree_top", + "build-id": "ASSET_SPRITE_OBJECTS_PALMTREETOP", + "folder": "objects", + "type": "Sprite", + "sha1": "d8b37ffedcbe85a17692aeb37b3c8e38017cfcd4" + }, + { + "filename": "palm_plant", + "build-id": "ASSET_SPRITE_OBJECTS_PALMPLANT", + "folder": "objects", + "type": "Sprite", + "sha1": "711fd5b4b41bb0258d8229717f28f63cc32b2a05" + }, + { + "filename": "palm_tree_top_chea", + "build-id": "ASSET_SPRITE_OBJECTS_PALMTREETOPCHEA", + "folder": "objects", + "type": "Sprite", + "sha1": "1a51f68ee5b27d2e07f704577cce9d9f3258a0dc" + }, + { + "filename": "fir_tree", + "build-id": "ASSET_SPRITE_OBJECTS_FIRTREE", + "folder": "objects", + "type": "Sprite", + "sha1": "c07936fa6450ad8e074e23ce84c9dc698655abb5" + }, + { + "filename": "space_tree", + "build-id": "ASSET_SPRITE_OBJECTS_SPACETREE", + "folder": "objects", + "type": "Sprite", + "sha1": "7a8e3662606ab30fef7dcaa26332d54a3efa3b7d" + }, + { + "filename": "lamp_post", + "build-id": "ASSET_SPRITE_OBJECTS_LAMPPOST", + "folder": "objects", + "type": "Sprite", + "sha1": "ce6097eaab3d5dc76027793b33fcfc374f431814" + }, + { + "filename": "white_buttercup", + "build-id": "ASSET_SPRITE_FLOWERS_WHITEBUTTERCUP", + "folder": "flowers", + "type": "Sprite", + "sha1": "459f6d50735598bfd248ee3f934a8304d123c5b0" + }, + { + "filename": "yellow_bellflower", + "build-id": "ASSET_SPRITE_FLOWERS_YELLOWBELLFLOWER", + "folder": "flowers", + "type": "Sprite", + "sha1": "362af4637c9eee3fbe51fd16b49041a89045c61e" + }, + { + "filename": "yellow_buttercup", + "build-id": "ASSET_SPRITE_FLOWERS_YELLOWBUTTERCUP", + "folder": "flowers", + "type": "Sprite", + "sha1": "130d315c95512b6c4ca041e6a6cc67bffc383b76" + }, + { + "filename": "blue_buttercup", + "build-id": "ASSET_SPRITE_FLOWERS_BLUEBUTTERCUP", + "folder": "flowers", + "type": "Sprite", + "sha1": "fcd4129fe2f22e7680f3f46d9b6ee34d77c76d7e" + }, + { + "filename": "water_lily", + "build-id": "ASSET_SPRITE_FLOWERS_WATERLILY", + "folder": "flowers", + "type": "Sprite", + "sha1": "fcb946891ff90f32e7a6c2e90a12943d80fec943" + }, + { + "filename": "reed_no_leaf", + "build-id": "ASSET_SPRITE_OBJECTS_REEDNOLEAF", + "folder": "objects", + "type": "Sprite", + "sha1": "0b7a585a31afacd5a7d19733f4e849b0d72db56c" + }, + { + "filename": "reed_leaves", + "build-id": "ASSET_SPRITE_OBJECTS_REEDLEAVES", + "folder": "objects", + "type": "Sprite", + "sha1": "d568ae84cf42725b429abb5be6d642bb875c4d07" + }, + { + "filename": "read_one_leaf", + "build-id": "ASSET_SPRITE_OBJECTS_READONELEAF", + "folder": "objects", + "type": "Sprite", + "sha1": "8238ce417df5c0ce8d322f8d500edf974eba7899" + }, + { + "filename": "snowman_tophat", + "build-id": "ASSET_SPRITE_OBJECTS_SNOWMANTOPHAT", + "folder": "objects", + "type": "Sprite", + "sha1": "9d3ba721e1f611a3b5b7f10363a263fd8796eccf" + }, + { + "filename": "bell", + "build-id": "ASSET_SPRITE_OBJECTS_BELL", + "folder": "objects", + "type": "Sprite", + "sha1": "0e647315aa38036c44ea764e69485a8fa15e3d8f" + }, + { + "filename": "snowman", + "build-id": "ASSET_SPRITE_OBJECTS_SNOWMAN", + "folder": "objects", + "type": "Sprite", + "sha1": "8c6b85d5f24b861155c43b5a61e49426dc54c196" + }, + { + "filename": "torch_with_eyes", + "build-id": "ASSET_SPRITE_UNUSED_TORCHWITHEYES", + "folder": "unused", + "type": "Sprite", + "sha1": "042b78119529e5d3fd821d4fc255078e11357771" + }, + { + "filename": "debug_orb_red", + "build-id": "ASSET_SPRITE_OBJECTS_DEBUGORBRED", + "folder": "objects", + "type": "Sprite", + "sha1": "f0287cecbfe44d1a8397e7c5fe30bb8f7a021193" + }, + { + "filename": "debug_orb_yellow", + "build-id": "ASSET_SPRITE_OBJECTS_DEBUGORBYELLOW", + "folder": "objects", + "type": "Sprite", + "sha1": "1e31e63a8fb1ccf0de4750397712c3c64809ad0d" + }, + { + "filename": "beta_ancient_lake_sign", + "build-id": "ASSET_SPRITE_UNUSED_BETAANCIENTLAKESIGN", + "folder": "unused", + "type": "Sprite", + "sha1": "f6a63a5bc9541e60a5ade2affcba34948d7cbfe7" + }, + { + "filename": "debug_fog_changer", + "build-id": "ASSET_SPRITE_OBJECTS_DEBUGFOGCHANGER", + "folder": "objects", + "type": "Sprite", + "sha1": "67251bb9d10e8ddb940c8b7089d5f7e8d2f54bff" + }, + { + "filename": "debug_anim_car", + "build-id": "ASSET_SPRITE_OBJECTS_DEBUGANIMCAR", + "folder": "objects", + "type": "Sprite", + "sha1": "011036d599b8f657fbd15a6c015dfefc5f5cb006" + }, + { + "filename": "debug_sky_control", + "build-id": "ASSET_SPRITE_OBJECTS_DEBUGSKYCONTROL", + "folder": "objects", + "type": "Sprite", + "sha1": "67bb278611ee0859de7b6c514ef70c0b401c7171" + }, + { + "filename": "debug_camera_control", + "build-id": "ASSET_SPRITE_OBJECTS_DEBUGCAMERACONTROL", + "folder": "objects", + "type": "Sprite", + "sha1": "b015503c33e9a7e580753af267841fdf84c45f4c" + }, + { + "filename": "debug_unknown_exit", + "build-id": "ASSET_SPRITE_UNUSED_DEBUGUNKNOWNEXIT", + "folder": "unused", + "type": "Sprite", + "sha1": "f6868083a541d3bb3ce3925748044ef43ab09f2a" + }, + { + "filename": "debug_unknown_traffic_light", + "build-id": "ASSET_SPRITE_UNUSED_DEBUGUNKNOWNTRAFFICLIGHT", + "folder": "unused", + "type": "Sprite", + "sha1": "51bb17a85666732c26ebd9dbdbc5d7f5dc994028" + }, + { + "filename": "debug_animator", + "build-id": "ASSET_SPRITE_OBJECTS_DEBUGANIMATOR", + "folder": "objects", + "type": "Sprite", + "sha1": "ce368e639ffa8b6e3fe1b946eba325ae83d8011a" + }, + { + "filename": "debug_audio", + "build-id": "ASSET_SPRITE_OBJECTS_DEBUGAUDIO", + "folder": "objects", + "type": "Sprite", + "sha1": "82c4179b91bb83b84740d3d2ddbfcee7a232341b" + }, + { + "filename": "debug_audio_line", + "build-id": "ASSET_SPRITE_OBJECTS_DEBUGAUDIOLINE", + "folder": "objects", + "type": "Sprite", + "sha1": "72e73b13b261a80a05abf6db15f3c32e95eeb59e" + }, + { + "filename": "debug_audio_seq_line", + "build-id": "ASSET_SPRITE_OBJECTS_DEBUGAUDIOSEQLINE", + "folder": "objects", + "type": "Sprite", + "sha1": "70a0619a13c5fcb851b92e01065de8adaa3f21d1" + }, + { + "filename": "debug_audio_seq", + "build-id": "ASSET_SPRITE_OBJECTS_DEBUGAUDIOSEQ", + "folder": "objects", + "type": "Sprite", + "sha1": "35b5a06c127e11dbbf91c3bbacd7c7bc2d34e791" + }, + { + "filename": "debug_audio_reverb", + "build-id": "ASSET_SPRITE_OBJECTS_DEBUGAUDIOREVERB", + "folder": "objects", + "type": "Sprite", + "sha1": "208856db313badc363fd70fcb89348563a0be423" + }, + { + "filename": "balloon_boost", + "build-id": "ASSET_SPRITE_OBJECTS_BALLOONBOOST", + "folder": "objects", + "type": "Sprite", + "sha1": "186afaca02b37885a5ec21e06c3d2a2a519909e5" + }, + { + "filename": "balloon_missle", + "build-id": "ASSET_SPRITE_OBJECTS_BALLOONMISSLE", + "folder": "objects", + "type": "Sprite", + "sha1": "b6a6faa741f551376cd1ebaa57104fbb9a183936" + }, + { + "filename": "balloon_trap", + "build-id": "ASSET_SPRITE_OBJECTS_BALLOONTRAP", + "folder": "objects", + "type": "Sprite", + "sha1": "5d9a78c03cc70ac34b48c6154cd72c49a963b240" + }, + { + "filename": "balloon_shield", + "build-id": "ASSET_SPRITE_OBJECTS_BALLOONSHIELD", + "folder": "objects", + "type": "Sprite", + "sha1": "ff4c56612399fa4d76fea222347c3d5d5f8fdf16" + }, + { + "filename": "balloon_magnet", + "build-id": "ASSET_SPRITE_OBJECTS_BALLOONMAGNET", + "folder": "objects", + "type": "Sprite", + "sha1": "fb0e30e09cb0d65d4fde91b9e199e11c8c49099e" + }, + { + "filename": "balloon_missle_gift", + "build-id": "ASSET_SPRITE_UNUSED_BALLOONMISSLEGIFT", + "folder": "unused", + "type": "Sprite", + "sha1": "73ed509e7b526454ad95bcf1af7c38f8deef23a2" + }, + { + "filename": "balloon_boost_gift", + "build-id": "ASSET_SPRITE_UNUSED_BALLOONBOOSTGIFT", + "folder": "unused", + "type": "Sprite", + "sha1": "6a373c55aec0fd3e2ec2ef823bda06097d46993e" + }, + { + "filename": "balloon_gold", + "build-id": "ASSET_SPRITE_OBJECTS_BALLOONGOLD", + "folder": "objects", + "type": "Sprite", + "sha1": "92846712b6bd17a2f3a61d6fd0b388b2d8b180c2" + }, + { + "filename": "balloon_silver", + "build-id": "ASSET_SPRITE_OBJECTS_BALLOONSILVER", + "folder": "objects", + "type": "Sprite", + "sha1": "20680caa3d74fcb9a3aab59f3e71dfcd186e2aab" + }, + { + "filename": "banana", + "build-id": "ASSET_SPRITE_OBJECTS_BANANA", + "folder": "objects", + "type": "Sprite", + "sha1": "971031628887ba5e5e9c7787a789cb954292184d" + }, + { + "filename": "silver_coin", + "build-id": "ASSET_SPRITE_OBJECTS_SILVERCOIN", + "folder": "objects", + "type": "Sprite", + "sha1": "b7b548474f597c2a36c984753fb2dd5ad79fcb66" + }, + { + "filename": "checkpoint_flag", + "build-id": "ASSET_SPRITE_OBJECTS_CHECKPOINTFLAG", + "folder": "objects", + "type": "Sprite", + "sha1": "c1f5f717a0f0c3075ead8020629817078c38308f" + }, + { + "filename": "rareware_coin", + "build-id": "ASSET_SPRITE_UNUSED_RAREWARECOIN", + "folder": "unused", + "type": "Sprite", + "sha1": "1650cf35234aec867bc93f17d654fd22a8b37626" + }, + { + "filename": "silver_coin_vertical", + "build-id": "ASSET_SPRITE_UNUSED_SILVERCOINVERTICAL", + "folder": "unused", + "type": "Sprite", + "sha1": "af040ca543410fa4795e640499cf22b630ffa1b8" + }, + { + "filename": "banana_icon", + "build-id": "ASSET_SPRITE_HUD_BANANAICON", + "folder": "hud", + "type": "Sprite", + "sha1": "6b3ceb0510b806c014d766d3feabe1f241f900c6" + }, + { + "filename": "sparkle", + "build-id": "ASSET_SPRITE_PARTICLES_SPARKLE", + "folder": "particles", + "type": "Sprite", + "sha1": "08d5d3963c139491e0e0974a90780731e106639b" + }, + { + "filename": "debug_egg_creator", + "build-id": "ASSET_SPRITE_OBJECTS_DEBUGEGGCREATOR", + "folder": "objects", + "type": "Sprite", + "sha1": "2056c3aecb4a6fa6db99bd9d2bb2c739352aa79a" + }, + { + "filename": "bonus_gem", + "build-id": "ASSET_SPRITE_UNUSED_BONUSGEM", + "folder": "unused", + "type": "Sprite", + "sha1": "bed81d381cebc912a2c3c9008e87d9ecedb57661" + }, + { + "filename": "indicator_icon_caution", + "build-id": "ASSET_SPRITE_HUD_INDICATORICONCAUTION", + "folder": "hud", + "type": "Sprite", + "sha1": "000426f0ccf44351603ab846915a7d0fa1ccc240" + }, + { + "filename": "indicator_icon_down", + "build-id": "ASSET_SPRITE_HUD_INDICATORICONDOWN", + "folder": "hud", + "type": "Sprite", + "sha1": "51339b1e35fddabdd02a44cbc5403bd8d66a2d98" + }, + { + "filename": "indicator_icon_uturn", + "build-id": "ASSET_SPRITE_HUD_INDICATORICONUTURN", + "folder": "hud", + "type": "Sprite", + "sha1": "c604066687d1cdc02e2abc3a24f30a29a996e94b" + }, + { + "filename": "indicator_icon_turn", + "build-id": "ASSET_SPRITE_HUD_INDICATORICONTURN", + "folder": "hud", + "type": "Sprite", + "sha1": "dfa710e84f592a4a0e0416d6d7c6b0c324ce8686" + }, + { + "filename": "indicator_icon_slight_turn", + "build-id": "ASSET_SPRITE_HUD_INDICATORICONSLIGHTTURN", + "folder": "hud", + "type": "Sprite", + "sha1": "d8265d145ede7c830a17aad03d1519233a56abca" + }, + { + "filename": "smoke_object", + "build-id": "ASSET_SPRITE_OBJECTS_SMOKEOBJECT", + "folder": "objects", + "type": "Sprite", + "sha1": "44dd5b884216167e87aacd02ef3bb1605139f3ee" + }, + { + "filename": "smoke_cloud", + "build-id": "ASSET_SPRITE_OBJECTS_SMOKECLOUD", + "folder": "objects", + "type": "Sprite", + "sha1": "a8c77d01f69737e70c2ba7b1fbc86b07cbddc562" + }, + { + "filename": "smoke_grass", + "build-id": "ASSET_SPRITE_OBJECTS_SMOKEGRASS", + "folder": "objects", + "type": "Sprite", + "sha1": "2d12a7eed864dc2c6ace5cb55ac9470a4a903dc1" + }, + { + "filename": "mist", + "build-id": "ASSET_SPRITE_OBJECTS_MIST", + "folder": "objects", + "type": "Sprite", + "sha1": "7e99d0758732206c7c4d75ed5aff657de7e783e5" + }, + { + "filename": "flaming_torch", + "build-id": "ASSET_SPRITE_OBJECTS_FLAMINGTORCH", + "folder": "objects", + "type": "Sprite", + "sha1": "e0b36c9542b74b044e6d8f6fefd93345e5378420" + }, + { + "filename": "splash", + "build-id": "ASSET_SPRITE_UNUSED_SPLASH", + "folder": "unused", + "type": "Sprite", + "sha1": "f0ea8ff72dd0057d1bf245b2b617b1f5080301b7" + }, + { + "filename": "weapon_balloon_pop", + "build-id": "ASSET_SPRITE_UNUSED_WEAPONBALLOONPOP", + "folder": "unused", + "type": "Sprite", + "sha1": "87b1281ca906c2bb0881804c68ac0ec109eb9461" + }, + { + "filename": "lava_spurt", + "build-id": "ASSET_SPRITE_OBJECTS_LAVASPURT", + "folder": "objects", + "type": "Sprite", + "sha1": "a249a8ae6ff2f1c46f2a4894c93c4f1205c54add" + }, + { + "filename": "unknown_small_pop", + "build-id": "ASSET_SPRITE_UNKNOWN_UNKNOWNSMALLPOP", + "folder": "unknown", + "type": "Sprite", + "sha1": "423bf7e4b66e5ecc3d6e6223858bc27af00b6d4f" + }, + { + "filename": "tyre0", + "build-id": "ASSET_SPRITE_VEHICLE_PARTS_TYRE0", + "folder": "vehicle_parts", + "type": "Sprite", + "sha1": "5a05e3dbdd7763b831a9f1127e7e6247d8be23cc" + }, + { + "filename": "tyre1", + "build-id": "ASSET_SPRITE_VEHICLE_PARTS_TYRE1", + "folder": "vehicle_parts", + "type": "Sprite", + "sha1": "fee4f1257f062b71947e671e622fcb8028704acb" + }, + { + "filename": "tyre2", + "build-id": "ASSET_SPRITE_VEHICLE_PARTS_TYRE2", + "folder": "vehicle_parts", + "type": "Sprite", + "sha1": "41663ccd35bfed341af12d0ea25cef9ab1f9450e" + }, + { + "filename": "tyre3", + "build-id": "ASSET_SPRITE_VEHICLE_PARTS_TYRE3", + "folder": "vehicle_parts", + "type": "Sprite", + "sha1": "8ebb7d37cd6b4a4b2c937420507db19803e3cc6a" + }, + { + "filename": "fan0", + "build-id": "ASSET_SPRITE_VEHICLE_PARTS_FAN0", + "folder": "vehicle_parts", + "type": "Sprite", + "sha1": "6af9e79f06115c6767925d379cd3318956006653" + }, + { + "filename": "fan1", + "build-id": "ASSET_SPRITE_VEHICLE_PARTS_FAN1", + "folder": "vehicle_parts", + "type": "Sprite", + "sha1": "a147bf883ddd958366d477f78ad8c7c00e15f2b8" + }, + { + "filename": "propeller0", + "build-id": "ASSET_SPRITE_VEHICLE_PARTS_PROPELLER0", + "folder": "vehicle_parts", + "type": "Sprite", + "sha1": "24f4f7b44572c89681a016ecf21e30ca3c251718" + }, + { + "filename": "propeller1", + "build-id": "ASSET_SPRITE_VEHICLE_PARTS_PROPELLER1", + "folder": "vehicle_parts", + "type": "Sprite", + "sha1": "6d48fef7b751131204fbded2dd67caef99f2330f" + }, + { + "filename": "rare_letters", + "build-id": "ASSET_SPRITE_UNUSED_RARELETTERS", + "folder": "unused", + "type": "Sprite", + "sha1": "23e403a6e49e94ecb3008e2278a934ef689263f7" + }, + { + "filename": "bolt_glow", + "build-id": "ASSET_SPRITE_OBJECTS_BOLTGLOW", + "folder": "objects", + "type": "Sprite", + "sha1": "399277cee984f1d11194344239dfaaca57fad4ac" + }, + { + "filename": "icon_trophy", + "build-id": "ASSET_SPRITE_MENU_ICONTROPHY", + "folder": "menu", + "type": "Sprite", + "sha1": "b69dda8173b40861638e24bbe8e81027f5f6c636" + }, + { + "filename": "icon_key", + "build-id": "ASSET_SPRITE_MENU_ICONKEY", + "folder": "menu", + "type": "Sprite", + "sha1": "d7ea2f26bdc06098dcaeba54c76b6b57639ca370" + }, + { + "filename": "icon_wizpig_amulet", + "build-id": "ASSET_SPRITE_MENU_ICONWIZPIGAMULET", + "folder": "menu", + "type": "Sprite", + "sha1": "af66733ba15943890e70fc88223befdc3fd7d6b9" + }, + { + "filename": "icon_tt_amulet", + "build-id": "ASSET_SPRITE_MENU_ICONTTAMULET", + "folder": "menu", + "type": "Sprite", + "sha1": "2d1674b909c396331b55c78a96359818ae4c37aa" + }, + { + "build-id": "ASSET_MISC_0", + "filename": "asset_misc_0", + "folder": "unlabeled", + "sha1": "41de678e005e1eb8444a0ffd1d9985467e505796", + "type": "Miscellaneous" + }, + { + "build-id": "ASSET_MISC_1", + "filename": "asset_misc_1", + "folder": "unlabeled", + "sha1": "654c491a86e1354446d775d10edc8a6ab32bdd42", + "type": "Miscellaneous" + }, + { + "build-id": "ASSET_MISC_2", + "filename": "asset_misc_2", + "folder": "unlabeled", + "sha1": "1bf1825ca4c6fdd117a63a8a6c9535ca80fa1f36", + "type": "Miscellaneous" + }, + { + "build-id": "ASSET_MISC_3", + "filename": "asset_misc_3", + "folder": "unlabeled", + "sha1": "65d756130c4314484251601049ccabd3ebaaf79d", + "type": "Miscellaneous" + }, + { + "build-id": "ASSET_MISC_4", + "filename": "asset_misc_4", + "folder": "unlabeled", + "sha1": "b95b717931a3cb083b3f774f352c931ef715dbc4", + "type": "Miscellaneous" + }, + { + "build-id": "ASSET_MISC_5", + "filename": "asset_misc_5", + "folder": "unlabeled", + "sha1": "fe457b53fd04ef09b3f0fcb5882c96efa9cde500", + "type": "Miscellaneous" + }, + { + "build-id": "ASSET_MISC_6", + "filename": "asset_misc_6", + "folder": "unlabeled", + "sha1": "08ea31ec175b5a1cb0fc0744bea08e2a9427c80d", + "type": "Miscellaneous" + }, + { + "filename": "asset_misc_7", + "build-id": "ASSET_MISC_7", + "folder": "unlabeled", + "type": "Miscellaneous", + "sha1": "fe457b53fd04ef09b3f0fcb5882c96efa9cde500" + }, + { + "build-id": "ASSET_MISC_8", + "filename": "asset_misc_8", + "folder": "unlabeled", + "sha1": "b222c755331a5368e20953270aaec856742825ca", + "type": "Miscellaneous" + }, + { + "filename": "racer_weight_data", + "build-id": "ASSET_MISC_RACER_WEIGHT", + "misc-type": "RacerStat", + "folder": "racer_stats", + "type": "Miscellaneous", + "sha1": "cd7675cbb4d678686cc7a6dd2c7dcf75034fbe7f" + }, + { + "filename": "racer_handling_data", + "build-id": "ASSET_MISC_RACER_HANDLING", + "misc-type": "RacerStat", + "folder": "racer_stats", + "type": "Miscellaneous", + "sha1": "0bd70b3abee14c180be4b21c120b506f09e839dc" + }, + { + "filename": "racer_unused_11_data", + "build-id": "ASSET_MISC_RACER_UNUSED_11", + "misc-type": "RacerStat", + "folder": "racer_stats", + "type": "Miscellaneous", + "sha1": "78eaa4f4b93e66cf02afe0b801bad629af3f86e9" + }, + { + "filename": "balloon_data", + "build-id": "ASSET_MISC_BALLOON_DATA", + "type": "Miscellaneous", + "sha1": "fdec8b608e3335a78faf179893509abec403d002" + }, + { + "build-id": "ASSET_MISC_13", + "filename": "asset_misc_13", + "folder": "unlabeled", + "sha1": "3f46a96c85545cf697698f6168777c1f0016c694", + "type": "Miscellaneous" + }, + { + "build-id": "ASSET_MISC_14", + "filename": "asset_misc_14", + "folder": "unlabeled", + "sha1": "bb6a856d8763eca9f4c63cb55f5a2d1e55ab3423", + "type": "Miscellaneous" + }, + { + "build-id": "ASSET_MISC_15", + "filename": "asset_misc_15", + "folder": "unlabeled", + "sha1": "f0d164ea765631023ba9c67a46ba2dddaa616c8d", + "type": "Miscellaneous" + }, + { + "build-id": "ASSET_MISC_16", + "filename": "asset_misc_16", + "folder": "unlabeled", + "sha1": "17db5a811f62961daae8f3b57f27cbcb71dacb34", + "type": "Miscellaneous" + }, + { + "build-id": "ASSET_MISC_17", + "filename": "asset_misc_17", + "folder": "unlabeled", + "sha1": "9c167bf74cdc211b013a3dae97a9b72360f2017e", + "type": "Miscellaneous" + }, + { + "build-id": "ASSET_MISC_18", + "filename": "asset_misc_18", + "folder": "unlabeled", + "sha1": "628f6eb2b233d463cc969aa845973e3f100ba0d4", + "type": "Miscellaneous" + }, + { + "filename": "rumble_data", + "build-id": "ASSET_MISC_RUMBLE_DATA", + "type": "Miscellaneous", + "sha1": "1977ff411abbd16498c878c5648ea0663d58f06d" + }, + { + "build-id": "ASSET_MISC_20", + "filename": "asset_misc_20", + "folder": "unlabeled", + "sha1": "5a545d0e89dd0da2282b52b1182c4c06af07a89c", + "type": "Miscellaneous" + }, + { + "filename": "shield_data", + "build-id": "ASSET_MISC_SHIELD_DATA", + "type": "Miscellaneous", + "sha1": "63c5439135458058126ba7a43b29505067a70d52" + }, + { + "filename": "magnet_data", + "build-id": "ASSET_MISC_MAGNET_DATA", + "type": "Miscellaneous", + "sha1": "cc98afa6bc776a7be7fa24965ab1d02b95ebcd52" + }, + { + "build-id": "ASSET_MISC_23", + "filename": "asset_misc_23", + "folder": "unlabeled", + "sha1": "a191ac7e415c0b42846ddf261e4293ccda4e2506", + "type": "Miscellaneous" + }, + { + "filename": "ghost_unlock_times", + "build-id": "ASSET_MISC_GHOST_UNLOCK_TIMES", + "type": "Miscellaneous", + "sha1": "daacacfb1c5eb0ddb65f3d941f83465d51492617" + }, + { + "filename": "cinematic_race", + "build-id": "ASSET_MISC_CINEMATIC_RACE", + "type": "Miscellaneous", + "sha1": "306d4983e98c52304a54160a717c28504f6ad110" + }, + { + "filename": "tracks_menu_ids", + "build-id": "ASSET_MISC_TRACKS_MENU_IDS", + "misc-type": "TrackIds", + "folder": "track_ids", + "type": "Miscellaneous", + "sha1": "3ed522d52eb825134030ea43c3adee40d0f127cf" + }, + { + "filename": "hub_area_ids", + "build-id": "ASSET_MISC_HUB_AREA_IDS", + "misc-type": "TrackIds", + "folder": "track_ids", + "type": "Miscellaneous", + "sha1": "094892462458c70116ef1612afb173113981c5ad" + }, + { + "filename": "main_tracks_ids", + "build-id": "ASSET_MISC_MAIN_TRACKS_IDS", + "misc-type": "TrackIds", + "folder": "track_ids", + "type": "Miscellaneous", + "sha1": "86f2d2e13116dbf0dc32c5c2393e7e3fbfed50b3" + }, + { + "filename": "battle_tracks_ids", + "build-id": "ASSET_MISC_BATTLE_TRACKS_IDS", + "misc-type": "TrackIds", + "folder": "track_ids", + "type": "Miscellaneous", + "sha1": "cc1061ccf10f8a160252ffcfee05551f728e205a" + }, + { + "filename": "boss_tracks_ids", + "build-id": "ASSET_MISC_BOSS_TRACKS_IDS", + "misc-type": "TrackIds", + "folder": "track_ids", + "type": "Miscellaneous", + "sha1": "e86694ad461106f1796e443da3d808f75328283f" + }, + { + "filename": "cinematic_trophy", + "build-id": "ASSET_MISC_CINEMATIC_TROPHY", + "type": "Miscellaneous", + "sha1": "ff1aee4bbf11fe03e9112bff5ca39e37dc16c225" + }, + { + "build-id": "ASSET_MISC_32", + "filename": "asset_misc_32", + "folder": "unlabeled", + "sha1": "5a07c60051c354b733d7dde1c0b7d2ddb3d67127", + "type": "Miscellaneous" + }, + { + "filename": "RacerAcceleration_Unknown0", + "build-id": "ASSET_MISC_RACERACCELERATION_UNKNOWN0", + "misc-type": "RacerAcceleration", + "folder": "racer_stats", + "type": "Miscellaneous", + "sha1": "ca250e9d7c6cf4c60123d28721f014548292d054" + }, + { + "filename": "RacerAcceleration_Diddy", + "build-id": "ASSET_MISC_RACERACCELERATION_DIDDY", + "misc-type": "RacerAcceleration", + "folder": "racer_stats", + "type": "Miscellaneous", + "sha1": "da29ea8fec89c47b2a1a6dc07342f5ebc48a7f73" + }, + { + "filename": "RacerAcceleration_TT", + "build-id": "ASSET_MISC_RACERACCELERATION_TT", + "misc-type": "RacerAcceleration", + "folder": "racer_stats", + "type": "Miscellaneous", + "sha1": "440cac571da9e960b39c2c6c9a5c1eca5563dce9" + }, + { + "filename": "RacerAcceleration_Unknown1", + "build-id": "ASSET_MISC_RACERACCELERATION_UNKNOWN1", + "misc-type": "RacerAcceleration", + "folder": "racer_stats", + "type": "Miscellaneous", + "sha1": "9ddd07b81722e1199db06eb56497758212747c37" + }, + { + "filename": "RacerAcceleration_Krunch", + "build-id": "ASSET_MISC_RACERACCELERATION_KRUNCH", + "misc-type": "RacerAcceleration", + "folder": "racer_stats", + "type": "Miscellaneous", + "sha1": "83cdfd5b5434491fb02c394b85b8ccff104e56d1" + }, + { + "filename": "RacerAcceleration_Bumper", + "build-id": "ASSET_MISC_RACERACCELERATION_BUMPER", + "misc-type": "RacerAcceleration", + "folder": "racer_stats", + "type": "Miscellaneous", + "sha1": "711383c83cfa48d5810ac7256795cb29250e76c2" + }, + { + "filename": "RacerAcceleration_Tiptup", + "build-id": "ASSET_MISC_RACERACCELERATION_TIPTUP", + "misc-type": "RacerAcceleration", + "folder": "racer_stats", + "type": "Miscellaneous", + "sha1": "59d0837b3de823e409bf0a335c1166b1d78a7e68" + }, + { + "filename": "RacerAcceleration_Conker", + "build-id": "ASSET_MISC_RACERACCELERATION_CONKER", + "folder": "racer_stats", + "type": "Miscellaneous", + "sha1": "711383c83cfa48d5810ac7256795cb29250e76c2" + }, + { + "filename": "RacerAcceleration_Timber", + "build-id": "ASSET_MISC_RACERACCELERATION_TIMBER", + "misc-type": "RacerAcceleration", + "folder": "racer_stats", + "type": "Miscellaneous", + "sha1": "4e5fca24dfef2d539164951572e0957248dac36d" + }, + { + "filename": "RacerAcceleration_Banjo", + "build-id": "ASSET_MISC_RACERACCELERATION_BANJO", + "misc-type": "RacerAcceleration", + "folder": "racer_stats", + "type": "Miscellaneous", + "sha1": "938f9cf10cf702832c85d070f21bd82b3b9f8a0b" + }, + { + "filename": "RacerAcceleration_Drumstick", + "build-id": "ASSET_MISC_RACERACCELERATION_DRUMSTICK", + "misc-type": "RacerAcceleration", + "folder": "racer_stats", + "type": "Miscellaneous", + "sha1": "0d9047d2564d3c5d90423ebb6e42e77a90848637" + }, + { + "filename": "RacerAcceleration_Pipsy", + "build-id": "ASSET_MISC_RACERACCELERATION_PIPSY", + "misc-type": "RacerAcceleration", + "folder": "racer_stats", + "type": "Miscellaneous", + "sha1": "47b0711e8d86cc9e65ef26a3c99c8b925d93a572" + }, + { + "filename": "RacerAcceleration_Unknown2", + "build-id": "ASSET_MISC_RACERACCELERATION_UNKNOWN2", + "misc-type": "RacerAcceleration", + "folder": "racer_stats", + "type": "Miscellaneous", + "sha1": "18389f1bdd31972a34f8e49ff7d8fa7c3b56c196" + }, + { + "build-id": "ASSET_MISC_46", + "filename": "asset_misc_46", + "folder": "unlabeled", + "sha1": "50fad2a8bad21c597e961dc7345629ebba740271", + "type": "Miscellaneous" + }, + { + "build-id": "ASSET_MISC_47", + "filename": "asset_misc_47", + "folder": "unlabeled", + "sha1": "0e709930ac33cd1f0c730b96e5702fced4e37cc4", + "type": "Miscellaneous" + }, + { + "build-id": "ASSET_MISC_48", + "filename": "asset_misc_48", + "folder": "unlabeled", + "sha1": "267821f6831b34f29da1c458c24915b4956b9a06", + "type": "Miscellaneous" + }, + { + "build-id": "ASSET_MISC_49", + "filename": "asset_misc_49", + "folder": "unlabeled", + "sha1": "89f3a1ebd2d52bf513877aa675dfc8e2bace1f9f", + "type": "Miscellaneous" + }, + { + "build-id": "ASSET_MISC_50", + "filename": "asset_misc_50", + "folder": "unlabeled", + "sha1": "7217b3f04a936fd71602d5e3a33eeb7d6313738a", + "type": "Miscellaneous" + }, + { + "build-id": "ASSET_MISC_51", + "filename": "asset_misc_51", + "folder": "unlabeled", + "sha1": "954fe133eb3a22b61b19610e90e3c4db1d047b96", + "type": "Miscellaneous" + }, + { + "build-id": "ASSET_MISC_52", + "filename": "asset_misc_52", + "folder": "unlabeled", + "sha1": "72d7eb5f1ddba68d99446de5db2b443c69dbcc0a", + "type": "Miscellaneous" + }, + { + "build-id": "ASSET_MISC_53", + "filename": "asset_misc_53", + "folder": "unlabeled", + "sha1": "27a5b34ff2b8fab25be76544b52bbb3ab70c5f31", + "type": "Miscellaneous" + }, + { + "build-id": "ASSET_MISC_54", + "filename": "asset_misc_54", + "folder": "unlabeled", + "sha1": "740fccf2ce0f82b2c6287d96ace346d02ee90ee8", + "type": "Miscellaneous" + }, + { + "build-id": "ASSET_MISC_55", + "filename": "asset_misc_55", + "folder": "unlabeled", + "sha1": "67756532796fcddf9864c221cba262234e820567", + "type": "Miscellaneous" + }, + { + "filename": "racer_hitbox_size", + "build-id": "ASSET_MISC_RACER_HITBOX_SIZE", + "type": "Miscellaneous", + "sha1": "4eb5cd59b37dc9a5120611afb52683aecaeec547" + }, + { + "build-id": "ASSET_MISC_57", + "filename": "asset_misc_57", + "folder": "unlabeled", + "sha1": "d914351decc8ca55079756299c18b0b8ae909749", + "type": "Miscellaneous" + }, + { + "build-id": "ASSET_MISC_58", + "filename": "asset_misc_58", + "folder": "unlabeled", + "sha1": "bc2d64d650a901f137a4bf7e5bfcd39b680860c8", + "type": "Miscellaneous" + }, + { + "build-id": "ASSET_MISC_59", + "filename": "asset_misc_59", + "folder": "unlabeled", + "sha1": "b6b0f4aafa94940ac5520ec135ddfb03df9e1cfb", + "type": "Miscellaneous" + }, + { + "build-id": "ASSET_MISC_60", + "filename": "asset_misc_60", + "folder": "unlabeled", + "sha1": "8e036d6094f52cf38489998a5faee8c8b961d95c", + "type": "Miscellaneous" + }, + { + "build-id": "ASSET_MISC_61", + "filename": "asset_misc_61", + "folder": "unlabeled", + "sha1": "4342b3615a4a78aeade42ac910e7a72812a16df3", + "type": "Miscellaneous" + }, + { + "build-id": "ASSET_MISC_62", + "filename": "asset_misc_62", + "folder": "unlabeled", + "sha1": "cd68d31f75fea059ad1764a0af9198d3d370ea99", + "type": "Miscellaneous" + }, + { + "build-id": "ASSET_MISC_63", + "filename": "asset_misc_63", + "folder": "unlabeled", + "sha1": "cd4924e234e6b411a940fc95d94e0867d9053614", + "type": "Miscellaneous" + }, + { + "build-id": "ASSET_MISC_64", + "filename": "asset_misc_64", + "folder": "unlabeled", + "sha1": "b6b3e0b9ec5377dffdd6160f9b2728ef301bc514", + "type": "Miscellaneous" + }, + { + "filename": "magic_codes", + "build-id": "ASSET_MISC_MAGIC_CODES", + "misc-type": "MagicCodes", + "folder": "cheats", + "type": "Miscellaneous", + "sha1": "6684b1c445a779302dc5f5953ef4247900267f82" + }, + { + "filename": "title_screen_demo_ids", + "build-id": "ASSET_MISC_TITLE_SCREEN_DEMO_IDS", + "misc-type": "TitleScreenDemos", + "folder": "title_screen", + "type": "Miscellaneous", + "sha1": "27aedd3e681c06738ec911dfc4ae996d9c86aaf9" + }, + { + "build-id": "ASSET_MISC_67", + "filename": "asset_misc_67", + "folder": "unlabeled", + "sha1": "9de7506be88db0c056457368de24778bd89fa97a", + "type": "Miscellaneous" + }, + { + "build-id": "ASSET_MISC_68", + "filename": "asset_misc_68", + "folder": "unlabeled", + "sha1": "82e992d19427a0ea6d54ed49ce8dd2e01a64acb8", + "type": "Miscellaneous" + }, + { + "build-id": "ASSET_MISC_69", + "filename": "asset_misc_69", + "folder": "unlabeled", + "sha1": "0be144a718275ce2e97f6f175d1be3dfe939bf54", + "type": "Miscellaneous" + }, + { + "filename": "hud_element_ids", + "build-id": "ASSET_HUD_ELEMENT_IDS", + "type": "Binary", + "sha1": "a6cb1705c7e66d4ef55302fcc2d869e5547be9b5" + }, + { + "filename": "menu_element_ids", + "build-id": "ASSET_MENU_ELEMENT_IDS", + "type": "Binary", + "sha1": "b4327cd69654ff6cd13e1bf8fcee679e3aa1a190" + }, + { + "filename": "weather_particles", + "build-id": "ASSET_WEATHER_PARTICLES", + "type": "Binary", + "sha1": "564e011e587692c51633f7e16031b0995bed4917" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_0", + "filename": "asset_level_object_maps_0", + "folder": "unknown", + "sha1": "b99d62f2b4f14e28ec785ddb82549b100f166e2b", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_1", + "filename": "asset_level_object_maps_1", + "folder": "unknown", + "sha1": "922ae1d748f9fa5c4381e81db95a31a15943b6a5", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_2", + "filename": "asset_level_object_maps_2", + "folder": "unknown", + "sha1": "8277b4f27fe72656ce0406a4b2b177442d1437ac", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_3", + "filename": "asset_level_object_maps_3", + "folder": "unknown", + "sha1": "cd7c141f574eea67056a8c920b5b39c2c45e875f", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_4", + "filename": "asset_level_object_maps_4", + "folder": "unknown", + "sha1": "07d88e6c9b360a5ed1680c8697040013d561cf65", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_5", + "filename": "asset_level_object_maps_5", + "folder": "unknown", + "sha1": "76f52a203305572eedf1fd55ccb94c56eb203d31", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_6", + "filename": "asset_level_object_maps_6", + "folder": "unknown", + "sha1": "e96ac79d6230b629932e89268f757f24d4339dce", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_7", + "filename": "asset_level_object_maps_7", + "folder": "unknown", + "sha1": "a6aab77876a1de2d226db54f64ac8a076dfe2a94", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_8", + "filename": "asset_level_object_maps_8", + "folder": "unknown", + "sha1": "d1ed51558257af970467cccebe69e2beca040022", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_9", + "filename": "asset_level_object_maps_9", + "folder": "unknown", + "sha1": "32e5e0b57e1f52a340468b489d08ecfc8128f4bd", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_10", + "filename": "asset_level_object_maps_10", + "folder": "unknown", + "sha1": "257bcfc3231cda1b3201053bfb566251e1b584cd", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_11", + "filename": "asset_level_object_maps_11", + "folder": "unknown", + "sha1": "7b1b01b2b3e19a601864489c08451be564e1ef4e", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_12", + "filename": "asset_level_object_maps_12", + "folder": "unknown", + "sha1": "522750cdddbcd07af3653e59d80d32802ac91fd8", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_13", + "filename": "asset_level_object_maps_13", + "folder": "unknown", + "sha1": "11c5a8dd4a64e9f17dd8bc0bc43806e4b91d713e", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_14", + "filename": "asset_level_object_maps_14", + "folder": "unknown", + "sha1": "e2ead0469d1af3492c2e31724e6090f7524a51ef", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_15", + "filename": "asset_level_object_maps_15", + "folder": "unknown", + "sha1": "1489bd43f622a2e728273d35af2ba79cd2879f09", + "type": "LevelObjectMap" + }, + { + "filename": "asset_level_object_maps_16", + "build-id": "ASSET_LEVEL_OBJECT_MAPS_16", + "folder": "unknown", + "type": "LevelObjectMap", + "sha1": "257bcfc3231cda1b3201053bfb566251e1b584cd" + }, + { + "filename": "asset_level_object_maps_17", + "build-id": "ASSET_LEVEL_OBJECT_MAPS_17", + "folder": "unknown", + "type": "LevelObjectMap", + "sha1": "257bcfc3231cda1b3201053bfb566251e1b584cd" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_18", + "filename": "asset_level_object_maps_18", + "folder": "unknown", + "sha1": "c6310050a59281103df8e75973be90550ff2b94e", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_19", + "filename": "asset_level_object_maps_19", + "folder": "unknown", + "sha1": "675719bc69dd0c681b125bdfc91b2f77318ae75c", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_20", + "filename": "asset_level_object_maps_20", + "folder": "unknown", + "sha1": "4d1144dbbc39a3e4887739e17aa76353b8a412e3", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_21", + "filename": "asset_level_object_maps_21", + "folder": "unknown", + "sha1": "ed7952dc7d85a3bbe51503099a72138bd9b2b34d", + "type": "LevelObjectMap" + }, + { + "filename": "asset_level_object_maps_22", + "build-id": "ASSET_LEVEL_OBJECT_MAPS_22", + "folder": "unknown", + "type": "LevelObjectMap", + "sha1": "257bcfc3231cda1b3201053bfb566251e1b584cd" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_23", + "filename": "asset_level_object_maps_23", + "folder": "unknown", + "sha1": "7a89c8317533c1130b5d2a3cfbee04c85ba4908c", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_24", + "filename": "asset_level_object_maps_24", + "folder": "unknown", + "sha1": "25ab90beaaef4ad32af30a8f7450f88bb9f2f6ec", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_25", + "filename": "asset_level_object_maps_25", + "folder": "unknown", + "sha1": "dc9a2197689552c6a5dcee32b33f08830b178c3d", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_26", + "filename": "asset_level_object_maps_26", + "folder": "unknown", + "sha1": "9760942ccbe7aeda32add3ea8bc5e2c95d4ea5f3", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_27", + "filename": "asset_level_object_maps_27", + "folder": "unknown", + "sha1": "3cba7a7b462b29634440122f4cd36a969c572ef3", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_28", + "filename": "asset_level_object_maps_28", + "folder": "unknown", + "sha1": "7726da5ac109b846c041ba2d4e6abfdd1b003394", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_29", + "filename": "asset_level_object_maps_29", + "folder": "unknown", + "sha1": "4aed83a52c447b8d51010414272a7ea8cc581ac7", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_30", + "filename": "asset_level_object_maps_30", + "folder": "unknown", + "sha1": "23c607f66f72b89a0e042228f074ce34b9719655", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_31", + "filename": "asset_level_object_maps_31", + "folder": "unknown", + "sha1": "bd5012d6ca5214afc6cd3cb2124e1bd0f4471346", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_32", + "filename": "asset_level_object_maps_32", + "folder": "unknown", + "sha1": "43b6308ff64f611046c51b915f3834c478417fd2", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_33", + "filename": "asset_level_object_maps_33", + "folder": "unknown", + "sha1": "be50136f47ea358f52117311f4c73227874502e7", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_34", + "filename": "asset_level_object_maps_34", + "folder": "unknown", + "sha1": "09c028b8875a813fb1fb32596cc1746bf69b03f6", + "type": "LevelObjectMap" + }, + { + "filename": "asset_level_object_maps_35", + "build-id": "ASSET_LEVEL_OBJECT_MAPS_35", + "folder": "unknown", + "type": "LevelObjectMap", + "sha1": "257bcfc3231cda1b3201053bfb566251e1b584cd" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_36", + "filename": "asset_level_object_maps_36", + "folder": "unknown", + "sha1": "69b93c3d08a5fef6756a95d0e5e5f9cc6e0ab8a4", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_37", + "filename": "asset_level_object_maps_37", + "folder": "unknown", + "sha1": "1b4db74ee57fe16b3d2160957d997ed80b826666", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_38", + "filename": "asset_level_object_maps_38", + "folder": "unknown", + "sha1": "dcdc60635db8eb53eddd23a49cc36a4518136566", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_39", + "filename": "asset_level_object_maps_39", + "folder": "unknown", + "sha1": "8f6e5ee1fe9b00f04013a080b8cb750b17ca0643", + "type": "LevelObjectMap" + }, + { + "filename": "asset_level_object_maps_40", + "build-id": "ASSET_LEVEL_OBJECT_MAPS_40", + "folder": "unknown", + "type": "LevelObjectMap", + "sha1": "257bcfc3231cda1b3201053bfb566251e1b584cd" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_41", + "filename": "asset_level_object_maps_41", + "folder": "unknown", + "sha1": "ab2c98fca684dd88557c1d82444a979b55ca8aae", + "type": "LevelObjectMap" + }, + { + "filename": "asset_level_object_maps_42", + "build-id": "ASSET_LEVEL_OBJECT_MAPS_42", + "folder": "unknown", + "type": "LevelObjectMap", + "sha1": "257bcfc3231cda1b3201053bfb566251e1b584cd" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_43", + "filename": "asset_level_object_maps_43", + "folder": "unknown", + "sha1": "6c24ebf5896cb6bae2094cf98c8b1abc2c912f98", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_44", + "filename": "asset_level_object_maps_44", + "folder": "unknown", + "sha1": "a9a91e949e4bb82f6d126182ba95cfb482a999fa", + "type": "LevelObjectMap" + }, + { + "filename": "asset_level_object_maps_45", + "build-id": "ASSET_LEVEL_OBJECT_MAPS_45", + "folder": "unknown", + "type": "LevelObjectMap", + "sha1": "257bcfc3231cda1b3201053bfb566251e1b584cd" + }, + { + "filename": "asset_level_object_maps_46", + "build-id": "ASSET_LEVEL_OBJECT_MAPS_46", + "folder": "unknown", + "type": "LevelObjectMap", + "sha1": "257bcfc3231cda1b3201053bfb566251e1b584cd" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_47", + "filename": "asset_level_object_maps_47", + "folder": "unknown", + "sha1": "6c42549493193e5a0170835cdfb26cf7ac5c13a4", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_48", + "filename": "asset_level_object_maps_48", + "folder": "unknown", + "sha1": "ffdeb48b0c53b87a8003ac58bfef3b94c364f7ec", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_49", + "filename": "asset_level_object_maps_49", + "folder": "unknown", + "sha1": "41b64c84c9bcbcda800813236e4a747c6e0c4a6a", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_50", + "filename": "asset_level_object_maps_50", + "folder": "unknown", + "sha1": "84daa90820d730e46d5d51f6811c00a80656ed77", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_51", + "filename": "asset_level_object_maps_51", + "folder": "unknown", + "sha1": "3c63da6fef3cca55eb53184f864ee5b761484d2a", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_52", + "filename": "asset_level_object_maps_52", + "folder": "unknown", + "sha1": "9aebcd5f2720f4e14ddf9f7c96559138b283a807", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_53", + "filename": "asset_level_object_maps_53", + "folder": "unknown", + "sha1": "b85882bfdf8ec898fd6721138a00c682c88eb976", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_54", + "filename": "asset_level_object_maps_54", + "folder": "unknown", + "sha1": "77709c61fe91e023f4b706684c69f6b84c0718ae", + "type": "LevelObjectMap" + }, + { + "filename": "asset_level_object_maps_55", + "build-id": "ASSET_LEVEL_OBJECT_MAPS_55", + "folder": "unknown", + "type": "LevelObjectMap", + "sha1": "a9a91e949e4bb82f6d126182ba95cfb482a999fa" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_56", + "filename": "asset_level_object_maps_56", + "folder": "unknown", + "sha1": "ea4201bf77f25400f9948b5f21d09518096b9334", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_57", + "filename": "asset_level_object_maps_57", + "folder": "unknown", + "sha1": "b5acdbb3ef0f34503539b81066b40187b8f0a3d0", + "type": "LevelObjectMap" + }, + { + "filename": "asset_level_object_maps_58", + "build-id": "ASSET_LEVEL_OBJECT_MAPS_58", + "folder": "unknown", + "type": "LevelObjectMap", + "sha1": "257bcfc3231cda1b3201053bfb566251e1b584cd" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_59", + "filename": "asset_level_object_maps_59", + "folder": "unknown", + "sha1": "f9266b139e074bd00feed99b450bf1b115a9b117", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_60", + "filename": "asset_level_object_maps_60", + "folder": "unknown", + "sha1": "2848a7ab67d4640fe2592455ddc6c0d9e79554bb", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_61", + "filename": "asset_level_object_maps_61", + "folder": "unknown", + "sha1": "8894a923d882e11ec36f5524da4c06568a848c02", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_62", + "filename": "asset_level_object_maps_62", + "folder": "unknown", + "sha1": "4f55f5752fc5b6590dc95fe9818dab4067973ddf", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_63", + "filename": "asset_level_object_maps_63", + "folder": "unknown", + "sha1": "74da45894efad07568262f0a33c0e0bb92d2b56f", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_64", + "filename": "asset_level_object_maps_64", + "folder": "unknown", + "sha1": "5771373b44604ca8e1007bf0ca272b5b716d90aa", + "type": "LevelObjectMap" + }, + { + "filename": "asset_level_object_maps_65", + "build-id": "ASSET_LEVEL_OBJECT_MAPS_65", + "folder": "unknown", + "type": "LevelObjectMap", + "sha1": "257bcfc3231cda1b3201053bfb566251e1b584cd" + }, + { + "filename": "asset_level_object_maps_66", + "build-id": "ASSET_LEVEL_OBJECT_MAPS_66", + "folder": "unknown", + "type": "LevelObjectMap", + "sha1": "257bcfc3231cda1b3201053bfb566251e1b584cd" + }, + { + "filename": "asset_level_object_maps_67", + "build-id": "ASSET_LEVEL_OBJECT_MAPS_67", + "folder": "unknown", + "type": "LevelObjectMap", + "sha1": "257bcfc3231cda1b3201053bfb566251e1b584cd" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_68", + "filename": "asset_level_object_maps_68", + "folder": "unknown", + "sha1": "db9d0e3632fd751a8c40087cbb1b2b9fe678a4fd", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_69", + "filename": "asset_level_object_maps_69", + "folder": "unknown", + "sha1": "c93b9a8c90530a545c4d480f7bf3d985f217ac3c", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_70", + "filename": "asset_level_object_maps_70", + "folder": "unknown", + "sha1": "5268f8a12e25497b4438b0ef257e4333eaf11d11", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_71", + "filename": "asset_level_object_maps_71", + "folder": "unknown", + "sha1": "6b6980529508e9e32ec702f8aa9f774adfd4932b", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_72", + "filename": "asset_level_object_maps_72", + "folder": "unknown", + "sha1": "e2ecfb16c293aa1f97ed5a070bcdf9d518916b47", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_73", + "filename": "asset_level_object_maps_73", + "folder": "unknown", + "sha1": "6461ebe57b6b595ee52491d3d4c7dfb7c2dce496", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_74", + "filename": "asset_level_object_maps_74", + "folder": "unknown", + "sha1": "4eaf7da2a0b063584d0698fe76f1a1996f6aa878", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_75", + "filename": "asset_level_object_maps_75", + "folder": "unknown", + "sha1": "e8cad657bb07c3076967082093b6a40b06017f50", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_76", + "filename": "asset_level_object_maps_76", + "folder": "unknown", + "sha1": "0371c9a34907d1a69542bfdef397de834aacfc6f", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_77", + "filename": "asset_level_object_maps_77", + "folder": "unknown", + "sha1": "2edef06e3213c2ecc34da39d6a881fc71f125e07", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_78", + "filename": "asset_level_object_maps_78", + "folder": "unknown", + "sha1": "8ac5957375ece4084b6c8d543bdac251e94c76bf", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_79", + "filename": "asset_level_object_maps_79", + "folder": "unknown", + "sha1": "7af40e667d4af2abe14233eddc12acd3a8630b11", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_80", + "filename": "asset_level_object_maps_80", + "folder": "unknown", + "sha1": "be297abd1709764a9cbe57275959348832b3d241", + "type": "LevelObjectMap" + }, + { + "filename": "asset_level_object_maps_81", + "build-id": "ASSET_LEVEL_OBJECT_MAPS_81", + "folder": "unknown", + "type": "LevelObjectMap", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_82", + "filename": "asset_level_object_maps_82", + "folder": "unknown", + "sha1": "92f8fc87bd33c5daedf94ed88a82d366b05d2c37", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_83", + "filename": "asset_level_object_maps_83", + "folder": "unknown", + "sha1": "d67b110b54387818db238d98c336a39dfff79523", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_84", + "filename": "asset_level_object_maps_84", + "folder": "unknown", + "sha1": "1694a10f5799a220a88bc0ca559f5cef6c054444", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_85", + "filename": "asset_level_object_maps_85", + "folder": "unknown", + "sha1": "ec3b6dc820728ad0debc05dbb20bba4f2064397b", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_86", + "filename": "asset_level_object_maps_86", + "folder": "unknown", + "sha1": "d13384166fcd4b5c3f3dcd5f24ff327b8ef4ec7b", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_87", + "filename": "asset_level_object_maps_87", + "folder": "unknown", + "sha1": "de003bb06f1512b02c4afce9946cfe2b6f09b480", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_88", + "filename": "asset_level_object_maps_88", + "folder": "unknown", + "sha1": "8ec5d21f2092d391cb54a61e4ba5efaeb9b4603e", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_89", + "filename": "asset_level_object_maps_89", + "folder": "unknown", + "sha1": "615ca228bd439a4e566ba5a8c4f0fe692c93971b", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_90", + "filename": "asset_level_object_maps_90", + "folder": "unknown", + "sha1": "b45673f0f3a77955b01622ecbc58b967ef43a8bc", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_91", + "filename": "asset_level_object_maps_91", + "folder": "unknown", + "sha1": "65470256f2d74427df2e307434e76b5b47a00690", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_92", + "filename": "asset_level_object_maps_92", + "folder": "unknown", + "sha1": "e4c062c05703b24dabc4b6de94952458d8996908", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_93", + "filename": "asset_level_object_maps_93", + "folder": "unknown", + "sha1": "0fa7a770ba35952ce349978fae1b35ed8ff4a23d", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_94", + "filename": "asset_level_object_maps_94", + "folder": "unknown", + "sha1": "ae48126be38914bc000648059cb32bb080648e04", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_95", + "filename": "asset_level_object_maps_95", + "folder": "unknown", + "sha1": "ec65aa3ff6fcfede1cea4be53174a9e5e93c5002", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_96", + "filename": "asset_level_object_maps_96", + "folder": "unknown", + "sha1": "b61234bfc7a7069d5dd29f2e941098046e5e5b18", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_97", + "filename": "asset_level_object_maps_97", + "folder": "unknown", + "sha1": "422b54d21b72d294569f451372b2d7391867df17", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_98", + "filename": "asset_level_object_maps_98", + "folder": "unknown", + "sha1": "cad684f62e8236c9cdbed511fd9d687bb5a0b9a1", + "type": "LevelObjectMap" + }, + { + "filename": "asset_level_object_maps_99", + "build-id": "ASSET_LEVEL_OBJECT_MAPS_99", + "folder": "unknown", + "type": "LevelObjectMap", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_100", + "filename": "asset_level_object_maps_100", + "folder": "unknown", + "sha1": "a508b035301a7d91311845c332a84c7859015757", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_101", + "filename": "asset_level_object_maps_101", + "folder": "unknown", + "sha1": "5ba5f06be257306d5835fa7058428f3c24e0db20", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_102", + "filename": "asset_level_object_maps_102", + "folder": "unknown", + "sha1": "f82d0d39ba090878ff1c81006080e5969dd35949", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_103", + "filename": "asset_level_object_maps_103", + "folder": "unknown", + "sha1": "cb762b673c0bfd7a176b840385555c121665c6b2", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_104", + "filename": "asset_level_object_maps_104", + "folder": "unknown", + "sha1": "9a9364745e9c01bd13a7c1dd7f8ca4cdf1f9e347", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_105", + "filename": "asset_level_object_maps_105", + "folder": "unknown", + "sha1": "1eb032529bf189f7402386182079464c56d63764", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_106", + "filename": "asset_level_object_maps_106", + "folder": "unknown", + "sha1": "ba6d6682cdae13ec98c8c528ec053d96355a4583", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_107", + "filename": "asset_level_object_maps_107", + "folder": "unknown", + "sha1": "119a844620821238b85f4adaac376279a9b179ae", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_108", + "filename": "asset_level_object_maps_108", + "folder": "unknown", + "sha1": "3ca094faa8134a88af622f441fd302d556fcbda2", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_109", + "filename": "asset_level_object_maps_109", + "folder": "unknown", + "sha1": "3e7d39a82a9f0012c12013f7fb131f72c8ae52a1", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_110", + "filename": "asset_level_object_maps_110", + "folder": "unknown", + "sha1": "0511ba78a262f41548aa1b8ca027bff9f92e73a1", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_111", + "filename": "asset_level_object_maps_111", + "folder": "unknown", + "sha1": "20ab2b0ec666ebec133e674d0b0427a553c73cb6", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_112", + "filename": "asset_level_object_maps_112", + "folder": "unknown", + "sha1": "454e78321fac53cd71d0da82658aa5557ad658eb", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_113", + "filename": "asset_level_object_maps_113", + "folder": "unknown", + "sha1": "0b63617decb47c0470fe356fc29c98c395deab89", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_114", + "filename": "asset_level_object_maps_114", + "folder": "unknown", + "sha1": "3c14ed73d9ef1aa94e7656c06cfe950c356edcca", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_115", + "filename": "asset_level_object_maps_115", + "folder": "unknown", + "sha1": "a18a62e5bda15ef8f1c984b14aa1dc37b24a275e", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_116", + "filename": "asset_level_object_maps_116", + "folder": "unknown", + "sha1": "3b884fce0003ecc74703490b797c16878f6699cf", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_117", + "filename": "asset_level_object_maps_117", + "folder": "unknown", + "sha1": "d1d28d3cdd1a5d9390df7ec55f5d17e2129ebcd3", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_118", + "filename": "asset_level_object_maps_118", + "folder": "unknown", + "sha1": "6477f9142a8b2da9188eda06f4698073d7a8c4d4", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_119", + "filename": "asset_level_object_maps_119", + "folder": "unknown", + "sha1": "1997f8350989b4da1f299563d1eb1c0103fd0c58", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_120", + "filename": "asset_level_object_maps_120", + "folder": "unknown", + "sha1": "ef2000acbe29c88792cf25891bb0b6e5c4c58986", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_121", + "filename": "asset_level_object_maps_121", + "folder": "unknown", + "sha1": "b777976be2772bc5e3feb896b79730a90d4169f6", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_122", + "filename": "asset_level_object_maps_122", + "folder": "unknown", + "sha1": "da0176b86f30d0ef0129f4ceb9a9e47748aa2790", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_123", + "filename": "asset_level_object_maps_123", + "folder": "unknown", + "sha1": "50f85410bb6b37f55610b1e4d091585f6215330f", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_124", + "filename": "asset_level_object_maps_124", + "folder": "unknown", + "sha1": "3de77d583766828ba4dabfa8dcefab5b7b1b67ab", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_125", + "filename": "asset_level_object_maps_125", + "folder": "unknown", + "sha1": "85cae3758ae5d22909188a4c4253b264a7bcf87a", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_126", + "filename": "asset_level_object_maps_126", + "folder": "unknown", + "sha1": "8e8405b6cbe8c22db82d41e9da3e515aaa315f93", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_88", + "filename": "asset_level_object_maps_88_v80", + "folder": "unknown", + "sha1": "257bcfc3231cda1b3201053bfb566251e1b584cd", + "type": "LevelObjectMap", + "version": "v80" + }, + { + "filename": "asset_level_object_maps_127", + "build-id": "ASSET_LEVEL_OBJECT_MAPS_127", + "folder": "unknown", + "type": "LevelObjectMap", + "sha1": "257bcfc3231cda1b3201053bfb566251e1b584cd" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_128", + "filename": "asset_level_object_maps_128", + "folder": "unknown", + "sha1": "c87806019fbc8efd3fd4b3bc59ae1f17a44bb9e6", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_129", + "filename": "asset_level_object_maps_129", + "folder": "unknown", + "sha1": "722dd7c30c79eaa9c227d488e9e466a82aed7805", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_130", + "filename": "asset_level_object_maps_130", + "folder": "unknown", + "sha1": "af1118e2548c6ff29472c2d81a3fb61d7690fd18", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_131", + "filename": "asset_level_object_maps_131", + "folder": "unknown", + "sha1": "ecd8c5bac0039ec823b806897abf274066d1c390", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_132", + "filename": "asset_level_object_maps_132", + "folder": "unknown", + "sha1": "d9f2378558f16951025cef87f5be79ab377d4b14", + "type": "LevelObjectMap" + }, + { + "filename": "asset_level_object_maps_133", + "build-id": "ASSET_LEVEL_OBJECT_MAPS_133", + "folder": "unknown", + "type": "LevelObjectMap", + "sha1": "257bcfc3231cda1b3201053bfb566251e1b584cd" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_134", + "filename": "asset_level_object_maps_134", + "folder": "unknown", + "sha1": "3df7de5db257580e676d10a4fa3825cb6e995aa4", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_135", + "filename": "asset_level_object_maps_135", + "folder": "unknown", + "sha1": "e3d71a755222f316fa79edb7590b2b60566c94f9", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_136", + "filename": "asset_level_object_maps_136", + "folder": "unknown", + "sha1": "0137b899e106ddd914205f484221a41e71cf7bd7", + "type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_137", + "filename": "asset_level_object_maps_137", + "folder": "unknown", + "sha1": "4360b0ef3fb794e2cbe2639ec11610a3365f450a", + "type": "LevelObjectMap" + }, + { + "filename": "CentralAreaHub", + "build-id": "ASSET_LEVEL_CENTRALAREAHUB", + "type": "LevelHeader", + "sha1": "64ff2ca9df4e13b7dc8a7d2b6a38500f4b84ea30" + }, + { + "filename": "Bluey1", + "build-id": "ASSET_LEVEL_BLUEY1", + "type": "LevelHeader", + "sha1": "566c2dcd2d0eec11bc521712513d8a800f7e96f1" + }, + { + "filename": "DragonForestHub", + "build-id": "ASSET_LEVEL_DRAGONFORESTHUB", + "type": "LevelHeader", + "sha1": "6d2edbfde4c45f5b4b6133e239ed0468a5396ffb" + }, + { + "filename": "FossilCanyon", + "build-id": "ASSET_LEVEL_FOSSILCANYON", + "type": "LevelHeader", + "sha1": "6d094f658e7a605f7240cf4c36ac90507aeb4b2d" + }, + { + "filename": "PirateLagoon", + "build-id": "ASSET_LEVEL_PIRATELAGOON", + "type": "LevelHeader", + "sha1": "e1b8965e00e780de991eb745cf579c63be53b25c" + }, + { + "filename": "AncientLake", + "build-id": "ASSET_LEVEL_ANCIENTLAKE", + "type": "LevelHeader", + "sha1": "b1b722998ce2ca89e89ee19a16711615962f2da8" + }, + { + "filename": "WalrusCove", + "build-id": "ASSET_LEVEL_WALRUSCOVE", + "type": "LevelHeader", + "sha1": "fb5845a0dab7c7695e3b81905809c3dea8bc3072" + }, + { + "filename": "HotTopVolcano", + "build-id": "ASSET_LEVEL_HOTTOPVOLCANO", + "type": "LevelHeader", + "sha1": "f21bb4d0bd103cc9abb47be721935f2244e053fd" + }, + { + "filename": "WhaleBay", + "build-id": "ASSET_LEVEL_WHALEBAY", + "type": "LevelHeader", + "sha1": "e107854d4312f9c4894231e71ad083fc7c9d76a0" + }, + { + "filename": "SnowballValley", + "build-id": "ASSET_LEVEL_SNOWBALLVALLEY", + "type": "LevelHeader", + "sha1": "6ed6cfd9cd2a5a806970d0de31939cd531fd557b" + }, + { + "filename": "CrescentIsland", + "build-id": "ASSET_LEVEL_CRESCENTISLAND", + "type": "LevelHeader", + "sha1": "25f128d7d2ca0d60b221fe182d80496df49dcee1" + }, + { + "filename": "FireMountain", + "build-id": "ASSET_LEVEL_FIREMOUNTAIN", + "type": "LevelHeader", + "sha1": "dd38073843e794a4283a9e8e551500138e527d74" + }, + { + "filename": "DinoDomainHub", + "build-id": "ASSET_LEVEL_DINODOMAINHUB", + "type": "LevelHeader", + "sha1": "d6b43d98fc7af44c5398e62018205efdb116ddaa" + }, + { + "filename": "EverfrostPeak", + "build-id": "ASSET_LEVEL_EVERFROSTPEAK", + "type": "LevelHeader", + "sha1": "9351a358756e629b818cc0f31dec1122af226150" + }, + { + "filename": "SherbetIslandHub", + "build-id": "ASSET_LEVEL_SHERBETISLANDHUB", + "type": "LevelHeader", + "sha1": "7c124afc33a39f60b755c4cc4239dfaad6ed937d" + }, + { + "filename": "SpaceportAlpha", + "build-id": "ASSET_LEVEL_SPACEPORTALPHA", + "type": "LevelHeader", + "sha1": "9c4926a1ee41b6423f798db14db025fefc02037c" + }, + { + "filename": "HorseshoeGulch", + "build-id": "ASSET_LEVEL_HORSESHOEGULCH", + "type": "LevelHeader", + "sha1": "93c36d2d02d419530ed90ff512dcfdb63fa88d52" + }, + { + "filename": "SpacedustAlley", + "build-id": "ASSET_LEVEL_SPACEDUSTALLEY", + "type": "LevelHeader", + "sha1": "5ff437b0476f9cfc34fdb0cfbe432e1f9472ae01" + }, + { + "filename": "GreenwoodVillage", + "build-id": "ASSET_LEVEL_GREENWOODVILLAGE", + "type": "LevelHeader", + "sha1": "d15b0fef473a45132baf120db6be01ed6275177e" + }, + { + "filename": "BoulderCanyon", + "build-id": "ASSET_LEVEL_BOULDERCANYON", + "type": "LevelHeader", + "sha1": "8cf63c858242a224e238da3c67a3ced094609bb1" + }, + { + "filename": "WindmillPlains", + "build-id": "ASSET_LEVEL_WINDMILLPLAINS", + "type": "LevelHeader", + "sha1": "04be916e77a4e3159df722b1c8d53cf03f8051aa" + }, + { + "filename": "FrontEnd", + "build-id": "ASSET_LEVEL_FRONTEND", + "type": "LevelHeader", + "sha1": "7eadfcda9bf91ea986b217bc7fc1fe719e7447ab" + }, + { + "filename": "CharacterSelect", + "build-id": "ASSET_LEVEL_CHARACTERSELECT", + "type": "LevelHeader", + "sha1": "659956f2e0ac057634184e4635870902242336b6" + }, + { + "filename": "TitleScreenSequence", + "build-id": "ASSET_LEVEL_TITLESCREENSEQUENCE", + "type": "LevelHeader", + "sha1": "c6cd6094da1445b8fce5a24010167b9c86d88a2e" + }, + { + "filename": "SnowflakeMountainHub", + "build-id": "ASSET_LEVEL_SNOWFLAKEMOUNTAINHUB", + "type": "LevelHeader", + "sha1": "19c0dcbbf6729e21bfe413e98c7fde78b8229535" + }, + { + "filename": "SmokeyCastle", + "build-id": "ASSET_LEVEL_SMOKEYCASTLE", + "type": "LevelHeader", + "sha1": "e028a5d940d839d6a3554b0b4a575a316e2d56c0" + }, + { + "filename": "DarkwaterBeach", + "build-id": "ASSET_LEVEL_DARKWATERBEACH", + "type": "LevelHeader", + "sha1": "c54b1718dd957627cf2001892987629e60ab07d1" + }, + { + "filename": "IciclePyramid", + "build-id": "ASSET_LEVEL_ICICLEPYRAMID", + "type": "LevelHeader", + "sha1": "29d3a6d867fea2afc8409ac94ad66015962c3f2f" + }, + { + "filename": "FrostyVillage", + "build-id": "ASSET_LEVEL_FROSTYVILLAGE", + "type": "LevelHeader", + "sha1": "8ecc21f94da9b48e48f1f59ee08a2c7b4b79d57d" + }, + { + "filename": "JungleFalls", + "build-id": "ASSET_LEVEL_JUNGLEFALLS", + "type": "LevelHeader", + "sha1": "2b4d470a8115116948d73cbcfda811116d09323d" + }, + { + "filename": "TreasureCaves", + "build-id": "ASSET_LEVEL_TREASURECAVES", + "type": "LevelHeader", + "sha1": "f221e78e4752c55d80eeb8099c513127d01a9709" + }, + { + "filename": "HauntedWoods", + "build-id": "ASSET_LEVEL_HAUNTEDWOODS", + "type": "LevelHeader", + "sha1": "8071aaa6f21f3d42564925b0e3f730877dc3599d" + }, + { + "filename": "DarkmoonCaverns", + "build-id": "ASSET_LEVEL_DARKMOONCAVERNS", + "type": "LevelHeader", + "sha1": "1b2d9159fa03f07f0589f74c2f4c93d3f09dec65" + }, + { + "filename": "StarCity", + "build-id": "ASSET_LEVEL_STARCITY", + "type": "LevelHeader", + "sha1": "04d7f0724eab6039350566e6096ce735743febe8" + }, + { + "filename": "TrophyRace", + "build-id": "ASSET_LEVEL_TROPHYRACE", + "type": "LevelHeader", + "sha1": "fb9e2ce11ebb9827d2779c8f4b0b3cbbce8d9928" + }, + { + "filename": "FutureFunLandHub", + "build-id": "ASSET_LEVEL_FUTUREFUNLANDHUB", + "type": "LevelHeader", + "sha1": "10b11785fe95be179bdcf4e921ace5e354faae6a" + }, + { + "filename": "OpeningSequence", + "build-id": "ASSET_LEVEL_OPENINGSEQUENCE", + "type": "LevelHeader", + "sha1": "13ae1ee368c9b3e3045a726a1bc4b2423dc042b9" + }, + { + "filename": "Wizpig1", + "build-id": "ASSET_LEVEL_WIZPIG1", + "type": "LevelHeader", + "sha1": "5a1d1aef47c084ad5ff365063489b9f66bb9c5b0" + }, + { + "filename": "Trickytops1", + "build-id": "ASSET_LEVEL_TRICKYTOPS1", + "type": "LevelHeader", + "sha1": "6b9ca3f2a56c7a171dd7e2cedaf02410b29acf01" + }, + { + "filename": "OptionsBackground", + "build-id": "ASSET_LEVEL_OPTIONSBACKGROUND", + "type": "LevelHeader", + "sha1": "572d09275474668c6cf8735de8c4506521451030" + }, + { + "filename": "Bubbler1", + "build-id": "ASSET_LEVEL_BUBBLER1", + "type": "LevelHeader", + "sha1": "cf7c66a3132fd822a211c2357e308b58d729d973" + }, + { + "filename": "Smokey1", + "build-id": "ASSET_LEVEL_SMOKEY1", + "type": "LevelHeader", + "sha1": "335798c494909f702f3ca35abaeb6765a1026b18" + }, + { + "filename": "WizpigMouthSequence", + "build-id": "ASSET_LEVEL_WIZPIGMOUTHSEQUENCE", + "type": "LevelHeader", + "sha1": "5fdd936fa089eb28128df2db6eb0544efb8135c0" + }, + { + "filename": "WizpigAmuletSequence", + "build-id": "ASSET_LEVEL_WIZPIGAMULETSEQUENCE", + "type": "LevelHeader", + "sha1": "b20e5e4e6ed49c5aaddb390cab5a8c92c168e59a" + }, + { + "filename": "TTAmuletSequence", + "build-id": "ASSET_LEVEL_TTAMULETSEQUENCE", + "type": "LevelHeader", + "sha1": "c463f2935045bdfc6982f084be77d505860de8d9" + }, + { + "filename": "RocketSequence", + "build-id": "ASSET_LEVEL_ROCKETSEQUENCE", + "type": "LevelHeader", + "sha1": "13cba90123d145909f64ca7b33ebfc1be898abfe" + }, + { + "filename": "Trickytops2", + "build-id": "ASSET_LEVEL_TRICKYTOPS2", + "type": "LevelHeader", + "sha1": "16ec7b29f04da6cc5a11fc758b20ea8cf9853ad3" + }, + { + "filename": "DinoDomainTrophyAnim", + "build-id": "ASSET_LEVEL_DINODOMAINTROPHYANIM", + "type": "LevelHeader", + "sha1": "a915f15fc7fb6bfe23175553a872485661144442" + }, + { + "filename": "SnowflakeMountainTrophyAnim", + "build-id": "ASSET_LEVEL_SNOWFLAKEMOUNTAINTROPHYANIM", + "type": "LevelHeader", + "sha1": "611424395f11c1706209dc284c8a1aca72df1107" + }, + { + "filename": "SherbetIslandTrophyAnim", + "build-id": "ASSET_LEVEL_SHERBETISLANDTROPHYANIM", + "type": "LevelHeader", + "sha1": "046e3ecf3568d97afdc9b2d333921f47b661a168" + }, + { + "filename": "DragonForestTrophyAnim", + "build-id": "ASSET_LEVEL_DRAGONFORESTTROPHYANIM", + "type": "LevelHeader", + "sha1": "cba71de2a74b4832cb0a3c17bc78560f3df11f16" + }, + { + "filename": "FutureFunLandTrophyAnim", + "build-id": "ASSET_LEVEL_FUTUREFUNLANDTROPHYANIM", + "type": "LevelHeader", + "sha1": "a40771d78510303ea87e0c72e4969d8c45e4ba88" + }, + { + "filename": "Bluey2", + "build-id": "ASSET_LEVEL_BLUEY2", + "type": "LevelHeader", + "sha1": "d401f85e9aedf03e52ceb9a05aa43da56d328004" + }, + { + "filename": "Bubbler2", + "build-id": "ASSET_LEVEL_BUBBLER2", + "type": "LevelHeader", + "sha1": "1d2809cae2df862a6f8ab03068a96c886beacaf4" + }, + { + "filename": "Smokey2", + "build-id": "ASSET_LEVEL_SMOKEY2", + "type": "LevelHeader", + "sha1": "72571832366bbe6fe332bd6e435f054d64b7c60e" + }, + { + "filename": "Wizpig2", + "build-id": "ASSET_LEVEL_WIZPIG2", + "type": "LevelHeader", + "sha1": "e937da1d4d4bb71c997713061385e9a3724b4938" + }, + { + "filename": "PartySequence", + "build-id": "ASSET_LEVEL_PARTYSEQUENCE", + "type": "LevelHeader", + "sha1": "b10330a369cdc6b05b4de78da798d41d37e6ee06" + }, + { + "filename": "TricktopsAnim", + "build-id": "ASSET_LEVEL_TRICKTOPSANIM", + "type": "LevelHeader", + "sha1": "418474a8fefbe05c5b493833b588a54526f9b97e" + }, + { + "filename": "SmokeyAnim", + "build-id": "ASSET_LEVEL_SMOKEYANIM", + "type": "LevelHeader", + "sha1": "acf3402f35034693870860a6da6a5882792d4bbd" + }, + { + "filename": "BlueyAnim", + "build-id": "ASSET_LEVEL_BLUEYANIM", + "type": "LevelHeader", + "sha1": "905628f1064d7d6d1040571fde168e851c2440ba" + }, + { + "filename": "Wizpig1Anim", + "build-id": "ASSET_LEVEL_WIZPIG1ANIM", + "type": "LevelHeader", + "sha1": "dde17906ea218a5474aa016efb66db44610780ad" + }, + { + "filename": "BubblerAnim", + "build-id": "ASSET_LEVEL_BUBBLERANIM", + "type": "LevelHeader", + "sha1": "9aa6d11f0a5a182d2b6e4f0ab4b3c35c7d6a048f" + }, + { + "filename": "Wizpig2Anim", + "build-id": "ASSET_LEVEL_WIZPIG2ANIM", + "type": "LevelHeader", + "sha1": "4dfea067d525ed22de9f7bb89ec5b8d7e18c6cd8" + }, + { + "filename": "LastBit", + "build-id": "ASSET_LEVEL_LASTBIT", + "type": "LevelHeader", + "sha1": "cf74fe1a079c1f7c1e1b6a23489fc5be63434b0b" + }, + { + "filename": "LastBitB", + "build-id": "ASSET_LEVEL_LASTBITB", + "type": "LevelHeader", + "sha1": "e661e90b6df2a4abbc8939dd5f98479b117ddcfe" + }, + { + "filename": "CentralAreaHubName", + "build-id": "ASSET_LEVELNAME_CENTRALAREAHUB", + "type": "LevelName", + "sha1": "db71c501691a7913cfeda962ef3f2ff8759f5a05" + }, + { + "filename": "Bluey1Name", + "build-id": "ASSET_LEVELNAME_BLUEY1", + "type": "LevelName", + "sha1": "d5fd3bb08d2c95b5e34e06b86d99e3059e4707d1" + }, + { + "filename": "DragonForestHubName", + "build-id": "ASSET_LEVELNAME_DRAGONFORESTHUB", + "type": "LevelName", + "sha1": "d279b162350bdea327a991b5c647581fd9447ce6" + }, + { + "filename": "FossilCanyonName", + "build-id": "ASSET_LEVELNAME_FOSSILCANYON", + "type": "LevelName", + "sha1": "753099608f82dbcc13ec020aa43c07f1a2434dff" + }, + { + "filename": "PirateLagoonName", + "build-id": "ASSET_LEVELNAME_PIRATELAGOON", + "type": "LevelName", + "sha1": "9cc470b55ebf470c20641997e146b35263c0d632" + }, + { + "filename": "AncientLakeName", + "build-id": "ASSET_LEVELNAME_ANCIENTLAKE", + "type": "LevelName", + "sha1": "b0b2703a1026fd56d0fb2508640f12099c96e1c1" + }, + { + "filename": "WalrusCoveName", + "build-id": "ASSET_LEVELNAME_WALRUSCOVE", + "type": "LevelName", + "sha1": "4e2dfc0f4176f11893869a7690c669e8923e5cf4" + }, + { + "filename": "HotTopVolcanoName", + "build-id": "ASSET_LEVELNAME_HOTTOPVOLCANO", + "type": "LevelName", + "sha1": "45d4e3e3425f1a08b5b441921f99ac3d5b3074f5" + }, + { + "filename": "WhaleBayName", + "build-id": "ASSET_LEVELNAME_WHALEBAY", + "type": "LevelName", + "sha1": "6f10275ec9ade48b254872a36563097fd5c677db" + }, + { + "filename": "SnowballValleyName", + "build-id": "ASSET_LEVELNAME_SNOWBALLVALLEY", + "type": "LevelName", + "sha1": "f2c007a174ade77063f6bb74071c00f0d8afa571" + }, + { + "filename": "CrescentIslandName", + "build-id": "ASSET_LEVELNAME_CRESCENTISLAND", + "type": "LevelName", + "sha1": "16fc1b76c9f1dd444863b26b3eac265fd592a1ba" + }, + { + "filename": "FireMountainName", + "build-id": "ASSET_LEVELNAME_FIREMOUNTAIN", + "type": "LevelName", + "sha1": "babbe1b11f32c0007003a388ee884e203bf2384f" + }, + { + "filename": "DinoDomainHubName", + "build-id": "ASSET_LEVELNAME_DINODOMAINHUB", + "type": "LevelName", + "sha1": "20b1ad14788e81ffb465564e15aa268afab23c26" + }, + { + "filename": "EverfrostPeakName", + "build-id": "ASSET_LEVELNAME_EVERFROSTPEAK", + "type": "LevelName", + "sha1": "c6ee7b12b91391b41d3e706efbfb4df97ccf3573" + }, + { + "filename": "SherbetIslandHubName", + "build-id": "ASSET_LEVELNAME_SHERBETISLANDHUB", + "type": "LevelName", + "sha1": "e4fe5733fd12581e1af72343a06924ed70b2d2c0" + }, + { + "filename": "SpaceportAlphaName", + "build-id": "ASSET_LEVELNAME_SPACEPORTALPHA", + "type": "LevelName", + "sha1": "b9e090b12459a280da9854454d24f6967fe2b9bb" + }, + { + "filename": "HorseshoeGulchName", + "build-id": "ASSET_LEVELNAME_HORSESHOEGULCH", + "type": "LevelName", + "sha1": "280c13d997fb523710c7999eeaf91e9744874ec0" + }, + { + "filename": "SpacedustAlleyName", + "build-id": "ASSET_LEVELNAME_SPACEDUSTALLEY", + "type": "LevelName", + "sha1": "b3cb6188f2176e0d111f54bcbb7cf85584fff5ae" + }, + { + "filename": "GreenwoodVillageName", + "build-id": "ASSET_LEVELNAME_GREENWOODVILLAGE", + "type": "LevelName", + "sha1": "d8714ae3a5652b0811fe4dd22d843f9efa677ef4" + }, + { + "filename": "BoulderCanyonName", + "build-id": "ASSET_LEVELNAME_BOULDERCANYON", + "type": "LevelName", + "sha1": "aa4657570f844545c0d344fd58c61079b7f4212f" + }, + { + "filename": "WindmillPlainsName", + "build-id": "ASSET_LEVELNAME_WINDMILLPLAINS", + "type": "LevelName", + "sha1": "5b5600dd6714a202edb8103572b93cddefe17d0f" + }, + { + "filename": "FrontEndName", + "build-id": "ASSET_LEVELNAME_FRONTEND", + "type": "LevelName", + "sha1": "085ae25e47a05749b4049c74df8177fc62a2b836" + }, + { + "filename": "CharacterSelectName", + "build-id": "ASSET_LEVELNAME_CHARACTERSELECT", + "type": "LevelName", + "sha1": "4df9b1e3e8253623335f8402a3245fc113c84a52" + }, + { + "filename": "TitleScreenSequenceName", + "build-id": "ASSET_LEVELNAME_TITLESCREENSEQUENCE", + "type": "LevelName", + "sha1": "3a423a6bd434e7dec907d78ef9a67325de251d91" + }, + { + "filename": "SnowflakeMountainHubName", + "build-id": "ASSET_LEVELNAME_SNOWFLAKEMOUNTAINHUB", + "type": "LevelName", + "sha1": "68696dd67bda750fc1a6a7c252c31cfc393b3347" + }, + { + "filename": "SmokeyCastleName", + "build-id": "ASSET_LEVELNAME_SMOKEYCASTLE", + "type": "LevelName", + "sha1": "82485be6a0c170ee0bc508519c6f11ad78a00a4a" + }, + { + "filename": "DarkwaterBeachName", + "build-id": "ASSET_LEVELNAME_DARKWATERBEACH", + "type": "LevelName", + "sha1": "4466e85958ed0968f3a9f27e5043f8004ec54cfc" + }, + { + "filename": "IciclePyramidName", + "build-id": "ASSET_LEVELNAME_ICICLEPYRAMID", + "type": "LevelName", + "sha1": "89a13fcede5c27aa7956031d16368b5634a75a04" + }, + { + "filename": "FrostyVillageName", + "build-id": "ASSET_LEVELNAME_FROSTYVILLAGE", + "type": "LevelName", + "sha1": "c9f4b6793e83bcc5340715dc7eb55590e5d7ee1a" + }, + { + "filename": "JungleFallsName", + "build-id": "ASSET_LEVELNAME_JUNGLEFALLS", + "type": "LevelName", + "sha1": "6abaf42d2e1bf2d4aee6cb87bf049650f0cd4257" + }, + { + "filename": "TreasureCavesName", + "build-id": "ASSET_LEVELNAME_TREASURECAVES", + "type": "LevelName", + "sha1": "3f4bb183daff29eb3402a489c4463fd1bc6ee4ad" + }, + { + "filename": "HauntedWoodsName", + "build-id": "ASSET_LEVELNAME_HAUNTEDWOODS", + "type": "LevelName", + "sha1": "2bdc38c87e8f8d5207cd302f2c3903611520eafb" + }, + { + "filename": "DarkmoonCavernsName", + "build-id": "ASSET_LEVELNAME_DARKMOONCAVERNS", + "type": "LevelName", + "sha1": "fa2e4296e83f449d86cb7520b7e63a1a0687f6d8" + }, + { + "filename": "StarCityName", + "build-id": "ASSET_LEVELNAME_STARCITY", + "type": "LevelName", + "sha1": "a1ca213f0dc5744dda2131191235918440900aa4" + }, + { + "filename": "TrophyRaceName", + "build-id": "ASSET_LEVELNAME_TROPHYRACE", + "type": "LevelName", + "sha1": "02ce5d9240141bb8043c68df4428e2c418a26874" + }, + { + "filename": "FutureFunLandHubName", + "build-id": "ASSET_LEVELNAME_FUTUREFUNLANDHUB", + "type": "LevelName", + "sha1": "a04175a05d2e8dbc98a97bcca390d383ba9a8f9a" + }, + { + "filename": "OpeningSequenceName", + "build-id": "ASSET_LEVELNAME_OPENINGSEQUENCE", + "type": "LevelName", + "sha1": "4ba37d69b51c32d249c5a70b207c4468cd9db05c" + }, + { + "filename": "Wizpig1Name", + "build-id": "ASSET_LEVELNAME_WIZPIG1", + "type": "LevelName", + "sha1": "8cd6bf4a531762f3a177e57f38651ded9ba787c4" + }, + { + "filename": "Trickytops1Name", + "build-id": "ASSET_LEVELNAME_TRICKYTOPS1", + "type": "LevelName", + "sha1": "96dbce89349db1a0a6b5f4be0864c5f86504efc9" + }, + { + "filename": "OptionsBackgroundName", + "build-id": "ASSET_LEVELNAME_OPTIONSBACKGROUND", + "type": "LevelName", + "sha1": "5eff2b55b709441b633ba51bfdbf0bb2ba074bb0" + }, + { + "filename": "Bubbler1Name", + "build-id": "ASSET_LEVELNAME_BUBBLER1", + "type": "LevelName", + "sha1": "249b4a9afc97d4fd446e361cf81eca278d50101b" + }, + { + "filename": "Smokey1Name", + "build-id": "ASSET_LEVELNAME_SMOKEY1", + "type": "LevelName", + "sha1": "3331c57fe7a31cfcf147757f71b439260b4b682a" + }, + { + "filename": "WizpigMouthSequenceName", + "build-id": "ASSET_LEVELNAME_WIZPIGMOUTHSEQUENCE", + "type": "LevelName", + "sha1": "3b8d99a5b6761b837def5ee264c8a41ac9972183" + }, + { + "filename": "WizpigAmuletSequenceName", + "build-id": "ASSET_LEVELNAME_WIZPIGAMULETSEQUENCE", + "type": "LevelName", + "sha1": "6e372ecb6dff69cca9095af6d68184c54a0ab60a" + }, + { + "filename": "TTAmuletSequenceName", + "build-id": "ASSET_LEVELNAME_TTAMULETSEQUENCE", + "type": "LevelName", + "sha1": "4da06635315d37a1637ab705ba776f429587a23d" + }, + { + "filename": "RocketSequenceName", + "build-id": "ASSET_LEVELNAME_ROCKETSEQUENCE", + "type": "LevelName", + "sha1": "af08a0398e02afe8362366eef6cb325a9aac144e" + }, + { + "filename": "Trickytops2Name", + "build-id": "ASSET_LEVELNAME_TRICKYTOPS2", + "type": "LevelName", + "sha1": "e21f2df104293e442d6953b0cf19ef9684e14c1c" + }, + { + "filename": "DinoDomainTrophyAnimName", + "build-id": "ASSET_LEVELNAME_DINODOMAINTROPHYANIM", + "type": "LevelName", + "sha1": "75635fef6647c9d6dbc35f9c961e8b8de788a3bc" + }, + { + "filename": "SnowflakeMountainTrophyAnimName", + "build-id": "ASSET_LEVELNAME_SNOWFLAKEMOUNTAINTROPHYANIM", + "type": "LevelName", + "sha1": "5eddb75ae322b440003cbab1bfcecb35f7d9cdbd" + }, + { + "filename": "SherbetIslandTrophyAnimName", + "build-id": "ASSET_LEVELNAME_SHERBETISLANDTROPHYANIM", + "type": "LevelName", + "sha1": "6dd3d148a3f518a64a200a3d5edddd5a2525935d" + }, + { + "filename": "DragonForestTrophyAnimName", + "build-id": "ASSET_LEVELNAME_DRAGONFORESTTROPHYANIM", + "type": "LevelName", + "sha1": "4ad5dcbf43bb276b369d8540c6740be95016b8e0" + }, + { + "filename": "FutureFunLandTrophyAnimName", + "build-id": "ASSET_LEVELNAME_FUTUREFUNLANDTROPHYANIM", + "type": "LevelName", + "sha1": "095867e67fc75cf366a0dd0481e7233acb8ea180" + }, + { + "filename": "Bluey2Name", + "build-id": "ASSET_LEVELNAME_BLUEY2", + "type": "LevelName", + "sha1": "b51df43b43aa7c9ca4336a96e6755e3ac00ca6c3" + }, + { + "filename": "Bubbler2Name", + "build-id": "ASSET_LEVELNAME_BUBBLER2", + "type": "LevelName", + "sha1": "6f7abcf12ccbbbd03eb899e42553d2f67e7379a3" + }, + { + "filename": "Smokey2Name", + "build-id": "ASSET_LEVELNAME_SMOKEY2", + "type": "LevelName", + "sha1": "7d0978f2f917abf96bbf973e3d9b8c648984168f" + }, + { + "filename": "Wizpig2Name", + "build-id": "ASSET_LEVELNAME_WIZPIG2", + "type": "LevelName", + "sha1": "61cc50fd12c2db8b533c4d460bcbee832d4be946" + }, + { + "filename": "PartySequenceName", + "build-id": "ASSET_LEVELNAME_PARTYSEQUENCE", + "type": "LevelName", + "sha1": "ac2d4d57dd53e7bc4764d42cfc2337979bbab1ef" + }, + { + "filename": "TricktopsAnimName", + "build-id": "ASSET_LEVELNAME_TRICKTOPSANIM", + "type": "LevelName", + "sha1": "c0d743e11272ab507665b0535365fb00bb3157a2" + }, + { + "filename": "SmokeyAnimName", + "build-id": "ASSET_LEVELNAME_SMOKEYANIM", + "type": "LevelName", + "sha1": "0803e071b55bac9f60003b4cfc3ac2cc13ab0568" + }, + { + "filename": "BlueyAnimName", + "build-id": "ASSET_LEVELNAME_BLUEYANIM", + "type": "LevelName", + "sha1": "1c4a2f2413c3b45095a448b1a180d9da8993f2af" + }, + { + "filename": "Wizpig1AnimName", + "build-id": "ASSET_LEVELNAME_WIZPIG1ANIM", + "type": "LevelName", + "sha1": "05775b1383b0fa27ee4e6d41d31e107ec563e8fa" + }, + { + "filename": "BubblerAnimName", + "build-id": "ASSET_LEVELNAME_BUBBLERANIM", + "type": "LevelName", + "sha1": "20917a7bc572dff57a7e6d81ad4c1a187ed35326" + }, + { + "filename": "Wizpig2AnimName", + "build-id": "ASSET_LEVELNAME_WIZPIG2ANIM", + "type": "LevelName", + "sha1": "005eeeef8c4f537431038d1733eb01f7cec48894" + }, + { + "filename": "LastBitName", + "build-id": "ASSET_LEVELNAME_LASTBIT", + "type": "LevelName", + "sha1": "0c7d2e0b0465c928cbb6daa65008d05ea0151acc" + }, + { + "filename": "LastBitBName", + "build-id": "ASSET_LEVELNAME_LASTBITB", + "type": "LevelName", + "sha1": "5f24f75b9efd6410b992203d70e989bc288b9fb6" + }, + { + "filename": "central_area_hub", + "build-id": "ASSET_LEVELMODEL_CENTRALAREAHUB", + "folder": "central_area", + "type": "LevelModel", + "sha1": "f3668ceb9f1961ad165afbb00a2f698d20f79e14" + }, + { + "filename": "bluey", + "build-id": "ASSET_LEVELMODEL_BLUEY", + "folder": "snowflake_mountain", + "type": "LevelModel", + "sha1": "8703858208bdd349b523dc2dd5e68de15f7a3a91" + }, + { + "filename": "dragon_forest_hub", + "build-id": "ASSET_LEVELMODEL_DRAGONFORESTHUB", + "folder": "dragon_forest", + "type": "LevelModel", + "sha1": "f04b71f7f478ad20d6c059403a4a3446cdfc802a" + }, + { + "filename": "fossil_canyon", + "build-id": "ASSET_LEVELMODEL_FOSSILCANYON", + "folder": "dino_domain", + "type": "LevelModel", + "sha1": "f12ae9bbde78025e4546ab63d2ea57355ed0ed77" + }, + { + "filename": "pirate_lagoon", + "build-id": "ASSET_LEVELMODEL_PIRATELAGOON", + "folder": "sherbet_island", + "type": "LevelModel", + "sha1": "c1b31f2de58a37ab9f44fe4d22b2de6a0d973cd8" + }, + { + "filename": "ancient_lake", + "build-id": "ASSET_LEVELMODEL_ANCIENTLAKE", + "folder": "dino_domain", + "type": "LevelModel", + "sha1": "3ae2d2031499ee123ace419f9a557512afabb628" + }, + { + "filename": "walrus_cove", + "build-id": "ASSET_LEVELMODEL_WALRUSCOVE", + "folder": "snowflake_mountain", + "type": "LevelModel", + "sha1": "b30c7b6012e315a3d00c5fe571eee087b72630e1" + }, + { + "filename": "hot_top_volcano", + "build-id": "ASSET_LEVELMODEL_HOTTOPVOLCANO", + "folder": "dino_domain", + "type": "LevelModel", + "sha1": "f24a46c3b30652c5837ec8e5e40c4a801e3b6730" + }, + { + "filename": "whale_bay", + "build-id": "ASSET_LEVELMODEL_WHALEBAY", + "folder": "sherbet_island", + "type": "LevelModel", + "sha1": "1e3289cc8fc7c829af0d2772fcb9e3d521748986" + }, + { + "filename": "snowball_valley", + "build-id": "ASSET_LEVELMODEL_SNOWBALLVALLEY", + "folder": "snowflake_mountain", + "type": "LevelModel", + "sha1": "7a2cd54c89a514fea2d3317b99fe8f491c3ab473" + }, + { + "filename": "temple_track", + "build-id": "ASSET_LEVELMODEL_TEMPLETRACK", + "folder": "unused", + "type": "LevelModel", + "sha1": "e755b7400350f549da538d5ec0193b887fdf6d5a" + }, + { + "filename": "crescent_island", + "build-id": "ASSET_LEVELMODEL_CRESCENTISLAND", + "folder": "sherbet_island", + "type": "LevelModel", + "sha1": "40ec7fc2c45e3a9dd15396a9370c2a539546dad2" + }, + { + "filename": "fire_mountain", + "build-id": "ASSET_LEVELMODEL_FIREMOUNTAIN", + "folder": "dino_domain", + "type": "LevelModel", + "sha1": "ee4c20567faaa99933278b411741af0e7aa4cc10" + }, + { + "filename": "dino_domain_hub", + "build-id": "ASSET_LEVELMODEL_DINODOMAINHUB", + "folder": "dino_domain", + "type": "LevelModel", + "sha1": "049c3ebe3cd9bb75e83e0120958fac6ee54714aa" + }, + { + "filename": "everfrost_peak", + "build-id": "ASSET_LEVELMODEL_EVERFROSTPEAK", + "folder": "snowflake_mountain", + "type": "LevelModel", + "sha1": "a0e3270e0b527c253444c1eed491bc2c97588229" + }, + { + "filename": "sherbet_island_hub", + "build-id": "ASSET_LEVELMODEL_SHERBETISLANDHUB", + "folder": "sherbet_island", + "type": "LevelModel", + "sha1": "e551d885b22714225c3aa03abd64d67acb27e7fd" + }, + { + "filename": "front_end", + "build-id": "ASSET_LEVELMODEL_FRONTEND", + "folder": "menu", + "type": "LevelModel", + "sha1": "9cd7292f71ca7bbfcc5afb819fba11427565e585" + }, + { + "filename": "character_select", + "build-id": "ASSET_LEVELMODEL_CHARACTERSELECT", + "folder": "menu", + "type": "LevelModel", + "sha1": "082a97ec6186ce3cff3dc31234a66897a55ad40a" + }, + { + "filename": "spaceport_alpha", + "build-id": "ASSET_LEVELMODEL_SPACEPORTALPHA", + "folder": "future_fun_land", + "type": "LevelModel", + "sha1": "3a386d09ab6e49c3c5c83771624fa27c16541c01" + }, + { + "filename": "horseshoe_gulch", + "build-id": "ASSET_LEVELMODEL_HORSESHOEGULCH", + "folder": "unused", + "type": "LevelModel", + "sha1": "227df22ba46df2224877e37efecc9e75d1412859" + }, + { + "filename": "greenwood_village", + "build-id": "ASSET_LEVELMODEL_GREENWOODVILLAGE", + "folder": "dragon_forest", + "type": "LevelModel", + "sha1": "8a6b3db5881080b58767caddf1231a2f46cdbaff" + }, + { + "filename": "spacedust_alley", + "build-id": "ASSET_LEVELMODEL_SPACEDUSTALLEY", + "folder": "future_fun_land", + "type": "LevelModel", + "sha1": "f72f7381ba2d22ebaf12b0f2877705175fdb986e" + }, + { + "filename": "title_screen", + "build-id": "ASSET_LEVELMODEL_TITLESCREEN", + "folder": "menu", + "type": "LevelModel", + "sha1": "57ddb12133975c0092b740c0dd736473ae97cbbd" + }, + { + "filename": "boulder_canyon", + "build-id": "ASSET_LEVELMODEL_BOULDERCANYON", + "folder": "dragon_forest", + "type": "LevelModel", + "sha1": "e3ecd7cde78c5fa04c21cd0d2cfa371cdbecde6b" + }, + { + "filename": "windmill_plains", + "build-id": "ASSET_LEVELMODEL_WINDMILLPLAINS", + "folder": "dragon_forest", + "type": "LevelModel", + "sha1": "d88d655d2dfd2e15950fa66c8623fc4452b6abeb" + }, + { + "filename": "snowflake_mountain_hub", + "build-id": "ASSET_LEVELMODEL_SNOWFLAKEMOUNTAINHUB", + "folder": "snowflake_mountain", + "type": "LevelModel", + "sha1": "89d70365a2fe89daf926c6ec1891c2a240e7b3eb" + }, + { + "filename": "smokey_castle", + "build-id": "ASSET_LEVELMODEL_SMOKEYCASTLE", + "folder": "dragon_forest", + "type": "LevelModel", + "sha1": "dd681bb996f8df89e33585fa012ea1975e3fa923" + }, + { + "filename": "darkwater_beach", + "build-id": "ASSET_LEVELMODEL_DARKWATERBEACH", + "folder": "sherbet_island", + "type": "LevelModel", + "sha1": "3f4ebb9e1bc53f530527d1230ecfc99e30ae5438" + }, + { + "filename": "icicle_pyramid", + "build-id": "ASSET_LEVELMODEL_ICICLEPYRAMID", + "folder": "snowflake_mountain", + "type": "LevelModel", + "sha1": "f57ec55d9bd97dfaacfc0fc5f947b6f4bef7e533" + }, + { + "filename": "frosty_village", + "build-id": "ASSET_LEVELMODEL_FROSTYVILLAGE", + "folder": "snowflake_mountain", + "type": "LevelModel", + "sha1": "8a08cf5323d56fef7d75809f83b37411da1a5095" + }, + { + "filename": "jungle_falls", + "build-id": "ASSET_LEVELMODEL_JUNGLEFALLS", + "folder": "dino_domain", + "type": "LevelModel", + "sha1": "34898d0f0bb34389c8cbc6e89bf142b6b76c5df2" + }, + { + "filename": "treasure_caves", + "build-id": "ASSET_LEVELMODEL_TREASURECAVES", + "folder": "sherbet_island", + "type": "LevelModel", + "sha1": "6223fbd8dca7dce5e06c98bb0c4232358cb58442" + }, + { + "filename": "haunted_woods", + "build-id": "ASSET_LEVELMODEL_HAUNTEDWOODS", + "folder": "dragon_forest", + "type": "LevelModel", + "sha1": "2aefc9c8bab3c97ec7d0c5cb783a72c7a45d05c0" + }, + { + "filename": "darkmoon_caverns", + "build-id": "ASSET_LEVELMODEL_DARKMOONCAVERNS", + "folder": "future_fun_land", + "type": "LevelModel", + "sha1": "ac91a244d22ffcb35d167976d6ae160a0af7855b" + }, + { + "filename": "star_city", + "build-id": "ASSET_LEVELMODEL_STARCITY", + "folder": "future_fun_land", + "type": "LevelModel", + "sha1": "721cecf430ace393c47fd4f7a419d898d7d08598" + }, + { + "filename": "trophy_race", + "build-id": "ASSET_LEVELMODEL_TROPHYRACE", + "folder": "menu", + "type": "LevelModel", + "sha1": "ca90e6f197795d92b4b9b30546a9aebcc7123f60" + }, + { + "filename": "future_fun_land_hub", + "build-id": "ASSET_LEVELMODEL_FUTUREFUNLANDHUB", + "folder": "future_fun_land", + "type": "LevelModel", + "sha1": "81967072e804705b24e52fbf7814bf2671c8ab08" + }, + { + "filename": "intro_sequence", + "build-id": "ASSET_LEVELMODEL_INTROSEQUENCE", + "folder": "cutscene", + "type": "LevelModel", + "sha1": "89b03ed050439823b2602f235c6e31968d263ea1" + }, + { + "filename": "smokey", + "build-id": "ASSET_LEVELMODEL_SMOKEY", + "folder": "dragon_forest", + "type": "LevelModel", + "sha1": "65dffb104aeb1f1e5f7e86add478dfb82f51d14f" + }, + { + "filename": "trickytops", + "build-id": "ASSET_LEVELMODEL_TRICKYTOPS", + "folder": "dino_domain", + "type": "LevelModel", + "sha1": "e1bb7477d32ee2d9f27ebc1b148397afad1f65ba" + }, + { + "filename": "wizpig_mouth_sequence", + "build-id": "ASSET_LEVELMODEL_WIZPIGMOUTHSEQUENCE", + "folder": "cutscene", + "type": "LevelModel", + "sha1": "37e146fa712c24bd8264b7b46c3f4eb848b7a8d4" + }, + { + "filename": "rocket_sequence", + "build-id": "ASSET_LEVELMODEL_ROCKETSEQUENCE", + "folder": "cutscene", + "type": "LevelModel", + "sha1": "aeab1d3ac80a63a7376e5068b445c7c589b927f5" + }, + { + "filename": "wizpig1", + "build-id": "ASSET_LEVELMODEL_WIZPIG1", + "folder": "central_area", + "type": "LevelModel", + "sha1": "a1e7bca3a42536ed33590fb6af15e91b42d8beed" + }, + { + "filename": "ocean_track", + "build-id": "ASSET_LEVELMODEL_OCEANTRACK", + "folder": "unused", + "type": "LevelModel", + "sha1": "a13b3badbd28d02ba9d888de983686b624da6b4c" + }, + { + "filename": "volcano_track", + "build-id": "ASSET_LEVELMODEL_VOLCANOTRACK", + "folder": "unused", + "type": "LevelModel", + "sha1": "98a59c988ad50f3cae6ede6711b6a136902b7863" + }, + { + "filename": "snow_mountain_track", + "build-id": "ASSET_LEVELMODEL_SNOWMOUNTAINTRACK", + "folder": "unused", + "type": "LevelModel", + "sha1": "84428fc9a23cd361f570856c1edc6af873d4932a" + }, + { + "filename": "party_sequence", + "build-id": "ASSET_LEVELMODEL_PARTYSEQUENCE", + "folder": "cutscene", + "type": "LevelModel", + "sha1": "26ec203921793a8365f788d347f094b10a30e9f0" + }, + { + "filename": "bluey_animation", + "build-id": "ASSET_LEVELMODEL_BLUEYANIMATION", + "folder": "cutscene", + "type": "LevelModel", + "sha1": "0c4b21e7b38cd97eb10ab5efb66c25daaca2d87c" + }, + { + "filename": "wizpig1_animation", + "build-id": "ASSET_LEVELMODEL_WIZPIG1ANIMATION", + "folder": "cutscene", + "type": "LevelModel", + "sha1": "be77df32037ded7ebc4c840b9a2c62692d097db4" + }, + { + "filename": "bubbler", + "build-id": "ASSET_LEVELMODEL_BUBBLER", + "folder": "sherbet_island", + "type": "LevelModel", + "sha1": "1e3be3dd5ce7bdb2823dd78382251d2f3446f9df" + }, + { + "filename": "bubbler_animation", + "build-id": "ASSET_LEVELMODEL_BUBBLERANIMATION", + "folder": "cutscene", + "type": "LevelModel", + "sha1": "5dc971a478f166ba78030c14a59e5b081a88986d" + }, + { + "filename": "wizpig2_animation", + "build-id": "ASSET_LEVELMODEL_WIZPIG2ANIMATION", + "folder": "cutscene", + "type": "LevelModel", + "sha1": "179e756a6990fb56c76f86172b98ce166b05bd53" + }, + { + "filename": "wizpig2", + "build-id": "ASSET_LEVELMODEL_WIZPIG2", + "folder": "future_fun_land", + "type": "LevelModel", + "sha1": "8f0577471b834c34ae94f7436d2e742dffb7e229" + }, + { + "filename": "ending_part1", + "build-id": "ASSET_LEVELMODEL_ENDINGPART1", + "folder": "cutscene", + "type": "LevelModel", + "sha1": "f21cf06a5f408c700a0f02183fa5ab334608ab76" + }, + { + "filename": "ending_part2", + "build-id": "ASSET_LEVELMODEL_ENDINGPART2", + "folder": "cutscene", + "type": "LevelModel", + "sha1": "019aa488c0715c3820d512ca70785c86e23b173c" + }, + { + "filename": "dome", + "build-id": "ASSET_OBJECTMODEL_DOME", + "type": "ObjectModel", + "sha1": "59ae3454d7898d839d8342a9d44e37b62fe5d839" + }, + { + "filename": "dome1", + "build-id": "ASSET_OBJECTMODEL_DOME1", + "type": "ObjectModel", + "sha1": "1e8887a550ebead68315a96dd23d4b68ce0e8f04" + }, + { + "filename": "dome2", + "build-id": "ASSET_OBJECTMODEL_DOME2", + "type": "ObjectModel", + "sha1": "6d98558427d34436d0af399f13f1e4113ccaecab" + }, + { + "filename": "dome3", + "build-id": "ASSET_OBJECTMODEL_DOME3", + "type": "ObjectModel", + "sha1": "4321d9f679594e7320c19c4f83380dcc89e63404" + }, + { + "filename": "dome4", + "build-id": "ASSET_OBJECTMODEL_DOME4", + "type": "ObjectModel", + "sha1": "e91587f9545debebaed05e978bb2da0835af010e" + }, + { + "filename": "dome5", + "build-id": "ASSET_OBJECTMODEL_DOME5", + "type": "ObjectModel", + "sha1": "6cdb0761127c2dfdac8f8bf44c2af96de2fc648a" + }, + { + "filename": "dome6", + "build-id": "ASSET_OBJECTMODEL_DOME6", + "type": "ObjectModel", + "sha1": "93e23e93ba177ea8748826332dae9c1c1d0b6f4f" + }, + { + "filename": "dome7", + "build-id": "ASSET_OBJECTMODEL_DOME7", + "type": "ObjectModel", + "sha1": "88510bf1125db151cfa2dbe12b63dd7469777bf9" + }, + { + "filename": "dome8", + "build-id": "ASSET_OBJECTMODEL_DOME8", + "type": "ObjectModel", + "sha1": "9306085a43880be77bb2fa8d498d38b918b35816" + }, + { + "filename": "dome9", + "build-id": "ASSET_OBJECTMODEL_DOME9", + "type": "ObjectModel", + "sha1": "a276084f54785cf7dd850b860f1bc6dc60aa42ef" + }, + { + "filename": "dome10", + "build-id": "ASSET_OBJECTMODEL_DOME10", + "type": "ObjectModel", + "sha1": "9767c5304aaa698ae72e4978de56d82a56973260" + }, + { + "filename": "dome11", + "build-id": "ASSET_OBJECTMODEL_DOME11", + "type": "ObjectModel", + "sha1": "794d993b134373f228eb4ccb46fe59ce7ff0ac5d" + }, + { + "filename": "dome12", + "build-id": "ASSET_OBJECTMODEL_DOME12", + "type": "ObjectModel", + "sha1": "bc2636d94d7e412f5d7655211b9280050b76bb69" + }, + { + "filename": "dome13", + "build-id": "ASSET_OBJECTMODEL_DOME13", + "type": "ObjectModel", + "sha1": "8d80cc8be1ab995f28a855130b38550c96ad5d3e" + }, + { + "filename": "dome14", + "build-id": "ASSET_OBJECTMODEL_DOME14", + "type": "ObjectModel", + "sha1": "65448019778e96d2628665b6c4fced7d8736cd2c" + }, + { + "filename": "dome15", + "build-id": "ASSET_OBJECTMODEL_DOME15", + "type": "ObjectModel", + "sha1": "3f73cba92b1d2adfeb70c6c91755d1ee4e1bbfd5" + }, + { + "filename": "dome16", + "build-id": "ASSET_OBJECTMODEL_DOME16", + "type": "ObjectModel", + "sha1": "7b8c0eabf0de8b92d0442d095bfc8267692221c4" + }, + { + "filename": "dome17", + "build-id": "ASSET_OBJECTMODEL_DOME17", + "type": "ObjectModel", + "sha1": "da3b90937bd4976fdc3f1da6eabd79b1bb875868" + }, + { + "filename": "FirstPlace", + "build-id": "ASSET_OBJECTMODEL_FIRSTPLACE", + "type": "ObjectModel", + "sha1": "4012c4de80c5862a060b4a06c5beb13896cdf4c2" + }, + { + "filename": "diddycar_0", + "build-id": "ASSET_OBJECTMODEL_DIDDYCAR_0", + "type": "ObjectModel", + "sha1": "633c8db2ef62d9ea124e8eb61b764819cff5bcb2" + }, + { + "filename": "diddycar_1", + "build-id": "ASSET_OBJECTMODEL_DIDDYCAR_1", + "type": "ObjectModel", + "sha1": "979b8407387f327e22fb451209f1755c634052e2" + }, + { + "filename": "diddycar_2", + "build-id": "ASSET_OBJECTMODEL_DIDDYCAR_2", + "type": "ObjectModel", + "sha1": "11532a921ada165775f81792d0f6c7bd2680986c" + }, + { + "filename": "diddycar_3", + "build-id": "ASSET_OBJECTMODEL_DIDDYCAR_3", + "type": "ObjectModel", + "sha1": "d649ebe0c54e34de2aafca99b4ec7c5e16bbbb52" + }, + { + "filename": "diddycar_4", + "build-id": "ASSET_OBJECTMODEL_DIDDYCAR_4", + "type": "ObjectModel", + "sha1": "c648f3fbea16be08860559489abd15c49027416c" + }, + { + "filename": "diddycar_5", + "build-id": "ASSET_OBJECTMODEL_DIDDYCAR_5", + "type": "ObjectModel", + "sha1": "0389432a8ad2c5c09a5e572dcaae97461553f4a3" + }, + { + "filename": "SWcar_0", + "build-id": "ASSET_OBJECTMODEL_SWCAR_0", + "type": "ObjectModel", + "sha1": "455e7067ee8f7fb66dcfa2fa6fdde3811eba818e" + }, + { + "filename": "SWcar_1", + "build-id": "ASSET_OBJECTMODEL_SWCAR_1", + "type": "ObjectModel", + "sha1": "0ddf17e080f9cd0b324abc35d57ed6c931fc8f79" + }, + { + "filename": "SWcar_2", + "build-id": "ASSET_OBJECTMODEL_SWCAR_2", + "type": "ObjectModel", + "sha1": "3885b208dad79d063d2f4c1397f8d5d9d6e59c6a" + }, + { + "filename": "SWcar_3", + "build-id": "ASSET_OBJECTMODEL_SWCAR_3", + "type": "ObjectModel", + "sha1": "973f3f699e8ceaa60ff8d30c63d6c3e26a06e5e9" + }, + { + "filename": "SWcar_4", + "build-id": "ASSET_OBJECTMODEL_SWCAR_4", + "type": "ObjectModel", + "sha1": "cc8c4d447451da4fd1b99b6a664782c33240caf6" + }, + { + "filename": "SWcar_5", + "build-id": "ASSET_OBJECTMODEL_SWCAR_5", + "type": "ObjectModel", + "sha1": "cb53175a3d3f782572a07f788e55e80e0ecb19d3" + }, + { + "filename": "BadgerCar_0", + "build-id": "ASSET_OBJECTMODEL_BADGERCAR_0", + "type": "ObjectModel", + "sha1": "1de864bb30e51b98944121c05fac2489ab5dd602" + }, + { + "filename": "BadgerCar_1", + "build-id": "ASSET_OBJECTMODEL_BADGERCAR_1", + "type": "ObjectModel", + "sha1": "476c7d4857201d1b9ff3a1b1cc0175cbc27a2f50" + }, + { + "filename": "BadgerCar_2", + "build-id": "ASSET_OBJECTMODEL_BADGERCAR_2", + "type": "ObjectModel", + "sha1": "797bbeb5566fd21466d7cdeb92424d359c76de17" + }, + { + "filename": "BadgerCar_3", + "build-id": "ASSET_OBJECTMODEL_BADGERCAR_3", + "type": "ObjectModel", + "sha1": "48fd16591dfc59de2d7490b73a2652ea494d76dc" + }, + { + "filename": "BadgerCar_4", + "build-id": "ASSET_OBJECTMODEL_BADGERCAR_4", + "type": "ObjectModel", + "sha1": "8b597af76c45e70748a7cfe8f194ba829b01aadc" + }, + { + "filename": "BadgerCar_5", + "build-id": "ASSET_OBJECTMODEL_BADGERCAR_5", + "type": "ObjectModel", + "sha1": "cf4fb138dac4e4c873d934818ea1112ba10892e7" + }, + { + "filename": "TortCar_0", + "build-id": "ASSET_OBJECTMODEL_TORTCAR_0", + "type": "ObjectModel", + "sha1": "c407a077b57eb52b314c4015e949012f4468f9c3" + }, + { + "filename": "TortCar_1", + "build-id": "ASSET_OBJECTMODEL_TORTCAR_1", + "type": "ObjectModel", + "sha1": "cef4596642f4f28274230c73078c7b55efd6ec5f" + }, + { + "filename": "TortCar_2", + "build-id": "ASSET_OBJECTMODEL_TORTCAR_2", + "type": "ObjectModel", + "sha1": "86feff608b7ee89bea54c5777183bd2d80a07db4" + }, + { + "filename": "TortCar_3", + "build-id": "ASSET_OBJECTMODEL_TORTCAR_3", + "type": "ObjectModel", + "sha1": "8b309ff8c530cfd8f6899b7a999eeff6ca5e04ad" + }, + { + "filename": "TortCar_4", + "build-id": "ASSET_OBJECTMODEL_TORTCAR_4", + "type": "ObjectModel", + "sha1": "3297efb4276c5a7431c8134657544d8d4bca59be" + }, + { + "filename": "TortCar_5", + "build-id": "ASSET_OBJECTMODEL_TORTCAR_5", + "type": "ObjectModel", + "sha1": "fb3fadd90687b52da0720d79bc7b791d9c286a12" + }, + { + "filename": "KremCar_0", + "build-id": "ASSET_OBJECTMODEL_KREMCAR_0", + "type": "ObjectModel", + "sha1": "e5dc188997c16861b96f372c52d8ded8098ff36b" + }, + { + "filename": "KremCar_1", + "build-id": "ASSET_OBJECTMODEL_KREMCAR_1", + "type": "ObjectModel", + "sha1": "06266f00219cad44a894a9c80571622f64f518fb" + }, + { + "filename": "KremCar_2", + "build-id": "ASSET_OBJECTMODEL_KREMCAR_2", + "type": "ObjectModel", + "sha1": "0d6821fc93d0afa5e5e7fddef57fdab0feee9466" + }, + { + "filename": "KremCar_3", + "build-id": "ASSET_OBJECTMODEL_KREMCAR_3", + "type": "ObjectModel", + "sha1": "f9777ce5d45d991298eaad3f82ae58d11bcbc3b4" + }, + { + "filename": "KremCar_4", + "build-id": "ASSET_OBJECTMODEL_KREMCAR_4", + "type": "ObjectModel", + "sha1": "f6d42a67f508cdc4792cd6e34beefe2c16af642a" + }, + { + "filename": "KremCar_5", + "build-id": "ASSET_OBJECTMODEL_KREMCAR_5", + "type": "ObjectModel", + "sha1": "fc4d8bba1572aa1c78d29d1f417ae827fad22700" + }, + { + "filename": "TigerCar_0", + "build-id": "ASSET_OBJECTMODEL_TIGERCAR_0", + "type": "ObjectModel", + "sha1": "2af486c79b7df8909c9a6fd9b9cbe92699b08fb7" + }, + { + "filename": "TigerCar_1", + "build-id": "ASSET_OBJECTMODEL_TIGERCAR_1", + "type": "ObjectModel", + "sha1": "45174bebc9fad72b09ed9e9404193866102982f3" + }, + { + "filename": "TigerCar_2", + "build-id": "ASSET_OBJECTMODEL_TIGERCAR_2", + "type": "ObjectModel", + "sha1": "e7a377573583baaab3985b542af0d1ba78cc46a0" + }, + { + "filename": "TigerCar_3", + "build-id": "ASSET_OBJECTMODEL_TIGERCAR_3", + "type": "ObjectModel", + "sha1": "5d25851be5cfced527a79f227c60a8fabb2cc956" + }, + { + "filename": "TigerCar_4", + "build-id": "ASSET_OBJECTMODEL_TIGERCAR_4", + "type": "ObjectModel", + "sha1": "071fb5f0292cf60067598aa4d53a8d482dab5f3c" + }, + { + "filename": "TigerCar_5", + "build-id": "ASSET_OBJECTMODEL_TIGERCAR_5", + "type": "ObjectModel", + "sha1": "05a2733f3f595217733449266d8a2413aee2f074" + }, + { + "filename": "ConkaCar_0", + "build-id": "ASSET_OBJECTMODEL_CONKACAR_0", + "type": "ObjectModel", + "sha1": "d4ea053de3acbedd17ac2f4bfd9d1af041266944" + }, + { + "filename": "ConkaCar_1", + "build-id": "ASSET_OBJECTMODEL_CONKACAR_1", + "type": "ObjectModel", + "sha1": "a17d5dd5ecbb536612adfdc7fee08b6e5233db9a" + }, + { + "filename": "ConkaCar_2", + "build-id": "ASSET_OBJECTMODEL_CONKACAR_2", + "type": "ObjectModel", + "sha1": "aacb5592565982019c6d37c972ec62dac9ccc309" + }, + { + "filename": "ConkaCar_3", + "build-id": "ASSET_OBJECTMODEL_CONKACAR_3", + "type": "ObjectModel", + "sha1": "23d5341bc7f9367337c54e6480b93719f99baeb5" + }, + { + "filename": "ConkaCar_4", + "build-id": "ASSET_OBJECTMODEL_CONKACAR_4", + "type": "ObjectModel", + "sha1": "79bd6bcacb118e634620ec9cf573b0016fbaf2ef" + }, + { + "filename": "ConkaCar_5", + "build-id": "ASSET_OBJECTMODEL_CONKACAR_5", + "type": "ObjectModel", + "sha1": "332140fffaa8524abd10cbfb2a9d58362ad25c39" + }, + { + "filename": "BanjoCar_0", + "build-id": "ASSET_OBJECTMODEL_BANJOCAR_0", + "type": "ObjectModel", + "sha1": "5eacb4edffa534fb08b1cba635a994182591a6b6" + }, + { + "filename": "BanjoCar_1", + "build-id": "ASSET_OBJECTMODEL_BANJOCAR_1", + "type": "ObjectModel", + "sha1": "59b54ebf54a962de914cadec4c236d78fdd3be22" + }, + { + "filename": "BanjoCar_2", + "build-id": "ASSET_OBJECTMODEL_BANJOCAR_2", + "type": "ObjectModel", + "sha1": "45b0892ea4eb204f0e27f9813c0853951e0d1eb2" + }, + { + "filename": "BanjoCar_3", + "build-id": "ASSET_OBJECTMODEL_BANJOCAR_3", + "type": "ObjectModel", + "sha1": "de133ef1acbbb6f51a4351e5fe3c12e0bb73fbfa" + }, + { + "filename": "BanjoCar_4", + "build-id": "ASSET_OBJECTMODEL_BANJOCAR_4", + "type": "ObjectModel", + "sha1": "118281a1d4426d9342802f3bdb89d4a20836e301" + }, + { + "filename": "BanjoCar_5", + "build-id": "ASSET_OBJECTMODEL_BANJOCAR_5", + "type": "ObjectModel", + "sha1": "e103a7cda70a9fa7c8ece5bad2610c60179999b5" + }, + { + "filename": "ChickenCar_0", + "build-id": "ASSET_OBJECTMODEL_CHICKENCAR_0", + "type": "ObjectModel", + "sha1": "e59b1ca084c3349c9f13fe7a122ff8c626f4a569" + }, + { + "filename": "ChickenCar_1", + "build-id": "ASSET_OBJECTMODEL_CHICKENCAR_1", + "type": "ObjectModel", + "sha1": "97ac35e0b6da505e61a5aa50c0d0546540feb288" + }, + { + "filename": "ChickenCar_2", + "build-id": "ASSET_OBJECTMODEL_CHICKENCAR_2", + "type": "ObjectModel", + "sha1": "cae60f6a066a875da38f4a1f7ad159623865fe22" + }, + { + "filename": "ChickenCar_3", + "build-id": "ASSET_OBJECTMODEL_CHICKENCAR_3", + "type": "ObjectModel", + "sha1": "f72b54e76e966d31e093d2a3b6b332e25b0bf50a" + }, + { + "filename": "ChickenCar_4", + "build-id": "ASSET_OBJECTMODEL_CHICKENCAR_4", + "type": "ObjectModel", + "sha1": "75224160a3c67d9abeb003c9d47a1b067c5d25c6" + }, + { + "filename": "ChickenCar_5", + "build-id": "ASSET_OBJECTMODEL_CHICKENCAR_5", + "type": "ObjectModel", + "sha1": "d335b014deee81f2e5088835c0f53ef8fead9633" + }, + { + "filename": "MouseCar_0", + "build-id": "ASSET_OBJECTMODEL_MOUSECAR_0", + "type": "ObjectModel", + "sha1": "042100d5582446d480c9c92872dc56c96a157abc" + }, + { + "filename": "MouseCar_1", + "build-id": "ASSET_OBJECTMODEL_MOUSECAR_1", + "type": "ObjectModel", + "sha1": "832767be26ab76292e2e60846c309a9db4027ef8" + }, + { + "filename": "MouseCar_2", + "build-id": "ASSET_OBJECTMODEL_MOUSECAR_2", + "type": "ObjectModel", + "sha1": "e2b7babb0cde2d94b5062be3e40109aebcf35bd8" + }, + { + "filename": "MouseCar_3", + "build-id": "ASSET_OBJECTMODEL_MOUSECAR_3", + "type": "ObjectModel", + "sha1": "a52e4a88a5e4cd6977518e9d712a3bbd68a26811" + }, + { + "filename": "MouseCar_4", + "build-id": "ASSET_OBJECTMODEL_MOUSECAR_4", + "type": "ObjectModel", + "sha1": "a538bda0370deec3c1fdad5a02e75629660cb271" + }, + { + "filename": "MouseCar_5", + "build-id": "ASSET_OBJECTMODEL_MOUSECAR_5", + "type": "ObjectModel", + "sha1": "9204794e856b547f1f23641ff130599ab570759c" + }, + { + "filename": "ticktockhover_0", + "build-id": "ASSET_OBJECTMODEL_TICKTOCKHOVER_0", + "type": "ObjectModel", + "sha1": "a0e7abf48e16a3cdc3dba6561a8d716c1681b7e1" + }, + { + "filename": "ticktockhover_1", + "build-id": "ASSET_OBJECTMODEL_TICKTOCKHOVER_1", + "type": "ObjectModel", + "sha1": "05583d63f0a1e6c1a331544da20d679d268fac40" + }, + { + "filename": "ticktockhover_2", + "build-id": "ASSET_OBJECTMODEL_TICKTOCKHOVER_2", + "type": "ObjectModel", + "sha1": "86b1f8ac73b12be92112e6d1ac482a773c2000d8" + }, + { + "filename": "ticktockhover_3", + "build-id": "ASSET_OBJECTMODEL_TICKTOCKHOVER_3", + "type": "ObjectModel", + "sha1": "0f8ea1e4661d410aaf7a4fff6a112cdc22b7f6d0" + }, + { + "filename": "ticktockhover_4", + "build-id": "ASSET_OBJECTMODEL_TICKTOCKHOVER_4", + "type": "ObjectModel", + "sha1": "919296ea1df17e5e82f4551021b2a4b43d3023c4" + }, + { + "filename": "ticktockhover_5", + "build-id": "ASSET_OBJECTMODEL_TICKTOCKHOVER_5", + "type": "ObjectModel", + "sha1": "4f9b59eda7dcd3f3cf3afb44f38a08b6813e3959" + }, + { + "filename": "KremlinHover_0", + "build-id": "ASSET_OBJECTMODEL_KREMLINHOVER_0", + "type": "ObjectModel", + "sha1": "75c1e2d3d5371c59c12f1980e190c97b5ab552cc" + }, + { + "filename": "KremlinHover_1", + "build-id": "ASSET_OBJECTMODEL_KREMLINHOVER_1", + "type": "ObjectModel", + "sha1": "e023b88ba08c5eb239b6985b3b2973413425964d" + }, + { + "filename": "KremlinHover_2", + "build-id": "ASSET_OBJECTMODEL_KREMLINHOVER_2", + "type": "ObjectModel", + "sha1": "30944ec1b251c04f02bca3b255a4547a9b4bb02d" + }, + { + "filename": "KremlinHover_3", + "build-id": "ASSET_OBJECTMODEL_KREMLINHOVER_3", + "type": "ObjectModel", + "sha1": "fabbe427cca04ca8fd6ef260d7ec217a8c74cb87" + }, + { + "filename": "KremlinHover_4", + "build-id": "ASSET_OBJECTMODEL_KREMLINHOVER_4", + "type": "ObjectModel", + "sha1": "70f793b2ae6a74a98b6c5dd9f536a305b97a70ec" + }, + { + "filename": "KremlinHover_5", + "build-id": "ASSET_OBJECTMODEL_KREMLINHOVER_5", + "type": "ObjectModel", + "sha1": "191f127626d17d56c9706d34a1b88b142028072e" + }, + { + "filename": "BadgerHover_0", + "build-id": "ASSET_OBJECTMODEL_BADGERHOVER_0", + "type": "ObjectModel", + "sha1": "97c54fb746883c0c57a37ad966f18efa4c0405d9" + }, + { + "filename": "BadgerHover_1", + "build-id": "ASSET_OBJECTMODEL_BADGERHOVER_1", + "type": "ObjectModel", + "sha1": "9b04e42efa03afd251b90a78a8791f43803689f3" + }, + { + "filename": "BadgerHover_2", + "build-id": "ASSET_OBJECTMODEL_BADGERHOVER_2", + "type": "ObjectModel", + "sha1": "72a8b02a2437fdf99c29fc49a31b42abaa8d7bb6" + }, + { + "filename": "BadgerHover_3", + "build-id": "ASSET_OBJECTMODEL_BADGERHOVER_3", + "type": "ObjectModel", + "sha1": "85d1fd36622b01ce138fe60e9767ddd17409fb47" + }, + { + "filename": "BadgerHover_4", + "build-id": "ASSET_OBJECTMODEL_BADGERHOVER_4", + "type": "ObjectModel", + "sha1": "fc7e368ac5e0bdf903682397fd0fe2db464c9fb7" + }, + { + "filename": "BadgerHover_5", + "build-id": "ASSET_OBJECTMODEL_BADGERHOVER_5", + "type": "ObjectModel", + "sha1": "c7ebbb0bd0c2a23afeeb336cde6ef98c24a7201f" + }, + { + "filename": "ConkaHover_0", + "build-id": "ASSET_OBJECTMODEL_CONKAHOVER_0", + "type": "ObjectModel", + "sha1": "65da1daa8fdc126694624ed075c3f4a99e0ace77" + }, + { + "filename": "ConkaHover_1", + "build-id": "ASSET_OBJECTMODEL_CONKAHOVER_1", + "type": "ObjectModel", + "sha1": "59705c2a38889f122fe981c1e5ae46f58bdc6882" + }, + { + "filename": "ConkaHover_2", + "build-id": "ASSET_OBJECTMODEL_CONKAHOVER_2", + "type": "ObjectModel", + "sha1": "7e167f0402e41b2d315cecb01351f80aa73f4af6" + }, + { + "filename": "ConkaHover_3", + "build-id": "ASSET_OBJECTMODEL_CONKAHOVER_3", + "type": "ObjectModel", + "sha1": "89b362a39747e31b6d50f9500ab762e2545d22f9" + }, + { + "filename": "ConkaHover_4", + "build-id": "ASSET_OBJECTMODEL_CONKAHOVER_4", + "type": "ObjectModel", + "sha1": "aaa901e652d8c745df2e00efa582d053500f07a4" + }, + { + "filename": "ConkaHover_5", + "build-id": "ASSET_OBJECTMODEL_CONKAHOVER_5", + "type": "ObjectModel", + "sha1": "47ac20cd56b8be7943d8cedfbb8a2c3f131ea1e3" + }, + { + "filename": "TortHover_0", + "build-id": "ASSET_OBJECTMODEL_TORTHOVER_0", + "type": "ObjectModel", + "sha1": "213c59983d3a8a4eab3d6355811205ca4ae80464" + }, + { + "filename": "TortHover_1", + "build-id": "ASSET_OBJECTMODEL_TORTHOVER_1", + "type": "ObjectModel", + "sha1": "dc945ca1494fe80bbaac1d819186f4f30affe5ef" + }, + { + "filename": "TortHover_2", + "build-id": "ASSET_OBJECTMODEL_TORTHOVER_2", + "type": "ObjectModel", + "sha1": "09c1bf45ec80bb9f83e7174842b78498efc540e7" + }, + { + "filename": "TortHover_3", + "build-id": "ASSET_OBJECTMODEL_TORTHOVER_3", + "type": "ObjectModel", + "sha1": "1cd012e53dbe760767726d7398433da00c5e079b" + }, + { + "filename": "TortHover_4", + "build-id": "ASSET_OBJECTMODEL_TORTHOVER_4", + "type": "ObjectModel", + "sha1": "e2323922b18e6e9ff279ef639da459887fe645db" + }, + { + "filename": "TortHover_5", + "build-id": "ASSET_OBJECTMODEL_TORTHOVER_5", + "type": "ObjectModel", + "sha1": "c91cbefe157642e7e490fb79c10d6eab5be0acf4" + }, + { + "filename": "BanjoHover_0", + "build-id": "ASSET_OBJECTMODEL_BANJOHOVER_0", + "type": "ObjectModel", + "sha1": "243e3b0a4befdc5c42e8f6aadf216ac538e68238" + }, + { + "filename": "BanjoHover_1", + "build-id": "ASSET_OBJECTMODEL_BANJOHOVER_1", + "type": "ObjectModel", + "sha1": "10a744581ad59b2f240de462f8504d2b8d2a2a65" + }, + { + "filename": "BanjoHover_2", + "build-id": "ASSET_OBJECTMODEL_BANJOHOVER_2", + "type": "ObjectModel", + "sha1": "b57c646972c77c664c372483abe0d0fd4ce2a653" + }, + { + "filename": "BanjoHover_3", + "build-id": "ASSET_OBJECTMODEL_BANJOHOVER_3", + "type": "ObjectModel", + "sha1": "54ee52fab88893c8971b9705852b290e71b90379" + }, + { + "filename": "BanjoHover_4", + "build-id": "ASSET_OBJECTMODEL_BANJOHOVER_4", + "type": "ObjectModel", + "sha1": "2940551d263f86ae2cb484a3fc7fc1f7ff8dba7c" + }, + { + "filename": "BanjoHover_5", + "build-id": "ASSET_OBJECTMODEL_BANJOHOVER_5", + "type": "ObjectModel", + "sha1": "8fde94c5d3287858c909caac0897e6d7c2f869c3" + }, + { + "filename": "TigerHover_0", + "build-id": "ASSET_OBJECTMODEL_TIGERHOVER_0", + "type": "ObjectModel", + "sha1": "4fccf29ef6fb5e795bd7992390fcf58254645fb0" + }, + { + "filename": "TigerHover_1", + "build-id": "ASSET_OBJECTMODEL_TIGERHOVER_1", + "type": "ObjectModel", + "sha1": "d67d80e6cc96c55880ed9b9e51f9cb146adaaff8" + }, + { + "filename": "TigerHover_2", + "build-id": "ASSET_OBJECTMODEL_TIGERHOVER_2", + "type": "ObjectModel", + "sha1": "6ec7b525b3ae8abf1d5d8ede801b2e7c38330a42" + }, + { + "filename": "TigerHover_3", + "build-id": "ASSET_OBJECTMODEL_TIGERHOVER_3", + "type": "ObjectModel", + "sha1": "5d4bd7abf7e953f0937998cbeee26d92abd7c9a1" + }, + { + "filename": "TigerHover_4", + "build-id": "ASSET_OBJECTMODEL_TIGERHOVER_4", + "type": "ObjectModel", + "sha1": "2db31e6642a67733223819a8789b58d2a875161e" + }, + { + "filename": "TigerHover_5", + "build-id": "ASSET_OBJECTMODEL_TIGERHOVER_5", + "type": "ObjectModel", + "sha1": "f433b76f01dc6ac00a9e39ecd0e8cfe40a744ee9" + }, + { + "filename": "ChickenHover_0", + "build-id": "ASSET_OBJECTMODEL_CHICKENHOVER_0", + "type": "ObjectModel", + "sha1": "c9f0f806267b3db95e2129ccace3dced3502d089" + }, + { + "filename": "ChickenHover_1", + "build-id": "ASSET_OBJECTMODEL_CHICKENHOVER_1", + "type": "ObjectModel", + "sha1": "5d6df045e57b5817324350ba32b2e6ffc64389ab" + }, + { + "filename": "ChickenHover_2", + "build-id": "ASSET_OBJECTMODEL_CHICKENHOVER_2", + "type": "ObjectModel", + "sha1": "3aef62939ee10c998c453fc46171bab0bec00366" + }, + { + "filename": "ChickenHover_3", + "build-id": "ASSET_OBJECTMODEL_CHICKENHOVER_3", + "type": "ObjectModel", + "sha1": "bcab2537bb07c09a89a2dd6b18478cbfeb7b5a57" + }, + { + "filename": "ChickenHover_4", + "build-id": "ASSET_OBJECTMODEL_CHICKENHOVER_4", + "type": "ObjectModel", + "sha1": "866b850d819e902a72e1b80940350f2a5b361754" + }, + { + "filename": "ChickenHover_5", + "build-id": "ASSET_OBJECTMODEL_CHICKENHOVER_5", + "type": "ObjectModel", + "sha1": "5f57301b2d5d0457735685d89d8cce9dba899b6b" + }, + { + "filename": "MouseHover_0", + "build-id": "ASSET_OBJECTMODEL_MOUSEHOVER_0", + "type": "ObjectModel", + "sha1": "cd17f5966a041453698e089076610395e3f90bce" + }, + { + "filename": "MouseHover_1", + "build-id": "ASSET_OBJECTMODEL_MOUSEHOVER_1", + "type": "ObjectModel", + "sha1": "d6ef1c171760ea1afc26b687fde262b9cc883800" + }, + { + "filename": "MouseHover_2", + "build-id": "ASSET_OBJECTMODEL_MOUSEHOVER_2", + "type": "ObjectModel", + "sha1": "c570e9c97e469ab295b22e398028557fb13f1eef" + }, + { + "filename": "MouseHover_3", + "build-id": "ASSET_OBJECTMODEL_MOUSEHOVER_3", + "type": "ObjectModel", + "sha1": "784704c18a2fce259f8c0ca2e274ee521307bbc7" + }, + { + "filename": "MouseHover_4", + "build-id": "ASSET_OBJECTMODEL_MOUSEHOVER_4", + "type": "ObjectModel", + "sha1": "689cce1d8d247e6b5b87bca05cd43c6c35e0383d" + }, + { + "filename": "MouseHover_5", + "build-id": "ASSET_OBJECTMODEL_MOUSEHOVER_5", + "type": "ObjectModel", + "sha1": "85796f17ab6ad4804dc4bb42629f6d03f5f05b2b" + }, + { + "filename": "diddyhover_0", + "build-id": "ASSET_OBJECTMODEL_DIDDYHOVER_0", + "type": "ObjectModel", + "sha1": "d61b2a3792849003827ef1308e1e80f9d8dcab68" + }, + { + "filename": "diddyhover_1", + "build-id": "ASSET_OBJECTMODEL_DIDDYHOVER_1", + "type": "ObjectModel", + "sha1": "fe30cf6d2ef38e4df274154ed409c595999b4575" + }, + { + "filename": "diddyhover_2", + "build-id": "ASSET_OBJECTMODEL_DIDDYHOVER_2", + "type": "ObjectModel", + "sha1": "04c1c61256fb193c8090f64c497c95ca28925aa3" + }, + { + "filename": "diddyhover_3", + "build-id": "ASSET_OBJECTMODEL_DIDDYHOVER_3", + "type": "ObjectModel", + "sha1": "45e67b76789343fccff2f933d313f3b13cee4f98" + }, + { + "filename": "diddyhover_4", + "build-id": "ASSET_OBJECTMODEL_DIDDYHOVER_4", + "type": "ObjectModel", + "sha1": "45b1ea84825d3b457f4858ab6c608f186983a3a5" + }, + { + "filename": "diddyhover_5", + "build-id": "ASSET_OBJECTMODEL_DIDDYHOVER_5", + "type": "ObjectModel", + "sha1": "0ae97f2b91c727a8d58a1950e15bcce367033230" + }, + { + "filename": "diddyplane_0", + "build-id": "ASSET_OBJECTMODEL_DIDDYPLANE_0", + "type": "ObjectModel", + "sha1": "8a660f61bc0170c6856202ff2d4b6f3e944ab069" + }, + { + "filename": "diddyplane_1", + "build-id": "ASSET_OBJECTMODEL_DIDDYPLANE_1", + "type": "ObjectModel", + "sha1": "3c0f056397116cfda94029b1a9a56917a593b6dc" + }, + { + "filename": "diddyplane_2", + "build-id": "ASSET_OBJECTMODEL_DIDDYPLANE_2", + "type": "ObjectModel", + "sha1": "c7ee956fe17a7f5e2048d32410472a6784668588" + }, + { + "filename": "diddyplane_3", + "build-id": "ASSET_OBJECTMODEL_DIDDYPLANE_3", + "type": "ObjectModel", + "sha1": "316c0db99043a772760b3d08285120ade1b67555" + }, + { + "filename": "diddyplane_4", + "build-id": "ASSET_OBJECTMODEL_DIDDYPLANE_4", + "type": "ObjectModel", + "sha1": "4228e534fba7b4578a7c6aacc5192c8d670b65cd" + }, + { + "filename": "diddyplane_5", + "build-id": "ASSET_OBJECTMODEL_DIDDYPLANE_5", + "type": "ObjectModel", + "sha1": "f46bea15b425d16f93cb2c61ec366dbee719891b" + }, + { + "filename": "TigerAnimPlane", + "build-id": "ASSET_OBJECTMODEL_TIGERANIMPLANE", + "type": "ObjectModel", + "sha1": "4731344164e4218034713e65a148046d412a2311" + }, + { + "filename": "ticktockplane_0", + "build-id": "ASSET_OBJECTMODEL_TICKTOCKPLANE_0", + "type": "ObjectModel", + "sha1": "75bd558d365902c85c4b4976bed316f7104f62d8" + }, + { + "filename": "ticktockplane_1", + "build-id": "ASSET_OBJECTMODEL_TICKTOCKPLANE_1", + "type": "ObjectModel", + "sha1": "884776fab2695b06ca3623b2c88a5b7f2360b53e" + }, + { + "filename": "ticktockplane_2", + "build-id": "ASSET_OBJECTMODEL_TICKTOCKPLANE_2", + "type": "ObjectModel", + "sha1": "b12be075067642d7c0cdff0d6dcc6ac4fd9db049" + }, + { + "filename": "ticktockplane_3", + "build-id": "ASSET_OBJECTMODEL_TICKTOCKPLANE_3", + "type": "ObjectModel", + "sha1": "616afcda05bc5608e1637e15c75a7ac28c09ddd2" + }, + { + "filename": "ticktockplane_4", + "build-id": "ASSET_OBJECTMODEL_TICKTOCKPLANE_4", + "type": "ObjectModel", + "sha1": "b7826c85c321d308ed986ff3324181c06ead351f" + }, + { + "filename": "ticktockplane_5", + "build-id": "ASSET_OBJECTMODEL_TICKTOCKPLANE_5", + "type": "ObjectModel", + "sha1": "7655c574d56877758c09d48f9e124d28a87f9a43" + }, + { + "filename": "KremPlane_0", + "build-id": "ASSET_OBJECTMODEL_KREMPLANE_0", + "type": "ObjectModel", + "sha1": "137bfb2ff1d07f3d58a4d4b03a53bda333119a33" + }, + { + "filename": "KremPlane_1", + "build-id": "ASSET_OBJECTMODEL_KREMPLANE_1", + "type": "ObjectModel", + "sha1": "8d888f66f94f3ab0bc830344b947d4ad38c2f9d2" + }, + { + "filename": "KremPlane_2", + "build-id": "ASSET_OBJECTMODEL_KREMPLANE_2", + "type": "ObjectModel", + "sha1": "b2df2f168c826260dd5655eec4b0614432d212f8" + }, + { + "filename": "KremPlane_3", + "build-id": "ASSET_OBJECTMODEL_KREMPLANE_3", + "type": "ObjectModel", + "sha1": "9dc6096878616b0abff8459253e2abb3ae3bf444" + }, + { + "filename": "KremPlane_4", + "build-id": "ASSET_OBJECTMODEL_KREMPLANE_4", + "type": "ObjectModel", + "sha1": "dedad338f3942384738cf06771dfbeb1af6f95f4" + }, + { + "filename": "KremPlane_5", + "build-id": "ASSET_OBJECTMODEL_KREMPLANE_5", + "type": "ObjectModel", + "sha1": "79ecb0e03cd5af4d34afea94134382ae0fd308dd" + }, + { + "filename": "BadgerPlane_0", + "build-id": "ASSET_OBJECTMODEL_BADGERPLANE_0", + "type": "ObjectModel", + "sha1": "15077a0ebf1880838868cba3f32f42e3c94e460e" + }, + { + "filename": "BadgerPlane_1", + "build-id": "ASSET_OBJECTMODEL_BADGERPLANE_1", + "type": "ObjectModel", + "sha1": "a088185192d5553ca19e0cde710985b71ac1b420" + }, + { + "filename": "BadgerPlane_2", + "build-id": "ASSET_OBJECTMODEL_BADGERPLANE_2", + "type": "ObjectModel", + "sha1": "bc5d92f60d303fb33d52d44e079ad1eac52f2535" + }, + { + "filename": "BadgerPlane_3", + "build-id": "ASSET_OBJECTMODEL_BADGERPLANE_3", + "type": "ObjectModel", + "sha1": "59b68e0915e2d65c4d5a8d284b21f51ef40320de" + }, + { + "filename": "BadgerPlane_4", + "build-id": "ASSET_OBJECTMODEL_BADGERPLANE_4", + "type": "ObjectModel", + "sha1": "956dd6f76ab690eba79de72edaebb1cd9407678b" + }, + { + "filename": "BadgerPlane_5", + "build-id": "ASSET_OBJECTMODEL_BADGERPLANE_5", + "type": "ObjectModel", + "sha1": "8cc97b948860e92dc22e0d9282bd96afcb15a9ae" + }, + { + "filename": "TortPlane_0", + "build-id": "ASSET_OBJECTMODEL_TORTPLANE_0", + "type": "ObjectModel", + "sha1": "e5bb2b8acba45dc04513538dabf35cb621cd081b" + }, + { + "filename": "TortPlane_1", + "build-id": "ASSET_OBJECTMODEL_TORTPLANE_1", + "type": "ObjectModel", + "sha1": "9d238250cbe0b6f2ea25565b861ef5cd794d0eb7" + }, + { + "filename": "TortPlane_2", + "build-id": "ASSET_OBJECTMODEL_TORTPLANE_2", + "type": "ObjectModel", + "sha1": "9899fc1330d1f2033709d0104f82a2a7ff99f13b" + }, + { + "filename": "TortPlane_3", + "build-id": "ASSET_OBJECTMODEL_TORTPLANE_3", + "type": "ObjectModel", + "sha1": "1c81b2875cf20f5aca4b3c94f65c74612c7aeeaa" + }, + { + "filename": "TortPlane_4", + "build-id": "ASSET_OBJECTMODEL_TORTPLANE_4", + "type": "ObjectModel", + "sha1": "35ce2030693f41538c42ab4a5889c9ced209751c" + }, + { + "filename": "TortPlane_5", + "build-id": "ASSET_OBJECTMODEL_TORTPLANE_5", + "type": "ObjectModel", + "sha1": "ebeb2ea08793a691414e3a92fc892e6943636c60" + }, + { + "filename": "Conka_0", + "build-id": "ASSET_OBJECTMODEL_CONKA_0", + "type": "ObjectModel", + "sha1": "fc25b93067ff26fdf8d2af192f46b5df3372395b" + }, + { + "filename": "Conka_1", + "build-id": "ASSET_OBJECTMODEL_CONKA_1", + "type": "ObjectModel", + "sha1": "1d7589ea5fc7e4868f5e576e5dfc278c83b9efad" + }, + { + "filename": "Conka_2", + "build-id": "ASSET_OBJECTMODEL_CONKA_2", + "type": "ObjectModel", + "sha1": "e207d21cc1e857a1188bae1439aac4de1483d99a" + }, + { + "filename": "Conka_3", + "build-id": "ASSET_OBJECTMODEL_CONKA_3", + "type": "ObjectModel", + "sha1": "31f1bf7c43148a964bd3480921f85a5cab3c718f" + }, + { + "filename": "Conka_4", + "build-id": "ASSET_OBJECTMODEL_CONKA_4", + "type": "ObjectModel", + "sha1": "9e5ad6ddb8b85030c660c538be1dd350726b847b" + }, + { + "filename": "Conka_5", + "build-id": "ASSET_OBJECTMODEL_CONKA_5", + "type": "ObjectModel", + "sha1": "50cd2eb956a235c63e28bf614e2617d28aa050c9" + }, + { + "filename": "TigPlane_0", + "build-id": "ASSET_OBJECTMODEL_TIGPLANE_0", + "type": "ObjectModel", + "sha1": "515fed3419d409af22b7a64003f79c3a5edca6e7" + }, + { + "filename": "TigPlane_1", + "build-id": "ASSET_OBJECTMODEL_TIGPLANE_1", + "type": "ObjectModel", + "sha1": "3d315559d63cfcafe1dfc53f774150c1ff92fa89" + }, + { + "filename": "TigPlane_2", + "build-id": "ASSET_OBJECTMODEL_TIGPLANE_2", + "type": "ObjectModel", + "sha1": "df6bd9a54497e213b809bcfc41d1b7c18da8b98c" + }, + { + "filename": "TigPlane_3", + "build-id": "ASSET_OBJECTMODEL_TIGPLANE_3", + "type": "ObjectModel", + "sha1": "3c6a7bd2a1b0348323e2a5c73b529614f6c9eef6" + }, + { + "filename": "TigPlane_4", + "build-id": "ASSET_OBJECTMODEL_TIGPLANE_4", + "type": "ObjectModel", + "sha1": "2b74d51067fb23270cb9f17cdc45dce9a18c66f8" + }, + { + "filename": "TigPlane_5", + "build-id": "ASSET_OBJECTMODEL_TIGPLANE_5", + "type": "ObjectModel", + "sha1": "be0993c3b17ce8b40fdc0b9ac7ae6d90ed50aeb2" + }, + { + "filename": "BanjoPlane_0", + "build-id": "ASSET_OBJECTMODEL_BANJOPLANE_0", + "type": "ObjectModel", + "sha1": "797ad02b654c3c09a7914cf3ceb32eb961325072" + }, + { + "filename": "BanjoPlane_1", + "build-id": "ASSET_OBJECTMODEL_BANJOPLANE_1", + "type": "ObjectModel", + "sha1": "9c66a897b15acf7b939f0be804c3bafdf282d50c" + }, + { + "filename": "BanjoPlane_2", + "build-id": "ASSET_OBJECTMODEL_BANJOPLANE_2", + "type": "ObjectModel", + "sha1": "daf5f474a3bb7545e83fd28175613b345cf49f21" + }, + { + "filename": "BanjoPlane_3", + "build-id": "ASSET_OBJECTMODEL_BANJOPLANE_3", + "type": "ObjectModel", + "sha1": "df7cb624d6e8d69ffd1babd21ada05198b7bcb1f" + }, + { + "filename": "BanjoPlane_4", + "build-id": "ASSET_OBJECTMODEL_BANJOPLANE_4", + "type": "ObjectModel", + "sha1": "810afc939f0b3ecae18cf42d646d0234c655feda" + }, + { + "filename": "BanjoPlane_5", + "build-id": "ASSET_OBJECTMODEL_BANJOPLANE_5", + "type": "ObjectModel", + "sha1": "b06f740502d6d0272a719e6bf2f11253a3d99caf" + }, + { + "filename": "ChickenPlane_0", + "build-id": "ASSET_OBJECTMODEL_CHICKENPLANE_0", + "type": "ObjectModel", + "sha1": "60e42d89f1704a491d2475b716b2168634b1b01f" + }, + { + "filename": "ChickenPlane_1", + "build-id": "ASSET_OBJECTMODEL_CHICKENPLANE_1", + "type": "ObjectModel", + "sha1": "8f3ec8d33709b3c7bc850a24e021d9a071f8445a" + }, + { + "filename": "ChickenPlane_2", + "build-id": "ASSET_OBJECTMODEL_CHICKENPLANE_2", + "type": "ObjectModel", + "sha1": "054743f6db38b46666b8afacd9c6ed83bf8fa80d" + }, + { + "filename": "ChickenPlane_3", + "build-id": "ASSET_OBJECTMODEL_CHICKENPLANE_3", + "type": "ObjectModel", + "sha1": "d0f4be34427ad7491f7770522a6c94c10091bd88" + }, + { + "filename": "ChickenPlane_4", + "build-id": "ASSET_OBJECTMODEL_CHICKENPLANE_4", + "type": "ObjectModel", + "sha1": "a5e4a073ef7a66ad791aa9e4329b031bd11812af" + }, + { + "filename": "ChickenPlane_5", + "build-id": "ASSET_OBJECTMODEL_CHICKENPLANE_5", + "type": "ObjectModel", + "sha1": "ef073a41da5ef1ac595e61005afb7b960de1fc15" + }, + { + "filename": "MousePlane_0", + "build-id": "ASSET_OBJECTMODEL_MOUSEPLANE_0", + "type": "ObjectModel", + "sha1": "55bf4e5f9931fe9469bc1165747908f8c8f31495" + }, + { + "filename": "MousePlane_1", + "build-id": "ASSET_OBJECTMODEL_MOUSEPLANE_1", + "type": "ObjectModel", + "sha1": "d80728c076ed06fc61ffe76f77d7d411ff06ca1c" + }, + { + "filename": "MousePlane_2", + "build-id": "ASSET_OBJECTMODEL_MOUSEPLANE_2", + "type": "ObjectModel", + "sha1": "e33f751aa03a5191a5c87b43783d7b62c561e0ea" + }, + { + "filename": "MousePlane_3", + "build-id": "ASSET_OBJECTMODEL_MOUSEPLANE_3", + "type": "ObjectModel", + "sha1": "9d0fed49fe1fc9ffeb62529ba4245218d5c9bb18" + }, + { + "filename": "MousePlane_4", + "build-id": "ASSET_OBJECTMODEL_MOUSEPLANE_4", + "type": "ObjectModel", + "sha1": "66a58f54383601a34c1840c1df3afff42f5f816f" + }, + { + "filename": "MousePlane_5", + "build-id": "ASSET_OBJECTMODEL_MOUSEPLANE_5", + "type": "ObjectModel", + "sha1": "fa4192dd516d3477b9e91ab2b0cd2089d78b3d66" + }, + { + "filename": "EmptyPlane", + "build-id": "ASSET_OBJECTMODEL_EMPTYPLANE", + "type": "ObjectModel", + "sha1": "f271bb14ada35cd3681b07885057c4a94e20bc9f" + }, + { + "filename": "EmptyCar", + "build-id": "ASSET_OBJECTMODEL_EMPTYCAR", + "type": "ObjectModel", + "sha1": "d0d38df85117e78962bb118daf356c4a8eb3d1e2" + }, + { + "filename": "EmptyHover", + "build-id": "ASSET_OBJECTMODEL_EMPTYHOVER", + "type": "ObjectModel", + "sha1": "ae54c131720e7e26043d002731671c166e7e289f" + }, + { + "filename": "MagicCarpet", + "build-id": "ASSET_OBJECTMODEL_MAGICCARPET", + "type": "ObjectModel", + "sha1": "1e2bdc04fe6a93f2a0a95efe7190a0ea4b5169bc" + }, + { + "filename": "PolyGoldBaloon_0", + "build-id": "ASSET_OBJECTMODEL_POLYGOLDBALOON_0", + "type": "ObjectModel", + "sha1": "765478fed294593a4a8aa908f6cb5b23ebfe6b92" + }, + { + "filename": "PolyGoldBaloon_1", + "build-id": "ASSET_OBJECTMODEL_POLYGOLDBALOON_1", + "type": "ObjectModel", + "sha1": "b1533bd73f86db89c5cfbb047ffec7c762f332f9" + }, + { + "filename": "Stopwatch-man", + "build-id": "ASSET_OBJECTMODEL_STOPWATCHMAN", + "type": "ObjectModel", + "sha1": "bb189df8bff8e23a9d6df0e5995f73b964fef07f" + }, + { + "filename": "stopwatchselect", + "build-id": "ASSET_OBJECTMODEL_STOPWATCHSELECT", + "type": "ObjectModel", + "sha1": "ec1d719e6b04a1855cdb736f9ad6bae0bbda72ea" + }, + { + "filename": "Parkwarden", + "build-id": "ASSET_OBJECTMODEL_PARKWARDEN", + "type": "ObjectModel", + "sha1": "bc308a5852f9b5ee0525dd7f50115e98170cf499" + }, + { + "filename": "AnimGenie2", + "build-id": "ASSET_OBJECTMODEL_ANIMGENIE2", + "type": "ObjectModel", + "sha1": "bc84958e1b574f96a3d6dd9b1160fb68b2b7e055" + }, + { + "filename": "Geniehead", + "build-id": "ASSET_OBJECTMODEL_GENIEHEAD", + "type": "ObjectModel", + "sha1": "75bb9e50be7845fc530213bb5220f12e54863137" + }, + { + "filename": "Pigboss", + "build-id": "ASSET_OBJECTMODEL_PIGBOSS", + "type": "ObjectModel", + "sha1": "7aef474c0c30267fe77682b0bb95669c4d11a1c7" + }, + { + "filename": "Pigboss2", + "build-id": "ASSET_OBJECTMODEL_PIGBOSS2", + "type": "ObjectModel", + "sha1": "1c2c5cef7c4c494f2c5b60e66a5fa4633f958507" + }, + { + "filename": "Wizpig", + "build-id": "ASSET_OBJECTMODEL_WIZPIG", + "type": "ObjectModel", + "sha1": "55f8dd256fd45086bee4ec8ad26d57dd56bfd5ad" + }, + { + "filename": "PigRocketeer", + "build-id": "ASSET_OBJECTMODEL_PIGROCKETEER", + "type": "ObjectModel", + "sha1": "3a9b9bc07e04d3cc25dca99156786849d9279b0e" + }, + { + "filename": "WizpigRocket", + "build-id": "ASSET_OBJECTMODEL_WIZPIGROCKET", + "type": "ObjectModel", + "sha1": "d73e4513d8e46d2e1eb04e7ef2e1163ecb2d254d" + }, + { + "filename": "rocketbit1", + "build-id": "ASSET_OBJECTMODEL_ROCKETBIT1", + "type": "ObjectModel", + "sha1": "bfea23ea16445350db5d565f1b05d381e232c823" + }, + { + "filename": "rocketbit2", + "build-id": "ASSET_OBJECTMODEL_ROCKETBIT2", + "type": "ObjectModel", + "sha1": "466e9eac5b5265fa477c0336fedb63405ed7d16e" + }, + { + "filename": "Pigboulder", + "build-id": "ASSET_OBJECTMODEL_PIGBOULDER", + "type": "ObjectModel", + "sha1": "07bbda56aba101b5587405a61ea954368b42103b" + }, + { + "filename": "Pigboulder2", + "build-id": "ASSET_OBJECTMODEL_PIGBOULDER2", + "type": "ObjectModel", + "sha1": "38e39b994458bcc574ed5f1e09902ba81a316045" + }, + { + "filename": "Pigboulder3", + "build-id": "ASSET_OBJECTMODEL_PIGBOULDER3", + "type": "ObjectModel", + "sha1": "d0b09cece549c699048287aa915488badfa53bf3" + }, + { + "filename": "Pigboulder4", + "build-id": "ASSET_OBJECTMODEL_PIGBOULDER4", + "type": "ObjectModel", + "sha1": "b71d3b68bf1fda6df6c0f2a1d2d4ea21f7500e66" + }, + { + "filename": "Pigboulder5", + "build-id": "ASSET_OBJECTMODEL_PIGBOULDER5", + "type": "ObjectModel", + "sha1": "c5b4a2e6a467f53b20663fe3e39bf1a3f5113b12" + }, + { + "filename": "Bigplanet", + "build-id": "ASSET_OBJECTMODEL_BIGPLANET", + "type": "ObjectModel", + "sha1": "164ca7eed737659a7bbfb335e75cce45d5d1ed74" + }, + { + "filename": "wizpigship", + "build-id": "ASSET_OBJECTMODEL_WIZPIGSHIP", + "type": "ObjectModel", + "sha1": "d886119440acfe4779f16f346dce78c4a93df5c0" + }, + { + "filename": "Trickytops", + "build-id": "ASSET_OBJECTMODEL_TRICKYTOPS", + "type": "ObjectModel", + "sha1": "614f30707105e972e351352b1501617f6580fa0c" + }, + { + "filename": "Trickyanim", + "build-id": "ASSET_OBJECTMODEL_TRICKYANIM", + "type": "ObjectModel", + "sha1": "6f08fa1746c406c29870a62ce17005203a6cac57" + }, + { + "filename": "Trickyanim2", + "build-id": "ASSET_OBJECTMODEL_TRICKYANIM2", + "type": "ObjectModel", + "sha1": "aaf32e44fb73b7217c8fcd1b240009bc72c5618a" + }, + { + "filename": "Trickyanim3", + "build-id": "ASSET_OBJECTMODEL_TRICKYANIM3", + "type": "ObjectModel", + "sha1": "954feb61f407b13f85712f595321264b0e0ecbe0" + }, + { + "filename": "Dragonboss", + "build-id": "ASSET_OBJECTMODEL_DRAGONBOSS", + "type": "ObjectModel", + "sha1": "46c80db2ef4c118f86c138225e02733b243724a9" + }, + { + "filename": "DragonAnim", + "build-id": "ASSET_OBJECTMODEL_DRAGONANIM", + "type": "ObjectModel", + "sha1": "3dea5a022c50b7a5b6919461d33cf095a8015573" + }, + { + "filename": "Terryboss", + "build-id": "ASSET_OBJECTMODEL_TERRYBOSS", + "type": "ObjectModel", + "sha1": "01801683d6bfe7507cd5e714eb495e400505c027" + }, + { + "filename": "Walrus", + "build-id": "ASSET_OBJECTMODEL_WALRUS", + "type": "ObjectModel", + "sha1": "4ec967c5a2ed917c82a4988d46a9425f1f7c7b3b" + }, + { + "filename": "Walrus_anim", + "build-id": "ASSET_OBJECTMODEL_WALRUS_ANIM", + "type": "ObjectModel", + "sha1": "d81d4743a8103f5a97deda066d862e18c26a8459" + }, + { + "filename": "octopus", + "build-id": "ASSET_OBJECTMODEL_OCTOPUS", + "type": "ObjectModel", + "sha1": "fdc20532bece0700925aa331f364578bf6753fb9" + }, + { + "filename": "stopwatchicon", + "build-id": "ASSET_OBJECTMODEL_STOPWATCHICON", + "type": "ObjectModel", + "sha1": "0948132400cd54f2bab9152d74608fd7ee1eca43" + }, + { + "filename": "stopwatchhand", + "build-id": "ASSET_OBJECTMODEL_STOPWATCHHAND", + "type": "ObjectModel", + "sha1": "c3cf60b802c72a618bcbe852087f5c7d83dd31d4" + }, + { + "filename": "SnowBall", + "build-id": "ASSET_OBJECTMODEL_SNOWBALL", + "type": "ObjectModel", + "sha1": "1908dd1fbcf360d71cf7addb05c86919f44dd7ff" + }, + { + "filename": "SnowBall2", + "build-id": "ASSET_OBJECTMODEL_SNOWBALL2", + "type": "ObjectModel", + "sha1": "7f7e4b9ed053ae32da98c7f877535011a8d11a99" + }, + { + "filename": "Dinosaur1", + "build-id": "ASSET_OBJECTMODEL_DINOSAUR1", + "type": "ObjectModel", + "sha1": "92bb3dfa1a41a723d0afb7e2da7601a3e9d9ecab" + }, + { + "filename": "Dinosaur2", + "build-id": "ASSET_OBJECTMODEL_DINOSAUR2", + "type": "ObjectModel", + "sha1": "7d149e911b930f98774e8dd9808a5509c3ea57be" + }, + { + "filename": "Dinosaur3", + "build-id": "ASSET_OBJECTMODEL_DINOSAUR3", + "type": "ObjectModel", + "sha1": "dd2ca192bb83b12c362b1fd41adea8a062166484" + }, + { + "filename": "SeaMonster", + "build-id": "ASSET_OBJECTMODEL_SEAMONSTER", + "type": "ObjectModel", + "sha1": "c92e274c460044fab41ec09d91fba7a6b6eaa7f2" + }, + { + "filename": "WoodBlock", + "build-id": "ASSET_OBJECTMODEL_WOODBLOCK", + "type": "ObjectModel", + "sha1": "9330c84160b56265ddcbd109b5e2c44e1dc7a9b8" + }, + { + "filename": "Whale", + "build-id": "ASSET_OBJECTMODEL_WHALE", + "type": "ObjectModel", + "sha1": "ab0598941a8409b88383dd679ba68482b470c605" + }, + { + "filename": "LevelDoor_2", + "build-id": "ASSET_OBJECTMODEL_LEVELDOOR_2", + "type": "ObjectModel", + "sha1": "ea5adc777f9c5d351780310d41de38abc2256e46" + }, + { + "filename": "LevelDoor_3", + "build-id": "ASSET_OBJECTMODEL_LEVELDOOR_3", + "type": "ObjectModel", + "sha1": "f97c4656736d362d5f17ab69ce09b3f403b0ea04" + }, + { + "filename": "LevelDoor_0", + "build-id": "ASSET_OBJECTMODEL_LEVELDOOR_0", + "type": "ObjectModel", + "sha1": "630854bddc7ab6d2bb84e4d9a94320989ed05cfd" + }, + { + "filename": "LevelDoor_4", + "build-id": "ASSET_OBJECTMODEL_LEVELDOOR_4", + "type": "ObjectModel", + "sha1": "064d217ac1aca3fb761ac0d2fa85b48d50fada75" + }, + { + "filename": "LevelDoor_1", + "build-id": "ASSET_OBJECTMODEL_LEVELDOOR_1", + "type": "ObjectModel", + "sha1": "2c697db09155c8365c471986f2eedc06f9dc7ef4" + }, + { + "filename": "LevelDoor_7", + "build-id": "ASSET_OBJECTMODEL_LEVELDOOR_7", + "type": "ObjectModel", + "sha1": "90ec7d95539606298dc0220b690425d7bfce2126" + }, + { + "filename": "LevelDoor_8", + "build-id": "ASSET_OBJECTMODEL_LEVELDOOR_8", + "type": "ObjectModel", + "sha1": "f03d25c0bceb5bfec2d827019b10ef7c37b048c2" + }, + { + "filename": "LevelDoor_5", + "build-id": "ASSET_OBJECTMODEL_LEVELDOOR_5", + "type": "ObjectModel", + "sha1": "fb2abef5208ba793a681956b5ee6f125f5aefa3a" + }, + { + "filename": "LevelDoor_6", + "build-id": "ASSET_OBJECTMODEL_LEVELDOOR_6", + "type": "ObjectModel", + "sha1": "a758f05f91334a6632121a4e9a203f390f842d77" + }, + { + "filename": "Signs_0", + "build-id": "ASSET_OBJECTMODEL_SIGNS_0", + "type": "ObjectModel", + "sha1": "7e775b012082ed60ccf91142a8daa03261439f17" + }, + { + "filename": "Signs_1", + "build-id": "ASSET_OBJECTMODEL_SIGNS_1", + "type": "ObjectModel", + "sha1": "f5d52cd0d4ae9dace807c88fd75dad0a1ea9c086" + }, + { + "filename": "Signs_2", + "build-id": "ASSET_OBJECTMODEL_SIGNS_2", + "type": "ObjectModel", + "sha1": "ea7cc7947e376c87bd10ee0a5bf559abae76d095" + }, + { + "filename": "Signs_3", + "build-id": "ASSET_OBJECTMODEL_SIGNS_3", + "type": "ObjectModel", + "sha1": "e75f9c28fdfd5b5ad2b743fd8af4b3b8e7c87f68" + }, + { + "filename": "log", + "build-id": "ASSET_OBJECTMODEL_LOG", + "type": "ObjectModel", + "sha1": "874e5493960c0f5054b308924a8c0c6518ee6daf" + }, + { + "filename": "boulder", + "build-id": "ASSET_OBJECTMODEL_BOULDER", + "type": "ObjectModel", + "sha1": "505869a39cc37b8abae15d95dd8a4f00cf37397a" + }, + { + "filename": "AirZippers", + "build-id": "ASSET_OBJECTMODEL_AIRZIPPERS", + "type": "ObjectModel", + "sha1": "201d8085671e54aced1e31d322274789cba3af5b" + }, + { + "filename": "WaterZippers", + "build-id": "ASSET_OBJECTMODEL_WATERZIPPERS", + "type": "ObjectModel", + "sha1": "bd0599ae5c7c6e75ef54ab5f789d8265e414e2eb" + }, + { + "filename": "GroundZipper2", + "build-id": "ASSET_OBJECTMODEL_GROUNDZIPPER2", + "type": "ObjectModel", + "sha1": "b1efc74bb9320ec6cee9bb90dc42ee4e50bdede4" + }, + { + "filename": "BetaAirZipper", + "build-id": "ASSET_OBJECTMODEL_BETAAIRZIPPER", + "type": "ObjectModel", + "sha1": "910fa0546131065cf0281e2b529c2363e94d0a53" + }, + { + "filename": "Dinoisle", + "build-id": "ASSET_OBJECTMODEL_DINOISLE", + "type": "ObjectModel", + "sha1": "21e2c88b7b4883a828910e807752de39e2641e42" + }, + { + "filename": "BetaBumperIcon", + "build-id": "ASSET_OBJECTMODEL_BETABUMPERICON", + "type": "ObjectModel", + "sha1": "def757eddf785c6843e1e53d5215966b4e44f0d0" + }, + { + "filename": "BetaDrumstickIcon", + "build-id": "ASSET_OBJECTMODEL_BETADRUMSTICKICON", + "type": "ObjectModel", + "sha1": "400380b3b6d6b7f31a1aad87a516aebb141aa965" + }, + { + "filename": "BetaKrunchIcon", + "build-id": "ASSET_OBJECTMODEL_BETAKRUNCHICON", + "type": "ObjectModel", + "sha1": "a05e2a2dcb0c7cbb46da3057c28510f234955fa2" + }, + { + "filename": "BetaPipsyIcon", + "build-id": "ASSET_OBJECTMODEL_BETAPIPSYICON", + "type": "ObjectModel", + "sha1": "71fe7168f30ce30bbd5528650c0854927b105f46" + }, + { + "filename": "BetaTiptupIcon", + "build-id": "ASSET_OBJECTMODEL_BETATIPTUPICON", + "type": "ObjectModel", + "sha1": "fad32a20baee66f43c6637abe0c86fead641a5ff" + }, + { + "filename": "BetaKrunchBalloon", + "build-id": "ASSET_OBJECTMODEL_BETAKRUNCHBALLOON", + "type": "ObjectModel", + "sha1": "ebbaab7cde9217b23bf84387b99327d47422b794" + }, + { + "filename": "BetaBumperBalloon", + "build-id": "ASSET_OBJECTMODEL_BETABUMPERBALLOON", + "type": "ObjectModel", + "sha1": "ad08fab9e475aaf8f8ba206a90b90330d75b0c32" + }, + { + "filename": "BetaTiptupBalloon", + "build-id": "ASSET_OBJECTMODEL_BETATIPTUPBALLOON", + "type": "ObjectModel", + "sha1": "54a06924bc8658a207fedbce7973f47940a24b00" + }, + { + "filename": "BetaTimberBalloon", + "build-id": "ASSET_OBJECTMODEL_BETATIMBERBALLOON", + "type": "ObjectModel", + "sha1": "42d9e87c828b261a2ac40589c5ba44d311c47d91" + }, + { + "filename": "BetaBanjoBalloon", + "build-id": "ASSET_OBJECTMODEL_BETABANJOBALLOON", + "type": "ObjectModel", + "sha1": "c6cc0d7540ee341885d09eedaba7e48edf0f7435" + }, + { + "filename": "BetaDrumstickBalloon", + "build-id": "ASSET_OBJECTMODEL_BETADRUMSTICKBALLOON", + "type": "ObjectModel", + "sha1": "c39bbe8c5dd40cfa29d0e0f1a22e4990af855125" + }, + { + "filename": "BetaPipsyBalloon", + "build-id": "ASSET_OBJECTMODEL_BETAPIPSYBALLOON", + "type": "ObjectModel", + "sha1": "ef6d932ba11c25bcdb3a98afc6228297d428769e" + }, + { + "filename": "selectionshadow", + "build-id": "ASSET_OBJECTMODEL_SELECTIONSHADOW", + "type": "ObjectModel", + "sha1": "2e0399088e23823180bd56531c103d3b858c4dde" + }, + { + "filename": "BetaPlayer1Balloon", + "build-id": "ASSET_OBJECTMODEL_BETAPLAYER1BALLOON", + "type": "ObjectModel", + "sha1": "c067d0b89a23071f04194da35e1c05b7925d7a79" + }, + { + "filename": "BetaPlayer2Balloon", + "build-id": "ASSET_OBJECTMODEL_BETAPLAYER2BALLOON", + "type": "ObjectModel", + "sha1": "c0ff35128ff066cd68aec9d19c251d35a479fa18" + }, + { + "filename": "BetaPlayer3Balloon", + "build-id": "ASSET_OBJECTMODEL_BETAPLAYER3BALLOON", + "type": "ObjectModel", + "sha1": "f78e3d4b2d711c8bfc9637e2b4b2e6fb9da99b79" + }, + { + "filename": "BetaPlayer4Balloon", + "build-id": "ASSET_OBJECTMODEL_BETAPLAYER4BALLOON", + "type": "ObjectModel", + "sha1": "c7a41f989a097df9296bfb3c4394e9945a66defb" + }, + { + "filename": "BadgerAnimWalk", + "build-id": "ASSET_OBJECTMODEL_BADGERANIMWALK", + "type": "ObjectModel", + "sha1": "e683fd4b7b36f7c838ebbb78fbaf625a7e59bada" + }, + { + "filename": "timberdancer", + "build-id": "ASSET_OBJECTMODEL_TIMBERDANCER", + "type": "ObjectModel", + "sha1": "3caefe482deeecbf0ea5c67a4dfd8d0d8dfd3874" + }, + { + "filename": "tiptupdancer", + "build-id": "ASSET_OBJECTMODEL_TIPTUPDANCER", + "type": "ObjectModel", + "sha1": "78c9b2635789d59e770594faebece9b576d6b522" + }, + { + "filename": "rarewarelogo", + "build-id": "ASSET_OBJECTMODEL_RAREWARELOGO", + "type": "ObjectModel", + "sha1": "054e42167d26777c921401b637d5adb830e4e135" + }, + { + "filename": "Frog_0", + "build-id": "ASSET_OBJECTMODEL_FROG_0", + "type": "ObjectModel", + "sha1": "645bf17a3b7627b1ef01c9fdfe5faafd25dc6278" + }, + { + "filename": "Frog_1", + "build-id": "ASSET_OBJECTMODEL_FROG_1", + "type": "ObjectModel", + "sha1": "9ab02af0a15d9e3258df128f65fd477aa6c7f9c8" + }, + { + "filename": "checkpoint", + "build-id": "ASSET_OBJECTMODEL_CHECKPOINT", + "type": "ObjectModel", + "sha1": "62c0e9a73318def09c874365486f4856b295acdd" + }, + { + "filename": "midifade", + "build-id": "ASSET_OBJECTMODEL_MIDIFADE", + "type": "ObjectModel", + "sha1": "da41316582c8a6138d9d1e9da926e862f2358be0" + }, + { + "filename": "modechange", + "build-id": "ASSET_OBJECTMODEL_MODECHANGE", + "type": "ObjectModel", + "sha1": "4a2252626d81a6abd57c793d393780e8c0e2a3c3" + }, + { + "filename": "exit", + "build-id": "ASSET_OBJECTMODEL_EXIT", + "type": "ObjectModel", + "sha1": "5cb1f9528b07f77aed82d23e9abc95b5b80c6f18" + }, + { + "filename": "bonus", + "build-id": "ASSET_OBJECTMODEL_BONUS", + "type": "ObjectModel", + "sha1": "122a6badea107727fc27a246e726447bed347c07" + }, + { + "filename": "AnimCamera", + "build-id": "ASSET_OBJECTMODEL_ANIMCAMERA", + "type": "ObjectModel", + "sha1": "1d6efb68153e89fb19982c4fae30c9a9961e8959" + }, + { + "filename": "Animation", + "build-id": "ASSET_OBJECTMODEL_ANIMATION", + "type": "ObjectModel", + "sha1": "baecc5733fd2f398473a3997fa311a538fbf5046" + }, + { + "filename": "rgbalight_0", + "build-id": "ASSET_OBJECTMODEL_RGBALIGHT_0", + "type": "ObjectModel", + "sha1": "c0882ab1d9477d9c122550befc75b27747b792f1" + }, + { + "filename": "rgbalight_1", + "build-id": "ASSET_OBJECTMODEL_RGBALIGHT_1", + "type": "ObjectModel", + "sha1": "eec64231edd5d5ddff3ed98f328ba2bac40d7939" + }, + { + "filename": "rgbalight_2", + "build-id": "ASSET_OBJECTMODEL_RGBALIGHT_2", + "type": "ObjectModel", + "sha1": "df262a4ffd161d5ecd4d6e16978c4576d3817327" + }, + { + "filename": "rgbalight_3", + "build-id": "ASSET_OBJECTMODEL_RGBALIGHT_3", + "type": "ObjectModel", + "sha1": "24b8bd39c0301addc627471ba52c500033f969bd" + }, + { + "filename": "N64logo", + "build-id": "ASSET_OBJECTMODEL_N64LOGO", + "type": "ObjectModel", + "sha1": "f9160e8a755d5e81c7248cab82962bdd3683dee9" + }, + { + "filename": "Widescreen", + "build-id": "ASSET_OBJECTMODEL_WIDESCREEN", + "type": "ObjectModel", + "sha1": "2ec065c31253cfe3ea2ce19f4c19a3f8e64e62e0" + }, + { + "filename": "AnimDome", + "build-id": "ASSET_OBJECTMODEL_ANIMDOME", + "type": "ObjectModel", + "sha1": "c4d16214407724e6b218875a32b4a47e6ea1f72b" + }, + { + "filename": "DiddySelect", + "build-id": "ASSET_OBJECTMODEL_DIDDYSELECT", + "type": "ObjectModel", + "sha1": "ca590dcd56f459d6fee72d6fbedbba5429b4b095" + }, + { + "filename": "Electricity", + "build-id": "ASSET_OBJECTMODEL_ELECTRICITY", + "type": "ObjectModel", + "sha1": "ce230ce044b9c69a3af811d30d4a2094e15f1957" + }, + { + "filename": "KremSelect", + "build-id": "ASSET_OBJECTMODEL_KREMSELECT", + "type": "ObjectModel", + "sha1": "241939addee81bc608fdcae18b384c002ae6c392" + }, + { + "filename": "BadgerSelect", + "build-id": "ASSET_OBJECTMODEL_BADGERSELECT", + "type": "ObjectModel", + "sha1": "764b94f6a405a9f2694e4c5aac1d082044f45b66" + }, + { + "filename": "TortSelect", + "build-id": "ASSET_OBJECTMODEL_TORTSELECT", + "type": "ObjectModel", + "sha1": "6674d8fb5202181966eaafd7b46655a6f791edc4" + }, + { + "filename": "BanjoSelect", + "build-id": "ASSET_OBJECTMODEL_BANJOSELECT", + "type": "ObjectModel", + "sha1": "72e90017cebdb7acfc39977960370741148b68af" + }, + { + "filename": "TigerSelect", + "build-id": "ASSET_OBJECTMODEL_TIGERSELECT", + "type": "ObjectModel", + "sha1": "2711643096eeae3836deef3eb3ed3f39e8c8e728" + }, + { + "filename": "ChickSelect", + "build-id": "ASSET_OBJECTMODEL_CHICKSELECT", + "type": "ObjectModel", + "sha1": "be87468f5c8a81453c256400d09ca401e92561bc" + }, + { + "filename": "MouseSelect", + "build-id": "ASSET_OBJECTMODEL_MOUSESELECT", + "type": "ObjectModel", + "sha1": "bc5f358d4a37539da29d440061512e91fc0ea0e8" + }, + { + "filename": "ConkSelect", + "build-id": "ASSET_OBJECTMODEL_CONKSELECT", + "type": "ObjectModel", + "sha1": "eeebc128eb513871d9a2efda662733230b56483d" + }, + { + "filename": "postforparty", + "build-id": "ASSET_OBJECTMODEL_POSTFORPARTY", + "type": "ObjectModel", + "sha1": "67873e8c27f0dc77458634a24f98d5c721cdef94" + }, + { + "filename": "Lighthouse", + "build-id": "ASSET_OBJECTMODEL_LIGHTHOUSE", + "type": "ObjectModel", + "sha1": "e598437788042d29ae00aa4a86bd9f428aa40343" + }, + { + "filename": "lighthouse1", + "build-id": "ASSET_OBJECTMODEL_LIGHTHOUSE1", + "type": "ObjectModel", + "sha1": "2010e2a38d419dfca00e534bcbeda886d392938f" + }, + { + "filename": "SelectionHill", + "build-id": "ASSET_OBJECTMODEL_SELECTIONHILL", + "type": "ObjectModel", + "sha1": "ee738e52c72710d56d83b346e6bcf4fff4635006" + }, + { + "filename": "Rarelogo", + "build-id": "ASSET_OBJECTMODEL_RARELOGO", + "type": "ObjectModel", + "sha1": "53daa44949f954dd3910182f1956fed05545195f" + }, + { + "filename": "WorldKey", + "build-id": "ASSET_OBJECTMODEL_WORLDKEY", + "type": "ObjectModel", + "sha1": "a53198ffe5f665267e98590a6416540082b5b52d" + }, + { + "filename": "AnimKey", + "build-id": "ASSET_OBJECTMODEL_ANIMKEY", + "type": "ObjectModel", + "sha1": "7553261e08c56243f0c94bb3ed4118ea276cad98" + }, + { + "filename": "rocketsignpost_0", + "build-id": "ASSET_OBJECTMODEL_ROCKETSIGNPOST_0", + "type": "ObjectModel", + "sha1": "636e18bab672fb5220819f416f17b1551df83eef" + }, + { + "filename": "rocketsignpost_1", + "build-id": "ASSET_OBJECTMODEL_ROCKETSIGNPOST_1", + "type": "ObjectModel", + "sha1": "2e601ba1864f9a90324b7ca2bead57054d388e5d" + }, + { + "filename": "rocketsignpost_2", + "build-id": "ASSET_OBJECTMODEL_ROCKETSIGNPOST_2", + "type": "ObjectModel", + "sha1": "96d13670edf597839c84527cc5af5e8b2d7a6d45" + }, + { + "filename": "rocketsignpost_3", + "build-id": "ASSET_OBJECTMODEL_ROCKETSIGNPOST_3", + "type": "ObjectModel", + "sha1": "cd7820e5a18b292059c6b50e0f8ca55f5d9e3b02" + }, + { + "filename": "rocketsignpost_4", + "build-id": "ASSET_OBJECTMODEL_ROCKETSIGNPOST_4", + "type": "ObjectModel", + "sha1": "285944f03a04455d7d114d37978180079df28e48" + }, + { + "filename": "MagicRing", + "build-id": "ASSET_OBJECTMODEL_MAGICRING", + "type": "ObjectModel", + "sha1": "daac3dc512d727a199d83c8cce3db315c1e6b935" + }, + { + "filename": "Leefan", + "build-id": "ASSET_OBJECTMODEL_LEEFAN", + "type": "ObjectModel", + "sha1": "2acf535e5c6f255f4b62d2cc1109e9299c6c8b75" + }, + { + "filename": "SpaceShip1", + "build-id": "ASSET_OBJECTMODEL_SPACESHIP1", + "type": "ObjectModel", + "sha1": "af435963726f517a6920c7516979c2dc33352434" + }, + { + "filename": "SpaceShip2", + "build-id": "ASSET_OBJECTMODEL_SPACESHIP2", + "type": "ObjectModel", + "sha1": "792c94418913bf46aa4774098ea0a03a201bd75d" + }, + { + "filename": "SpaceShip3", + "build-id": "ASSET_OBJECTMODEL_SPACESHIP3", + "type": "ObjectModel", + "sha1": "1595bb0745c57846c1648849b0544d7bcd7cd225" + }, + { + "filename": "MonoRail", + "build-id": "ASSET_OBJECTMODEL_MONORAIL", + "type": "ObjectModel", + "sha1": "21a88fe558351401461b65e4e17283ab8b12923c" + }, + { + "filename": "bridge", + "build-id": "ASSET_OBJECTMODEL_BRIDGE", + "type": "ObjectModel", + "sha1": "7d135a0d302187612609614026af67b45639bfd7" + }, + { + "filename": "pirateship", + "build-id": "ASSET_OBJECTMODEL_PIRATESHIP", + "type": "ObjectModel", + "sha1": "268d4e95c50d807013b88bb455fead50c3100eaf" + }, + { + "filename": "WorldGate_0", + "build-id": "ASSET_OBJECTMODEL_WORLDGATE_0", + "type": "ObjectModel", + "sha1": "591d7489fb06719f83a3f3de4a66a32dced6d9b0" + }, + { + "filename": "WorldGate_1", + "build-id": "ASSET_OBJECTMODEL_WORLDGATE_1", + "type": "ObjectModel", + "sha1": "c35c612df709ff983d6e78f989733201b7d898f4" + }, + { + "filename": "WorldGate_2", + "build-id": "ASSET_OBJECTMODEL_WORLDGATE_2", + "type": "ObjectModel", + "sha1": "9c17379b4b37f75d48952ad371a1790ceb4bd168" + }, + { + "filename": "WorldGate_3", + "build-id": "ASSET_OBJECTMODEL_WORLDGATE_3", + "type": "ObjectModel", + "sha1": "58eaf716436d0f92807681614d8eb830ebce489f" + }, + { + "filename": "bigbossdoor_0", + "build-id": "ASSET_OBJECTMODEL_BIGBOSSDOOR_0", + "type": "ObjectModel", + "sha1": "b806870fe5369a383b2129d9d5ae6688278bac78" + }, + { + "filename": "bigbossdoor_1", + "build-id": "ASSET_OBJECTMODEL_BIGBOSSDOOR_1", + "type": "ObjectModel", + "sha1": "b75682bbd6c4a16a7644e7b3d4f1d5092bac7411" + }, + { + "filename": "ChalDoor_0", + "build-id": "ASSET_OBJECTMODEL_CHALDOOR_0", + "type": "ObjectModel", + "sha1": "c572b43a38c45f85e0f5d66432037910371adce7" + }, + { + "filename": "ChalDoor_1", + "build-id": "ASSET_OBJECTMODEL_CHALDOOR_1", + "type": "ObjectModel", + "sha1": "0d96d5f02ce5981231a9fa22863a73fc4c619f5b" + }, + { + "filename": "BossDoor_0", + "build-id": "ASSET_OBJECTMODEL_BOSSDOOR_0", + "type": "ObjectModel", + "sha1": "dd390f71ff1c1d3ae2ffa14828e81298033ec80f" + }, + { + "filename": "BossDoor_1", + "build-id": "ASSET_OBJECTMODEL_BOSSDOOR_1", + "type": "ObjectModel", + "sha1": "4e3757bf7bbdaf4aedf06ab953b583e2f2b2677a" + }, + { + "filename": "BossDoor_2", + "build-id": "ASSET_OBJECTMODEL_BOSSDOOR_2", + "type": "ObjectModel", + "sha1": "8867e2a9ae1f5063a5fec390873de689b8e49d8f" + }, + { + "filename": "SpaceColumn1", + "build-id": "ASSET_OBJECTMODEL_SPACECOLUMN1", + "type": "ObjectModel", + "sha1": "872c2ad0edf44b2a569d8ac2b210045e0057877b" + }, + { + "filename": "SpaceColumn2", + "build-id": "ASSET_OBJECTMODEL_SPACECOLUMN2", + "type": "ObjectModel", + "sha1": "c0b45b3ca3cffb79099412445923eeccac66791f" + }, + { + "filename": "SpaceColumn3", + "build-id": "ASSET_OBJECTMODEL_SPACECOLUMN3", + "type": "ObjectModel", + "sha1": "5f671072e4b6393a975fb9b5d38346c220af916b" + }, + { + "filename": "TrackSelectFrame", + "build-id": "ASSET_OBJECTMODEL_TRACKSELECTFRAME", + "type": "ObjectModel", + "sha1": "dcc679702caff43721c967b3d2702797ef5ed831" + }, + { + "filename": "windsail", + "build-id": "ASSET_OBJECTMODEL_WINDSAIL", + "type": "ObjectModel", + "sha1": "8a9f106d9b1297248f6abf342aa24b5f35a43d64" + }, + { + "filename": "EffectBox", + "build-id": "ASSET_OBJECTMODEL_EFFECTBOX", + "type": "ObjectModel", + "sha1": "15d0e72883365c56ff4ed3e9a31433321994767d" + }, + { + "filename": "Asteroid", + "build-id": "ASSET_OBJECTMODEL_ASTEROID", + "type": "ObjectModel", + "sha1": "83785fa82fd5a3d16616762b225895f9102ec3f2" + }, + { + "filename": "trophycab", + "build-id": "ASSET_OBJECTMODEL_TROPHYCAB", + "type": "ObjectModel", + "sha1": "aeb74257b73eb418819335f0b283256be9d82a79" + }, + { + "filename": "laserbolt", + "build-id": "ASSET_OBJECTMODEL_LASERBOLT", + "type": "ObjectModel", + "sha1": "9323628385016ad0eabd32d53bd59d4e09e69635" + }, + { + "filename": "TrackSelectFrameUnknown", + "build-id": "ASSET_OBJECTMODEL_TRACKSELECTFRAMEUNKNOWN", + "type": "ObjectModel", + "sha1": "b2ce5ea2c0dba497809be8a2f736b2118d2ca1aa" + }, + { + "filename": "TrackSelectFrameChallenge", + "build-id": "ASSET_OBJECTMODEL_TRACKSELECTFRAMECHALLENGE", + "type": "ObjectModel", + "sha1": "a458901ad4a6957ba9618c7ca009eeee7f690ac1" + }, + { + "filename": "TrackSelectFrameTrophyRace", + "build-id": "ASSET_OBJECTMODEL_TRACKSELECTFRAMETROPHYRACE", + "type": "ObjectModel", + "sha1": "8e57b4e11da012e002150aa2133401226aba7508" + }, + { + "filename": "Unknown", + "build-id": "ASSET_OBJECTMODEL_UNKNOWN", + "type": "ObjectModel", + "sha1": "328707c7e911bf000e04ad96ab7473f9cb34a15e" + }, + { + "filename": "pigheadcolours_0", + "build-id": "ASSET_OBJECTMODEL_PIGHEADCOLOURS_0", + "type": "ObjectModel", + "sha1": "ae119f0bfa9d384421c75eee1087deb03254ee40" + }, + { + "filename": "pigheadcolours_1", + "build-id": "ASSET_OBJECTMODEL_PIGHEADCOLOURS_1", + "type": "ObjectModel", + "sha1": "8ea994e6c6318a59b60de9cba9cae8523651d577" + }, + { + "filename": "pigheadcolours_2", + "build-id": "ASSET_OBJECTMODEL_PIGHEADCOLOURS_2", + "type": "ObjectModel", + "sha1": "aedb143dae487832492a76fda928f32514df92e1" + }, + { + "filename": "pigheadcolours_3", + "build-id": "ASSET_OBJECTMODEL_PIGHEADCOLOURS_3", + "type": "ObjectModel", + "sha1": "0332dd3062ec6333985edf8ed35862b748049238" + }, + { + "filename": "pigheadcolours_4", + "build-id": "ASSET_OBJECTMODEL_PIGHEADCOLOURS_4", + "type": "ObjectModel", + "sha1": "d22d9f41b89679754fb3a174293e2d7cdbf874d9" + }, + { + "filename": "pterodactyl", + "build-id": "ASSET_OBJECTMODEL_PTERODACTYL", + "type": "ObjectModel", + "sha1": "412e67adcf4ab443e89bab2d63b5a18c3d8c4ec3" + }, + { + "filename": "amuletpiece1", + "build-id": "ASSET_OBJECTMODEL_AMULETPIECE1", + "type": "ObjectModel", + "sha1": "422552af31672bc21a2b2563fdcfebe75713978d" + }, + { + "filename": "amuletpiece2", + "build-id": "ASSET_OBJECTMODEL_AMULETPIECE2", + "type": "ObjectModel", + "sha1": "b4b9a0b48a44bd064d04ec9efdce5cf54b75684d" + }, + { + "filename": "amuletpiece3", + "build-id": "ASSET_OBJECTMODEL_AMULETPIECE3", + "type": "ObjectModel", + "sha1": "2240c92bbe75ccc59da0e7940e2e447f5040d6ff" + }, + { + "filename": "amuletpiece4", + "build-id": "ASSET_OBJECTMODEL_AMULETPIECE4", + "type": "ObjectModel", + "sha1": "ee5ef751538aeb39925f88e5e74b1fdd9dfd941e" + }, + { + "filename": "swamulet1", + "build-id": "ASSET_OBJECTMODEL_SWAMULET1", + "type": "ObjectModel", + "sha1": "6279e9f07ee0f0f6004dca2a3c2c1caedd873cf3" + }, + { + "filename": "swamulet2", + "build-id": "ASSET_OBJECTMODEL_SWAMULET2", + "type": "ObjectModel", + "sha1": "7d1f95a71b9123bc37ab6d291759c306eb2630bc" + }, + { + "filename": "swamulet3", + "build-id": "ASSET_OBJECTMODEL_SWAMULET3", + "type": "ObjectModel", + "sha1": "9e55c4c0fb2e21393c8e8a8f50cd7745cc8a8106" + }, + { + "filename": "swamulet4", + "build-id": "ASSET_OBJECTMODEL_SWAMULET4", + "type": "ObjectModel", + "sha1": "94c24dd08d5e8495fab99ed65909cd948637ea96" + }, + { + "filename": "pigfaceanimator", + "build-id": "ASSET_OBJECTMODEL_PIGFACEANIMATOR", + "type": "ObjectModel", + "sha1": "b400a30b6da77a27f66b2ef4a249808ee05855e0" + }, + { + "filename": "pillar", + "build-id": "ASSET_OBJECTMODEL_PILLAR", + "type": "ObjectModel", + "sha1": "b786b1206d16483b86e91958f386f8eb1b4dd028" + }, + { + "filename": "boulderanim", + "build-id": "ASSET_OBJECTMODEL_BOULDERANIM", + "type": "ObjectModel", + "sha1": "cc28b280b83db3a4c63760f2a0914a492689e984" + }, + { + "filename": "Haystack", + "build-id": "ASSET_OBJECTMODEL_HAYSTACK", + "type": "ObjectModel", + "sha1": "6d379ba556e62167526ff3681d1a310225391664" + }, + { + "filename": "BetaProAM64HotAirBalloon", + "build-id": "ASSET_OBJECTMODEL_BETAPROAM64HOTAIRBALLOON", + "type": "ObjectModel", + "sha1": "96eae6245d40c8e4e7d84ef92f79e35d30fa26c6" + }, + { + "filename": "MiniShip", + "build-id": "ASSET_OBJECTMODEL_MINISHIP", + "type": "ObjectModel", + "sha1": "4a2addc1e9811535dd4dfaa2a29854e44aa7466f" + }, + { + "filename": "GoldTrophy", + "build-id": "ASSET_OBJECTMODEL_GOLDTROPHY", + "type": "ObjectModel", + "sha1": "dbbc456209366af22c1abddb04f74abe505ec80e" + }, + { + "filename": "Parktrophy", + "build-id": "ASSET_OBJECTMODEL_PARKTROPHY", + "type": "ObjectModel", + "sha1": "a3c33c2e0c42fffa7748c8b86608ae8828bb9e6c" + }, + { + "filename": "Ticktrophy", + "build-id": "ASSET_OBJECTMODEL_TICKTROPHY", + "type": "ObjectModel", + "sha1": "159cce0b26aaa5ee882b1b7c27e568b71afa77e7" + }, + { + "filename": "SpaceDome", + "build-id": "ASSET_OBJECTMODEL_SPACEDOME", + "type": "ObjectModel", + "sha1": "1f779dfc175d273c94d03bd34f655c502f91815a" + }, + { + "filename": "Missile", + "build-id": "ASSET_OBJECTMODEL_MISSILE", + "type": "ObjectModel", + "sha1": "1c08a1a077a40c02543c446087581df72ca3a0ce" + }, + { + "filename": "Shield_1", + "build-id": "ASSET_OBJECTMODEL_SHIELD_1", + "type": "ObjectModel", + "sha1": "fb0193d77531cc3df37657bf130d2cdb265031f7" + }, + { + "filename": "Shield_0", + "build-id": "ASSET_OBJECTMODEL_SHIELD_0", + "type": "ObjectModel", + "sha1": "724f2f6ba9119bd6dded335ba297777b494cd1fd" + }, + { + "filename": "Shield_2", + "build-id": "ASSET_OBJECTMODEL_SHIELD_2", + "type": "ObjectModel", + "sha1": "163f27ab8ec493beccdc43c769683df557e45ec9" + }, + { + "filename": "TTDoor_0", + "build-id": "ASSET_OBJECTMODEL_TTDOOR_0", + "type": "ObjectModel", + "sha1": "a8a3de6f503e017eb48098fdfd9bbb78bdec106c" + }, + { + "filename": "TTDoor_1", + "build-id": "ASSET_OBJECTMODEL_TTDOOR_1", + "type": "ObjectModel", + "sha1": "20d36153e10122167e20d6fcdf2c96ad153748cf" + }, + { + "filename": "TTDoor_2", + "build-id": "ASSET_OBJECTMODEL_TTDOOR_2", + "type": "ObjectModel", + "sha1": "a8196d68f6959d6155e25d862dccbe6da6357c1d" + }, + { + "filename": "piglog", + "build-id": "ASSET_OBJECTMODEL_PIGLOG", + "type": "ObjectModel", + "sha1": "630752dba45dcb36f3b918478bdc2f926d5e3820" + }, + { + "filename": "KeithPigDoor", + "build-id": "ASSET_OBJECTMODEL_KEITHPIGDOOR", + "type": "ObjectModel", + "sha1": "ffbe8aa8070b25ed137e56acd8d21ca0298c1b01" + }, + { + "filename": "MagnetFX", + "build-id": "ASSET_OBJECTMODEL_MAGNETFX", + "type": "ObjectModel", + "sha1": "e151d2d04ba922281d87995775bd34287a18612f" + }, + { + "filename": "animation_ids", + "build-id": "ASSET_ANIMATION_IDS", + "type": "Binary", + "sha1": "2c2c63b683fc0b4308439f1b6e7fbd1bcc0126db" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_0", + "filename": "asset_object_animations_0", + "folder": "unknown", + "sha1": "e53d0840cd0b8ea11f2cd9344e842496315c03e2", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_1", + "filename": "asset_object_animations_1", + "folder": "unknown", + "sha1": "ff02479d98836babe83a9322003668be1a27a20d", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_2", + "filename": "asset_object_animations_2", + "folder": "unknown", + "sha1": "9fd7210f9ae1004964dd7a66faaa31ee4889aef0", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_3", + "filename": "asset_object_animations_3", + "folder": "unknown", + "sha1": "a5ef05f9a01687ea90998c8418dac78ca32c7329", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_4", + "filename": "asset_object_animations_4", + "folder": "unknown", + "sha1": "f83358d019a6557dbcfce7558f191c8855ff28bb", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_5", + "filename": "asset_object_animations_5", + "folder": "unknown", + "sha1": "d6b46c957320c8ecced26bc36b7db9b83d7bf71d", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_6", + "filename": "asset_object_animations_6", + "folder": "unknown", + "sha1": "73b561b695106ee4aa3bf234f5508f74f13e3d49", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_7", + "filename": "asset_object_animations_7", + "folder": "unknown", + "sha1": "31cf8bef86dabb6d903519b1d4421ad9c352ce2f", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_8", + "filename": "asset_object_animations_8", + "folder": "unknown", + "sha1": "60c9bb9d8fd3984f89d54f2432324af1fb31790d", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_9", + "filename": "asset_object_animations_9", + "folder": "unknown", + "sha1": "78ffbee7ca18c3db6430930a88b174b2c0350ed6", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_10", + "filename": "asset_object_animations_10", + "folder": "unknown", + "sha1": "78bae26fcea3c2264394d6226d61b790fe6732da", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_11", + "filename": "asset_object_animations_11", + "folder": "unknown", + "sha1": "088f400d1ea194446aae1b837778b423b9db8d26", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_12", + "filename": "asset_object_animations_12", + "folder": "unknown", + "sha1": "1ab21d0ac911a134c91c631ade1d30ee1cbc4cec", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_13", + "filename": "asset_object_animations_13", + "folder": "unknown", + "sha1": "665088773dbb4b6217abdfc052b8bbcb04f853bb", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_14", + "filename": "asset_object_animations_14", + "folder": "unknown", + "sha1": "41e3474d1d7592e676ed116e5b55c94c52078225", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_15", + "filename": "asset_object_animations_15", + "folder": "unknown", + "sha1": "01fffb3d4bb17a67c21428d0ea47f2cc1dedc1ee", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_16", + "filename": "asset_object_animations_16", + "folder": "unknown", + "sha1": "fe2a970645721031309ea8ada0601a20ada48596", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_17", + "filename": "asset_object_animations_17", + "folder": "unknown", + "sha1": "48e0f9e30194c3501892be20fe29974f8b4d775d", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_18", + "filename": "asset_object_animations_18", + "folder": "unknown", + "sha1": "eba027e747ba2855e8404a36e8c27b8e788b435c", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_19", + "filename": "asset_object_animations_19", + "folder": "unknown", + "sha1": "4db4f98d2eb6edf02b8e320a1618129632c061d0", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_20", + "filename": "asset_object_animations_20", + "folder": "unknown", + "sha1": "8b873c09b3c60af958348e092772d4525f2e21d4", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_21", + "filename": "asset_object_animations_21", + "folder": "unknown", + "sha1": "c23912420c94426b130cacbc2ea9f091099cef35", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_22", + "filename": "asset_object_animations_22", + "folder": "unknown", + "sha1": "abd874e561308993e1838f63e844bd55d0153902", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_23", + "filename": "asset_object_animations_23", + "folder": "unknown", + "sha1": "b2cee813a8c58b7e3ae0218e9801c7b5e9a2449a", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_24", + "filename": "asset_object_animations_24", + "folder": "unknown", + "sha1": "9c8b56fdcd082d4a6760e91307d36fb49daa978e", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_25", + "filename": "asset_object_animations_25", + "folder": "unknown", + "sha1": "48c9431f1491117718fee604f1b413fd69437a4e", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_26", + "filename": "asset_object_animations_26", + "folder": "unknown", + "sha1": "7861c9dbdfb8e965a2037f72abdedd9f40f48463", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_27", + "filename": "asset_object_animations_27", + "folder": "unknown", + "sha1": "6aad13602e2289b6cf0c24ca2fe4152de912b594", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_28", + "filename": "asset_object_animations_28", + "folder": "unknown", + "sha1": "6dece15aca085499de8a26b47f36d142ddfde387", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_29", + "filename": "asset_object_animations_29", + "folder": "unknown", + "sha1": "5616f57d8634f45ac606a6e19d0b401e52c634ec", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_30", + "filename": "asset_object_animations_30", + "folder": "unknown", + "sha1": "2099b53c7afcd8caf285177cf6804cf786fb9b1c", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_31", + "filename": "asset_object_animations_31", + "folder": "unknown", + "sha1": "ed8430a09305fb808885d3e119e91283def24089", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_32", + "filename": "asset_object_animations_32", + "folder": "unknown", + "sha1": "1a81a653a87f42be270e3864c70b7034424793c7", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_33", + "filename": "asset_object_animations_33", + "folder": "unknown", + "sha1": "b55ab69bd16d8de40a1ead364a9a33facdcdb99b", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_34", + "filename": "asset_object_animations_34", + "folder": "unknown", + "sha1": "cc123f7fef6e8f8d1068b8dca767559c65d088aa", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_35", + "filename": "asset_object_animations_35", + "folder": "unknown", + "sha1": "cea7257da6484d4e49e4e77ea6be4ee0c62e8110", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_36", + "filename": "asset_object_animations_36", + "folder": "unknown", + "sha1": "d368218517917f140e0a4909a17d9577a1ad93dd", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_37", + "filename": "asset_object_animations_37", + "folder": "unknown", + "sha1": "9b46a63b59e32a3462f54cc76f076c9d259d3fea", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_38", + "filename": "asset_object_animations_38", + "folder": "unknown", + "sha1": "5e5c19a8fd2cffacb7961a2e3b0c074757c622ca", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_39", + "filename": "asset_object_animations_39", + "folder": "unknown", + "sha1": "110c7d06689e0da3b316438f32f317e061986c45", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_40", + "filename": "asset_object_animations_40", + "folder": "unknown", + "sha1": "3a503cab88aa29798e197714ca9d1d38be6c1a47", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_41", + "filename": "asset_object_animations_41", + "folder": "unknown", + "sha1": "107f5563647de3ee3ea8aea9cbbc8045b8bbbb45", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_42", + "filename": "asset_object_animations_42", + "folder": "unknown", + "sha1": "5272b2a0bbbaf3ecad54756ce10f964cc581c7be", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_43", + "filename": "asset_object_animations_43", + "folder": "unknown", + "sha1": "172776eb3fbc790ee5dc7eda82617fca4c8114a8", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_44", + "filename": "asset_object_animations_44", + "folder": "unknown", + "sha1": "1582308bd91f1d767865fde28081caf8d2c7240d", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_45", + "filename": "asset_object_animations_45", + "folder": "unknown", + "sha1": "7aaf96f4e18990452ec10aaf9f91132f80d5d84a", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_46", + "filename": "asset_object_animations_46", + "folder": "unknown", + "sha1": "cbdff03018b413a4cb72006f4b30c9cded94b29b", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_47", + "filename": "asset_object_animations_47", + "folder": "unknown", + "sha1": "db3f75b7d496dacf87a9a6c085f2b3ba5befc1cb", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_48", + "filename": "asset_object_animations_48", + "folder": "unknown", + "sha1": "dbb95ec5cdd094f1204f142262c2b3b6388eea4b", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_49", + "filename": "asset_object_animations_49", + "folder": "unknown", + "sha1": "3dc60903daa6429eb5f57dd8fffdd53ef24612aa", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_50", + "filename": "asset_object_animations_50", + "folder": "unknown", + "sha1": "0b2be57c00fc6fc004dc98034519e9242ec6a3dc", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_51", + "filename": "asset_object_animations_51", + "folder": "unknown", + "sha1": "cf8a320f588806669686bf9f4be4830bd9eed657", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_52", + "filename": "asset_object_animations_52", + "folder": "unknown", + "sha1": "fe36b24db8891e6280c8d9932682e2ffe9f94952", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_53", + "filename": "asset_object_animations_53", + "folder": "unknown", + "sha1": "55774622aa0924343f9cf226ece71ab18d967804", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_54", + "filename": "asset_object_animations_54", + "folder": "unknown", + "sha1": "f501b6999cbb80e2eddf6aece49febe464f7f345", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_55", + "filename": "asset_object_animations_55", + "folder": "unknown", + "sha1": "c991d5dbfee2add6e6c6e77409f43094a40c59c6", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_56", + "filename": "asset_object_animations_56", + "folder": "unknown", + "sha1": "d942196c970fbe2ae8cae00ac88b8432f1064986", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_57", + "filename": "asset_object_animations_57", + "folder": "unknown", + "sha1": "d95cb5c63726f4a357f5f42b587c4fd919551dce", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_58", + "filename": "asset_object_animations_58", + "folder": "unknown", + "sha1": "cde3f480f8fac53c42a3beb0446953ebcdfcaed7", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_59", + "filename": "asset_object_animations_59", + "folder": "unknown", + "sha1": "64623ed13350c1d594fa9c99ca91a3a21d9a6a00", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_60", + "filename": "asset_object_animations_60", + "folder": "unknown", + "sha1": "7f77242f44d969dddab389d28188f710c7db1c86", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_61", + "filename": "asset_object_animations_61", + "folder": "unknown", + "sha1": "9d89fb4e3753a10332c48345f12581ee24760bc1", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_62", + "filename": "asset_object_animations_62", + "folder": "unknown", + "sha1": "9f85838806eba30367b8219b1244329405a4dda7", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_63", + "filename": "asset_object_animations_63", + "folder": "unknown", + "sha1": "1990863ec4247dcf019e2deae422d63a209c47b6", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_64", + "filename": "asset_object_animations_64", + "folder": "unknown", + "sha1": "50fd166ef21906a62a19bf91efa6a59874de64a0", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_65", + "filename": "asset_object_animations_65", + "folder": "unknown", + "sha1": "ee2560a3accecca8d46c306bdfac3a605ab13601", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_66", + "filename": "asset_object_animations_66", + "folder": "unknown", + "sha1": "0076df20bdc2ccaa4ed44005ea56e0ac77026ebb", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_67", + "filename": "asset_object_animations_67", + "folder": "unknown", + "sha1": "d55e4b562bd9175595c04a1ef19912e6bcb1d3d1", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_68", + "filename": "asset_object_animations_68", + "folder": "unknown", + "sha1": "4717770e719fcdf5e84ed86f8326eec6697f80ce", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_69", + "filename": "asset_object_animations_69", + "folder": "unknown", + "sha1": "240354df9c3e068e6a9350c612d01afa673136c3", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_70", + "filename": "asset_object_animations_70", + "folder": "unknown", + "sha1": "2f3600cc3d348e28e70b4c1ff476765ccf2e865a", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_71", + "filename": "asset_object_animations_71", + "folder": "unknown", + "sha1": "72554c09b1596bbe235327ccc2195874499fad95", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_72", + "filename": "asset_object_animations_72", + "folder": "unknown", + "sha1": "c8a020b7d23617f3f5ede4db70f16862da9ecd9a", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_73", + "filename": "asset_object_animations_73", + "folder": "unknown", + "sha1": "1d39d70642104ef1c26ce23c92ca1d2e83bc63d5", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_74", + "filename": "asset_object_animations_74", + "folder": "unknown", + "sha1": "1af1325cb6e1941e2b46b77f179ad112ad7a3ffa", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_75", + "filename": "asset_object_animations_75", + "folder": "unknown", + "sha1": "cc2e7605f756391cb13850a99788c6cc5aceae3b", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_76", + "filename": "asset_object_animations_76", + "folder": "unknown", + "sha1": "f38c300c37589375c0de93814658ef55158862be", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_77", + "filename": "asset_object_animations_77", + "folder": "unknown", + "sha1": "b7506b5d27cb8694f9cc19a57622986c2976a8b5", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_78", + "filename": "asset_object_animations_78", + "folder": "unknown", + "sha1": "3b8515874e7ee1de89144e0e107145ffa8c8080a", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_79", + "filename": "asset_object_animations_79", + "folder": "unknown", + "sha1": "530bba570eb412ee5eeff945530b4f57d0bc0889", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_80", + "filename": "asset_object_animations_80", + "folder": "unknown", + "sha1": "5b4f812106de82d76972c952d86e331ac4f5fa06", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_81", + "filename": "asset_object_animations_81", + "folder": "unknown", + "sha1": "122c8a57ce5a3ecbb345d3b8bcff1655fd6e358d", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_82", + "filename": "asset_object_animations_82", + "folder": "unknown", + "sha1": "d4acd314ed21ab1b94a01a0e348fd136d245e487", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_83", + "filename": "asset_object_animations_83", + "folder": "unknown", + "sha1": "6e0ff76f0a31e7d9fe460d1583f81a7c9fe3018a", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_84", + "filename": "asset_object_animations_84", + "folder": "unknown", + "sha1": "3c9d3ea0ef3a15c33f01e8124d5060788484ba6a", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_85", + "filename": "asset_object_animations_85", + "folder": "unknown", + "sha1": "61324dcd5ae9b39845a97a6d77fc303f01cab83a", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_86", + "filename": "asset_object_animations_86", + "folder": "unknown", + "sha1": "8832ecd929bf5f3ed0e17e04c136393991c3298a", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_87", + "filename": "asset_object_animations_87", + "folder": "unknown", + "sha1": "f359f208bd417344cf3e6235f65148dd0c81a390", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_88", + "filename": "asset_object_animations_88", + "folder": "unknown", + "sha1": "c7c5cb7da8ad400cf8432e15836b1eaf6fe8e231", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_89", + "filename": "asset_object_animations_89", + "folder": "unknown", + "sha1": "c6ef279b234de8985f8989891e2c167f4c6d1551", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_90", + "filename": "asset_object_animations_90", + "folder": "unknown", + "sha1": "ed744cdaf31bd45d749e0af62abcdd93300685bc", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_91", + "filename": "asset_object_animations_91", + "folder": "unknown", + "sha1": "314f44964d8ea800bd42ac3413d831c82c98491c", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_92", + "filename": "asset_object_animations_92", + "folder": "unknown", + "sha1": "2d8b902edf5e281bad0030b51457712c8c12f462", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_93", + "filename": "asset_object_animations_93", + "folder": "unknown", + "sha1": "81be5ed01e1ce561f68f17ba6ccf71aa58e59842", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_94", + "filename": "asset_object_animations_94", + "folder": "unknown", + "sha1": "9cd780055bc06de34d45511247d42f4d83f7da7c", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_95", + "filename": "asset_object_animations_95", + "folder": "unknown", + "sha1": "83d95e6ada981aa2100ee8a036eacd60acf1d443", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_96", + "filename": "asset_object_animations_96", + "folder": "unknown", + "sha1": "f1a8befc6b23f39362c6e921e08171ac88846f16", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_97", + "filename": "asset_object_animations_97", + "folder": "unknown", + "sha1": "cad15705aeba851c9b326ca3f12cd97671b93563", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_98", + "filename": "asset_object_animations_98", + "folder": "unknown", + "sha1": "55527eff57f26c4d523425782bb6684a6fc8c4ca", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_99", + "filename": "asset_object_animations_99", + "folder": "unknown", + "sha1": "464d44c7d9f91eb9f38e029ed303ebf820d977af", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_100", + "filename": "asset_object_animations_100", + "folder": "unknown", + "sha1": "027057437d40625cb5125c66023b51ece29f795f", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_101", + "filename": "asset_object_animations_101", + "folder": "unknown", + "sha1": "e91d4a6e9c8713012bb8b293298a7420cb8b1174", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_102", + "filename": "asset_object_animations_102", + "folder": "unknown", + "sha1": "d4cf6d45deea360a9c37f63f13b9b423fd4f61cb", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_103", + "filename": "asset_object_animations_103", + "folder": "unknown", + "sha1": "7092efdd47b0cb93965ba966c716e7a4f6652604", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_104", + "filename": "asset_object_animations_104", + "folder": "unknown", + "sha1": "e82e1f265a228d9e1750096627083d812350e26f", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_105", + "filename": "asset_object_animations_105", + "folder": "unknown", + "sha1": "b8068d606cc97b917605863b342df47eec47c2ac", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_106", + "filename": "asset_object_animations_106", + "folder": "unknown", + "sha1": "10209e364a2d057d2630a9d899b436a00107df12", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_107", + "filename": "asset_object_animations_107", + "folder": "unknown", + "sha1": "a8aca050b9801934cef5761d9a7f148c7d8627e4", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_108", + "filename": "asset_object_animations_108", + "folder": "unknown", + "sha1": "d4b000fb865dae66548d3710b7d14d4ab0639bf9", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_109", + "filename": "asset_object_animations_109", + "folder": "unknown", + "sha1": "5eac3e8969aae61cd1a45b80756a74a6414cb9cb", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_110", + "filename": "asset_object_animations_110", + "folder": "unknown", + "sha1": "815efd75a58eba2c060fc21903fb4e1b542ccc9b", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_111", + "filename": "asset_object_animations_111", + "folder": "unknown", + "sha1": "a856e69173824875a84c7a2d308c74a51d88439a", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_112", + "filename": "asset_object_animations_112", + "folder": "unknown", + "sha1": "03458a238c387f2df48d56f9c1bda51f7a898d7f", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_113", + "filename": "asset_object_animations_113", + "folder": "unknown", + "sha1": "7e320e4b0956fb3f8f141a2776e40a84595eaa5c", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_114", + "filename": "asset_object_animations_114", + "folder": "unknown", + "sha1": "fae6b60a51bcd3d8b6231c2e5ed019520d142a34", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_115", + "filename": "asset_object_animations_115", + "folder": "unknown", + "sha1": "3c872ff71d70542e54d9dcabe887fb2812199ad5", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_116", + "filename": "asset_object_animations_116", + "folder": "unknown", + "sha1": "6dba5acdfe1229ff3ea89e2b5298b1d4da8badc3", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_117", + "filename": "asset_object_animations_117", + "folder": "unknown", + "sha1": "6fbc006dacdc8ddda1665b0b1f59153f96ca1376", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_118", + "filename": "asset_object_animations_118", + "folder": "unknown", + "sha1": "204daa1c90eee23747cf026e67c070bd0e8b6b27", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_119", + "filename": "asset_object_animations_119", + "folder": "unknown", + "sha1": "f5546a2720da2f20ee038e4994c1ab4eb257a02c", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_120", + "filename": "asset_object_animations_120", + "folder": "unknown", + "sha1": "64ab01d1dc23af0c0f0fc8b99294b9f2c2120868", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_121", + "filename": "asset_object_animations_121", + "folder": "unknown", + "sha1": "8424c853461e0ea1481d7dd168f0de7712617368", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_122", + "filename": "asset_object_animations_122", + "folder": "unknown", + "sha1": "95a28504121ab32852325e701440b770daf34300", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_123", + "filename": "asset_object_animations_123", + "folder": "unknown", + "sha1": "f941c33d511d42240593a8e4702b0adb18f8c454", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_124", + "filename": "asset_object_animations_124", + "folder": "unknown", + "sha1": "513c5cc4087172815dabef6b6319b95e4780183a", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_125", + "filename": "asset_object_animations_125", + "folder": "unknown", + "sha1": "b2aa096ac8ae71e0706f138d14b7ce4aab9c53c2", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_126", + "filename": "asset_object_animations_126", + "folder": "unknown", + "sha1": "7d164187023e12bf985e71c3d6419f2627f4d197", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_127", + "filename": "asset_object_animations_127", + "folder": "unknown", + "sha1": "52744bb81f3749f01d8907dfcfc868f1387bd3b2", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_128", + "filename": "asset_object_animations_128", + "folder": "unknown", + "sha1": "f1062d03c2f2363e4601eb23030415fa2e501166", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_129", + "filename": "asset_object_animations_129", + "folder": "unknown", + "sha1": "cbc0a889ac58f5c42c0a2432ffbca307ffa229b8", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_130", + "filename": "asset_object_animations_130", + "folder": "unknown", + "sha1": "da8888d5ecbb5a848813bf9fc93ea37e4978d418", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_131", + "filename": "asset_object_animations_131", + "folder": "unknown", + "sha1": "f60c97f6220ee1839b10863a6fb6711f0c3d6991", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_132", + "filename": "asset_object_animations_132", + "folder": "unknown", + "sha1": "1b39e4e90e8c4dae1a2d49297249fde5006b3c2a", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_133", + "filename": "asset_object_animations_133", + "folder": "unknown", + "sha1": "57893e66f14a3563422ed2161683bb486365680c", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_134", + "filename": "asset_object_animations_134", + "folder": "unknown", + "sha1": "04149a0439967fe72319bb3901f58f3139a2ef70", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_135", + "filename": "asset_object_animations_135", + "folder": "unknown", + "sha1": "875f5067a80cff5ccdc5b7a215aa493707b820e7", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_136", + "filename": "asset_object_animations_136", + "folder": "unknown", + "sha1": "93a3a18240753ec27df618c89ac61bf3aa8514b2", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_137", + "filename": "asset_object_animations_137", + "folder": "unknown", + "sha1": "f126e8b4541cdd8db86da31b126de7e2d4e486bc", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_138", + "filename": "asset_object_animations_138", + "folder": "unknown", + "sha1": "9fd825de99d9ab3ed06d364216ddf4cc4ac51de7", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_139", + "filename": "asset_object_animations_139", + "folder": "unknown", + "sha1": "092156badf79abe8525aed6b1b2dd261623298e7", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_140", + "filename": "asset_object_animations_140", + "folder": "unknown", + "sha1": "bdc02bbea7570232d865fee836f9240d14fc4431", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_141", + "filename": "asset_object_animations_141", + "folder": "unknown", + "sha1": "1d0d21f9eea4727c48a35612b16fb925984f6fee", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_142", + "filename": "asset_object_animations_142", + "folder": "unknown", + "sha1": "ccd7ac01ed7351f4d6b561ebfb669ed851f73115", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_143", + "filename": "asset_object_animations_143", + "folder": "unknown", + "sha1": "768d76872ca573e5a3a956e700113ce5f586bfd3", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_144", + "filename": "asset_object_animations_144", + "folder": "unknown", + "sha1": "0022a15f40ecceba0ef95208bbcbe4b24be4715f", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_145", + "filename": "asset_object_animations_145", + "folder": "unknown", + "sha1": "161820c63a17d1293b862d9c7298d10c35e309ab", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_146", + "filename": "asset_object_animations_146", + "folder": "unknown", + "sha1": "e60c19f4fac3de2f32f512032ba75df8dd60a7c6", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_147", + "filename": "asset_object_animations_147", + "folder": "unknown", + "sha1": "9c64ec0993f462f871885a89b61ca2d9d5bbb640", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_148", + "filename": "asset_object_animations_148", + "folder": "unknown", + "sha1": "1fa7510cc37cd84137e77303f7e6a7c3140c4603", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_149", + "filename": "asset_object_animations_149", + "folder": "unknown", + "sha1": "9876dc4173a3ceb3352491886f82f95345c17705", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_150", + "filename": "asset_object_animations_150", + "folder": "unknown", + "sha1": "64dde8fadf68a27d0e76e22b688fb65a84e01b71", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_151", + "filename": "asset_object_animations_151", + "folder": "unknown", + "sha1": "f8f85f3d311aee5527800bd99814e530ae3b5391", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_152", + "filename": "asset_object_animations_152", + "folder": "unknown", + "sha1": "e238d2b9199b3240df8064dc345eb761b8b39f0f", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_153", + "filename": "asset_object_animations_153", + "folder": "unknown", + "sha1": "132ab59acdae4943b95216e61e93de3d61e18d93", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_154", + "filename": "asset_object_animations_154", + "folder": "unknown", + "sha1": "d066d89737d3d0ff4f7367b856f442d3ff419b7d", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_155", + "filename": "asset_object_animations_155", + "folder": "unknown", + "sha1": "5bd3e7c4d2f6cd86d2ccb45751217086930425db", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_156", + "filename": "asset_object_animations_156", + "folder": "unknown", + "sha1": "4251143ca88a8f4f173be3260d99b71df2060fdc", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_157", + "filename": "asset_object_animations_157", + "folder": "unknown", + "sha1": "a06b815e762393c5deaf67e1860972a3266f923e", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_158", + "filename": "asset_object_animations_158", + "folder": "unknown", + "sha1": "c5ca6b5bd2961887365258f7be3f3dfbc52786ef", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_159", + "filename": "asset_object_animations_159", + "folder": "unknown", + "sha1": "76ddab3059284a99a9977c30a20dbb91b8c8b71e", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_160", + "filename": "asset_object_animations_160", + "folder": "unknown", + "sha1": "02aef2e2b4f8efaa59e5e1d59c3e49fd0f8f34c3", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_161", + "filename": "asset_object_animations_161", + "folder": "unknown", + "sha1": "13ea0021bb40a9fb142dc9d73b5f8f6f2e689663", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_162", + "filename": "asset_object_animations_162", + "folder": "unknown", + "sha1": "232cab613f523bef0d50a49d1b0a76431469d43f", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_163", + "filename": "asset_object_animations_163", + "folder": "unknown", + "sha1": "08cbd5da3c516c09ddfec4e72b4febf9c2080085", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_164", + "filename": "asset_object_animations_164", + "folder": "unknown", + "sha1": "2e3bf38e402eac5424d7fc74ae6403dfef9ed4c0", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_165", + "filename": "asset_object_animations_165", + "folder": "unknown", + "sha1": "87c33b5a813c103cb6d8a2bbea82897592d33c3c", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_166", + "filename": "asset_object_animations_166", + "folder": "unknown", + "sha1": "8735a41f557137800446c330976504208975f923", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_167", + "filename": "asset_object_animations_167", + "folder": "unknown", + "sha1": "646ddc58f0b7a6d3ffb02a735e3d4b517693a342", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_168", + "filename": "asset_object_animations_168", + "folder": "unknown", + "sha1": "3c4edc98f64f503b45187e89d63dea84c6ba7942", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_169", + "filename": "asset_object_animations_169", + "folder": "unknown", + "sha1": "ef0aa79a10ae37550032cd1fce7951d4d2765221", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_170", + "filename": "asset_object_animations_170", + "folder": "unknown", + "sha1": "dcf1282026b2d30565b50cdd19cdfe38686c65b6", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_171", + "filename": "asset_object_animations_171", + "folder": "unknown", + "sha1": "8bc596c9c94fd8c59c904b513d91eb0a7974e0ee", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_172", + "filename": "asset_object_animations_172", + "folder": "unknown", + "sha1": "04f9455bb9336b357121d18e19fefd5cca7b3817", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_173", + "filename": "asset_object_animations_173", + "folder": "unknown", + "sha1": "d4571686bf67c0f7ffe71698e44f6bc8c1a2d32e", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_174", + "filename": "asset_object_animations_174", + "folder": "unknown", + "sha1": "88727e4ae4483014cab800297a8ad60712887080", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_175", + "filename": "asset_object_animations_175", + "folder": "unknown", + "sha1": "696afff8fbb2ea60c468534daebb8ec7bea9047d", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_176", + "filename": "asset_object_animations_176", + "folder": "unknown", + "sha1": "faa7287673d5084b624cdcd67462ba2445dadb32", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_177", + "filename": "asset_object_animations_177", + "folder": "unknown", + "sha1": "65e462a7ba440cb38502c4c9098b0bfb3ca186dd", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_178", + "filename": "asset_object_animations_178", + "folder": "unknown", + "sha1": "13a00db189b530551a9daf5eba28f6530d1ec612", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_179", + "filename": "asset_object_animations_179", + "folder": "unknown", + "sha1": "bb4dbb668f9e8f0dcedcff10b569141a073c3c71", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_180", + "filename": "asset_object_animations_180", + "folder": "unknown", + "sha1": "71c8b361977bcc593d2a42a7dd0c6d1de94c44b9", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_181", + "filename": "asset_object_animations_181", + "folder": "unknown", + "sha1": "1047cb0568e7818dd6ac70410e7d3991730806a3", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_182", + "filename": "asset_object_animations_182", + "folder": "unknown", + "sha1": "abd4dafa803a700367b937eb8f8595d2b29892de", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_183", + "filename": "asset_object_animations_183", + "folder": "unknown", + "sha1": "cfa77ee5af4ecbb16fd4150505dc4ff8efa9eb2d", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_184", + "filename": "asset_object_animations_184", + "folder": "unknown", + "sha1": "6e7e112c1959c59a495c1ba910506d4f5ffd25a3", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_185", + "filename": "asset_object_animations_185", + "folder": "unknown", + "sha1": "86310d59e6fb111ee60cd2c17a2c6b56b9fb2c6a", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_186", + "filename": "asset_object_animations_186", + "folder": "unknown", + "sha1": "7c2904062d2f81057104b35f1797f6a1789361e5", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_187", + "filename": "asset_object_animations_187", + "folder": "unknown", + "sha1": "5ffbb0f905cba4f0a4e9d95658824bf31219f31b", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_188", + "filename": "asset_object_animations_188", + "folder": "unknown", + "sha1": "be5c357d97577ecd595755e9c59cc9b414f66286", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_189", + "filename": "asset_object_animations_189", + "folder": "unknown", + "sha1": "9e66c90e1abbdaf2df8268bc51ae3a333d3bcc22", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_190", + "filename": "asset_object_animations_190", + "folder": "unknown", + "sha1": "588e8c171c2530e1d8c5496aff18d0de94f99b30", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_191", + "filename": "asset_object_animations_191", + "folder": "unknown", + "sha1": "1ea8730b8a42341fc73edf8de02417b16e3b4f6d", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_192", + "filename": "asset_object_animations_192", + "folder": "unknown", + "sha1": "ffd990ac0f98066393922d4c157f129d11a59d3d", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_193", + "filename": "asset_object_animations_193", + "folder": "unknown", + "sha1": "52d0c7c8e318101f3d36c5fec126c5e39dd0d791", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_194", + "filename": "asset_object_animations_194", + "folder": "unknown", + "sha1": "b1a853313c276923532641a846a2f0b1e01cd952", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_195", + "filename": "asset_object_animations_195", + "folder": "unknown", + "sha1": "46f7d4563c2587473e719b838c6f10692c49e370", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_196", + "filename": "asset_object_animations_196", + "folder": "unknown", + "sha1": "f9b1d5ad3e284a1c65e50090dbfb627c693650bf", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_197", + "filename": "asset_object_animations_197", + "folder": "unknown", + "sha1": "cf89ef4ced571014d304991968997457b994efea", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_198", + "filename": "asset_object_animations_198", + "folder": "unknown", + "sha1": "540e924d5b8404e91e6ab63c7195219665077243", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_199", + "filename": "asset_object_animations_199", + "folder": "unknown", + "sha1": "1d9657101b670d8e216ee285469afbbd853270fa", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_200", + "filename": "asset_object_animations_200", + "folder": "unknown", + "sha1": "976e2491da5f26d4cc74923c8980f4eb924ca78e", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_201", + "filename": "asset_object_animations_201", + "folder": "unknown", + "sha1": "7a47df102f29e9c6e638eb071e8117719b23b720", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_202", + "filename": "asset_object_animations_202", + "folder": "unknown", + "sha1": "931f3eeef34b1d0a2f80d2c44e44e7711e3cdfba", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_203", + "filename": "asset_object_animations_203", + "folder": "unknown", + "sha1": "4d2db5c32fa47c35a84b0845dc57d4c5b643820f", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_204", + "filename": "asset_object_animations_204", + "folder": "unknown", + "sha1": "dc0005a7276af32fcff0e5a715e19698fcb053f0", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_205", + "filename": "asset_object_animations_205", + "folder": "unknown", + "sha1": "3cc7f786d4996f7616974a6f44c5f8ca1a83ecb0", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_206", + "filename": "asset_object_animations_206", + "folder": "unknown", + "sha1": "76245f81039e5163a227bd972050e1e7a7fc5ed7", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_207", + "filename": "asset_object_animations_207", + "folder": "unknown", + "sha1": "ae94eb1cf202d2c9fc4751249a72afae77af86a0", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_208", + "filename": "asset_object_animations_208", + "folder": "unknown", + "sha1": "8519fce302d1c6412d4b1e94d8b0f1dcd248968e", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_209", + "filename": "asset_object_animations_209", + "folder": "unknown", + "sha1": "a17d437e83f149bc74a6919f048a2258fc7c6a81", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_210", + "filename": "asset_object_animations_210", + "folder": "unknown", + "sha1": "24943de916aaec7ed35c3260f26f9a382ab3ab18", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_211", + "filename": "asset_object_animations_211", + "folder": "unknown", + "sha1": "cc9d96f87011a58a72bd25506e9285eabe482491", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_212", + "filename": "asset_object_animations_212", + "folder": "unknown", + "sha1": "9e8170b1283ced914a28f6bec78c8bf4ca982534", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_213", + "filename": "asset_object_animations_213", + "folder": "unknown", + "sha1": "ec7b88272660841e343714e9c331a37def7497ae", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_214", + "filename": "asset_object_animations_214", + "folder": "unknown", + "sha1": "bcbfdca7af55952c41dfaa9f7b8073a3a493f459", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_215", + "filename": "asset_object_animations_215", + "folder": "unknown", + "sha1": "b6ae03ce06579768f2060aa5ff3a234cf7285f45", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_216", + "filename": "asset_object_animations_216", + "folder": "unknown", + "sha1": "b59f6d4d61827d866a55819cc531968cc5d15dba", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_217", + "filename": "asset_object_animations_217", + "folder": "unknown", + "sha1": "a8601293781327898ec96e8891437ec2acd9c89f", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_218", + "filename": "asset_object_animations_218", + "folder": "unknown", + "sha1": "4cc344b81b5611b6d1e4cde39f696ed8adf08843", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_219", + "filename": "asset_object_animations_219", + "folder": "unknown", + "sha1": "dc53a7b0375c809b7a610cdd69ea0121c6e394ad", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_220", + "filename": "asset_object_animations_220", + "folder": "unknown", + "sha1": "6ca8b1036523a1852f32fa77b6600ca2935fe377", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_221", + "filename": "asset_object_animations_221", + "folder": "unknown", + "sha1": "7ee91fa2f1af7771266c6b24ef9d1013989ff06a", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_222", + "filename": "asset_object_animations_222", + "folder": "unknown", + "sha1": "02820a487eb9fc3aa939af5041e7d866e4547bb8", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_223", + "filename": "asset_object_animations_223", + "folder": "unknown", + "sha1": "cac300ef63c28310c38b961cae0d0e9fb76c05db", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_224", + "filename": "asset_object_animations_224", + "folder": "unknown", + "sha1": "bc5664278b08ec7462683ed23059d5141175ebbe", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_225", + "filename": "asset_object_animations_225", + "folder": "unknown", + "sha1": "09e74b5f1c9a067af76dfc891a67dc67852ec1fa", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_226", + "filename": "asset_object_animations_226", + "folder": "unknown", + "sha1": "ec6bb249ab06877d6eb5d2ad2de593c1d1e7abbc", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_227", + "filename": "asset_object_animations_227", + "folder": "unknown", + "sha1": "7d16e7af88a9504039ac132425f185eb41cec03a", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_228", + "filename": "asset_object_animations_228", + "folder": "unknown", + "sha1": "56a87a46acc9993152f31b0cab854f39ad8a761b", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_229", + "filename": "asset_object_animations_229", + "folder": "unknown", + "sha1": "b9a58e4c31fa3c72aac13e6a36cb9fdf9f732bee", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_230", + "filename": "asset_object_animations_230", + "folder": "unknown", + "sha1": "f3ec1e8b0819dcb440e97d749d0b507faf5c6a18", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_231", + "filename": "asset_object_animations_231", + "folder": "unknown", + "sha1": "f0613df1102b3a22ccb23a98279603e7b6014339", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_232", + "filename": "asset_object_animations_232", + "folder": "unknown", + "sha1": "dfefa0b8e2cd85eea039413d74aa7ba18623e4a8", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_233", + "filename": "asset_object_animations_233", + "folder": "unknown", + "sha1": "6063c7b7183788073a7a3bde08a1be3e6e169c41", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_234", + "filename": "asset_object_animations_234", + "folder": "unknown", + "sha1": "0bd175200c2371be047f4f7309d2a9d95781d354", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_235", + "filename": "asset_object_animations_235", + "folder": "unknown", + "sha1": "65fa0008b84fed74979bd0aac27be068947f1041", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_236", + "filename": "asset_object_animations_236", + "folder": "unknown", + "sha1": "ecfcc65507da479598b1185247eba273844b981b", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_237", + "filename": "asset_object_animations_237", + "folder": "unknown", + "sha1": "5e848c0473e1ed3ae8a1719789185b69573614d7", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_238", + "filename": "asset_object_animations_238", + "folder": "unknown", + "sha1": "9d8286f822f3c69cbcb9a5719252d51f5dce1af8", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_239", + "filename": "asset_object_animations_239", + "folder": "unknown", + "sha1": "2d602860314c6940a7ca278c874ab02bd1919f98", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_240", + "filename": "asset_object_animations_240", + "folder": "unknown", + "sha1": "e6c7d5c4b5076034c4e13d0bd6254269b36af6be", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_241", + "filename": "asset_object_animations_241", + "folder": "unknown", + "sha1": "35f49ff16b065411c6709884f1ce1ec67ef6f9dc", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_242", + "filename": "asset_object_animations_242", + "folder": "unknown", + "sha1": "338edd178492781a1554ea543162b08eede7bc75", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_243", + "filename": "asset_object_animations_243", + "folder": "unknown", + "sha1": "5d0e280d00c8c4d82cb0f46ee7323f4dca603b3a", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_244", + "filename": "asset_object_animations_244", + "folder": "unknown", + "sha1": "b597d664b283af1b4fcbe1819723abb40c16e1f4", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_245", + "filename": "asset_object_animations_245", + "folder": "unknown", + "sha1": "bb383a7985c59bb02fe3600d82e076e49f97e157", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_246", + "filename": "asset_object_animations_246", + "folder": "unknown", + "sha1": "39a29e55a4acd232767a481618ecc7fae4f02414", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_247", + "filename": "asset_object_animations_247", + "folder": "unknown", + "sha1": "0d0bfcde3785d7813b2539053036562c5d2a24ec", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_248", + "filename": "asset_object_animations_248", + "folder": "unknown", + "sha1": "5e0aee4559776ba18edbe56179cfde074f33f4ba", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_249", + "filename": "asset_object_animations_249", + "folder": "unknown", + "sha1": "a589edda3ac6babc7e4bac49671009cdb34bd1d2", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_250", + "filename": "asset_object_animations_250", + "folder": "unknown", + "sha1": "a652f45b51a09fd817621a5a7c99a12bd4b02089", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_251", + "filename": "asset_object_animations_251", + "folder": "unknown", + "sha1": "13c1cb14fbcaf0501f16751a2878ca8a5a983d14", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_252", + "filename": "asset_object_animations_252", + "folder": "unknown", + "sha1": "485e6180e670ac017c14b1822d013ea6ccd3dd28", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_253", + "filename": "asset_object_animations_253", + "folder": "unknown", + "sha1": "7402b044a766c9471a296c58b5930762a7b6ba2a", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_254", + "filename": "asset_object_animations_254", + "folder": "unknown", + "sha1": "082d137fccc2b3f104de2db8f49d209fcf4ff899", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_255", + "filename": "asset_object_animations_255", + "folder": "unknown", + "sha1": "08f5e1f6138798d131e8f0d7e813cd233074a2fe", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_256", + "filename": "asset_object_animations_256", + "folder": "unknown", + "sha1": "dffc0ca2c409073db27e069fe1e88b19ccdb0561", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_257", + "filename": "asset_object_animations_257", + "folder": "unknown", + "sha1": "aab1ce42ba50255512ff66a829cabe57c29bb91d", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_258", + "filename": "asset_object_animations_258", + "folder": "unknown", + "sha1": "dbc28976cdfecf576c7b9bf56e607bd053c4b0d8", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_259", + "filename": "asset_object_animations_259", + "folder": "unknown", + "sha1": "46d4456eaaa28a294051c0788937f25af417235f", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_260", + "filename": "asset_object_animations_260", + "folder": "unknown", + "sha1": "fc4c1160175f08aaa6384995675320ca1151a9cc", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_261", + "filename": "asset_object_animations_261", + "folder": "unknown", + "sha1": "3bcdb6083498f7fc39fec1a3283cdaff4017fa71", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_262", + "filename": "asset_object_animations_262", + "folder": "unknown", + "sha1": "3feae0e3e76ab73b538071ddf92ea204030641f1", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_263", + "filename": "asset_object_animations_263", + "folder": "unknown", + "sha1": "9bc247559e7ce2b6973bae89ed213dfbaf30dd62", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_264", + "filename": "asset_object_animations_264", + "folder": "unknown", + "sha1": "05d1e828e8f7cb7c78c68bf96ce71a6f2b189b11", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_265", + "filename": "asset_object_animations_265", + "folder": "unknown", + "sha1": "0e57e031e358f5c9f350b27b772a65147562d0a1", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_266", + "filename": "asset_object_animations_266", + "folder": "unknown", + "sha1": "1cb4a5c61a8290e764148b9d4bbc316fbfa022f2", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_267", + "filename": "asset_object_animations_267", + "folder": "unknown", + "sha1": "cb23dccf065b1154aeedaa7a3f97ce06b89b0c82", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_268", + "filename": "asset_object_animations_268", + "folder": "unknown", + "sha1": "613d84d692689aca0fd839cfc59d84d47c048cef", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_269", + "filename": "asset_object_animations_269", + "folder": "unknown", + "sha1": "2398b4b23af987d2d1db6f59da0b88eaa5645156", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_270", + "filename": "asset_object_animations_270", + "folder": "unknown", + "sha1": "64f860d2571a0c580c900a6bede78143e6575cdf", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_271", + "filename": "asset_object_animations_271", + "folder": "unknown", + "sha1": "784bc543dc3ff63b57cb470c712f36cb04a398bc", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_272", + "filename": "asset_object_animations_272", + "folder": "unknown", + "sha1": "14134d0b4ea9c5625cefa733d54fef137b8a37d5", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_273", + "filename": "asset_object_animations_273", + "folder": "unknown", + "sha1": "47fe9a4ef5175ad446bb0eec747d7c4ab58a82ab", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_274", + "filename": "asset_object_animations_274", + "folder": "unknown", + "sha1": "50538db9ecdf4b9cc5a140eccc5f22182dd36b16", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_275", + "filename": "asset_object_animations_275", + "folder": "unknown", + "sha1": "8893957dbf87ec5fe93f47ebe88bd1a518975d05", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_276", + "filename": "asset_object_animations_276", + "folder": "unknown", + "sha1": "0d1885fb1657b35aeb5558b53acfa91ff61567ca", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_277", + "filename": "asset_object_animations_277", + "folder": "unknown", + "sha1": "1bda94067708e4f01fea4bf28f1ac1d8f1db490e", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_278", + "filename": "asset_object_animations_278", + "folder": "unknown", + "sha1": "44f933aa2488b9917e6fc0a955e45b6c49c26c0b", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_279", + "filename": "asset_object_animations_279", + "folder": "unknown", + "sha1": "cb3dc18c609da1fdbc192014a952959d55f89167", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_280", + "filename": "asset_object_animations_280", + "folder": "unknown", + "sha1": "585c8c90c72fb60ae39958ee67de3649be454322", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_281", + "filename": "asset_object_animations_281", + "folder": "unknown", + "sha1": "23e585f15d5643ded2600f182803e815c95b4bd4", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_282", + "filename": "asset_object_animations_282", + "folder": "unknown", + "sha1": "102b39f5ba5a079a699a0f9708db210bbe122bd4", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_283", + "filename": "asset_object_animations_283", + "folder": "unknown", + "sha1": "bc52091d7dd0967ba3902417ec2b2b3b000702fd", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_284", + "filename": "asset_object_animations_284", + "folder": "unknown", + "sha1": "bb7dffe13c378fe55dae110bb89b6f42212d0a95", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_285", + "filename": "asset_object_animations_285", + "folder": "unknown", + "sha1": "600f2e7f250dadfbe59cb0d32f233dc4f9d5600e", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_286", + "filename": "asset_object_animations_286", + "folder": "unknown", + "sha1": "8e017f6027c374eab0e5cd5fde7e6af8bf8c620c", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_287", + "filename": "asset_object_animations_287", + "folder": "unknown", + "sha1": "24ecafac5c2c8c808197b6ad1570df21d2adba71", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_288", + "filename": "asset_object_animations_288", + "folder": "unknown", + "sha1": "8219f3f8f4b43d34f81b573bf88f35468bb5e261", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_289", + "filename": "asset_object_animations_289", + "folder": "unknown", + "sha1": "a27e476c3789cfb80267a0a44a33d7fb2161f89c", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_290", + "filename": "asset_object_animations_290", + "folder": "unknown", + "sha1": "9a48583991571f7df78f521521a27a955fac0508", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_291", + "filename": "asset_object_animations_291", + "folder": "unknown", + "sha1": "b6e969d88ed1baca4c863b981f0fa0ac840054fa", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_292", + "filename": "asset_object_animations_292", + "folder": "unknown", + "sha1": "46ba41c3a3ae3f16850998457f17ad106f4c4631", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_293", + "filename": "asset_object_animations_293", + "folder": "unknown", + "sha1": "70a7bdaf7b100d90b82fa6ca2d0e66e770449787", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_294", + "filename": "asset_object_animations_294", + "folder": "unknown", + "sha1": "5998bc04a773a1418133cec616b5601f89674526", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_295", + "filename": "asset_object_animations_295", + "folder": "unknown", + "sha1": "28b5447f8d0c4e07ac186b265af53f2af3a90e0c", + "type": "ObjectAnimation" + }, + { + "filename": "asset_object_animations_296", + "build-id": "ASSET_OBJECT_ANIMATIONS_296", + "folder": "unknown", + "type": "ObjectAnimation", + "sha1": "28b5447f8d0c4e07ac186b265af53f2af3a90e0c" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_297", + "filename": "asset_object_animations_297", + "folder": "unknown", + "sha1": "488803a091fb833788abac6397c92fd88a5a02e4", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_298", + "filename": "asset_object_animations_298", + "folder": "unknown", + "sha1": "d5a470f5b39406f3046b113ab28ba2a184f6920b", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_299", + "filename": "asset_object_animations_299", + "folder": "unknown", + "sha1": "fe299c9ff575a977deeb1ad9ed3e525add1ac781", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_300", + "filename": "asset_object_animations_300", + "folder": "unknown", + "sha1": "6f145ad7aeae5a2a26a2b07a25f29c0bba88388d", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_301", + "filename": "asset_object_animations_301", + "folder": "unknown", + "sha1": "13b9cd76009e39a87ade5ad6888d8f4670743be5", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_302", + "filename": "asset_object_animations_302", + "folder": "unknown", + "sha1": "df5c1f8939f7bf9e6cb222c05ebccefef5cc2cd7", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_303", + "filename": "asset_object_animations_303", + "folder": "unknown", + "sha1": "cc3ee9d7683ba0d58a93a8b607b926697b0c0bc3", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_304", + "filename": "asset_object_animations_304", + "folder": "unknown", + "sha1": "c3efd40cbe02b394f9ef92ae9d1c914ce642f055", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_305", + "filename": "asset_object_animations_305", + "folder": "unknown", + "sha1": "c6301432414a3f072ec7ff8b8909e03fa63c208c", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_306", + "filename": "asset_object_animations_306", + "folder": "unknown", + "sha1": "1e4a2246016ced0d1fdade14b57bffdceb0d109c", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_307", + "filename": "asset_object_animations_307", + "folder": "unknown", + "sha1": "247fbd75a0e293b21a95672a77b0605d856b0c4e", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_308", + "filename": "asset_object_animations_308", + "folder": "unknown", + "sha1": "9abdcc1106dc92b40e2eccbcfc2397e3a82c04f7", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_309", + "filename": "asset_object_animations_309", + "folder": "unknown", + "sha1": "a7f35f7ddd27b31df3ff4ce58809e47f122c2c06", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_310", + "filename": "asset_object_animations_310", + "folder": "unknown", + "sha1": "1bf62755f940bbf4117d5eb69f53a5676b711dfb", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_311", + "filename": "asset_object_animations_311", + "folder": "unknown", + "sha1": "41634c21b3163094cd4931b161f4f58c27073896", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_312", + "filename": "asset_object_animations_312", + "folder": "unknown", + "sha1": "fa1c12d2a1d22516d78edf39e03df9b04870e188", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_313", + "filename": "asset_object_animations_313", + "folder": "unknown", + "sha1": "81e979a8eccf3af2b987decc73c33696839f01d3", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_314", + "filename": "asset_object_animations_314", + "folder": "unknown", + "sha1": "ef5da2086d7991fc8d12d0c594db89d1fe9aed4e", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_315", + "filename": "asset_object_animations_315", + "folder": "unknown", + "sha1": "0ffa73c81e0cea4c7f9ddaf9df857f45e5ce401c", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_316", + "filename": "asset_object_animations_316", + "folder": "unknown", + "sha1": "7bc93161ebef7d1353d8c252104613b5fe681ca8", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_317", + "filename": "asset_object_animations_317", + "folder": "unknown", + "sha1": "9f25de9444a0ab956223effa4c2c4f456904ab88", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_318", + "filename": "asset_object_animations_318", + "folder": "unknown", + "sha1": "ef056444bb2711a9a492c62a9406e6cb8bd17a63", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_319", + "filename": "asset_object_animations_319", + "folder": "unknown", + "sha1": "b1956037eeaf10d1fae7428ef6d2c3114c724af3", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_320", + "filename": "asset_object_animations_320", + "folder": "unknown", + "sha1": "0345a6db930d718a4d069a1c91a6cd978d8d1b18", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_321", + "filename": "asset_object_animations_321", + "folder": "unknown", + "sha1": "4978de9c12f6d49213945f5a8bc9b79de84f2318", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_322", + "filename": "asset_object_animations_322", + "folder": "unknown", + "sha1": "96cd54d457a3490c93f5a783075fc0de0cf0c1b0", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_323", + "filename": "asset_object_animations_323", + "folder": "unknown", + "sha1": "2ddb3707052394dcdd2d3add665b921dc35ab7cd", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_324", + "filename": "asset_object_animations_324", + "folder": "unknown", + "sha1": "10e7409f36679cd3658d4afed0c3c55b5b92acda", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_325", + "filename": "asset_object_animations_325", + "folder": "unknown", + "sha1": "fe660f438d21f67d7f4a8ae6914f99202b0afd28", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_326", + "filename": "asset_object_animations_326", + "folder": "unknown", + "sha1": "3f7c3a2436f2bb5386107611dd4faa61c226bd4f", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_327", + "filename": "asset_object_animations_327", + "folder": "unknown", + "sha1": "5c532a606108c1a8f5c2640b3ff2f2d22058f3b5", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_328", + "filename": "asset_object_animations_328", + "folder": "unknown", + "sha1": "d8a8f83f1c4afb00b4ab43d351723b201da8a1b3", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_329", + "filename": "asset_object_animations_329", + "folder": "unknown", + "sha1": "aa53600d7d09e39b560791da2727a131ffd1b6a1", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_330", + "filename": "asset_object_animations_330", + "folder": "unknown", + "sha1": "8085eede10bc9819ca21e15edbd1c0f086500078", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_331", + "filename": "asset_object_animations_331", + "folder": "unknown", + "sha1": "5205ab31f84a8e2fcc35092e848b579856e22c85", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_332", + "filename": "asset_object_animations_332", + "folder": "unknown", + "sha1": "52bdc43774f922ecda87d1c1d41bd230ea022a27", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_333", + "filename": "asset_object_animations_333", + "folder": "unknown", + "sha1": "2b855881d8d2d8f9c52db8d422d58b1d3ccb9b5e", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_334", + "filename": "asset_object_animations_334", + "folder": "unknown", + "sha1": "e1df7867491618ba7d5747dc3ca5ffb0e54085cc", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_335", + "filename": "asset_object_animations_335", + "folder": "unknown", + "sha1": "afb2443f4a1b0f260d3e80156a70acdd68d6a775", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_336", + "filename": "asset_object_animations_336", + "folder": "unknown", + "sha1": "cc005958bd0f7670d75c1296385e9f1bcdaac3ab", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_337", + "filename": "asset_object_animations_337", + "folder": "unknown", + "sha1": "71dae6b6ed99967ab860623419d5edd7025b05e5", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_338", + "filename": "asset_object_animations_338", + "folder": "unknown", + "sha1": "5e0fa13bff1a9614d3711dc59c2eed8a25750f39", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_339", + "filename": "asset_object_animations_339", + "folder": "unknown", + "sha1": "3fc53087493e2a69d2d9146064aac0837933afd9", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_340", + "filename": "asset_object_animations_340", + "folder": "unknown", + "sha1": "b9b2e5737b9556f82914155a054d259d19febe76", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_341", + "filename": "asset_object_animations_341", + "folder": "unknown", + "sha1": "e82095904d3bef3d50355d410d0c6619858231fa", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_342", + "filename": "asset_object_animations_342", + "folder": "unknown", + "sha1": "cdbc476869eae278891faca82d9c2d9f6dbd5910", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_343", + "filename": "asset_object_animations_343", + "folder": "unknown", + "sha1": "3464677bf6ce22335034077de467f6264e1002c9", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_344", + "filename": "asset_object_animations_344", + "folder": "unknown", + "sha1": "ec68f184fe15c1a0397486cf49b927482910e18d", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_345", + "filename": "asset_object_animations_345", + "folder": "unknown", + "sha1": "e2b908bc7d745cb2f692f69d4a674b7c9166ef6c", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_346", + "filename": "asset_object_animations_346", + "folder": "unknown", + "sha1": "94cb323bdf14e7cf18404a02642e3004803199c9", + "type": "ObjectAnimation" + }, + { + "filename": "asset_object_animations_347", + "build-id": "ASSET_OBJECT_ANIMATIONS_347", + "folder": "unknown", + "type": "ObjectAnimation", + "sha1": "b9b2e5737b9556f82914155a054d259d19febe76" + }, + { + "filename": "asset_object_animations_348", + "build-id": "ASSET_OBJECT_ANIMATIONS_348", + "folder": "unknown", + "type": "ObjectAnimation", + "sha1": "e82095904d3bef3d50355d410d0c6619858231fa" + }, + { + "filename": "asset_object_animations_349", + "build-id": "ASSET_OBJECT_ANIMATIONS_349", + "folder": "unknown", + "type": "ObjectAnimation", + "sha1": "cdbc476869eae278891faca82d9c2d9f6dbd5910" + }, + { + "filename": "asset_object_animations_350", + "build-id": "ASSET_OBJECT_ANIMATIONS_350", + "folder": "unknown", + "type": "ObjectAnimation", + "sha1": "3464677bf6ce22335034077de467f6264e1002c9" + }, + { + "filename": "asset_object_animations_351", + "build-id": "ASSET_OBJECT_ANIMATIONS_351", + "folder": "unknown", + "type": "ObjectAnimation", + "sha1": "ec68f184fe15c1a0397486cf49b927482910e18d" + }, + { + "filename": "asset_object_animations_352", + "build-id": "ASSET_OBJECT_ANIMATIONS_352", + "folder": "unknown", + "type": "ObjectAnimation", + "sha1": "e2b908bc7d745cb2f692f69d4a674b7c9166ef6c" + }, + { + "filename": "asset_object_animations_353", + "build-id": "ASSET_OBJECT_ANIMATIONS_353", + "folder": "unknown", + "type": "ObjectAnimation", + "sha1": "94cb323bdf14e7cf18404a02642e3004803199c9" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_354", + "filename": "asset_object_animations_354", + "folder": "unknown", + "sha1": "7bc4045ee5bd5fbe52b82e87081461997a64688d", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_355", + "filename": "asset_object_animations_355", + "folder": "unknown", + "sha1": "6a632fd7842e4db1d3a8c7792b185c7115ef8de6", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_356", + "filename": "asset_object_animations_356", + "folder": "unknown", + "sha1": "e09e4a07172367b802f058451638f518ac347060", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_357", + "filename": "asset_object_animations_357", + "folder": "unknown", + "sha1": "e25ed15a47794b5b6f0058c0b35c4b4d28f76e21", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_358", + "filename": "asset_object_animations_358", + "folder": "unknown", + "sha1": "76181c3d4b0bb29cec9891e7ce58cb234d6bf91d", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_359", + "filename": "asset_object_animations_359", + "folder": "unknown", + "sha1": "095d5299924adb612f2056634d6dd7e459572e20", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_360", + "filename": "asset_object_animations_360", + "folder": "unknown", + "sha1": "b6fe245f0d86cee5ab2a15f17766ba885fdd867e", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_361", + "filename": "asset_object_animations_361", + "folder": "unknown", + "sha1": "a77b576fc3fbc75c37eab2a0f75440d84ebd9c99", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_362", + "filename": "asset_object_animations_362", + "folder": "unknown", + "sha1": "72a77bbcf9d9305634c51cc551b9ec600d2adec8", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_363", + "filename": "asset_object_animations_363", + "folder": "unknown", + "sha1": "2854435d866ab27337379d520c4bf791ebd8b83b", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_364", + "filename": "asset_object_animations_364", + "folder": "unknown", + "sha1": "9d985d757c66fc711ff87ee7c0c28926453413fd", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_365", + "filename": "asset_object_animations_365", + "folder": "unknown", + "sha1": "acb65d6e881e9d515b037f8148ab2a3919d721b0", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_366", + "filename": "asset_object_animations_366", + "folder": "unknown", + "sha1": "b375716cd194a2464630951841c0133638e322ce", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_367", + "filename": "asset_object_animations_367", + "folder": "unknown", + "sha1": "e8f1f9f5760924a1fd524bce021f74e0c11b5a9e", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_368", + "filename": "asset_object_animations_368", + "folder": "unknown", + "sha1": "b5b5bb02b2dc2cfb27353e64dc73472aabb4e3f0", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_369", + "filename": "asset_object_animations_369", + "folder": "unknown", + "sha1": "4cf647a17da36d54f058aa39a37d1a68e0249fab", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_370", + "filename": "asset_object_animations_370", + "folder": "unknown", + "sha1": "b99da075b06b3b84cddb32407a1d5294a52bb25f", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_371", + "filename": "asset_object_animations_371", + "folder": "unknown", + "sha1": "cb6f0731690a6f29c9786c2689d3b0a4dfc775be", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_372", + "filename": "asset_object_animations_372", + "folder": "unknown", + "sha1": "bcde70ed0e6b6fec41f13785ad5c2d5efc73f1e1", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_373", + "filename": "asset_object_animations_373", + "folder": "unknown", + "sha1": "80ce345b2ac7f36687245a6b8030035ad76e00df", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_374", + "filename": "asset_object_animations_374", + "folder": "unknown", + "sha1": "44cfaccf65391234b9b445e20f75010543503213", + "type": "ObjectAnimation" + }, + { + "filename": "asset_object_animations_375", + "build-id": "ASSET_OBJECT_ANIMATIONS_375", + "folder": "unknown", + "type": "ObjectAnimation", + "sha1": "e8f1f9f5760924a1fd524bce021f74e0c11b5a9e" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_376", + "filename": "asset_object_animations_376", + "folder": "unknown", + "sha1": "944127b89672bb95dcd0a45646e393e5a647695e", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_377", + "filename": "asset_object_animations_377", + "folder": "unknown", + "sha1": "66bc1fc0ad5b6fd2ab1b10d1b9442225197b2372", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_378", + "filename": "asset_object_animations_378", + "folder": "unknown", + "sha1": "fdd747acbfd27d48cb831c28c2739c8a6d15b4e2", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_379", + "filename": "asset_object_animations_379", + "folder": "unknown", + "sha1": "f1c915418b4113ce4d8ec381663039ac7b06fc68", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_380", + "filename": "asset_object_animations_380", + "folder": "unknown", + "sha1": "e571b7086025455d42e8520a377cd4c607c3b430", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_381", + "filename": "asset_object_animations_381", + "folder": "unknown", + "sha1": "7950011096b977ad051d20363d239d7118f6e04c", + "type": "ObjectAnimation" + }, + { + "filename": "asset_object_animations_382", + "build-id": "ASSET_OBJECT_ANIMATIONS_382", + "folder": "unknown", + "type": "ObjectAnimation", + "sha1": "66bc1fc0ad5b6fd2ab1b10d1b9442225197b2372" + }, + { + "filename": "asset_object_animations_383", + "build-id": "ASSET_OBJECT_ANIMATIONS_383", + "folder": "unknown", + "type": "ObjectAnimation", + "sha1": "f1c915418b4113ce4d8ec381663039ac7b06fc68" + }, + { + "filename": "asset_object_animations_384", + "build-id": "ASSET_OBJECT_ANIMATIONS_384", + "folder": "unknown", + "type": "ObjectAnimation", + "sha1": "7950011096b977ad051d20363d239d7118f6e04c" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_385", + "filename": "asset_object_animations_385", + "folder": "unknown", + "sha1": "bdfe132c5e5e1343e1dad238692779b8827ae607", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_386", + "filename": "asset_object_animations_386", + "folder": "unknown", + "sha1": "10f3b7ee7708eaf693e4bf5f3abdce2a4bbc2e95", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_387", + "filename": "asset_object_animations_387", + "folder": "unknown", + "sha1": "a69c9e2f0968dbfcd1da5da1786762226827069c", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_388", + "filename": "asset_object_animations_388", + "folder": "unknown", + "sha1": "59b370afee7115a43866f92ded0d45d1fff9c7ae", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_389", + "filename": "asset_object_animations_389", + "folder": "unknown", + "sha1": "151da4b12f64b31988757721eaaa4d15f819ebee", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_390", + "filename": "asset_object_animations_390", + "folder": "unknown", + "sha1": "3ec76e2a125ae52aa5c7a04d39214190521e92e5", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_391", + "filename": "asset_object_animations_391", + "folder": "unknown", + "sha1": "daaa30d7fec014cf5c7d6b2cec81864b4ba35552", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_392", + "filename": "asset_object_animations_392", + "folder": "unknown", + "sha1": "d9565b27580d652a7f44224a133b85dd6105b476", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_393", + "filename": "asset_object_animations_393", + "folder": "unknown", + "sha1": "91ec3df04526764303de05722b9e2c87a9c3a4c8", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_394", + "filename": "asset_object_animations_394", + "folder": "unknown", + "sha1": "48250b8983c818b294947347fe5ddf4fa391b102", + "type": "ObjectAnimation" + }, + { + "filename": "asset_object_animations_395", + "build-id": "ASSET_OBJECT_ANIMATIONS_395", + "folder": "unknown", + "type": "ObjectAnimation", + "sha1": "59b370afee7115a43866f92ded0d45d1fff9c7ae" + }, + { + "filename": "asset_object_animations_396", + "build-id": "ASSET_OBJECT_ANIMATIONS_396", + "folder": "unknown", + "type": "ObjectAnimation", + "sha1": "59b370afee7115a43866f92ded0d45d1fff9c7ae" + }, + { + "filename": "asset_object_animations_397", + "build-id": "ASSET_OBJECT_ANIMATIONS_397", + "folder": "unknown", + "type": "ObjectAnimation", + "sha1": "48250b8983c818b294947347fe5ddf4fa391b102" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_398", + "filename": "asset_object_animations_398", + "folder": "unknown", + "sha1": "0f73f8328c88cbe9aced0c4c3f4da338634602d6", + "type": "ObjectAnimation" + }, + { + "filename": "asset_object_animations_399", + "build-id": "ASSET_OBJECT_ANIMATIONS_399", + "folder": "unknown", + "type": "ObjectAnimation", + "sha1": "d9565b27580d652a7f44224a133b85dd6105b476" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_400", + "filename": "asset_object_animations_400", + "folder": "unknown", + "sha1": "8b7329160352b42fd8fdf96962bb9b918afafa74", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_401", + "filename": "asset_object_animations_401", + "folder": "unknown", + "sha1": "1e94d988a65541b7f17b357dbc135f08eccc81cf", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_402", + "filename": "asset_object_animations_402", + "folder": "unknown", + "sha1": "420f6f356ba1ad782f7f946d5ddd9b0042e5cd81", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_403", + "filename": "asset_object_animations_403", + "folder": "unknown", + "sha1": "5e0cbb174ebd8e6c3a39757c82a9066642707bb2", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_404", + "filename": "asset_object_animations_404", + "folder": "unknown", + "sha1": "e612096f3c870183f8052a2019c3d32f5f0d3dae", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_405", + "filename": "asset_object_animations_405", + "folder": "unknown", + "sha1": "b910c3124975493502c9d35565ffb0d4007ce320", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_406", + "filename": "asset_object_animations_406", + "folder": "unknown", + "sha1": "8c859be1ee19baa520dca58000e0e5cf07e09a23", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_407", + "filename": "asset_object_animations_407", + "folder": "unknown", + "sha1": "081477142506b87e2c640c5d0212f14eba8be917", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_408", + "filename": "asset_object_animations_408", + "folder": "unknown", + "sha1": "30f5f628615a8f4d3dada4e9f38e959d82754aa6", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_409", + "filename": "asset_object_animations_409", + "folder": "unknown", + "sha1": "553a3540ee0e8dcf206d9a58bd130f31e0409f37", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_410", + "filename": "asset_object_animations_410", + "folder": "unknown", + "sha1": "60961d5ad02c19323876b685adc4ae70c209c250", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_411", + "filename": "asset_object_animations_411", + "folder": "unknown", + "sha1": "ae3960a5459a7195ec47496dd54b4de75fb4d44a", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_412", + "filename": "asset_object_animations_412", + "folder": "unknown", + "sha1": "9a23d4e42b5d28d6f9a0d0ded378841b55f9269c", + "type": "ObjectAnimation" + }, + { + "filename": "asset_object_animations_413", + "build-id": "ASSET_OBJECT_ANIMATIONS_413", + "folder": "unknown", + "type": "ObjectAnimation", + "sha1": "9a23d4e42b5d28d6f9a0d0ded378841b55f9269c" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_414", + "filename": "asset_object_animations_414", + "folder": "unknown", + "sha1": "2b9019a28bd517a1819f7d5622674b68c5af2cd1", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_415", + "filename": "asset_object_animations_415", + "folder": "unknown", + "sha1": "b9eb9413d4230ce0199908ef2c919e2197566cbe", + "type": "ObjectAnimation" + }, + { + "filename": "asset_object_animations_416", + "build-id": "ASSET_OBJECT_ANIMATIONS_416", + "folder": "unknown", + "type": "ObjectAnimation", + "sha1": "081477142506b87e2c640c5d0212f14eba8be917" + }, + { + "filename": "asset_object_animations_417", + "build-id": "ASSET_OBJECT_ANIMATIONS_417", + "folder": "unknown", + "type": "ObjectAnimation", + "sha1": "30f5f628615a8f4d3dada4e9f38e959d82754aa6" + }, + { + "filename": "asset_object_animations_418", + "build-id": "ASSET_OBJECT_ANIMATIONS_418", + "folder": "unknown", + "type": "ObjectAnimation", + "sha1": "553a3540ee0e8dcf206d9a58bd130f31e0409f37" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_419", + "filename": "asset_object_animations_419", + "folder": "unknown", + "sha1": "b6c73826a278c4449cbbe00518690c0013f0f2ba", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_420", + "filename": "asset_object_animations_420", + "folder": "unknown", + "sha1": "e5561a3d0a91e2c94d1f5d2fac69140af34f330f", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_421", + "filename": "asset_object_animations_421", + "folder": "unknown", + "sha1": "68c3aec55bec18e7e90e85e25f8b225bc1de6674", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_422", + "filename": "asset_object_animations_422", + "folder": "unknown", + "sha1": "d5beb6f6512c86d8ffd63eefbe2698197e549fdd", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_423", + "filename": "asset_object_animations_423", + "folder": "unknown", + "sha1": "062cc25a2a1a64f194f6474f761834a2a464612c", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_424", + "filename": "asset_object_animations_424", + "folder": "unknown", + "sha1": "fa4fa602e3a331c4a943001521e60f4097b11c46", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_425", + "filename": "asset_object_animations_425", + "folder": "unknown", + "sha1": "788ccb479de78758b698f8235df2f4bda75e39cf", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_426", + "filename": "asset_object_animations_426", + "folder": "unknown", + "sha1": "9ba65252648ceb893f46f36330dbcca942b38339", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_427", + "filename": "asset_object_animations_427", + "folder": "unknown", + "sha1": "143f7bf47437535071453bd44b53d2259964553d", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_428", + "filename": "asset_object_animations_428", + "folder": "unknown", + "sha1": "c546815eddbfeda5deadd77439ee694db47c712b", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_429", + "filename": "asset_object_animations_429", + "folder": "unknown", + "sha1": "7534175b75c02451bc81814f2f04a04718802032", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_430", + "filename": "asset_object_animations_430", + "folder": "unknown", + "sha1": "941234498df87112eea78a1751666015655aae6b", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_431", + "filename": "asset_object_animations_431", + "folder": "unknown", + "sha1": "7f6c693e6f4857f440ca264d0fb53084088335bb", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_432", + "filename": "asset_object_animations_432", + "folder": "unknown", + "sha1": "7ed21d6ffb19ff9fcd92a3128f5897f52901f904", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_433", + "filename": "asset_object_animations_433", + "folder": "unknown", + "sha1": "3c24e7cc4e7979d94aba81d6bd8e445d52859ebb", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_434", + "filename": "asset_object_animations_434", + "folder": "unknown", + "sha1": "9ada02a3dcf1594c0d3efc50f52905f5ca7c5f41", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_435", + "filename": "asset_object_animations_435", + "folder": "unknown", + "sha1": "1c0b0e0fc0258c1173f49de7166ed0c3cf93f491", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_436", + "filename": "asset_object_animations_436", + "folder": "unknown", + "sha1": "0687a4f04c3519364dacb9c2e5c18cd40993605f", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_437", + "filename": "asset_object_animations_437", + "folder": "unknown", + "sha1": "1457103aedd21f4739a85d02e9a0612c0b476b1e", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_438", + "filename": "asset_object_animations_438", + "folder": "unknown", + "sha1": "25431724e6238aa14218c88959056982bc122826", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_439", + "filename": "asset_object_animations_439", + "folder": "unknown", + "sha1": "c1f5ad0a48f7f7bcbcb5b93ad4a7395462184050", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_440", + "filename": "asset_object_animations_440", + "folder": "unknown", + "sha1": "88b12664e77737310d0f4d1438186f172ab566ce", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_441", + "filename": "asset_object_animations_441", + "folder": "unknown", + "sha1": "b813e444e5b26bb333e4cb5aaea679508acb2bb7", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_442", + "filename": "asset_object_animations_442", + "folder": "unknown", + "sha1": "655f3ca257d7eb3714def71d8a0ce7418cc47337", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_443", + "filename": "asset_object_animations_443", + "folder": "unknown", + "sha1": "00459b75bf5884aac107c6c6e15ee02a0e7d2333", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_444", + "filename": "asset_object_animations_444", + "folder": "unknown", + "sha1": "496e58a6600c95a2d6133a6f21642c59852e2931", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_445", + "filename": "asset_object_animations_445", + "folder": "unknown", + "sha1": "437444bd14e79862045a36e412b10151611e7a70", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_446", + "filename": "asset_object_animations_446", + "folder": "unknown", + "sha1": "923cccb3086f38b6262f31f703f835ae8aac0014", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_447", + "filename": "asset_object_animations_447", + "folder": "unknown", + "sha1": "af1affc492b5ea682114b0a92217fdda427f1c85", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_448", + "filename": "asset_object_animations_448", + "folder": "unknown", + "sha1": "64ac3df7387478eb3ac4246de63cf826ff5c3ab3", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_449", + "filename": "asset_object_animations_449", + "folder": "unknown", + "sha1": "3f34509c07d867faa4326c7658ed4ade63f05d49", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_450", + "filename": "asset_object_animations_450", + "folder": "unknown", + "sha1": "0c4696bd82ceb4a63b31100126416a5bcafc8406", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_451", + "filename": "asset_object_animations_451", + "folder": "unknown", + "sha1": "0e196da99552545614eb76f219fe7e83a7303043", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_452", + "filename": "asset_object_animations_452", + "folder": "unknown", + "sha1": "4345daa6641b4dd20bc7131856e6d6ed18a0bb91", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_453", + "filename": "asset_object_animations_453", + "folder": "unknown", + "sha1": "101423dad48fdeca34f0cd7f0ef40658c3d91abc", + "type": "ObjectAnimation" + }, + { + "filename": "asset_object_animations_454", + "build-id": "ASSET_OBJECT_ANIMATIONS_454", + "folder": "unknown", + "type": "ObjectAnimation", + "sha1": "3c24e7cc4e7979d94aba81d6bd8e445d52859ebb" + }, + { + "filename": "asset_object_animations_455", + "build-id": "ASSET_OBJECT_ANIMATIONS_455", + "folder": "unknown", + "type": "ObjectAnimation", + "sha1": "9ada02a3dcf1594c0d3efc50f52905f5ca7c5f41" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_456", + "filename": "asset_object_animations_456", + "folder": "unknown", + "sha1": "ad390cc486bea7f36c9f073d23cc8f8fbda8952a", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_457", + "filename": "asset_object_animations_457", + "folder": "unknown", + "sha1": "3c0b23cf991c47f634976b22c6bd29fb12d82019", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_458", + "filename": "asset_object_animations_458", + "folder": "unknown", + "sha1": "678bc9c7768c5ccd654fe9a9b6507cd975fd1404", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_459", + "filename": "asset_object_animations_459", + "folder": "unknown", + "sha1": "f9f881908883d5a3c5f35318c06d7ba33f1ffe4d", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_460", + "filename": "asset_object_animations_460", + "folder": "unknown", + "sha1": "0ac73964d4ab5462c5e15d8c841592484eff1721", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_461", + "filename": "asset_object_animations_461", + "folder": "unknown", + "sha1": "c3cf441942cc14b34cf5dc5ee991cde4515ba06a", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_462", + "filename": "asset_object_animations_462", + "folder": "unknown", + "sha1": "791ba5302bce7ba422173195c19aaefcbf48f4a2", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_463", + "filename": "asset_object_animations_463", + "folder": "unknown", + "sha1": "65f57e344c390e3bc1d8066790c2a8ab3df8068b", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_464", + "filename": "asset_object_animations_464", + "folder": "unknown", + "sha1": "5d369683725d053c010543f9208e1675c03920e4", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_465", + "filename": "asset_object_animations_465", + "folder": "unknown", + "sha1": "1cdf0675a62522b45a78fd88d693e831bd1ac4d7", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_466", + "filename": "asset_object_animations_466", + "folder": "unknown", + "sha1": "89269398f4f41eaf6b732b1c1b14f70aca12a51d", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_467", + "filename": "asset_object_animations_467", + "folder": "unknown", + "sha1": "9c40405c31417a02429b0733e91ebd99f832fdd2", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_468", + "filename": "asset_object_animations_468", + "folder": "unknown", + "sha1": "ed78311a7b53941150c0b69a6ab3451e7593016e", + "type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_469", + "filename": "asset_object_animations_469", + "folder": "unknown", + "sha1": "13a78cdfb3a7f75e8d11eb5c82a86494e2953523", + "type": "ObjectAnimation" + }, + { + "filename": "diddycar", + "build-id": "ASSET_OBJECT_DIDDYCAR", + "type": "ObjectHeader", + "sha1": "e2ead98788618aa8a51618fb25ed5609de645db0" + }, + { + "filename": "SWcar", + "build-id": "ASSET_OBJECT_SWCAR", + "type": "ObjectHeader", + "sha1": "e03cad7d8f2d1032769a6f4c2dd3bf1bcdc5bb61" + }, + { + "filename": "KremCar", + "build-id": "ASSET_OBJECT_KREMCAR", + "type": "ObjectHeader", + "sha1": "d9dfd5fa27acd884aa1b1118d512966ee7501c6a" + }, + { + "filename": "BadgerCar", + "build-id": "ASSET_OBJECT_BADGERCAR", + "type": "ObjectHeader", + "sha1": "9e648a20268124c06689c14b6a50e105f68b39e5" + }, + { + "filename": "TortCar", + "build-id": "ASSET_OBJECT_TORTCAR", + "type": "ObjectHeader", + "sha1": "b8c0ad3703b3a43f89d1da476e91a8565262b89c" + }, + { + "filename": "ConkaCar", + "build-id": "ASSET_OBJECT_CONKACAR", + "type": "ObjectHeader", + "sha1": "f90f70a2a6fc7f1f09f6733df456579dfb25fd9d" + }, + { + "filename": "TigerCar", + "build-id": "ASSET_OBJECT_TIGERCAR", + "type": "ObjectHeader", + "sha1": "5e629ebb7ff753cc24c126dbb848ecaf24f46e6f" + }, + { + "filename": "BanjoCar", + "build-id": "ASSET_OBJECT_BANJOCAR", + "type": "ObjectHeader", + "sha1": "d5505c2dcafe9b8137a875be7655c4806a49c19e" + }, + { + "filename": "ChickenCar", + "build-id": "ASSET_OBJECT_CHICKENCAR", + "type": "ObjectHeader", + "sha1": "923dbddf99df34efc83c7f242a3dbd6a138f698c" + }, + { + "filename": "MouseCar", + "build-id": "ASSET_OBJECT_MOUSECAR", + "type": "ObjectHeader", + "sha1": "00b3ce4ee5a0acda543f4547c79d3511e5ab6df2" + }, + { + "filename": "diddyhover", + "build-id": "ASSET_OBJECT_DIDDYHOVER", + "type": "ObjectHeader", + "sha1": "2b1bcd891b8ec2e44fedadefc0435487741b9a8f" + }, + { + "filename": "ticktockhover", + "build-id": "ASSET_OBJECT_TICKTOCKHOVER", + "type": "ObjectHeader", + "sha1": "8f8cb2e93c097c71ad2db792551b61741fc2a1ee" + }, + { + "filename": "KremlinHover", + "build-id": "ASSET_OBJECT_KREMLINHOVER", + "type": "ObjectHeader", + "sha1": "0f62d608b4f9e4aff99f79606c2a776decd6412c" + }, + { + "filename": "BadgerHover", + "build-id": "ASSET_OBJECT_BADGERHOVER", + "type": "ObjectHeader", + "sha1": "3a25c6f66fa62f9850ef6f63ee62a83f1343d2fd" + }, + { + "filename": "TortHover", + "build-id": "ASSET_OBJECT_TORTHOVER", + "type": "ObjectHeader", + "sha1": "5fefa1786fc734dfc25afb8e1526383ae2422312" + }, + { + "filename": "ConkaHover", + "build-id": "ASSET_OBJECT_CONKAHOVER", + "type": "ObjectHeader", + "sha1": "5992a08db30298f67970b194a9c9272919d09471" + }, + { + "filename": "TigerHover", + "build-id": "ASSET_OBJECT_TIGERHOVER", + "type": "ObjectHeader", + "sha1": "b4d8fea0bcb4853b08a9d55a4d92095341031918" + }, + { + "filename": "BanjoHover", + "build-id": "ASSET_OBJECT_BANJOHOVER", + "type": "ObjectHeader", + "sha1": "222195c693f39b8920bdc56f9bcbd0b335e3d528" + }, + { + "filename": "ChickenHover", + "build-id": "ASSET_OBJECT_CHICKENHOVER", + "type": "ObjectHeader", + "sha1": "1175e41d3b8233d3b28d560178612e56afca865d" + }, + { + "filename": "MouseHover", + "build-id": "ASSET_OBJECT_MOUSEHOVER", + "type": "ObjectHeader", + "sha1": "e8f43d33b4bd424f8aba0987ac7c65fcf993fcac" + }, + { + "filename": "diddyplane", + "build-id": "ASSET_OBJECT_DIDDYPLANE", + "type": "ObjectHeader", + "sha1": "0013fb0fbbb20450ce5c03431ef11f4a3b94a7ab" + }, + { + "filename": "ticktockplane", + "build-id": "ASSET_OBJECT_TICKTOCKPLANE", + "type": "ObjectHeader", + "sha1": "28d29a0175aefc5a60ade4a504e2e9913dc2316d" + }, + { + "filename": "KremPlane", + "build-id": "ASSET_OBJECT_KREMPLANE", + "type": "ObjectHeader", + "sha1": "551b9b75ce8e6ad480acd5aa0a9e113cf9995840" + }, + { + "filename": "BadgerPlane", + "build-id": "ASSET_OBJECT_BADGERPLANE", + "type": "ObjectHeader", + "sha1": "b485b6afce1da8dc5402d115768f327af15a945e" + }, + { + "filename": "TortPlane", + "build-id": "ASSET_OBJECT_TORTPLANE", + "type": "ObjectHeader", + "sha1": "219faa0dbb54572bbce3cd3674629df0126fb71a" + }, + { + "filename": "Conka", + "build-id": "ASSET_OBJECT_CONKA", + "type": "ObjectHeader", + "sha1": "6d135da1b5dcdf662209836092f71b3164268eac" + }, + { + "filename": "TigPlane", + "build-id": "ASSET_OBJECT_TIGPLANE", + "type": "ObjectHeader", + "sha1": "2ed1519d74921b7575a922aad346d8ace273dfe6" + }, + { + "filename": "BanjoPlane", + "build-id": "ASSET_OBJECT_BANJOPLANE", + "type": "ObjectHeader", + "sha1": "8e8abb23078d1aa4941ab14a518ecc7f082f76ef" + }, + { + "filename": "ChickenPlane", + "build-id": "ASSET_OBJECT_CHICKENPLANE", + "type": "ObjectHeader", + "sha1": "a28ed39e7efd189f2b616f3cf1b574f84f746bc1" + }, + { + "filename": "MousePlane", + "build-id": "ASSET_OBJECT_MOUSEPLANE", + "type": "ObjectHeader", + "sha1": "0be5d4bbb983f6e66bcfab6a02aca819745af0b1" + }, + { + "filename": "FlyingCarpet", + "build-id": "ASSET_OBJECT_FLYINGCARPET", + "type": "ObjectHeader", + "sha1": "0ee0a4a33da1328a965366ed4b6c780fa1d63e07" + }, + { + "filename": "timberdancer", + "build-id": "ASSET_OBJECT_TIMBERDANCER", + "type": "ObjectHeader", + "sha1": "7090248a6c1dfd18e1cb3991895fa98b31d17f6b" + }, + { + "filename": "Chickencharacte", + "build-id": "ASSET_OBJECT_CHICKENCHARACTE", + "type": "ObjectHeader", + "sha1": "88fe89eb17099dd39fa80ff3a9aa8607a83984a4" + }, + { + "filename": "pipsydancer", + "build-id": "ASSET_OBJECT_PIPSYDANCER", + "type": "ObjectHeader", + "sha1": "af13454fbd106b9eedb0ff56196a79fc38194e7c" + }, + { + "filename": "banjodancer", + "build-id": "ASSET_OBJECT_BANJODANCER", + "type": "ObjectHeader", + "sha1": "8c363a7869f5d0937495550dbde25d974c5d912a" + }, + { + "filename": "ticktockdancer", + "build-id": "ASSET_OBJECT_TICKTOCKDANCER", + "type": "ObjectHeader", + "sha1": "5874f257f2d855b62c81404098f8493a35763699" + }, + { + "filename": "wizpigship", + "build-id": "ASSET_OBJECT_WIZPIGSHIP", + "type": "ObjectHeader", + "sha1": "5fa822b5e32a90edf97d9d9df1818debe547a1be" + }, + { + "filename": "conkadancer", + "build-id": "ASSET_OBJECT_CONKADANCER", + "type": "ObjectHeader", + "sha1": "9c03af76f6a988d461117dd4219b9743d7ca4271" + }, + { + "filename": "EmptyHover", + "build-id": "ASSET_OBJECT_EMPTYHOVER", + "type": "ObjectHeader", + "sha1": "4683819bc055da17454f4998428b746fafa9c827" + }, + { + "filename": "Stopwatch-man", + "build-id": "ASSET_OBJECT_STOPWATCHMAN", + "type": "ObjectHeader", + "sha1": "aa2c261e72733e08b22b90e5956df6c0ca10e869" + }, + { + "filename": "stopwatchselect", + "build-id": "ASSET_OBJECT_STOPWATCHSELECT", + "type": "ObjectHeader", + "sha1": "6af4de6bc47a42a6c4afc75dd110230c2255aa61" + }, + { + "filename": "Parkwarden", + "build-id": "ASSET_OBJECT_PARKWARDEN", + "type": "ObjectHeader", + "sha1": "a335873c2c0318022b6206ed0e2ca89c2f57764e" + }, + { + "filename": "SmartieTree", + "build-id": "ASSET_OBJECT_SMARTIETREE", + "type": "ObjectHeader", + "sha1": "6c7db02de788fbba981608ec87f3ba661b982b9d" + }, + { + "filename": "BlueBerryBush", + "build-id": "ASSET_OBJECT_BLUEBERRYBUSH", + "type": "ObjectHeader", + "sha1": "b077810ae0163e464baa2875fb544c22151a800d" + }, + { + "filename": "RubberSnowTree", + "build-id": "ASSET_OBJECT_RUBBERSNOWTREE", + "type": "ObjectHeader", + "sha1": "321448cecff659164f539747265c7313c88be979" + }, + { + "filename": "SkinnySnowTree", + "build-id": "ASSET_OBJECT_SKINNYSNOWTREE", + "type": "ObjectHeader", + "sha1": "62d81b108fa63cfd9c45db8cf7b28c76081e9a40" + }, + { + "filename": "XmasTree", + "build-id": "ASSET_OBJECT_XMASTREE", + "type": "ObjectHeader", + "sha1": "e804aec5c7b09920ff51d6b3c7ae88e015dd000c" + }, + { + "filename": "AlpineSnowTree", + "build-id": "ASSET_OBJECT_ALPINESNOWTREE", + "type": "ObjectHeader", + "sha1": "7cefc8cbeb1fbd60825612ade55ac77ea4b8b05d" + }, + { + "filename": "RubberTree", + "build-id": "ASSET_OBJECT_RUBBERTREE", + "type": "ObjectHeader", + "sha1": "e0db3e72df714ab9c8f04e2343d466e69a43a87f" + }, + { + "filename": "Beachtree", + "build-id": "ASSET_OBJECT_BEACHTREE", + "type": "ObjectHeader", + "sha1": "b8873a21bc91566f35ffa1672f18d8d95a078a70" + }, + { + "filename": "PalmTreeTop", + "build-id": "ASSET_OBJECT_PALMTREETOP", + "type": "ObjectHeader", + "sha1": "ab36722bc07fd6a11e9eaba58be2cd65542b1131" + }, + { + "filename": "PalmPlant", + "build-id": "ASSET_OBJECT_PALMPLANT", + "type": "ObjectHeader", + "sha1": "bdbada9c2c75cb653569e89c0f96a845fc184c21" + }, + { + "filename": "PalmTreeTopChea", + "build-id": "ASSET_OBJECT_PALMTREETOPCHEA", + "type": "ObjectHeader", + "sha1": "2a654a01e25525acc83f41253a67394fd0016f2f" + }, + { + "filename": "FirTree", + "build-id": "ASSET_OBJECT_FIRTREE", + "type": "ObjectHeader", + "sha1": "a1c2514f92466f1206a8ceda07002d14bf83fa6c" + }, + { + "filename": "SpaceTree", + "build-id": "ASSET_OBJECT_SPACETREE", + "type": "ObjectHeader", + "sha1": "9466a14462f39586b8aa55f872f4d277f90f7965" + }, + { + "filename": "Lamppost", + "build-id": "ASSET_OBJECT_LAMPPOST", + "type": "ObjectHeader", + "sha1": "b43a409d02c581690b48b9fe3e8e6931b0cc407e" + }, + { + "filename": "Flowers", + "build-id": "ASSET_OBJECT_FLOWERS", + "type": "ObjectHeader", + "sha1": "8655f38a4ac574b190b0645bd9831b389e1b61aa" + }, + { + "filename": "Reeds", + "build-id": "ASSET_OBJECT_REEDS", + "type": "ObjectHeader", + "sha1": "6956e1c64c409ba03aae9038bf1ea3e787b0f6b9" + }, + { + "filename": "smoke", + "build-id": "ASSET_OBJECT_SMOKE", + "type": "ObjectHeader", + "sha1": "079259af1fab044a5a05f261fd431905a892f15c" + }, + { + "filename": "Dinosaur1", + "build-id": "ASSET_OBJECT_DINOSAUR1", + "type": "ObjectHeader", + "sha1": "81c7982aa256a2d938cb238b1f7eaac5d6a9e770" + }, + { + "filename": "Dinosaur2", + "build-id": "ASSET_OBJECT_DINOSAUR2", + "type": "ObjectHeader", + "sha1": "7bbd4d31520a56040e70097e563035cf289dd25a" + }, + { + "filename": "Dinosaur3", + "build-id": "ASSET_OBJECT_DINOSAUR3", + "type": "ObjectHeader", + "sha1": "bf016aefe9819e41c7400cfedee2bb4bb368c4d1" + }, + { + "filename": "Whale", + "build-id": "ASSET_OBJECT_WHALE", + "type": "ObjectHeader", + "sha1": "e1af1ceda14657e38d638cd3eb23394a2ddd25e2" + }, + { + "filename": "Snowmen", + "build-id": "ASSET_OBJECT_SNOWMEN", + "type": "ObjectHeader", + "sha1": "0fcf45952c4664096b8dfd63dd11ccc8d1d383b7" + }, + { + "filename": "Signs", + "build-id": "ASSET_OBJECT_SIGNS", + "type": "ObjectHeader", + "sha1": "23359d61dd78d56eb7b7644667d0d9c6897272c3" + }, + { + "filename": "FlamingTorch", + "build-id": "ASSET_OBJECT_FLAMINGTORCH", + "type": "ObjectHeader", + "sha1": "16144dcd2f90f6746da4bc7ea3b3bf7f594d8ba9" + }, + { + "filename": "Mist", + "build-id": "ASSET_OBJECT_MIST", + "type": "ObjectHeader", + "sha1": "d735f34de0d5a1d8d5843439579126e086af07fb" + }, + { + "filename": "SnowBall", + "build-id": "ASSET_OBJECT_SNOWBALL", + "type": "ObjectHeader", + "sha1": "dc43be1cb14f0c1ccf084fdce960eb7259c08c3c" + }, + { + "filename": "buoy", + "build-id": "ASSET_OBJECT_BUOY", + "type": "ObjectHeader", + "sha1": "2afb4ff7e1f5e54e13b9e326316ee718535dae0f" + }, + { + "filename": "pirateship", + "build-id": "ASSET_OBJECT_PIRATESHIP", + "type": "ObjectHeader", + "sha1": "1b87d180910d3a11a9bd434a1040629ca3988c84" + }, + { + "filename": "log", + "build-id": "ASSET_OBJECT_LOG", + "type": "ObjectHeader", + "sha1": "5d9b176493c76f10340c956f19a8710de4b332d8" + }, + { + "filename": "piglog", + "build-id": "ASSET_OBJECT_PIGLOG", + "type": "ObjectHeader", + "sha1": "ee13bf83c27785b78af347382f047e0e59904768" + }, + { + "filename": "boulder", + "build-id": "ASSET_OBJECT_BOULDER", + "type": "ObjectHeader", + "sha1": "69af5ed7b5fb18f7205e51da8596d9f6cb3df2d0" + }, + { + "filename": "AirZippers", + "build-id": "ASSET_OBJECT_AIRZIPPERS", + "type": "ObjectHeader", + "sha1": "b4bb2569a8a743d8f8967121874769d198332926" + }, + { + "filename": "WaterZippers", + "build-id": "ASSET_OBJECT_WATERZIPPERS", + "type": "ObjectHeader", + "sha1": "4426f0cf7345475005440b820c0299fa79539a49" + }, + { + "filename": "LevelDoor", + "build-id": "ASSET_OBJECT_LEVELDOOR", + "type": "ObjectHeader", + "sha1": "4f4d1785ac207a5c3dcfb0cb447d0151e6b02519" + }, + { + "filename": "KeithPigDoor", + "build-id": "ASSET_OBJECT_KEITHPIGDOOR", + "type": "ObjectHeader", + "sha1": "c000cc1a84fbfff6e7e4d5ff5bbd6343aa054477" + }, + { + "filename": "ChalDoor", + "build-id": "ASSET_OBJECT_CHALDOOR", + "type": "ObjectHeader", + "sha1": "0d79dc20b9e4308eb216191f0af91fcddd069ac9" + }, + { + "filename": "BossDoor", + "build-id": "ASSET_OBJECT_BOSSDOOR", + "type": "ObjectHeader", + "sha1": "dfbdf2e07728f82bdb22dc5a4ad98ba656a1937f" + }, + { + "filename": "bigbossdoor", + "build-id": "ASSET_OBJECT_BIGBOSSDOOR", + "type": "ObjectHeader", + "sha1": "fe4bb18099cf3ce8f25996f82b657218529980d4" + }, + { + "filename": "WorldGate", + "build-id": "ASSET_OBJECT_WORLDGATE", + "type": "ObjectHeader", + "sha1": "93e518cc69257164bfb6df8984980f0aaac24dd5" + }, + { + "filename": "TTDoor", + "build-id": "ASSET_OBJECT_TTDOOR", + "type": "ObjectHeader", + "sha1": "bf504347cc93b8942d888af8ec88d6f5be3058f5" + }, + { + "filename": "RampSwitch", + "build-id": "ASSET_OBJECT_RAMPSWITCH", + "type": "ObjectHeader", + "sha1": "9bb505f820f9116fadcca4dca1e208ee4a0c23ce" + }, + { + "filename": "NoentryDoor", + "build-id": "ASSET_OBJECT_NOENTRYDOOR", + "type": "ObjectHeader", + "sha1": "3c4da54c3d2121103b9be5cfcdf71114d3012c22" + }, + { + "filename": "RampWhale", + "build-id": "ASSET_OBJECT_RAMPWHALE", + "type": "ObjectHeader", + "sha1": "a7518c8dfc05d5e95b9966914c205ad118822080" + }, + { + "filename": "SeaMonster", + "build-id": "ASSET_OBJECT_SEAMONSTER", + "type": "ObjectHeader", + "sha1": "1dbe72ef8a76c1ac090e2cd7101a5a6021ec2910" + }, + { + "filename": "Dinoisle", + "build-id": "ASSET_OBJECT_DINOISLE", + "type": "ObjectHeader", + "sha1": "9ed1a764fb177ca662cb419c851aeaa3faae528e" + }, + { + "filename": "skycontrol", + "build-id": "ASSET_OBJECT_SKYCONTROL", + "type": "ObjectHeader", + "sha1": "79cb3a285064ba779bfc115b378614e0ba76a44e" + }, + { + "filename": "checkpoint", + "build-id": "ASSET_OBJECT_CHECKPOINT", + "type": "ObjectHeader", + "sha1": "03d262184385af1b0555d70dddc2f4db018ab7d3" + }, + { + "filename": "checkarrow", + "build-id": "ASSET_OBJECT_CHECKARROW", + "type": "ObjectHeader", + "sha1": "946de56dca84cc866228371b4811b9438424c11e" + }, + { + "filename": "modechange", + "build-id": "ASSET_OBJECT_MODECHANGE", + "type": "ObjectHeader", + "sha1": "b8189e5fd93b04706351d2fef5ca374e3e3ccc3e" + }, + { + "filename": "trigger", + "build-id": "ASSET_OBJECT_TRIGGER", + "type": "ObjectHeader", + "sha1": "d17a0548462b9334f9e68c5b6dbfe2e62bd3452e" + }, + { + "filename": "fogchanger", + "build-id": "ASSET_OBJECT_FOGCHANGER", + "type": "ObjectHeader", + "sha1": "d07815ab5a9d6d27aee0034ececd0276e51e83cb" + }, + { + "filename": "ai-node", + "build-id": "ASSET_OBJECT_AINODE", + "type": "ObjectHeader", + "sha1": "f7fbeadb45d84c13145c4aca3d84674f6c55dd73" + }, + { + "filename": "exit", + "build-id": "ASSET_OBJECT_EXIT", + "type": "ObjectHeader", + "sha1": "1f1f2643e468a45d20c0101891325941dff2e565" + }, + { + "filename": "bonus", + "build-id": "ASSET_OBJECT_BONUS", + "type": "ObjectHeader", + "sha1": "cc1e08c96930959e2b096d804b899d14d6412967" + }, + { + "filename": "camera_control", + "build-id": "ASSET_OBJECT_CAMERA_CONTROL", + "type": "ObjectHeader", + "sha1": "94b16b1dd303c0b7a4422b984ae09a1e45fe056d" + }, + { + "filename": "setuppoint", + "build-id": "ASSET_OBJECT_SETUPPOINT", + "type": "ObjectHeader", + "sha1": "72625c2b87299fb76b96e53810608dc1006aa76c" + }, + { + "filename": "animator", + "build-id": "ASSET_OBJECT_ANIMATOR", + "type": "ObjectHeader", + "sha1": "3c766c473218cb6e5dccc3edf4f59fa04062a828" + }, + { + "filename": "texscroll", + "build-id": "ASSET_OBJECT_TEXSCROLL", + "type": "ObjectHeader", + "sha1": "af9c81e17abf5af4ba9d1dd647e554603c40d1b1" + }, + { + "filename": "rgbalight", + "build-id": "ASSET_OBJECT_RGBALIGHT", + "type": "ObjectHeader", + "sha1": "e74a92a291c75ac5e8e4baeea3fe08f1a8b6d182" + }, + { + "filename": "introcam", + "build-id": "ASSET_OBJECT_INTROCAM", + "type": "ObjectHeader", + "sha1": "81e04452f549b9fd88603c7551a4782b2988f0f9" + }, + { + "filename": "weather", + "build-id": "ASSET_OBJECT_WEATHER", + "type": "ObjectHeader", + "sha1": "4e7fb5e1c60c574701ccdd8e834925c8d73a93b5" + }, + { + "filename": "lensflare", + "build-id": "ASSET_OBJECT_LENSFLARE", + "type": "ObjectHeader", + "sha1": "81086059d5da9e59060e1f8dca87c940f851b2c6" + }, + { + "filename": "lensflareswitch", + "build-id": "ASSET_OBJECT_LENSFLARESWITCH", + "type": "ObjectHeader", + "sha1": "c01aa61fde0917f537cba6981b471faeb4b87d68" + }, + { + "filename": "InfoPoint", + "build-id": "ASSET_OBJECT_INFOPOINT", + "type": "ObjectHeader", + "sha1": "e1d14dd5179cca2690147386d87f49a21a0a4061" + }, + { + "filename": "wavegenerator", + "build-id": "ASSET_OBJECT_WAVEGENERATOR", + "type": "ObjectHeader", + "sha1": "9a920862f08b4c5fa7b5ef7b3326f4120a00d56d" + }, + { + "filename": "wavepower", + "build-id": "ASSET_OBJECT_WAVEPOWER", + "type": "ObjectHeader", + "sha1": "a3c586ccf12956cc1521e85b1b1e6326fd1a18c3" + }, + { + "filename": "RangeTrigger", + "build-id": "ASSET_OBJECT_RANGETRIGGER", + "type": "ObjectHeader", + "sha1": "9f81110b0fe313e8f0000603bb103c854c32af63" + }, + { + "filename": "lavaspurt", + "build-id": "ASSET_OBJECT_LAVASPURT", + "type": "ObjectHeader", + "sha1": "0b61c0d72a0d0ab48b4f1a9e802728989cd0e729" + }, + { + "filename": "bombexplosion", + "build-id": "ASSET_OBJECT_BOMBEXPLOSION", + "type": "ObjectHeader", + "sha1": "a8a9a4d70d7c901ee698cd9fc4548f3ec668987f" + }, + { + "filename": "wardensmoke", + "build-id": "ASSET_OBJECT_WARDENSMOKE", + "type": "ObjectHeader", + "sha1": "5c71141594e53b3b77843fa7718b0d00144abc11" + }, + { + "filename": "bubbler", + "build-id": "ASSET_OBJECT_BUBBLER", + "type": "ObjectHeader", + "sha1": "24db448e81c07884dd5fae5cb5f1e712a5d7787c" + }, + { + "filename": "WeaponBalloon", + "build-id": "ASSET_OBJECT_WEAPONBALLOON", + "type": "ObjectHeader", + "sha1": "5f440d188ff5639eadc6d7a872f1fb3ec02e4650" + }, + { + "filename": "wballoonpop", + "build-id": "ASSET_OBJECT_WBALLOONPOP", + "type": "ObjectHeader", + "sha1": "432b1c78e4b6cbe5fc13720cbf51b6ed4d49c704" + }, + { + "filename": "MissileGlow", + "build-id": "ASSET_OBJECT_MISSILEGLOW", + "type": "ObjectHeader", + "sha1": "3b9bddbac816b825e05f7797a0d88c1f1c2b0122" + }, + { + "filename": "HomingGlow", + "build-id": "ASSET_OBJECT_HOMINGGLOW", + "type": "ObjectHeader", + "sha1": "a41136d7b087597b4f7ebd3a908fc04aba2fccdb" + }, + { + "filename": "Missile", + "build-id": "ASSET_OBJECT_MISSILE", + "type": "ObjectHeader", + "sha1": "3499dd7bc9bd1b2ccdf614da03d1cb87661b73e0" + }, + { + "filename": "Homing", + "build-id": "ASSET_OBJECT_HOMING", + "type": "ObjectHeader", + "sha1": "5ecf09b3286bd138844dc6c00cb56f23a1a30ff6" + }, + { + "filename": "OilSlick", + "build-id": "ASSET_OBJECT_OILSLICK", + "type": "ObjectHeader", + "sha1": "5df4b9d9fc28709cfc8e638055d95780e1fad357" + }, + { + "filename": "SmokeCloud", + "build-id": "ASSET_OBJECT_SMOKECLOUD", + "type": "ObjectHeader", + "sha1": "912ae2c7caeed6e5dad0a0ff015577a7e35e42ff" + }, + { + "filename": "Bomb", + "build-id": "ASSET_OBJECT_BOMB", + "type": "ObjectHeader", + "sha1": "8104f8db666d031bf0307ebf38b9c0e1b120a5cf" + }, + { + "filename": "BubbleWeapon", + "build-id": "ASSET_OBJECT_BUBBLEWEAPON", + "type": "ObjectHeader", + "sha1": "18b1f74f40a44929c59a23643641e56cd52fede5" + }, + { + "filename": "WorldKey", + "build-id": "ASSET_OBJECT_WORLDKEY", + "type": "ObjectHeader", + "sha1": "90b5fd568a061a9085632a1d196ea279671dc060" + }, + { + "filename": "CoinCreator", + "build-id": "ASSET_OBJECT_COINCREATOR", + "type": "ObjectHeader", + "sha1": "db6f265bd5eedc600e9f08149ae9af0edd53efa5" + }, + { + "filename": "TreasureSucker", + "build-id": "ASSET_OBJECT_TREASURESUCKER", + "type": "ObjectHeader", + "sha1": "fa080d2e57b3980a75770d403f147f49408ac1f7" + }, + { + "filename": "Coin", + "build-id": "ASSET_OBJECT_COIN", + "type": "ObjectHeader", + "sha1": "e22df00ad5ba04dd081619c2294b724405f132b0" + }, + { + "filename": "SilverCoin", + "build-id": "ASSET_OBJECT_SILVERCOIN", + "type": "ObjectHeader", + "sha1": "69e3e60e01fb6d77f793e18bd15417204d9d7253" + }, + { + "filename": "GoldCoin", + "build-id": "ASSET_OBJECT_GOLDCOIN", + "type": "ObjectHeader", + "sha1": "48072a79c1de61cb271df0bc4bdff9dca46c73e8" + }, + { + "filename": "BonusGem", + "build-id": "ASSET_OBJECT_BONUSGEM", + "type": "ObjectHeader", + "sha1": "9cf065e184c3466931e3a58178afbb511ebe8cdd" + }, + { + "filename": "CollectEgg", + "build-id": "ASSET_OBJECT_COLLECTEGG", + "type": "ObjectHeader", + "sha1": "18408c901c765c178d19ed304c4761ce9f6ff690" + }, + { + "filename": "EggCreator", + "build-id": "ASSET_OBJECT_EGGCREATOR", + "type": "ObjectHeader", + "sha1": "d533c979f70a0c8659404dc4b417d6ab69a8e043" + }, + { + "filename": "CharacterFlag", + "build-id": "ASSET_OBJECT_CHARACTERFLAG", + "type": "ObjectHeader", + "sha1": "77596ea17a0dce236218405aeba5f2745d727968" + }, + { + "filename": "Animation", + "build-id": "ASSET_OBJECT_ANIMATION", + "type": "ObjectHeader", + "sha1": "06273f9d27088cae7974f5ffa5157e375774a14a" + }, + { + "filename": "OverRidePos", + "build-id": "ASSET_OBJECT_OVERRIDEPOS", + "type": "ObjectHeader", + "sha1": "be6e2ca15e7819724d22cc25d55bf6a196f3e12b" + }, + { + "filename": "AnimCamera", + "build-id": "ASSET_OBJECT_ANIMCAMERA", + "type": "ObjectHeader", + "sha1": "5f0de3164ab3f27d6a433c74bb318fb4019affd1" + }, + { + "filename": "AnimCar", + "build-id": "ASSET_OBJECT_ANIMCAR", + "type": "ObjectHeader", + "sha1": "d410d72b7902748d6d443b3b03920e66789afc74" + }, + { + "filename": "AnimDome", + "build-id": "ASSET_OBJECT_ANIMDOME", + "type": "ObjectHeader", + "sha1": "3e278049f9de527970c9b43ca86338c051e3ffce" + }, + { + "filename": "Wizghosts", + "build-id": "ASSET_OBJECT_WIZGHOSTS", + "type": "ObjectHeader", + "sha1": "4736ebd551debf136f06658940fa6987faf403ba" + }, + { + "filename": "N64logo", + "build-id": "ASSET_OBJECT_N64LOGO", + "type": "ObjectHeader", + "sha1": "e25e2065f5e184852520c67192f9aea396de8856" + }, + { + "filename": "Asteroid", + "build-id": "ASSET_OBJECT_ASTEROID", + "type": "ObjectHeader", + "sha1": "2375cea8bd19ff0fb2e26aa82b888d1a4f3959f8" + }, + { + "filename": "pillar", + "build-id": "ASSET_OBJECT_PILLAR", + "type": "ObjectHeader", + "sha1": "502788080c274e90f0f328e7190ee6bf5a925b39" + }, + { + "filename": "boulderanim", + "build-id": "ASSET_OBJECT_BOULDERANIM", + "type": "ObjectHeader", + "sha1": "7e268a757cf6dd725e0602116d689e062e3b69e6" + }, + { + "filename": "pigheadcolours", + "build-id": "ASSET_OBJECT_PIGHEADCOLOURS", + "type": "ObjectHeader", + "sha1": "64855c17de4e53ab830b16c62dcda858204c6b64" + }, + { + "filename": "pigfaceanimator", + "build-id": "ASSET_OBJECT_PIGFACEANIMATOR", + "type": "ObjectHeader", + "sha1": "35108635221864b88a6df636804a1d2e5d995408" + }, + { + "filename": "pterodactyl", + "build-id": "ASSET_OBJECT_PTERODACTYL", + "type": "ObjectHeader", + "sha1": "c977f05b65cee917ea95294818beacc9058c63cd" + }, + { + "filename": "amuletpiece1", + "build-id": "ASSET_OBJECT_AMULETPIECE1", + "type": "ObjectHeader", + "sha1": "0eb0a65165bd05bde22a082eb69bf1cc3adb16df" + }, + { + "filename": "amuletpiece2", + "build-id": "ASSET_OBJECT_AMULETPIECE2", + "type": "ObjectHeader", + "sha1": "55a52cc771b7d417548f99ef7cd8f46ff3774cb4" + }, + { + "filename": "amuletpiece3", + "build-id": "ASSET_OBJECT_AMULETPIECE3", + "type": "ObjectHeader", + "sha1": "45829ac58ee0e499e4dcb058cdecd5afd06f65bb" + }, + { + "filename": "amuletpiece4", + "build-id": "ASSET_OBJECT_AMULETPIECE4", + "type": "ObjectHeader", + "sha1": "bd269278e04cdd609de354074da550dcd1455e9d" + }, + { + "filename": "swamulet1", + "build-id": "ASSET_OBJECT_SWAMULET1", + "type": "ObjectHeader", + "sha1": "e4dcb76ca4e79a15ecf9b4e699d9f8e18536d7a5" + }, + { + "filename": "swamulet2", + "build-id": "ASSET_OBJECT_SWAMULET2", + "type": "ObjectHeader", + "sha1": "be3e703b143a594838e4bafe7998f22f9f7876ed" + }, + { + "filename": "swamulet3", + "build-id": "ASSET_OBJECT_SWAMULET3", + "type": "ObjectHeader", + "sha1": "72b59a80f3f1cb2bfab83b943c569b6736c276ac" + }, + { + "filename": "swamulet4", + "build-id": "ASSET_OBJECT_SWAMULET4", + "type": "ObjectHeader", + "sha1": "fbab4fbbbfd5bfe32f3995fd9264bc540952dc05" + }, + { + "filename": "AnimKey", + "build-id": "ASSET_OBJECT_ANIMKEY", + "type": "ObjectHeader", + "sha1": "ebcb8626bb9c23b901cc946b3b96341e4cc634d8" + }, + { + "filename": "SpaceShip1", + "build-id": "ASSET_OBJECT_SPACESHIP1", + "type": "ObjectHeader", + "sha1": "25467e92880f3e727a8bb1ddc74b040db0b69cbe" + }, + { + "filename": "MiniShip", + "build-id": "ASSET_OBJECT_MINISHIP", + "type": "ObjectHeader", + "sha1": "6bc930fb2143b35002127ca7892df37269c12784" + }, + { + "filename": "MonoRail", + "build-id": "ASSET_OBJECT_MONORAIL", + "type": "ObjectHeader", + "sha1": "7444cdbc84bbfca3512b9a9d922c3b5d6706b1fa" + }, + { + "filename": "SpaceShip2", + "build-id": "ASSET_OBJECT_SPACESHIP2", + "type": "ObjectHeader", + "sha1": "e7237dc2fb0736b6002d8679704478f9111ee644" + }, + { + "filename": "SpaceShip3", + "build-id": "ASSET_OBJECT_SPACESHIP3", + "type": "ObjectHeader", + "sha1": "18a435a9b7b8d2578a508745437f6a044aab6a07" + }, + { + "filename": "Lighthouse", + "build-id": "ASSET_OBJECT_LIGHTHOUSE", + "type": "ObjectHeader", + "sha1": "fc33c1eba9c72ff08bce91c77ddb0b9f415861bb" + }, + { + "filename": "rocketsignpost", + "build-id": "ASSET_OBJECT_ROCKETSIGNPOST", + "type": "ObjectHeader", + "sha1": "b36ba7255c337d28cf1bacbc044ebb9d8a18b33e" + }, + { + "filename": "lighthouse1", + "build-id": "ASSET_OBJECT_LIGHTHOUSE1", + "type": "ObjectHeader", + "sha1": "467701f54dc38b2e619bcd24d67d78eb6f8fd668" + }, + { + "filename": "lighthouse2", + "build-id": "ASSET_OBJECT_LIGHTHOUSE2", + "type": "ObjectHeader", + "sha1": "790ddc32a3b149307f0cf5998b07c33d6d28ef34" + }, + { + "filename": "SelectionHill", + "build-id": "ASSET_OBJECT_SELECTIONHILL", + "type": "ObjectHeader", + "sha1": "0a058f50779bda0208254482be09931280cb3bb4" + }, + { + "filename": "Widescreen", + "build-id": "ASSET_OBJECT_WIDESCREEN", + "type": "ObjectHeader", + "sha1": "267cb0ef7c67547c08fca0debb49daf297b1b829" + }, + { + "filename": "TigerAnimPlane", + "build-id": "ASSET_OBJECT_TIGERANIMPLANE", + "type": "ObjectHeader", + "sha1": "5958665c9f559e4bdc4b4bddc12c011790796497" + }, + { + "filename": "BadgerAnimWalk", + "build-id": "ASSET_OBJECT_BADGERANIMWALK", + "type": "ObjectHeader", + "sha1": "966837a7a2fb288a865831793604cf216dbdf0a3" + }, + { + "filename": "Timberanimcar", + "build-id": "ASSET_OBJECT_TIMBERANIMCAR", + "type": "ObjectHeader", + "sha1": "963243b7a2d78404aef1f94476bf2676eb72b128" + }, + { + "filename": "KremSelect", + "build-id": "ASSET_OBJECT_KREMSELECT", + "type": "ObjectHeader", + "sha1": "6fcac8bd1a0fbbcac1b81daa5427463725045e20" + }, + { + "filename": "ConkSelect", + "build-id": "ASSET_OBJECT_CONKSELECT", + "type": "ObjectHeader", + "sha1": "5b4181941abcc8076c16c1c2c6177f0644b63857" + }, + { + "filename": "BadgerSelect", + "build-id": "ASSET_OBJECT_BADGERSELECT", + "type": "ObjectHeader", + "sha1": "d26e276466bf59f9fbe441126e9fb6658ef7e18e" + }, + { + "filename": "TortSelect", + "build-id": "ASSET_OBJECT_TORTSELECT", + "type": "ObjectHeader", + "sha1": "4de979c663b6fb6061cb9a5f0ec4b518145a5b41" + }, + { + "filename": "TigerSelect", + "build-id": "ASSET_OBJECT_TIGERSELECT", + "type": "ObjectHeader", + "sha1": "36fb44ef27a991c72794049d923d3869b7f204c1" + }, + { + "filename": "DiddySelect", + "build-id": "ASSET_OBJECT_DIDDYSELECT", + "type": "ObjectHeader", + "sha1": "ca68af75db7cc28e6fbb2fb278550123865b4df6" + }, + { + "filename": "BanjoSelect", + "build-id": "ASSET_OBJECT_BANJOSELECT", + "type": "ObjectHeader", + "sha1": "e9e448cb3face9e4d21a949dea298672e0e54584" + }, + { + "filename": "ChickSelect", + "build-id": "ASSET_OBJECT_CHICKSELECT", + "type": "ObjectHeader", + "sha1": "c6213ece9ab1936e28bc29c52355d23d38cd9823" + }, + { + "filename": "MouseSelect", + "build-id": "ASSET_OBJECT_MOUSESELECT", + "type": "ObjectHeader", + "sha1": "211b696f54cfc2b73be29b6e55febee02c5be4a9" + }, + { + "filename": "MagicCarpet", + "build-id": "ASSET_OBJECT_MAGICCARPET", + "type": "ObjectHeader", + "sha1": "8f0153184e8c26d5e70e5c59026e9527b0e281ca" + }, + { + "filename": "PolyGoldBaloon", + "build-id": "ASSET_OBJECT_POLYGOLDBALOON", + "type": "ObjectHeader", + "sha1": "fd430859976ffec1d3f95f499dd8b81c3af51cdd" + }, + { + "filename": "AnimGenie", + "build-id": "ASSET_OBJECT_ANIMGENIE", + "type": "ObjectHeader", + "sha1": "dd26a5ff6b2b1a1bed7168086a8fe902e37798d8" + }, + { + "filename": "AnimGenie3", + "build-id": "ASSET_OBJECT_ANIMGENIE3", + "type": "ObjectHeader", + "sha1": "46bd11d70b8a2d8d35ca8314f8b65c7cd7df13f6" + }, + { + "filename": "ButterflyBait", + "build-id": "ASSET_OBJECT_BUTTERFLYBAIT", + "type": "ObjectHeader", + "sha1": "fb941794669bd05dab16a94cb13bf88a54dec5c6" + }, + { + "filename": "audio", + "build-id": "ASSET_OBJECT_AUDIO", + "type": "ObjectHeader", + "sha1": "cd5d40b4d480429dacab4b0c7b8054d341d91c35" + }, + { + "filename": "audioline", + "build-id": "ASSET_OBJECT_AUDIOLINE", + "type": "ObjectHeader", + "sha1": "d19954fa63dde6b6b0bd5c4cdecf2cb680bb2c76" + }, + { + "filename": "audioseqline", + "build-id": "ASSET_OBJECT_AUDIOSEQLINE", + "type": "ObjectHeader", + "sha1": "13a709ed52c8a51af4535f94550be99b3bfdb90f" + }, + { + "filename": "audioseq", + "build-id": "ASSET_OBJECT_AUDIOSEQ", + "type": "ObjectHeader", + "sha1": "c90cb26742d00e8a60f2bc98a8433c4d5d62c44e" + }, + { + "filename": "audioreverb", + "build-id": "ASSET_OBJECT_AUDIOREVERB", + "type": "ObjectHeader", + "sha1": "230f79381a6de4a18faceb91a39a7d713aa012cc" + }, + { + "filename": "fronttyre", + "build-id": "ASSET_OBJECT_FRONTTYRE", + "type": "ObjectHeader", + "sha1": "2f2f293de2b1361313e5f5c94f153eac58cb344b" + }, + { + "filename": "backtyre", + "build-id": "ASSET_OBJECT_BACKTYRE", + "type": "ObjectHeader", + "sha1": "5676452ded2ddc07f828b94d8d2b34983dc6d5d1" + }, + { + "filename": "planetyre", + "build-id": "ASSET_OBJECT_PLANETYRE", + "type": "ObjectHeader", + "sha1": "ad6b7fca3f47260e05370d8a1ce148691d52fb3c" + }, + { + "filename": "fan", + "build-id": "ASSET_OBJECT_FAN", + "type": "ObjectHeader", + "sha1": "984e7bdf74965bdd268aa1edf2ddf13975b13ead" + }, + { + "filename": "jetengine", + "build-id": "ASSET_OBJECT_JETENGINE", + "type": "ObjectHeader", + "sha1": "f078b447bbbff7a6ee2a587f3aec3e77a18ab800" + }, + { + "filename": "glove", + "build-id": "ASSET_OBJECT_GLOVE", + "type": "ObjectHeader", + "sha1": "630badaaaae13510f7bcdcd0cea195dfc8e3e364" + }, + { + "filename": "Leefan", + "build-id": "ASSET_OBJECT_LEEFAN", + "type": "ObjectHeader", + "sha1": "dedcf9ead9c42e90d78db3cfee401eeef4e4b717" + }, + { + "filename": "MagicRing", + "build-id": "ASSET_OBJECT_MAGICRING", + "type": "ObjectHeader", + "sha1": "b2b2b404e6008df82cbdb2f995f5d102dddf6cc2" + }, + { + "filename": "dome", + "build-id": "ASSET_OBJECT_DOME", + "type": "ObjectHeader", + "sha1": "c7f1814dc6ed48cb73184442d7d5e284d1fc9539" + }, + { + "filename": "dome1", + "build-id": "ASSET_OBJECT_DOME1", + "type": "ObjectHeader", + "sha1": "4df39e123451612ff3c5faa2fe002e4b241736e6" + }, + { + "filename": "dome2", + "build-id": "ASSET_OBJECT_DOME2", + "type": "ObjectHeader", + "sha1": "10bd7452ba4100d27289bfc5119f60116a39bda4" + }, + { + "filename": "dome3", + "build-id": "ASSET_OBJECT_DOME3", + "type": "ObjectHeader", + "sha1": "485325fdc82e56646e694e1f6cbb08b6bb309342" + }, + { + "filename": "dome4", + "build-id": "ASSET_OBJECT_DOME4", + "type": "ObjectHeader", + "sha1": "1a1909cdea73186ec68f2e954550d9703ad1b415" + }, + { + "filename": "dome5", + "build-id": "ASSET_OBJECT_DOME5", + "type": "ObjectHeader", + "sha1": "ead6c33b93baece945ce846863ca9b2324b94d74" + }, + { + "filename": "dome6", + "build-id": "ASSET_OBJECT_DOME6", + "type": "ObjectHeader", + "sha1": "6a129171e8dc3297dc406f524d48c0cb8f72487e" + }, + { + "filename": "dome7", + "build-id": "ASSET_OBJECT_DOME7", + "type": "ObjectHeader", + "sha1": "fc28b6702964b43cfedc903899e1f20b5e06e2c7" + }, + { + "filename": "dome8", + "build-id": "ASSET_OBJECT_DOME8", + "type": "ObjectHeader", + "sha1": "cf36f9acb3ae115e0794f5e4d7bd1804ad3c5d89" + }, + { + "filename": "dome9", + "build-id": "ASSET_OBJECT_DOME9", + "type": "ObjectHeader", + "sha1": "c36b4abc94f4346289bf888818c0c5770d15406b" + }, + { + "filename": "dome10", + "build-id": "ASSET_OBJECT_DOME10", + "type": "ObjectHeader", + "sha1": "151f65049d88b8faf6a8245d7a56eba13a612814" + }, + { + "filename": "dome11", + "build-id": "ASSET_OBJECT_DOME11", + "type": "ObjectHeader", + "sha1": "2726a3e7288bec267e7482099681f16c664f06e7" + }, + { + "filename": "dome12", + "build-id": "ASSET_OBJECT_DOME12", + "type": "ObjectHeader", + "sha1": "a62bc2f35c36d0f40005384f5f612088946fbd54" + }, + { + "filename": "dome13", + "build-id": "ASSET_OBJECT_DOME13", + "type": "ObjectHeader", + "sha1": "74d25a930262499a3c6eccd4ed88550b64e36336" + }, + { + "filename": "dome14", + "build-id": "ASSET_OBJECT_DOME14", + "type": "ObjectHeader", + "sha1": "e6ed068eb3d96a181dd65bb641df5c80e4ed4ca5" + }, + { + "filename": "dome15", + "build-id": "ASSET_OBJECT_DOME15", + "type": "ObjectHeader", + "sha1": "73cc954823f7a73cdaf8aca64009e2740b005f4c" + }, + { + "filename": "dome16", + "build-id": "ASSET_OBJECT_DOME16", + "type": "ObjectHeader", + "sha1": "ef2835bb1541b95923ad23bdf4958deb36dfc489" + }, + { + "filename": "dome17", + "build-id": "ASSET_OBJECT_DOME17", + "type": "ObjectHeader", + "sha1": "01bc188e13236ae2c9ffda5aca2d0ebcafbc1023" + }, + { + "filename": "selectionshadow", + "build-id": "ASSET_OBJECT_SELECTIONSHADOW", + "type": "ObjectHeader", + "sha1": "3f3ad32c1c9524a48c80dccef5f840114b20fceb" + }, + { + "filename": "postforparty", + "build-id": "ASSET_OBJECT_POSTFORPARTY", + "type": "ObjectHeader", + "sha1": "cc533e6ca78e02ab138e1d472afdffbf686060a8" + }, + { + "filename": "Rarelogo", + "build-id": "ASSET_OBJECT_RARELOGO", + "type": "ObjectHeader", + "sha1": "4c9d751f1345effdff67f290f6929996668308b9" + }, + { + "filename": "sparklything", + "build-id": "ASSET_OBJECT_SPARKLYTHING", + "type": "ObjectHeader", + "sha1": "a75e119b18be68361e800c50135560b8cfb50dd6" + }, + { + "filename": "DoorOpener", + "build-id": "ASSET_OBJECT_DOOROPENER", + "type": "ObjectHeader", + "sha1": "e32097b29faade47651b01c867950e25e22fcc7f" + }, + { + "filename": "AnimDinosaur2", + "build-id": "ASSET_OBJECT_ANIMDINOSAUR2", + "type": "ObjectHeader", + "sha1": "db5e767b5a1ca0a3484ef40ce15f45b2f283ca49" + }, + { + "filename": "Timeranimhover", + "build-id": "ASSET_OBJECT_TIMERANIMHOVER", + "type": "ObjectHeader", + "sha1": "2a21890a13c6a4f8a6831ac19097e84c670cfb36" + }, + { + "filename": "AnimBadgerPlane", + "build-id": "ASSET_OBJECT_ANIMBADGERPLANE", + "type": "ObjectHeader", + "sha1": "57e349cb289084144a665e8e3d5802846c277a70" + }, + { + "filename": "AnimDinosaur1", + "build-id": "ASSET_OBJECT_ANIMDINOSAUR1", + "type": "ObjectHeader", + "sha1": "81900cd860e31e094b3d3f43fc5f5604f5004196" + }, + { + "filename": "AnimMouseCar", + "build-id": "ASSET_OBJECT_ANIMMOUSECAR", + "type": "ObjectHeader", + "sha1": "c5e4f22fda064d47625415567c8db9d670df4eb1" + }, + { + "filename": "Animtort", + "build-id": "ASSET_OBJECT_ANIMTORT", + "type": "ObjectHeader", + "sha1": "1fa32d60beac042a9c221f1e5c316f2a0845382e" + }, + { + "filename": "ChickenAnimPlan", + "build-id": "ASSET_OBJECT_CHICKENANIMPLAN", + "type": "ObjectHeader", + "sha1": "6ef6c27907ce132bf609ec03251947f1781e3d72" + }, + { + "filename": "EmptyHoverAnim", + "build-id": "ASSET_OBJECT_EMPTYHOVERANIM", + "type": "ObjectHeader", + "sha1": "b6615fada7c3a553c10690211d28f188f61e3343" + }, + { + "filename": "KremAnim", + "build-id": "ASSET_OBJECT_KREMANIM", + "type": "ObjectHeader", + "sha1": "56e10c5613e0903cf6689857f11db368aff8f7eb" + }, + { + "filename": "MouseHoverAnim", + "build-id": "ASSET_OBJECT_MOUSEHOVERANIM", + "type": "ObjectHeader", + "sha1": "c54aba7fe5aa3a475fb7f20f14873b5c1e76976a" + }, + { + "filename": "TortRunner", + "build-id": "ASSET_OBJECT_TORTRUNNER", + "type": "ObjectHeader", + "sha1": "ca11fb02d9fbf7419153a3f85ab77e57df00321d" + }, + { + "filename": "AnimBanjoPlane", + "build-id": "ASSET_OBJECT_ANIMBANJOPLANE", + "type": "ObjectHeader", + "sha1": "08c0dd7313a1f47f4d521699880d49062bec8df9" + }, + { + "filename": "Conkaanimcar", + "build-id": "ASSET_OBJECT_CONKAANIMCAR", + "type": "ObjectHeader", + "sha1": "cdf2a2e8c4af0b94f17a4439a565979e93e87206" + }, + { + "filename": "GBParkwarden", + "build-id": "ASSET_OBJECT_GBPARKWARDEN", + "type": "ObjectHeader", + "sha1": "56846f6037e8a67934e4479c97d08501f54237e3" + }, + { + "filename": "Wizpig", + "build-id": "ASSET_OBJECT_WIZPIG", + "type": "ObjectHeader", + "sha1": "8fb38ef4ed365ab109167e1d603a1779be343734" + }, + { + "filename": "WizpigRocket", + "build-id": "ASSET_OBJECT_WIZPIGROCKET", + "type": "ObjectHeader", + "sha1": "076eba957e90797b0c498faf191435673b89b289" + }, + { + "filename": "Pigboss", + "build-id": "ASSET_OBJECT_PIGBOSS", + "type": "ObjectHeader", + "sha1": "4797604fd0c9362964b69e101e8350ccf646d51d" + }, + { + "filename": "Pigboss2", + "build-id": "ASSET_OBJECT_PIGBOSS2", + "type": "ObjectHeader", + "sha1": "8b29c7f04289389be84f924f531445273b6293b1" + }, + { + "filename": "PigRocketeer", + "build-id": "ASSET_OBJECT_PIGROCKETEER", + "type": "ObjectHeader", + "sha1": "bfc04df0eb08ef75cb684fb78127c1ed6df3bb94" + }, + { + "filename": "Particles2", + "build-id": "ASSET_OBJECT_PARTICLES2", + "type": "ObjectHeader", + "sha1": "0ab331c269544dcb014133e7040df0c999ee792b" + }, + { + "filename": "Pigboulder", + "build-id": "ASSET_OBJECT_PIGBOULDER", + "type": "ObjectHeader", + "sha1": "4cb29ace7e0274be056dc8705c549035f36e2081" + }, + { + "filename": "Bigplanet", + "build-id": "ASSET_OBJECT_BIGPLANET", + "type": "ObjectHeader", + "sha1": "f2b967fc99a0fc69cb963a0ecf2d4fd556fe6e29" + }, + { + "filename": "rocketbit1", + "build-id": "ASSET_OBJECT_ROCKETBIT1", + "type": "ObjectHeader", + "sha1": "0dd3cf8ae10a93e8847b5e26cb7cfc30ace28f05" + }, + { + "filename": "rocketbit2", + "build-id": "ASSET_OBJECT_ROCKETBIT2", + "type": "ObjectHeader", + "sha1": "fe2d2022291dfd17d598d812e9e28b93a056182c" + }, + { + "filename": "Geniehead", + "build-id": "ASSET_OBJECT_GENIEHEAD", + "type": "ObjectHeader", + "sha1": "420d7ed8b7996092cfc2a5e55b05fcb4d25c55d8" + }, + { + "filename": "Pigboulder2", + "build-id": "ASSET_OBJECT_PIGBOULDER2", + "type": "ObjectHeader", + "sha1": "76ee79816db50487ea9f594cb875e23a3a2530da" + }, + { + "filename": "Pigboulder3", + "build-id": "ASSET_OBJECT_PIGBOULDER3", + "type": "ObjectHeader", + "sha1": "0439954c14d2fa833d7e7d9e16e01740a4146400" + }, + { + "filename": "Pigboulder4", + "build-id": "ASSET_OBJECT_PIGBOULDER4", + "type": "ObjectHeader", + "sha1": "893998ea1a81ee541790b84c30e77f8454b5bebf" + }, + { + "filename": "Pigboulder5", + "build-id": "ASSET_OBJECT_PIGBOULDER5", + "type": "ObjectHeader", + "sha1": "408ebce10e6e7cf99caa2e85b2d9708f301e4eed" + }, + { + "filename": "Trickytops", + "build-id": "ASSET_OBJECT_TRICKYTOPS", + "type": "ObjectHeader", + "sha1": "9fcca818a103a81956f14d7b85adbf224341429c" + }, + { + "filename": "Trickyanim", + "build-id": "ASSET_OBJECT_TRICKYANIM", + "type": "ObjectHeader", + "sha1": "19d48d3e1fc631d5384908d1b7fd6ad534822ff9" + }, + { + "filename": "Trickyanim2", + "build-id": "ASSET_OBJECT_TRICKYANIM2", + "type": "ObjectHeader", + "sha1": "35a46383c43b29e6d102c64013423e28bf675b21" + }, + { + "filename": "Trickyanim3", + "build-id": "ASSET_OBJECT_TRICKYANIM3", + "type": "ObjectHeader", + "sha1": "938552163af9efbb24dea3e87bb1fd463b2cc4a6" + }, + { + "filename": "Walrus_anim", + "build-id": "ASSET_OBJECT_WALRUS_ANIM", + "type": "ObjectHeader", + "sha1": "2b03a51a385b8d9b056ccd8375f6494c788e308f" + }, + { + "filename": "Terryboss", + "build-id": "ASSET_OBJECT_TERRYBOSS", + "type": "ObjectHeader", + "sha1": "051782f3dde09e2f9916a51d9d5f96d21647a4d8" + }, + { + "filename": "Dragonboss", + "build-id": "ASSET_OBJECT_DRAGONBOSS", + "type": "ObjectHeader", + "sha1": "29af2004876c1621f4ae28977bdaaadcdb190e39" + }, + { + "filename": "DragonAnim", + "build-id": "ASSET_OBJECT_DRAGONANIM", + "type": "ObjectHeader", + "sha1": "4166fff128b94123d1d7bdeaae90194a3d9de919" + }, + { + "filename": "Walrus", + "build-id": "ASSET_OBJECT_WALRUS", + "type": "ObjectHeader", + "sha1": "166ab25d57db7a6be910031e08fd008c18e8d576" + }, + { + "filename": "SnowballBoss", + "build-id": "ASSET_OBJECT_SNOWBALLBOSS", + "type": "ObjectHeader", + "sha1": "32de1acf6ed9086d1d63654d3e12f230710da126" + }, + { + "filename": "animocto", + "build-id": "ASSET_OBJECT_ANIMOCTO", + "type": "ObjectHeader", + "sha1": "a74ad0a536220e34571c187b29f6e57b1a683687" + }, + { + "filename": "octopus", + "build-id": "ASSET_OBJECT_OCTOPUS", + "type": "ObjectHeader", + "sha1": "1bcd4b27c6c070a6ba6250346a8182d06cf6c5e0" + }, + { + "filename": "GoldBaloonSprit", + "build-id": "ASSET_OBJECT_GOLDBALOONSPRIT", + "type": "ObjectHeader", + "sha1": "58c4c92b58ba4d7c7670bcf969fba07e348d5b9c" + }, + { + "filename": "SpaceColumn1", + "build-id": "ASSET_OBJECT_SPACECOLUMN1", + "type": "ObjectHeader", + "sha1": "2b54232388f0227425a0915480499cb0940bb854" + }, + { + "filename": "SpaceColumn2", + "build-id": "ASSET_OBJECT_SPACECOLUMN2", + "type": "ObjectHeader", + "sha1": "f1f87f87d212f7a731dc3731895ebd44cbebc341" + }, + { + "filename": "SpaceColumn3", + "build-id": "ASSET_OBJECT_SPACECOLUMN3", + "type": "ObjectHeader", + "sha1": "2398132328993c8b43dafe425fcd0e0dd93615bd" + }, + { + "filename": "Haystack", + "build-id": "ASSET_OBJECT_HAYSTACK", + "type": "ObjectHeader", + "sha1": "48bf3716fd2124789fbe195daecc0547d211b07f" + }, + { + "filename": "AnimGenie2", + "build-id": "ASSET_OBJECT_ANIMGENIE2", + "type": "ObjectHeader", + "sha1": "362bd6781013957637453b216899e0171000d863" + }, + { + "filename": "Brightstar", + "build-id": "ASSET_OBJECT_BRIGHTSTAR", + "type": "ObjectHeader", + "sha1": "553ba20b827defef163c941b049ce50117791e26" + }, + { + "filename": "Butterfly", + "build-id": "ASSET_OBJECT_BUTTERFLY", + "type": "ObjectHeader", + "sha1": "eb24bbbb54cac5946f550534de567df91471c076" + }, + { + "filename": "Fish", + "build-id": "ASSET_OBJECT_FISH", + "type": "ObjectHeader", + "sha1": "5f746fdc5f5bb425cd5acc21748eca8b17b0e315" + }, + { + "filename": "Frog", + "build-id": "ASSET_OBJECT_FROG", + "type": "ObjectHeader", + "sha1": "cefc6f4c63a87361e14212a88bcfb0d83669033d" + }, + { + "filename": "Boost", + "build-id": "ASSET_OBJECT_BOOST", + "type": "ObjectHeader", + "sha1": "993e5a484749c9938f479d2d359a2056279993ce" + }, + { + "filename": "MagnetFX", + "build-id": "ASSET_OBJECT_MAGNETFX", + "type": "ObjectHeader", + "sha1": "9f349a2533b10ebff90e7439e606c91c8f2fff79" + }, + { + "filename": "stillfrog", + "build-id": "ASSET_OBJECT_STILLFROG", + "type": "ObjectHeader", + "sha1": "def863fe16ef54c3257089c7f2908b96b340fb7b" + }, + { + "filename": "stopwatchicon", + "build-id": "ASSET_OBJECT_STOPWATCHICON", + "type": "ObjectHeader", + "sha1": "9ceaf684d78b4474d5bf6efa8337da5f64924b0b" + }, + { + "filename": "stopwatchhand", + "build-id": "ASSET_OBJECT_STOPWATCHHAND", + "type": "ObjectHeader", + "sha1": "76267982da4703c5a14e56ec475932a95438d649" + }, + { + "filename": "bridge", + "build-id": "ASSET_OBJECT_BRIDGE", + "type": "ObjectHeader", + "sha1": "b73044aa432993e00db1b452cdd4a375e03ce754" + }, + { + "filename": "posarrow", + "build-id": "ASSET_OBJECT_POSARROW", + "type": "ObjectHeader", + "sha1": "e240f25069acf31cc81a989c92b444d39807ef5a" + }, + { + "filename": "hittester", + "build-id": "ASSET_OBJECT_HITTESTER", + "type": "ObjectHeader", + "sha1": "0caa11eabeb888e4aee9e940c4ff6dbc411c43a4" + }, + { + "filename": "midifade", + "build-id": "ASSET_OBJECT_MIDIFADE", + "type": "ObjectHeader", + "sha1": "a3aa94056086b56cdb535dae55d0effec8202aa3" + }, + { + "filename": "windsail", + "build-id": "ASSET_OBJECT_WINDSAIL", + "type": "ObjectHeader", + "sha1": "1ce26d41f09ce41a8bbc338f11c4149229bf9492" + }, + { + "filename": "EffectBox", + "build-id": "ASSET_OBJECT_EFFECTBOX", + "type": "ObjectHeader", + "sha1": "c8aae3399ae6e5c12d09d4e15b287f85702b6159" + }, + { + "filename": "trophycab", + "build-id": "ASSET_OBJECT_TROPHYCAB", + "type": "ObjectHeader", + "sha1": "8de9302b444811454e60feaf6c24498ec27407dd" + }, + { + "filename": "FlyCoin", + "build-id": "ASSET_OBJECT_FLYCOIN", + "type": "ObjectHeader", + "sha1": "b8a0ce5cda47e7bc2f72481b65e9309910b0df00" + }, + { + "filename": "GoldenBalloon", + "build-id": "ASSET_OBJECT_GOLDENBALLOON", + "type": "ObjectHeader", + "sha1": "6af4e804e8bc7a64a64bacf7efbbe55d3ca9ea7d" + }, + { + "filename": "laserbolt", + "build-id": "ASSET_OBJECT_LASERBOLT", + "type": "ObjectHeader", + "sha1": "7bb258f664ef33de1d1ee3dd1e8ca8962c68233d" + }, + { + "filename": "lasergun", + "build-id": "ASSET_OBJECT_LASERGUN", + "type": "ObjectHeader", + "sha1": "45d2cde6f1330329ddfccaf80651d3016c575b9b" + }, + { + "filename": "boltglow", + "build-id": "ASSET_OBJECT_BOLTGLOW", + "type": "ObjectHeader", + "sha1": "677a59d7b48cbb2e1f46e8c5dac51eccc700a327" + }, + { + "filename": "GroundZipper", + "build-id": "ASSET_OBJECT_GROUNDZIPPER", + "type": "ObjectHeader", + "sha1": "decbaa570ea446cdf8c3b04cd26e1cb69a00cbea" + }, + { + "filename": "PWSafeTelepoint", + "build-id": "ASSET_OBJECT_PWSAFETELEPOINT", + "type": "ObjectHeader", + "sha1": "e0c4755a3b1e4cee9aebdd57c58a8c5cec4018a6" + }, + { + "filename": "HeadForPoint", + "build-id": "ASSET_OBJECT_HEADFORPOINT", + "type": "ObjectHeader", + "sha1": "19f57ff912d63aa035d1204f8af2ff4714162f9a" + }, + { + "filename": "FireballAttract", + "build-id": "ASSET_OBJECT_FIREBALLATTRACT", + "type": "ObjectHeader", + "sha1": "d842fbdb43e55304e8528c1cb89a69be272d2e31" + }, + { + "filename": "Fireball", + "build-id": "ASSET_OBJECT_FIREBALL", + "type": "ObjectHeader", + "sha1": "4aaf22f42c5b3193b95053cee322e6f5ee10e194" + }, + { + "filename": "OctoBubble", + "build-id": "ASSET_OBJECT_OCTOBUBBLE", + "type": "ObjectHeader", + "sha1": "5363e7bd9ba3239d467ae9cca2a21af5833839f6" + }, + { + "filename": "OctoBomb", + "build-id": "ASSET_OBJECT_OCTOBOMB", + "type": "ObjectHeader", + "sha1": "b0469b1f225c0e05e35b4c88d56172f008d682c2" + }, + { + "filename": "GoldTrophy", + "build-id": "ASSET_OBJECT_GOLDTROPHY", + "type": "ObjectHeader", + "sha1": "953b25a81f044ddf50be764aac727fe8060284d5" + }, + { + "filename": "Parktrophy", + "build-id": "ASSET_OBJECT_PARKTROPHY", + "type": "ObjectHeader", + "sha1": "4ab24b00acac40a1c41a29ad24b1ee119df46516" + }, + { + "filename": "Ticktrophy", + "build-id": "ASSET_OBJECT_TICKTROPHY", + "type": "ObjectHeader", + "sha1": "fbfa52997318e2d7d4231de308fe98d4d10c03fe" + }, + { + "filename": "Trophy", + "build-id": "ASSET_OBJECT_TROPHY", + "type": "ObjectHeader", + "sha1": "6dc2fc59eb86bea93ddfd256efe3504f49b0fa78" + }, + { + "filename": "Teleport", + "build-id": "ASSET_OBJECT_TELEPORT", + "type": "ObjectHeader", + "sha1": "7d1e5d0c94d4de50109d6cff450b3c6937dd7fe8" + }, + { + "filename": "Shield", + "build-id": "ASSET_OBJECT_SHIELD", + "type": "ObjectHeader", + "sha1": "1b066162fe57e8a51e7fb67231a2afd865c57b3e" + }, + { + "filename": "Lightning", + "build-id": "ASSET_OBJECT_LIGHTNING", + "type": "ObjectHeader", + "sha1": "8c79dde543e4e54a3454b40b3358bb8f604aa9fe" + }, + { + "filename": "midifadepoint", + "build-id": "ASSET_OBJECT_MIDIFADEPOINT", + "type": "ObjectHeader", + "sha1": "bf6ba9a107998c8ca8377ee45de84244dabed0d4" + }, + { + "filename": "levelname", + "build-id": "ASSET_OBJECT_LEVELNAME", + "type": "ObjectHeader", + "sha1": "78f62b06aba13bc9254d97c2104f37de2a199bbf" + }, + { + "filename": "midichset", + "build-id": "ASSET_OBJECT_MIDICHSET", + "type": "ObjectHeader", + "sha1": "4c62b258266be4808dd7121314bc18c37466ab61" + }, + { + "filename": "level_object_translation_table", + "build-id": "ASSET_LEVEL_OBJECT_TRANSLATION_TABLE", + "type": "LevelObjectTranslationTable", + "sha1": "42240915208454148ceb34f791ee33987c6199b2" + }, + { + "build-id": "ASSET_AUDIO_0", + "filename": "asset_audio_0", + "folder": "unknown", + "sha1": "0cecc342492b156a5c780258ae52eaf4b3acefb0", + "type": "Audio" + }, + { + "build-id": "ASSET_AUDIO_1", + "filename": "asset_audio_1", + "folder": "unknown", + "sha1": "76bc64bc1e3fbba15a65989583f3839d533ae57a", + "type": "Audio" + }, + { + "build-id": "ASSET_AUDIO_2", + "filename": "asset_audio_2", + "folder": "unknown", + "sha1": "6cd423a191c73a1805281c0e1d068ba2eb9b1c95", + "type": "Audio" + }, + { + "build-id": "ASSET_AUDIO_3", + "filename": "asset_audio_3", + "folder": "unknown", + "sha1": "a759358eebe02418442e6afa5a7b01db868ab892", + "type": "Audio" + }, + { + "build-id": "ASSET_AUDIO_4", + "filename": "asset_audio_4", + "folder": "unknown", + "sha1": "086b43fecc7204d90018588535f3fb3c564b66a3", + "type": "Audio" + }, + { + "build-id": "ASSET_AUDIO_5", + "filename": "asset_audio_5", + "folder": "unknown", + "sha1": "ce9f47b1d9351f48bea3e3ff6660488a29a13fb6", + "type": "Audio" + }, + { + "build-id": "ASSET_AUDIO_6", + "filename": "asset_audio_6", + "folder": "unknown", + "sha1": "c2791e23a2283b5f63152b627ec51502dc44dc79", + "type": "Audio" + }, + { + "build-id": "ASSET_AUDIO_7", + "filename": "asset_audio_7", + "folder": "unknown", + "sha1": "805eb0912704b2ba7962e125125f121ebbeb7bd4", + "type": "Audio" + }, + { + "build-id": "ASSET_AUDIO_8", + "filename": "asset_audio_8", + "folder": "unknown", + "sha1": "3f663411a56499aaa28dcf376681ad03aa31a660", + "type": "Audio" + }, + { + "build-id": "ASSET_AUDIO_9", + "filename": "asset_audio_9", + "folder": "unknown", + "sha1": "37dc13a3c5889a381639b5ab522e0661ed5c9b90", + "type": "Audio" + }, + { + "build-id": "ASSET_AUDIO_10", + "filename": "asset_audio_10", + "folder": "unknown", + "sha1": "fee4ce14c6c0e2641143221e633ac72dc3c8bd64", + "type": "Audio" + }, + { + "build-id": "ASSET_AUDIO_11", + "filename": "asset_audio_11", + "folder": "unknown", + "sha1": "fd2a3cfe08ad194fd6bdc25fe4309d4fa5cc0b32", + "type": "Audio" + }, + { + "filename": "asset_audio_12", + "build-id": "ASSET_AUDIO_12", + "folder": "unknown", + "type": "Audio", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709" + }, + { + "build-id": "ASSET_PARTICLES_0", + "filename": "asset_particles_0", + "folder": "unknown", + "sha1": "4a873e34431a780a1b7cfc34840be070901eb9f6", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_1", + "filename": "asset_particles_1", + "folder": "unknown", + "sha1": "6e2dcf9c923ca9ab76a7785cae56355de7127e42", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_2", + "filename": "asset_particles_2", + "folder": "unknown", + "sha1": "7cdf05458ba8af2402ce8cdfeea10e5e0a0fde8e", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_3", + "filename": "asset_particles_3", + "folder": "unknown", + "sha1": "1444baeda4cba4dba48e9ca507b8d640433e5d49", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_4", + "filename": "asset_particles_4", + "folder": "unknown", + "sha1": "e9290413060a859b5d4068f1f2b65a0df0b035ee", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_5", + "filename": "asset_particles_5", + "folder": "unknown", + "sha1": "6c487130fe7cffd04e22c220d840466cf604d990", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_6", + "filename": "asset_particles_6", + "folder": "unknown", + "sha1": "73631d4238fadcfb4b0e2e7bbfe555e1aad709d7", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_7", + "filename": "asset_particles_7", + "folder": "unknown", + "sha1": "ef537b873f119b41325ae5a87265d7bad4777453", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_8", + "filename": "asset_particles_8", + "folder": "unknown", + "sha1": "a084ef894cb641b2146c02e67fe94847e1803e41", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_9", + "filename": "asset_particles_9", + "folder": "unknown", + "sha1": "feb87a4e5cdc398d137636f9e1f97b085e694a1a", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_10", + "filename": "asset_particles_10", + "folder": "unknown", + "sha1": "dfca24ba6bf2f703dc6b3cbf8104a5bf65d6651b", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_11", + "filename": "asset_particles_11", + "folder": "unknown", + "sha1": "2ebe5aff873390c60c56eec5eba5d8741034be23", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_12", + "filename": "asset_particles_12", + "folder": "unknown", + "sha1": "90782570e22ad841e1ff3ff9127cd30377c3b623", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_13", + "filename": "asset_particles_13", + "folder": "unknown", + "sha1": "7a7786bc854d3cb97705d0447e005fa4ac89e27e", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_14", + "filename": "asset_particles_14", + "folder": "unknown", + "sha1": "5456141dd328d1737c46cec7e4685fc902a3443e", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_15", + "filename": "asset_particles_15", + "folder": "unknown", + "sha1": "a6788c610a8687ccb5aff3c2a490b1ead379398b", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_16", + "filename": "asset_particles_16", + "folder": "unknown", + "sha1": "9825b6ad1e22da1fee6497f121647193bb98e7b6", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_17", + "filename": "asset_particles_17", + "folder": "unknown", + "sha1": "a5678a951810be50047a78a21533bf114d4458c2", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_18", + "filename": "asset_particles_18", + "folder": "unknown", + "sha1": "d619ad5ffafc4be7efad6155ee7ef65da0405473", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_19", + "filename": "asset_particles_19", + "folder": "unknown", + "sha1": "67ba7eeb1d1f54ca2772c704c38d5e7fea59512f", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_20", + "filename": "asset_particles_20", + "folder": "unknown", + "sha1": "6a97f0a9f8e76cd016cc4d0dd9b69a7976ba0080", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_21", + "filename": "asset_particles_21", + "folder": "unknown", + "sha1": "e097033b4138e0596203211b77dc85ebeabe4ecd", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_22", + "filename": "asset_particles_22", + "folder": "unknown", + "sha1": "befb0d73e35a1e950be5db6bc771684cf47fcee4", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_23", + "filename": "asset_particles_23", + "folder": "unknown", + "sha1": "660c23df5d436efe4f1985b553dfa72edf5455ce", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_24", + "filename": "asset_particles_24", + "folder": "unknown", + "sha1": "80884801bb026efd3cd4e631357f837b71c28c88", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_25", + "filename": "asset_particles_25", + "folder": "unknown", + "sha1": "5774817d40147ab288e4afd87f57224aa3b52403", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_26", + "filename": "asset_particles_26", + "folder": "unknown", + "sha1": "ab9c4490201d68d0c9c7f6ea815c0676765cd935", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_27", + "filename": "asset_particles_27", + "folder": "unknown", + "sha1": "5ae0407c1e33f8789c1e3d74a75a6726cf055f4f", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_28", + "filename": "asset_particles_28", + "folder": "unknown", + "sha1": "03de37bcd6c8e471a48830b36ca2fdef6b8685b1", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_29", + "filename": "asset_particles_29", + "folder": "unknown", + "sha1": "53beeabd1f89bf9498af1235c8b0295d5bdebeba", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_30", + "filename": "asset_particles_30", + "folder": "unknown", + "sha1": "785fe9202399d91f39291478c5da94123118eb42", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_31", + "filename": "asset_particles_31", + "folder": "unknown", + "sha1": "8c1d032eff5d943ee67184988db5eff503cbca1c", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_32", + "filename": "asset_particles_32", + "folder": "unknown", + "sha1": "7fe37034e0593a731db655ef5cf01c6a3d5bdc03", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_33", + "filename": "asset_particles_33", + "folder": "unknown", + "sha1": "6fcde484f3894a59e3e7067741f83bddf7883192", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_34", + "filename": "asset_particles_34", + "folder": "unknown", + "sha1": "ad02f4e36ea756b937d88e7cdf7bcdc501d2403e", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_35", + "filename": "asset_particles_35", + "folder": "unknown", + "sha1": "88fb83fd1c6f93351edc6b6940c9b9ce14029a74", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_36", + "filename": "asset_particles_36", + "folder": "unknown", + "sha1": "f8b7f86f8cf0118d4d8e797251861356e7a9f811", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_37", + "filename": "asset_particles_37", + "folder": "unknown", + "sha1": "58fe3a94df3ba5e9afb5f16fd2376e96bc2b5fcd", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_38", + "filename": "asset_particles_38", + "folder": "unknown", + "sha1": "c6688575640a743fd1f1e9efec8ec6585702370d", + "type": "Particle" + }, + { + "filename": "asset_particles_39", + "build-id": "ASSET_PARTICLES_39", + "folder": "unknown", + "type": "Particle", + "sha1": "f8b7f86f8cf0118d4d8e797251861356e7a9f811" + }, + { + "build-id": "ASSET_PARTICLES_40", + "filename": "asset_particles_40", + "folder": "unknown", + "sha1": "ce1acb789012d0d59411fcc3dc2e7731438efd8a", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_41", + "filename": "asset_particles_41", + "folder": "unknown", + "sha1": "ed7b942b667d17d10712943d459b113ada3686b5", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_42", + "filename": "asset_particles_42", + "folder": "unknown", + "sha1": "e0c277455075c50dfbbfae31859c3d3d1ca4a303", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_43", + "filename": "asset_particles_43", + "folder": "unknown", + "sha1": "ee2b039984eb256d4189a7de5a979ebb336a253f", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_44", + "filename": "asset_particles_44", + "folder": "unknown", + "sha1": "c0bdbe118d568b486461af6eb872064ee1f3a34a", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_45", + "filename": "asset_particles_45", + "folder": "unknown", + "sha1": "0d3ac0fb46f081cb94c5da511349b4eb9f881fe0", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_46", + "filename": "asset_particles_46", + "folder": "unknown", + "sha1": "5720345b5430723678669d359d9d6c283a158565", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_47", + "filename": "asset_particles_47", + "folder": "unknown", + "sha1": "4e4032caf13e95a9b78040ac6ac4efe39649abf0", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_48", + "filename": "asset_particles_48", + "folder": "unknown", + "sha1": "9d6e4b5a39497b191eb702b808fd101ca3d95991", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_49", + "filename": "asset_particles_49", + "folder": "unknown", + "sha1": "6f7b5b223d75dca9677491511e8c9feb586d5930", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_50", + "filename": "asset_particles_50", + "folder": "unknown", + "sha1": "0e6bd29657ff843b1d1a197068279c1ee34bdb36", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_51", + "filename": "asset_particles_51", + "folder": "unknown", + "sha1": "8aba7d5fc15dafa0132ff1dcb113c2b5b0c537cc", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_52", + "filename": "asset_particles_52", + "folder": "unknown", + "sha1": "df4fef02fb7d912dbe8c4913530f469e2354486f", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_53", + "filename": "asset_particles_53", + "folder": "unknown", + "sha1": "d94367d2a7f04b659add2b71980536ee21072c83", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_54", + "filename": "asset_particles_54", + "folder": "unknown", + "sha1": "298e73f1619c00d88675cf67a2c7cf1b2bc219ea", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_55", + "filename": "asset_particles_55", + "folder": "unknown", + "sha1": "7d80e92fce135ba1546e06499308f1cc0823accf", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_56", + "filename": "asset_particles_56", + "folder": "unknown", + "sha1": "556c6726976a0e145fe762cd689cc0fa9cfd2f01", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_57", + "filename": "asset_particles_57", + "folder": "unknown", + "sha1": "d2e0ad49d765caccd231ecd39b6b650689bd2430", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_58", + "filename": "asset_particles_58", + "folder": "unknown", + "sha1": "a6f8b77ed543a6b788c56139ff2e4a6f7363ff83", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_59", + "filename": "asset_particles_59", + "folder": "unknown", + "sha1": "2e60619ca9f2b7a85cb24a2f41189737de1e462b", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_60", + "filename": "asset_particles_60", + "folder": "unknown", + "sha1": "9b66330909dd6dd6c069faea74e5666c7718337a", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_61", + "filename": "asset_particles_61", + "folder": "unknown", + "sha1": "0039a0ecd6a9190ac8fb22e8d68bb9cfbc153d40", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_62", + "filename": "asset_particles_62", + "folder": "unknown", + "sha1": "1203b3785029355a5f1143e337228c308b8d776c", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_63", + "filename": "asset_particles_63", + "folder": "unknown", + "sha1": "be8431cc3dc9da631143e3f85e204f6328adcc3e", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_64", + "filename": "asset_particles_64", + "folder": "unknown", + "sha1": "cd379fc8f10180c448dbcdfa9078e84a1e7bd0ad", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_65", + "filename": "asset_particles_65", + "folder": "unknown", + "sha1": "31e0dadaba756ac1d5d348724b0fbd8977546ec0", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_66", + "filename": "asset_particles_66", + "folder": "unknown", + "sha1": "6df88c4a0e63fb4e3122ae1d33c870626d7f6d6d", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_67", + "filename": "asset_particles_67", + "folder": "unknown", + "sha1": "b107515eb0450dbf206500450de201a8cc8a76a3", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_68", + "filename": "asset_particles_68", + "folder": "unknown", + "sha1": "12a7519b120a878a1a314c68f566b813d92606b8", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLES_69", + "filename": "asset_particles_69", + "folder": "unknown", + "sha1": "8d1e55a00c53efc2ef115127f92a59f6b14ee972", + "type": "Particle" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_0", + "filename": "asset_particle_behaviors_0", + "folder": "unknown", + "sha1": "a658fdc9c55c7f1de7cc6dc9c0550de47ed75b8f", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_1", + "filename": "asset_particle_behaviors_1", + "folder": "unknown", + "sha1": "dfa5e8fd6e6526fe7d2e15f56047bc553965deda", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_2", + "filename": "asset_particle_behaviors_2", + "folder": "unknown", + "sha1": "576ec4492b178c7ee6d6c67a4acaaf0c5013d72c", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_3", + "filename": "asset_particle_behaviors_3", + "folder": "unknown", + "sha1": "d81f0af0abbf44b35f47be1054b86d407eeda63c", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_4", + "filename": "asset_particle_behaviors_4", + "folder": "unknown", + "sha1": "e51af4f0ea42ad0de6ed3b70eccd0d074ddca2f2", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_5", + "filename": "asset_particle_behaviors_5", + "folder": "unknown", + "sha1": "07d57995f25fdfc51cac621738f524b2042e9cb6", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_6", + "filename": "asset_particle_behaviors_6", + "folder": "unknown", + "sha1": "7995bf1a28efe1e96a2ad7b4f16bbaf08ab557f6", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_7", + "filename": "asset_particle_behaviors_7", + "folder": "unknown", + "sha1": "ec7d270dc8493aac87f7ed5f4adb4cd2f8d4fad3", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_8", + "filename": "asset_particle_behaviors_8", + "folder": "unknown", + "sha1": "fb4fa8a1efe66cae14f9af317c05a411257e6624", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_9", + "filename": "asset_particle_behaviors_9", + "folder": "unknown", + "sha1": "7726c8a552e92261823f486ad6b676103d97d7e3", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_10", + "filename": "asset_particle_behaviors_10", + "folder": "unknown", + "sha1": "f4238d61cb008ff5d2434bcd733fadff366a5de9", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_11", + "filename": "asset_particle_behaviors_11", + "folder": "unknown", + "sha1": "65405fdca3363b00de2298d1f5866e4567fcf9b9", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_12", + "filename": "asset_particle_behaviors_12", + "folder": "unknown", + "sha1": "42aeed2151fef9d0a6888a75782320a89593df32", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_13", + "filename": "asset_particle_behaviors_13", + "folder": "unknown", + "sha1": "9ab0f9c70d523f44e08a06db9575fe9c36c58868", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_14", + "filename": "asset_particle_behaviors_14", + "folder": "unknown", + "sha1": "824a9b0e3db2eab73e0de0c3cd62e61f842e6e9e", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_15", + "filename": "asset_particle_behaviors_15", + "folder": "unknown", + "sha1": "35a523983bfc5ad944a1551c33a46793b29a1555", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_16", + "filename": "asset_particle_behaviors_16", + "folder": "unknown", + "sha1": "f63d3815b2a5b32b43620762734fea7b817be3b8", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_17", + "filename": "asset_particle_behaviors_17", + "folder": "unknown", + "sha1": "bde2bc03633f48269c5900259284b3aee2c7ef2f", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_18", + "filename": "asset_particle_behaviors_18", + "folder": "unknown", + "sha1": "b8bc1ba6a8498019e6982451c913eaab8dcccd54", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_19", + "filename": "asset_particle_behaviors_19", + "folder": "unknown", + "sha1": "b2953898ca901c2daf350f17240cc169eeaa27fd", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_20", + "filename": "asset_particle_behaviors_20", + "folder": "unknown", + "sha1": "833b0a1c74759a17acb17adc82bd0c18c93b5b95", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_21", + "filename": "asset_particle_behaviors_21", + "folder": "unknown", + "sha1": "1bd34929a7544ea2a28b42a8072b68b5b0673be0", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_22", + "filename": "asset_particle_behaviors_22", + "folder": "unknown", + "sha1": "186960010c4a453dac3f0a3c0f968684a65d51b0", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_23", + "filename": "asset_particle_behaviors_23", + "folder": "unknown", + "sha1": "41ca53afc1eb17341a0dd5b6c340c1ee60d5adde", + "type": "ParticleBehavior" + }, + { + "filename": "asset_particle_behaviors_24", + "build-id": "ASSET_PARTICLE_BEHAVIORS_24", + "folder": "unknown", + "type": "ParticleBehavior", + "sha1": "41ca53afc1eb17341a0dd5b6c340c1ee60d5adde" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_25", + "filename": "asset_particle_behaviors_25", + "folder": "unknown", + "sha1": "1a474c1c310400b2d8a7ec94e285a1d5dbd51e45", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_26", + "filename": "asset_particle_behaviors_26", + "folder": "unknown", + "sha1": "ba99d0acdee2d417ef5f24062856e78dc855a361", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_27", + "filename": "asset_particle_behaviors_27", + "folder": "unknown", + "sha1": "ac7cf3b1325f7eec410c6f7d96b406696e6d2c10", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_28", + "filename": "asset_particle_behaviors_28", + "folder": "unknown", + "sha1": "7cf31f6f0a86d6a03c20411cb1cbb2932e2ebfe9", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_29", + "filename": "asset_particle_behaviors_29", + "folder": "unknown", + "sha1": "2e4716b5ecec041f668b0ebf174485cd3bdcbccb", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_30", + "filename": "asset_particle_behaviors_30", + "folder": "unknown", + "sha1": "3ceae984834a688ba499af3fbbe15a33b4398c76", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_31", + "filename": "asset_particle_behaviors_31", + "folder": "unknown", + "sha1": "4e527dbb725b5de286178e9e200becd8fb8ff73b", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_32", + "filename": "asset_particle_behaviors_32", + "folder": "unknown", + "sha1": "127f67b651207809e1bd3a367507a4a0fa908268", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_33", + "filename": "asset_particle_behaviors_33", + "folder": "unknown", + "sha1": "34e65b2e4ac3251fbb0f34436b917ae0ef990190", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_34", + "filename": "asset_particle_behaviors_34", + "folder": "unknown", + "sha1": "d4d8ccd08dcc4e8520b46c675c59678ab4b4a73a", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_35", + "filename": "asset_particle_behaviors_35", + "folder": "unknown", + "sha1": "843e9a22a01799159b71cb9698f3cda298facd41", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_36", + "filename": "asset_particle_behaviors_36", + "folder": "unknown", + "sha1": "d7d95bf3eab9bd35721f412fc85925b733e15dec", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_37", + "filename": "asset_particle_behaviors_37", + "folder": "unknown", + "sha1": "a1c0eb21e353b0cb8428bbd13c7e9f69d7ef545c", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_38", + "filename": "asset_particle_behaviors_38", + "folder": "unknown", + "sha1": "3c6f8168a702ab914f870e4f68871f24fe8db5b2", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_39", + "filename": "asset_particle_behaviors_39", + "folder": "unknown", + "sha1": "1a3982825c936469ba40abc9a160a2b3d3187515", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_40", + "filename": "asset_particle_behaviors_40", + "folder": "unknown", + "sha1": "03066b2ce11c9da8514b17798bcae849fcd4873c", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_41", + "filename": "asset_particle_behaviors_41", + "folder": "unknown", + "sha1": "113f52490e2815564c6131a1b334532473d328bf", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_42", + "filename": "asset_particle_behaviors_42", + "folder": "unknown", + "sha1": "3b21a5c9d065cca9113c0a97bda9ffd52c5bf569", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_43", + "filename": "asset_particle_behaviors_43", + "folder": "unknown", + "sha1": "f1667c3152fd16b107047cf9adb2794598422ce4", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_44", + "filename": "asset_particle_behaviors_44", + "folder": "unknown", + "sha1": "544c077835cc41548bca3c76e3cd0b1109a47138", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_45", + "filename": "asset_particle_behaviors_45", + "folder": "unknown", + "sha1": "593495d1f945269e6547db76336364fd24921fbb", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_46", + "filename": "asset_particle_behaviors_46", + "folder": "unknown", + "sha1": "abb8511f3fbbf9dcd21579e89767ed80d4493f40", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_47", + "filename": "asset_particle_behaviors_47", + "folder": "unknown", + "sha1": "5c0660398d8865a19cdff6ccfeb3c3ae24938351", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_48", + "filename": "asset_particle_behaviors_48", + "folder": "unknown", + "sha1": "72f771b7a3195ad1e6acf58e07b84d8884174da4", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_49", + "filename": "asset_particle_behaviors_49", + "folder": "unknown", + "sha1": "bbf5849e91a888062f773d76f7af84c97a026553", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_50", + "filename": "asset_particle_behaviors_50", + "folder": "unknown", + "sha1": "3a26675000f4a50060bcd7e8615504a6edbee3cc", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_51", + "filename": "asset_particle_behaviors_51", + "folder": "unknown", + "sha1": "c96f1d43e531927b9c1f932acbadea9e2718c194", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_52", + "filename": "asset_particle_behaviors_52", + "folder": "unknown", + "sha1": "bef5eb06c665f89522266976542487df28a69407", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_53", + "filename": "asset_particle_behaviors_53", + "folder": "unknown", + "sha1": "810377f9171ad966efc7278d672a97faaa31d5bd", + "type": "ParticleBehavior" + }, + { + "filename": "asset_particle_behaviors_54", + "build-id": "ASSET_PARTICLE_BEHAVIORS_54", + "folder": "unknown", + "type": "ParticleBehavior", + "sha1": "ac7cf3b1325f7eec410c6f7d96b406696e6d2c10" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_55", + "filename": "asset_particle_behaviors_55", + "folder": "unknown", + "sha1": "2d2b568643b4781f88015887022a812a809d794d", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_56", + "filename": "asset_particle_behaviors_56", + "folder": "unknown", + "sha1": "f7cfe6c662f2f1e7e739df1b19d5aac684d27622", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_57", + "filename": "asset_particle_behaviors_57", + "folder": "unknown", + "sha1": "964df5a30b4b098b8a7578603183744643888053", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_58", + "filename": "asset_particle_behaviors_58", + "folder": "unknown", + "sha1": "714d6039f0a69f58cb067e737b8837dc39d97b93", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_59", + "filename": "asset_particle_behaviors_59", + "folder": "unknown", + "sha1": "59d2d2a0c7131a8015f3ed15a2bd3e0848b0e902", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_60", + "filename": "asset_particle_behaviors_60", + "folder": "unknown", + "sha1": "5a1e785982f49f3eafb22f756b35dc87c9943635", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_61", + "filename": "asset_particle_behaviors_61", + "folder": "unknown", + "sha1": "a32f15e498d983ddf308ac752e1fd0d9056627ef", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_62", + "filename": "asset_particle_behaviors_62", + "folder": "unknown", + "sha1": "42b92d426ff2db860f6229e2810927d70834c31f", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_63", + "filename": "asset_particle_behaviors_63", + "folder": "unknown", + "sha1": "1ddee8191fee9567e53c17fbafa768b98b349c2f", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_64", + "filename": "asset_particle_behaviors_64", + "folder": "unknown", + "sha1": "45d4160527d6bf9ea52f87ca7fb7590fd3b87ac6", + "type": "ParticleBehavior" + }, + { + "filename": "asset_particle_behaviors_65", + "build-id": "ASSET_PARTICLE_BEHAVIORS_65", + "folder": "unknown", + "type": "ParticleBehavior", + "sha1": "544c077835cc41548bca3c76e3cd0b1109a47138" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_66", + "filename": "asset_particle_behaviors_66", + "folder": "unknown", + "sha1": "28f8b62835e2266a788c4c7057f67a9a5f2adc61", + "type": "ParticleBehavior" + }, + { + "filename": "asset_particle_behaviors_67", + "build-id": "ASSET_PARTICLE_BEHAVIORS_67", + "folder": "unknown", + "type": "ParticleBehavior", + "sha1": "3b21a5c9d065cca9113c0a97bda9ffd52c5bf569" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_68", + "filename": "asset_particle_behaviors_68", + "folder": "unknown", + "sha1": "2802cb8c07a7a26ee3c97e4ce2735b43854023e1", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_69", + "filename": "asset_particle_behaviors_69", + "folder": "unknown", + "sha1": "ab335c93949061e0f82a0053e21b94bfd6e2f34f", + "type": "ParticleBehavior" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_70", + "filename": "asset_particle_behaviors_70", + "folder": "unknown", + "sha1": "f2b2716cdd6c923ea7e41e96ce59865d51e2c008", + "type": "ParticleBehavior" + }, + { + "filename": "asset_particle_behaviors_71", + "build-id": "ASSET_PARTICLE_BEHAVIORS_71", + "folder": "unknown", + "type": "ParticleBehavior", + "sha1": "544c077835cc41548bca3c76e3cd0b1109a47138" + }, + { + "filename": "asset_particle_behaviors_72", + "build-id": "ASSET_PARTICLE_BEHAVIORS_72", + "folder": "unknown", + "type": "ParticleBehavior", + "sha1": "544c077835cc41548bca3c76e3cd0b1109a47138" + }, + { + "filename": "asset_particle_behaviors_73", + "build-id": "ASSET_PARTICLE_BEHAVIORS_73", + "folder": "unknown", + "type": "ParticleBehavior", + "sha1": "544c077835cc41548bca3c76e3cd0b1109a47138" + }, + { + "filename": "asset_particle_behaviors_74", + "build-id": "ASSET_PARTICLE_BEHAVIORS_74", + "folder": "unknown", + "type": "ParticleBehavior", + "sha1": "544c077835cc41548bca3c76e3cd0b1109a47138" + }, + { + "filename": "fonts", + "build-id": "ASSET_FONTS", + "type": "Fonts", + "sha1": "0e976414028270256ca79ae9e21556f872a220ce" + }, + { + "filename": "beta_jp_font_table", + "build-id": "ASSET_BETA_JP_FONT_TABLE", + "type": "JPFontsTable", + "sha1": "4f392a618cfe537782e1fdccfe7664de703d500e" + }, + { + "filename": "jp_fonts", + "build-id": "ASSET_BETA_JP_FONT", + "type": "JPFonts", + "sha1": "9428062bff4e627639444509a29f79305f053eee" + }, + { + "filename": "asset_binary_47", + "build-id": "ASSET_BINARY_47", + "type": "Binary", + "sha1": "5ec269b3714ca7427bb945e9cf7db57d0a2fec9e" + }, + { + "filename": "FossilCanyonGhost", + "build-id": "ASSET_TTGHOSTS_FOSSILCANYON", + "type": "TTGhost", + "sha1": "72263689592a66935cd1d1bfd5ab8752c52cd141" + }, + { + "filename": "PirateLagoonGhost", + "build-id": "ASSET_TTGHOSTS_PIRATELAGOON", + "type": "TTGhost", + "sha1": "5fdb67ca97ff56ad361f3ee7d43d0807055dcbe4" + }, + { + "filename": "AncientLakeGhost", + "build-id": "ASSET_TTGHOSTS_ANCIENTLAKE", + "type": "TTGhost", + "sha1": "733f99a2cacd147345562ad5fe5b024b86575ddf" + }, + { + "filename": "WalrusCoveGhost", + "build-id": "ASSET_TTGHOSTS_WALRUSCOVE", + "type": "TTGhost", + "sha1": "4662ecaf28dbf63e287e41844f5bc42c0c674460" + }, + { + "filename": "HotTopVolcanoGhost", + "build-id": "ASSET_TTGHOSTS_HOTTOPVOLCANO", + "type": "TTGhost", + "sha1": "f075b3069746304cc9aed246932752ea195ec19b" + }, + { + "filename": "WhaleBayGhost", + "build-id": "ASSET_TTGHOSTS_WHALEBAY", + "type": "TTGhost", + "sha1": "e2762a98275cf68a53a6e722dff9dfb66c691bce" + }, + { + "filename": "SnowballValleyGhost", + "build-id": "ASSET_TTGHOSTS_SNOWBALLVALLEY", + "type": "TTGhost", + "sha1": "7e3257485f8f1032e90e96480c33cf4998d917b2" + }, + { + "filename": "CrescentIslandGhost", + "build-id": "ASSET_TTGHOSTS_CRESCENTISLAND", + "type": "TTGhost", + "sha1": "9ea84ce4fbf6c91c65a258c4d9be296e0acec0a4" + }, + { + "filename": "EverfrostPeakGhost", + "build-id": "ASSET_TTGHOSTS_EVERFROSTPEAK", + "type": "TTGhost", + "sha1": "c98cbb561eda6f8bca1e3c68f8e07d8edb97a001" + }, + { + "filename": "SpaceportAlphaGhost", + "build-id": "ASSET_TTGHOSTS_SPACEPORTALPHA", + "type": "TTGhost", + "sha1": "90c102e40756ea90fe2df2861e5e691f1899756a" + }, + { + "filename": "SpacedustAlleyGhost", + "build-id": "ASSET_TTGHOSTS_SPACEDUSTALLEY", + "type": "TTGhost", + "sha1": "be706a27bf58684bf2c72b62cccca3635bbcde46" + }, + { + "filename": "GreenwoodVillageGhost", + "build-id": "ASSET_TTGHOSTS_GREENWOODVILLAGE", + "type": "TTGhost", + "sha1": "f5130448601dc60f516697a91aae0c063dcb643a" + }, + { + "filename": "BoulderCanyonGhost", + "build-id": "ASSET_TTGHOSTS_BOULDERCANYON", + "type": "TTGhost", + "sha1": "2cf684c933aa15aec105be25d4a0ca166b05f804" + }, + { + "filename": "WindmillPlainsGhost", + "build-id": "ASSET_TTGHOSTS_WINDMILLPLAINS", + "type": "TTGhost", + "sha1": "92f9a4e38b07e4280b6a3e36f47f37469d873070" + }, + { + "filename": "FrostyVillageGhost", + "build-id": "ASSET_TTGHOSTS_FROSTYVILLAGE", + "type": "TTGhost", + "sha1": "55a2516c01887960b4a5076da1be7d50f36390da" + }, + { + "filename": "JungleFallsGhost", + "build-id": "ASSET_TTGHOSTS_JUNGLEFALLS", + "type": "TTGhost", + "sha1": "f2586fc3a68e032b50e409f352ffa4cef5c1c7b6" + }, + { + "filename": "TreasureCavesGhost", + "build-id": "ASSET_TTGHOSTS_TREASURECAVES", + "type": "TTGhost", + "sha1": "f428bfbd6f5d812610750e4815b4e55e7a5aebdd" + }, + { + "filename": "HauntedWoodsGhost", + "build-id": "ASSET_TTGHOSTS_HAUNTEDWOODS", + "type": "TTGhost", + "sha1": "8a48cf888e9d8bed3cce6d64243c389143bb4232" + }, + { + "filename": "DarkmoonCavernsGhost", + "build-id": "ASSET_TTGHOSTS_DARKMOONCAVERNS", + "type": "TTGhost", + "sha1": "2729d670bf0779420df23a98434fa70318a3878c" + }, + { + "filename": "StarCityGhost", + "build-id": "ASSET_TTGHOSTS_STARCITY", + "type": "TTGhost", + "sha1": "3dbb827b1e3ae1933fa322323b1860d44a170636" + }, + { + "build-id": "ASSET_LEVELMODEL_SPACEPORTALPHA", + "filename": "spaceport_alpha_v80", + "folder": "future_fun_land", + "type": "LevelModel", + "sha1": "630d4b3e8ca774bec6c3a179b0e0a27f1dd038ef", + "version": "v80" + }, + { + "filename": "blue_wall_v79", + "build-id": "ASSET_TEX3D_SPACE_BLUEWALL", + "folder": "space", + "type": "Texture", + "sha1": "5d2431816c12027330ee7bdf375d5ab21523a0bc", + "version": "v79" + }, + { + "filename": "blue_tunnel_light_v79", + "build-id": "ASSET_TEX3D_SPACE_BLUETUNNELLIGHT", + "folder": "space", + "type": "Texture", + "sha1": "b644250d76c1c8dbaeec071f5903e045b8d0d4fa", + "version": "v79" + }, + { + "filename": "colored_stone_v79", + "build-id": "ASSET_TEX3D_SPACE_COLOREDSTONE", + "folder": "space", + "type": "Texture", + "sha1": "be42ef0d46f4f21e67343b6bc7f9c1a9b4953de2", + "version": "v79" + }, + { + "filename": "space_wall_v79", + "build-id": "ASSET_TEX3D_SPACE_SPACEWALL", + "folder": "space", + "type": "Texture", + "sha1": "5632bbe73392cbd991d3e0691a8d90c6e5aec453", + "version": "v79" + }, + { + "filename": "uturn_v79", + "build-id": "ASSET_TEX3D_UNUSED_UTURN", + "folder": "unused", + "type": "Texture", + "sha1": "635ff2b28fe97aef6f3592c5fb41c09f722bb9a1", + "version": "v79" + }, + { + "build-id": "ASSET_TEXTURES_3D_1401", + "filename": "asset_textures_3d_1401_v79", + "folder": "unlabeled", + "sha1": "f19304aea04e1a72f045088ff4924b5d9dc4fc56", + "type": "Texture", + "version": "v79" + }, + { + "build-id": "ASSET_TEXTURES_3D_1402", + "filename": "asset_textures_3d_1402_v79", + "folder": "unlabeled", + "sha1": "d2db9b8f98f6eadea016713745d190b3b7dc14c5", + "type": "Texture", + "version": "v79" + }, + { + "build-id": "ASSET_TEXTURES_3D_1403", + "filename": "asset_textures_3d_1403_v79", + "folder": "unlabeled", + "sha1": "baacee27a320957b83644fd7ea95a0de57e023cf", + "type": "Texture", + "version": "v79" + }, + { + "build-id": "ASSET_TEXTURES_3D_1404", + "filename": "asset_textures_3d_1404_v79", + "folder": "unlabeled", + "sha1": "90cfce5d4c1d31f3f3185fd27f863a4771f55daa", + "type": "Texture", + "version": "v79" + }, + { + "build-id": "ASSET_TEXTURES_3D_1405", + "filename": "asset_textures_3d_1405_v79", + "folder": "unlabeled", + "sha1": "78cb6387163541e2081dcd5612934cc20c44d6be", + "type": "Texture", + "version": "v79" + }, + { + "build-id": "ASSET_TEXTURES_3D_1406", + "filename": "asset_textures_3d_1406_v79", + "folder": "unlabeled", + "sha1": "5414f317943ce809a0eb344a5492a3394d3c4ed5", + "type": "Texture", + "version": "v79" + }, + { + "build-id": "ASSET_TEXTURES_3D_1407", + "filename": "asset_textures_3d_1407_v79", + "folder": "unlabeled", + "sha1": "8621579765749f3d28508ba9f0d528d694dfb2f9", + "type": "Texture", + "version": "v79" + }, + { + "build-id": "ASSET_TEXTURES_3D_1408", + "filename": "asset_textures_3d_1408_v79", + "folder": "unlabeled", + "sha1": "da37addb47cbfb4bcb61a246fb3ae048569cfce4", + "type": "Texture", + "version": "v79" + }, + { + "build-id": "ASSET_TEXTURES_3D_1409", + "filename": "asset_textures_3d_1409_v79", + "folder": "unlabeled", + "sha1": "1be315cd1962164774a96dc1a939791f131f16fe", + "type": "Texture", + "version": "v79" + }, + { + "build-id": "ASSET_TEXTURES_3D_1410", + "filename": "asset_textures_3d_1410_v79", + "folder": "unlabeled", + "sha1": "7062af56e2f69bc6059a231e34bae4ab5e060e58", + "type": "Texture", + "version": "v79" + }, + { + "build-id": "ASSET_TEXTURES_3D_1411", + "filename": "asset_textures_3d_1411_v79", + "folder": "unlabeled", + "sha1": "93941e9349940aec9902302662e48b1cb17ea62f", + "type": "Texture", + "version": "v79" + }, + { + "build-id": "ASSET_TEXTURES_3D_1412", + "filename": "asset_textures_3d_1412_v79", + "folder": "unlabeled", + "sha1": "801bc6f0defcdf62a42dd0b01621ad3a54994ed2", + "type": "Texture", + "version": "v79" + }, + { + "build-id": "ASSET_TEXTURES_3D_1413", + "filename": "asset_textures_3d_1413_v79", + "folder": "unlabeled", + "sha1": "65cd5dc0897f7684ad3c55b7c197454d269e22ff", + "type": "Texture", + "version": "v79" + }, + { + "build-id": "ASSET_TEXTURES_3D_1414", + "filename": "asset_textures_3d_1414_v79", + "folder": "unlabeled", + "sha1": "77e482f24f5f07da4fadea0510f2bb3093cf1005", + "type": "Texture", + "version": "v79" + }, + { + "filename": "red_pillar_spike2_v79", + "build-id": "ASSET_TEX3D_SPACE_REDPILLARSPIKE2", + "folder": "space", + "type": "Texture", + "sha1": "52210f2b9b0b21203b9dbc198610fbe14c2be267", + "version": "v79" + }, + { + "filename": "title_jp_0", + "build-id": "ASSET_TEX2D_MENU_TITLE_JP_0", + "folder": "menu", + "type": "Texture", + "sha1": "8f87a9a3050e8e5eff2217b9b69a621aaf8c7423", + "version": "v79" + }, + { + "filename": "title_jp_1", + "build-id": "ASSET_TEX2D_MENU_TITLE_JP_1", + "folder": "unknown", + "type": "Texture", + "sha1": "a49e8c689fc5d4fa338d579872900657ec0bf1b4", + "version": "v79" + }, + { + "filename": "title_jp_2", + "build-id": "ASSET_TEX2D_MENU_TITLE_JP_2", + "folder": "unknown", + "type": "Texture", + "sha1": "bc138e6a8288f9365116d45a0af73e916865285b", + "version": "v79" + }, + { + "filename": "title_jp_3", + "build-id": "ASSET_TEX2D_MENU_TITLE_JP_3", + "folder": "unknown", + "type": "Texture", + "sha1": "826412e097e84ed3ba5581f28dcabd866d119b8c", + "version": "v79" + }, + { + "filename": "title_jp_4", + "build-id": "ASSET_TEX2D_MENU_TITLE_JP_4", + "folder": "unknown", + "type": "Texture", + "sha1": "43ed9027185123e5cfd5442aa09ef6231f902eb1", + "version": "v79" + }, + { + "filename": "title_jp_5", + "build-id": "ASSET_TEX2D_MENU_TITLE_JP_5", + "folder": "objects", + "type": "Texture", + "sha1": "a80ab4a0c9bd0d94b575d9139f856f1dddb97268", + "version": "v79" + }, + { + "filename": "title_jp_6", + "build-id": "ASSET_TEX2D_MENU_TITLE_JP_6", + "folder": "objects", + "type": "Texture", + "sha1": "6e5d2206eb6c1c8f6c7ed1548e013c62f02feed0", + "version": "v79" + }, + { + "filename": "title_jp_7", + "build-id": "ASSET_TEX2D_MENU_TITLE_JP_7", + "folder": "objects", + "type": "Texture", + "sha1": "edf36feffe4fd1dc623062a89595f14346ace26b", + "version": "v79" + }, + { + "filename": "title_jp_8", + "build-id": "ASSET_TEX2D_MENU_TITLE_JP_8", + "folder": "objects", + "type": "Texture", + "sha1": "95f7366fce4c1aa67d74812cfb694b82a86c506d", + "version": "v79" + }, + { + "filename": "title_jp_9", + "build-id": "ASSET_TEX2D_MENU_TITLE_JP_9", + "folder": "objects", + "type": "Texture", + "sha1": "f7a6f9b5f9f5d54c6c91323b4aa854758048d962", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_0", + "filename": "asset_game_text_0_v79", + "folder": "unknown", + "sha1": "94718b2fde17df2096bfadc7b1be7cbd84b4a0d5", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_50", + "filename": "asset_game_text_50_v79", + "folder": "unknown", + "sha1": "3a1cce67ce10eb124b97f2047b40175454999b73", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_52", + "filename": "asset_game_text_52_v79", + "folder": "unknown", + "sha1": "19b61e88a6cff42a5bfac94a949294d32b036900", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_69", + "filename": "asset_game_text_69_v79", + "folder": "unknown", + "sha1": "a982221bdeec666b9be832e92404701efa10d66b", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_255", + "filename": "asset_game_text_255_v79", + "folder": "unknown", + "sha1": "de0f9ea2ab27a8468348d44fdc84dbb1dad00cd1", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_256", + "filename": "asset_game_text_256_v79", + "folder": "unknown", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_257", + "filename": "asset_game_text_257_v79", + "folder": "unknown", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_258", + "filename": "asset_game_text_258_v79", + "folder": "unknown", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_259", + "filename": "asset_game_text_259_v79", + "folder": "unknown", + "sha1": "bd24350469ed87468e1b2b6c61a6bb018a75a5ac", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_260", + "filename": "asset_game_text_260_v79", + "folder": "unknown", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_261", + "filename": "asset_game_text_261_v79", + "folder": "unknown", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_262", + "filename": "asset_game_text_262_v79", + "folder": "unknown", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_263", + "filename": "asset_game_text_263_v79", + "folder": "unknown", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_264", + "filename": "asset_game_text_264_v79", + "folder": "unknown", + "sha1": "dca2a63c62d9810fafa7890368938f4355949c4a", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_265", + "filename": "asset_game_text_265_v79", + "folder": "unknown", + "sha1": "6f3e4b9b38dc3a69ba0a6f990559228d21d08212", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_266", + "filename": "asset_game_text_266_v79", + "folder": "unknown", + "sha1": "7c31ca1675ff7deb43231fda6b1a1d15bf8e31e8", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_267", + "filename": "asset_game_text_267_v79", + "folder": "unknown", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_268", + "filename": "asset_game_text_268_v79", + "folder": "unknown", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_269", + "filename": "asset_game_text_269_v79", + "folder": "unknown", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_270", + "filename": "asset_game_text_270_v79", + "folder": "unknown", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_271", + "filename": "asset_game_text_271_v79", + "folder": "unknown", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_272", + "filename": "asset_game_text_272_v79", + "folder": "unknown", + "sha1": "4916eaf37250199ea662410c1bc1d7916273625f", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_273", + "filename": "asset_game_text_273_v79", + "folder": "unknown", + "sha1": "5c6a7d2d8c0cbbf55ef0eb02c4645aa4e3976886", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_274", + "filename": "asset_game_text_274_v79", + "folder": "unknown", + "sha1": "5c6a7d2d8c0cbbf55ef0eb02c4645aa4e3976886", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_275", + "filename": "asset_game_text_275_v79", + "folder": "unknown", + "sha1": "22c51f8471e42611399eb14488048b5ad65bfe2b", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_276", + "filename": "asset_game_text_276_v79", + "folder": "unknown", + "sha1": "334f01813602e97817eaf71e836e0f3605c59032", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_277", + "filename": "asset_game_text_277_v79", + "folder": "unknown", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_278", + "filename": "asset_game_text_278_v79", + "folder": "unknown", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_279", + "filename": "asset_game_text_279_v79", + "folder": "unknown", + "sha1": "6f7694de0b9e0eac10e75ec6313161cbdfee7270", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_280", + "filename": "asset_game_text_280_v79", + "folder": "unknown", + "sha1": "fbaf6b859369f8795723eb04e07fa10b8b7443fb", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_281", + "filename": "asset_game_text_281_v79", + "folder": "unknown", + "sha1": "0dbe8c1e2eb9e34999cdb8938df12d2b59ef5214", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_282", + "filename": "asset_game_text_282_v79", + "folder": "unknown", + "sha1": "8029e9905d3bd03628844b5286ccf985ec8bb5b7", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_283", + "filename": "asset_game_text_283_v79", + "folder": "unknown", + "sha1": "a17863401f2bbf03cabae4ac9191cd4dded8c7ce", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_284", + "filename": "asset_game_text_284_v79", + "folder": "unknown", + "sha1": "1f5ed95151e62f4566205beada03c27173ba2108", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_285", + "filename": "asset_game_text_285_v79", + "folder": "unknown", + "sha1": "7db0a2fa9e154f814863408df2e4599fd1c9c37f", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_286", + "filename": "asset_game_text_286_v79", + "folder": "unknown", + "sha1": "83aaca4532ae16781cbcf308401f49c554d23ee8", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_287", + "filename": "asset_game_text_287_v79", + "folder": "unknown", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_288", + "filename": "asset_game_text_288_v79", + "folder": "unknown", + "sha1": "2c505d8591009ec5a9215b1b1faf908ddd9d3aeb", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_289", + "filename": "asset_game_text_289_v79", + "folder": "unknown", + "sha1": "05b6b8e6cedbb032067e657004b6ecec78fa334e", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_290", + "filename": "asset_game_text_290_v79", + "folder": "unknown", + "sha1": "a6a4217bbdc1e6970e337bd29c4e99ad5522af53", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_291", + "filename": "asset_game_text_291_v79", + "folder": "unknown", + "sha1": "32fc8586066550a1f5767e8142464fb702b59790", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_292", + "filename": "asset_game_text_292_v79", + "folder": "unknown", + "sha1": "8e8cf34690f763f2268586302e7cc777fd6bc0ee", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_293", + "filename": "asset_game_text_293_v79", + "folder": "unknown", + "sha1": "65e6f3341ffe9ceec5a99d4b2d9f5a7a26e76067", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_294", + "filename": "asset_game_text_294_v79", + "folder": "unknown", + "sha1": "65e6f3341ffe9ceec5a99d4b2d9f5a7a26e76067", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_295", + "filename": "asset_game_text_295_v79", + "folder": "unknown", + "sha1": "65e6f3341ffe9ceec5a99d4b2d9f5a7a26e76067", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_296", + "filename": "asset_game_text_296_v79", + "folder": "unknown", + "sha1": "65e6f3341ffe9ceec5a99d4b2d9f5a7a26e76067", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_297", + "filename": "asset_game_text_297_v79", + "folder": "unknown", + "sha1": "925fcc0278ab7954f909f3715b26ceb2b2d17bc7", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_298", + "filename": "asset_game_text_298_v79", + "folder": "unknown", + "sha1": "8e8cf34690f763f2268586302e7cc777fd6bc0ee", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_299", + "filename": "asset_game_text_299_v79", + "folder": "unknown", + "sha1": "8e8cf34690f763f2268586302e7cc777fd6bc0ee", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_300", + "filename": "asset_game_text_300_v79", + "folder": "unknown", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_301", + "filename": "asset_game_text_301_v79", + "folder": "unknown", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_302", + "filename": "asset_game_text_302_v79", + "folder": "unknown", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_303", + "filename": "asset_game_text_303_v79", + "folder": "unknown", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_304", + "filename": "asset_game_text_304_v79", + "folder": "unknown", + "sha1": "39f051300e4948e5e53ed2e50f5cb88138c29494", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_305", + "filename": "asset_game_text_305_v79", + "folder": "unknown", + "sha1": "79d255fc4df63cf13b688eb9cc251457fc882046", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_306", + "filename": "asset_game_text_306_v79", + "folder": "unknown", + "sha1": "ff9163a9ff8b60668fd2caa9feab49bb711e15b9", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_307", + "filename": "asset_game_text_307_v79", + "folder": "unknown", + "sha1": "ceee26a4600da3afa82b0a3ddd9fd0fbb54e0d5f", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_308", + "filename": "asset_game_text_308_v79", + "folder": "unknown", + "sha1": "44a0ee6ac8496335f1e4230db460974790999c41", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_309", + "filename": "asset_game_text_309_v79", + "folder": "unknown", + "sha1": "e69b2ffea0227b6f19d3dbbb691bec71ef7eb832", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_310", + "filename": "asset_game_text_310_v79", + "folder": "unknown", + "sha1": "46316474185693fe5f2fbd38f5fc2d347589e6be", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_311", + "filename": "asset_game_text_311_v79", + "folder": "unknown", + "sha1": "67301d3f44dd47cdec4d387212d6d48a208d4a85", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_312", + "filename": "asset_game_text_312_v79", + "folder": "unknown", + "sha1": "98cefa39dfbb65853cda517dbc4caf975c0ae282", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_313", + "filename": "asset_game_text_313_v79", + "folder": "unknown", + "sha1": "928173d24b285f22122adfef8b8ceec011d39a8a", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_314", + "filename": "asset_game_text_314_v79", + "folder": "unknown", + "sha1": "de735cdb8593d0bd2bd29da33f4928259dba350c", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_315", + "filename": "asset_game_text_315_v79", + "folder": "unknown", + "sha1": "6622699fbf62a5c7af07c484928e9e732536f274", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_316", + "filename": "asset_game_text_316_v79", + "folder": "unknown", + "sha1": "d4f0e274ab112e51867da004ad55918871353f20", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_317", + "filename": "asset_game_text_317_v79", + "folder": "unknown", + "sha1": "d4f0e274ab112e51867da004ad55918871353f20", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_318", + "filename": "asset_game_text_318_v79", + "folder": "unknown", + "sha1": "d25f3e63210507e3747a5e7147d28ffa540ff3fc", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_319", + "filename": "asset_game_text_319_v79", + "folder": "unknown", + "sha1": "4e01507b4d03252915145dd27d3f2ae261341926", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_320", + "filename": "asset_game_text_320_v79", + "folder": "unknown", + "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_321", + "filename": "asset_game_text_321_v79", + "folder": "unknown", + "sha1": "29c97ba9d51383717feab5f37fa8269cf4101d01", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_322", + "filename": "asset_game_text_322_v79", + "folder": "unknown", + "sha1": "30434a8c6e16965b1b065c499b6df25cfc2c5cae", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_323", + "filename": "asset_game_text_323_v79", + "folder": "unknown", + "sha1": "f45a126274a21ef5d1732d6348d3360a98de93ed", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_324", + "filename": "asset_game_text_324_v79", + "folder": "unknown", + "sha1": "86e4f2a5c7ed83aefeaee703c941dcac321c2c94", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_325", + "filename": "asset_game_text_325_v79", + "folder": "unknown", + "sha1": "e322b586402b66241899c575ca9170b4bba8d172", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_326", + "filename": "asset_game_text_326_v79", + "folder": "unknown", + "sha1": "265b824af1d6bb7b4b767aca988f533a343be8b1", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_327", + "filename": "asset_game_text_327_v79", + "folder": "unknown", + "sha1": "c6a11b0cd3f38979640a9f20fa31560793a04a61", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_328", + "filename": "asset_game_text_328_v79", + "folder": "unknown", + "sha1": "e8faa0b845c82a99148b55e580e0a916ec645670", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_329", + "filename": "asset_game_text_329_v79", + "folder": "unknown", + "sha1": "8d5a22589228e520b266fe9feb09046ad3a64ccc", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_330", + "filename": "asset_game_text_330_v79", + "folder": "unknown", + "sha1": "7e8d47c7c480bc22b658fba2e6751f944fcdd9b3", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_331", + "filename": "asset_game_text_331_v79", + "folder": "unknown", + "sha1": "2f682ddfcf0af65a5c29a8d5b8ead4c4f0e7d58a", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_332", + "filename": "asset_game_text_332_v79", + "folder": "unknown", + "sha1": "4c1c22b6ed918f6f61de2849041892e83574c04d", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_333", + "filename": "asset_game_text_333_v79", + "folder": "unknown", + "sha1": "a5087be8cd6c25cda79ba9b282edb9c8cfd5df32", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_334", + "filename": "asset_game_text_334_v79", + "folder": "unknown", + "sha1": "776e208d2d430ba278e055762af167cf76d51a48", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_335", + "filename": "asset_game_text_335_v79", + "folder": "unknown", + "sha1": "e18b743a75805d5120f1f39eaf18a3c5903903bb", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_336", + "filename": "asset_game_text_336_v79", + "folder": "unknown", + "sha1": "115d8e7753dd70d91c495ac0f82f7c4f2a218bca", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_337", + "filename": "asset_game_text_337_v79", + "folder": "unknown", + "sha1": "62e3f3f8975ce7032957a6cc3efce5c5a3932d1d", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_338", + "filename": "asset_game_text_338_v79", + "folder": "unknown", + "sha1": "2d0801bbe4d1b0fc072fc09bfabd0e9cd123e68b", + "type": "GameText", + "version": "v79" + }, + { + "build-id": "ASSET_GAME_TEXT_339", + "filename": "asset_game_text_339_v79", + "folder": "unknown", + "sha1": "66f7adc85103ab29efc809d46c40c269fd344dcc", + "type": "GameText", + "version": "v79" + }, + { + "filename": "english_menu_text_v79", + "build-id": "ASSET_MENU_TEXT_ENGLISH", + "type": "MenuText", + "sha1": "b5d5bdd424404aeeccf641a5028105438884befe", + "version": "v79" + }, + { + "filename": "french_menu_text_v79", + "build-id": "ASSET_MENU_TEXT_FRENCH", + "type": "MenuText", + "sha1": "1ea015120abfa17a31798c40083e2dadca32346b", + "version": "v79" + }, + { + "filename": "german_menu_text_v79", + "build-id": "ASSET_MENU_TEXT_GERMAN", + "type": "MenuText", + "sha1": "980933a56da67fce07cf1af4ae2861417211d47d", + "version": "v79" + }, + { + "filename": "japanese_menu_text_v79", + "build-id": "ASSET_MENU_TEXT_JAPANESE", + "type": "MenuText", + "sha1": "480b4fbaf6a887a19f39da2a6cd46da6eabd3173", + "version": "v79" + }, + { + "filename": "fireball_unknown_v79", + "build-id": "ASSET_SPRITE_UNKNOWN_FIREBALLUNKNOWN", + "folder": "unknown", + "type": "Sprite", + "sha1": "9182fef8c5edd571207bb521f94d7a917b152d7c", + "version": "v79" + }, + { + "filename": "fireball_v79", + "build-id": "ASSET_SPRITE_OBJECTS_FIREBALL", + "folder": "objects", + "type": "Sprite", + "sha1": "e4b74590f18d057a65e7b6d925a85d7a74bc08c9", + "version": "v79" + }, + { + "filename": "wizghost_v79", + "build-id": "ASSET_SPRITE_OBJECTS_WIZGHOST", + "folder": "objects", + "type": "Sprite", + "sha1": "edb485957cecad3ce423cbc6d70495aac71d697f", + "version": "v79" + }, + { + "filename": "unknown_light_v79", + "build-id": "ASSET_SPRITE_UNKNOWN_UNKNOWNLIGHT", + "folder": "unknown", + "type": "Sprite", + "sha1": "7e7e669b5192a2f9fe9da7cc42048379ae8fe202", + "version": "v79" + }, + { + "filename": "small_star_v79", + "build-id": "ASSET_SPRITE_UNKNOWN_SMALLSTAR", + "folder": "unknown", + "type": "Sprite", + "sha1": "570c8041da9851055e9050ba8035ea4bf359e475", + "version": "v79" + }, + { + "filename": "buoy_v79", + "build-id": "ASSET_SPRITE_OBJECTS_BUOY", + "folder": "objects", + "type": "Sprite", + "sha1": "5b12c2e801e02b2ccc46a7ee6eb141abc2c864c6", + "version": "v79" + }, + { + "filename": "smartie_tree_v79", + "build-id": "ASSET_SPRITE_OBJECTS_SMARTIETREE", + "folder": "objects", + "type": "Sprite", + "sha1": "ceb882ab71b9e200c5ffc7c09d557d9c58f6e5f5", + "version": "v79" + }, + { + "filename": "beach_tree_v79", + "build-id": "ASSET_SPRITE_OBJECTS_BEACHTREE", + "folder": "objects", + "type": "Sprite", + "sha1": "947d45146fbefb1e8001c8686db0c48fe277e100", + "version": "v79" + }, + { + "filename": "blue_berry_bush_v79", + "build-id": "ASSET_SPRITE_OBJECTS_BLUEBERRYBUSH", + "folder": "objects", + "type": "Sprite", + "sha1": "ebe95925b3177e7fa100bec600c9115906c06bdd", + "version": "v79" + }, + { + "filename": "rubber_snow_tree_v79", + "build-id": "ASSET_SPRITE_OBJECTS_RUBBERSNOWTREE", + "folder": "objects", + "type": "Sprite", + "sha1": "04185bbb09319f1c86df91ceec9339b29d858371", + "version": "v79" + }, + { + "filename": "skinny_snow_tree_v79", + "build-id": "ASSET_SPRITE_OBJECTS_SKINNYSNOWTREE", + "folder": "objects", + "type": "Sprite", + "sha1": "2feb9353b0b8c3dd9389b52ddd951914406f35b9", + "version": "v79" + }, + { + "filename": "xmas_tree_v79", + "build-id": "ASSET_SPRITE_OBJECTS_XMASTREE", + "folder": "objects", + "type": "Sprite", + "sha1": "9290b2240a26f9539ed192242f797627879bacbf", + "version": "v79" + }, + { + "filename": "alpine_snow_tree_v79", + "build-id": "ASSET_SPRITE_OBJECTS_ALPINESNOWTREE", + "folder": "objects", + "type": "Sprite", + "sha1": "569f39578c5f7e969332019b708ba4919ecad458", + "version": "v79" + }, + { + "filename": "rubber_tree_v79", + "build-id": "ASSET_SPRITE_OBJECTS_RUBBERTREE", + "folder": "objects", + "type": "Sprite", + "sha1": "baca69371687f1f03ff4572f5b481f94632c544e", + "version": "v79" + }, + { + "filename": "palm_tree_top_v79", + "build-id": "ASSET_SPRITE_OBJECTS_PALMTREETOP", + "folder": "objects", + "type": "Sprite", + "sha1": "e9c3308d2b9e55f9c70fe00270021cc73567ea40", + "version": "v79" + }, + { + "filename": "palm_plant_v79", + "build-id": "ASSET_SPRITE_OBJECTS_PALMPLANT", + "folder": "objects", + "type": "Sprite", + "sha1": "c19751717abc4fd0d0a898d5e879a023914ba607", + "version": "v79" + }, + { + "filename": "palm_tree_top_chea_v79", + "build-id": "ASSET_SPRITE_OBJECTS_PALMTREETOPCHEA", + "folder": "objects", + "type": "Sprite", + "sha1": "2a3f14dc6612c10a9fb4a7dfe6f34f649d796c61", + "version": "v79" + }, + { + "filename": "fir_tree_v79", + "build-id": "ASSET_SPRITE_OBJECTS_FIRTREE", + "folder": "objects", + "type": "Sprite", + "sha1": "32487eb8ef82132514a5d3f1f17c6e76a2a6869e", + "version": "v79" + }, + { + "filename": "space_tree_v79", + "build-id": "ASSET_SPRITE_OBJECTS_SPACETREE", + "folder": "objects", + "type": "Sprite", + "sha1": "b1018b15883b682fa30768d582197a5665db16dd", + "version": "v79" + }, + { + "filename": "lamp_post_v79", + "build-id": "ASSET_SPRITE_OBJECTS_LAMPPOST", + "folder": "objects", + "type": "Sprite", + "sha1": "f94aa1185fb5997092b19a8f84ec8c83497dccdb", + "version": "v79" + }, + { + "filename": "white_buttercup_v79", + "build-id": "ASSET_SPRITE_FLOWERS_WHITEBUTTERCUP", + "folder": "flowers", + "type": "Sprite", + "sha1": "2920826a8b90e1eda0fe99d99526568817643413", + "version": "v79" + }, + { + "filename": "yellow_bellflower_v79", + "build-id": "ASSET_SPRITE_FLOWERS_YELLOWBELLFLOWER", + "folder": "flowers", + "type": "Sprite", + "sha1": "82c92fb9f19ba12174ad3fbb324d2d1286b7c3cb", + "version": "v79" + }, + { + "filename": "yellow_buttercup_v79", + "build-id": "ASSET_SPRITE_FLOWERS_YELLOWBUTTERCUP", + "folder": "flowers", + "type": "Sprite", + "sha1": "f760ece3b68cc93bee56dcb8f7745df741778ce4", + "version": "v79" + }, + { + "filename": "blue_buttercup_v79", + "build-id": "ASSET_SPRITE_FLOWERS_BLUEBUTTERCUP", + "folder": "flowers", + "type": "Sprite", + "sha1": "3d14cb848aec0ef25788ad6b12cd09b886e7b126", + "version": "v79" + }, + { + "filename": "water_lily_v79", + "build-id": "ASSET_SPRITE_FLOWERS_WATERLILY", + "folder": "flowers", + "type": "Sprite", + "sha1": "2a8f3ddafcb8fea54e80fa5c4db2a0cf65efb27b", + "version": "v79" + }, + { + "filename": "reed_no_leaf_v79", + "build-id": "ASSET_SPRITE_OBJECTS_REEDNOLEAF", + "folder": "objects", + "type": "Sprite", + "sha1": "4c43a68e534ff13d4d9518a4a99f5f22aeb7f925", + "version": "v79" + }, + { + "filename": "reed_leaves_v79", + "build-id": "ASSET_SPRITE_OBJECTS_REEDLEAVES", + "folder": "objects", + "type": "Sprite", + "sha1": "28473d60d57ddde65749cabcc379fd29d0b310c1", + "version": "v79" + }, + { + "filename": "read_one_leaf_v79", + "build-id": "ASSET_SPRITE_OBJECTS_READONELEAF", + "folder": "objects", + "type": "Sprite", + "sha1": "5e14047aee2f5c53f94ed98c1262e0d0fb560ed6", + "version": "v79" + }, + { + "filename": "snowman_tophat_v79", + "build-id": "ASSET_SPRITE_OBJECTS_SNOWMANTOPHAT", + "folder": "objects", + "type": "Sprite", + "sha1": "3de7619b600cad2b146f3a3770640c482f6fccf7", + "version": "v79" + }, + { + "filename": "bell_v79", + "build-id": "ASSET_SPRITE_OBJECTS_BELL", + "folder": "objects", + "type": "Sprite", + "sha1": "7152a89a540c1e55bfd0527ce323cae486e1a7ca", + "version": "v79" + }, + { + "filename": "snowman_v79", + "build-id": "ASSET_SPRITE_OBJECTS_SNOWMAN", + "folder": "objects", + "type": "Sprite", + "sha1": "965a76417c7bf84581cadcb68e1d8ec56c9d55d8", + "version": "v79" + }, + { + "filename": "torch_with_eyes_v79", + "build-id": "ASSET_SPRITE_UNUSED_TORCHWITHEYES", + "folder": "unused", + "type": "Sprite", + "sha1": "2397a548c1b1853648d9ad6fb759d8e1c0b06f98", + "version": "v79" + }, + { + "filename": "beta_ancient_lake_sign_v79", + "build-id": "ASSET_SPRITE_UNUSED_BETAANCIENTLAKESIGN", + "folder": "unused", + "type": "Sprite", + "sha1": "e662fc359d9d83afd9be300e19d963ce16800543", + "version": "v79" + }, + { + "filename": "debug_anim_car_v79", + "build-id": "ASSET_SPRITE_OBJECTS_DEBUGANIMCAR", + "folder": "objects", + "type": "Sprite", + "sha1": "e6b93f01ea48f6675227b102f5b8b32459e8d522", + "version": "v79" + }, + { + "filename": "debug_sky_control_v79", + "build-id": "ASSET_SPRITE_OBJECTS_DEBUGSKYCONTROL", + "folder": "objects", + "type": "Sprite", + "sha1": "f6e94c2ba83616c98584ea1c57f77d5fe486f279", + "version": "v79" + }, + { + "filename": "debug_orb_red_v79", + "build-id": "ASSET_SPRITE_OBJECTS_DEBUGORBRED", + "folder": "objects", + "type": "Sprite", + "sha1": "828ca39143101a37b42ce73d0f6481c97852044c", + "version": "v79" + }, + { + "filename": "debug_orb_yellow_v79", + "build-id": "ASSET_SPRITE_OBJECTS_DEBUGORBYELLOW", + "folder": "objects", + "type": "Sprite", + "sha1": "05b55c9f75968db9981df67533723d3f1f865fa2", + "version": "v79" + }, + { + "filename": "debug_fog_changer_v79", + "build-id": "ASSET_SPRITE_OBJECTS_DEBUGFOGCHANGER", + "folder": "objects", + "type": "Sprite", + "sha1": "8dc03670cb944000121e6e37fe9b8b2585044bbe", + "version": "v79" + }, + { + "filename": "debug_animator_v79", + "build-id": "ASSET_SPRITE_OBJECTS_DEBUGANIMATOR", + "folder": "objects", + "type": "Sprite", + "sha1": "744a3904ba3370e75910956f61f45f1ab622bb46", + "version": "v79" + }, + { + "filename": "debug_audio_v79", + "build-id": "ASSET_SPRITE_OBJECTS_DEBUGAUDIO", + "folder": "objects", + "type": "Sprite", + "sha1": "9141996c91c486ef88d590b20ad0fa3fb9d7399a", + "version": "v79" + }, + { + "filename": "debug_audio_line_v79", + "build-id": "ASSET_SPRITE_OBJECTS_DEBUGAUDIOLINE", + "folder": "objects", + "type": "Sprite", + "sha1": "aaa169e2667ec08c8272a2a4a5766e92ab28a847", + "version": "v79" + }, + { + "filename": "debug_audio_seq_line_v79", + "build-id": "ASSET_SPRITE_OBJECTS_DEBUGAUDIOSEQLINE", + "folder": "objects", + "type": "Sprite", + "sha1": "4635c18c03f86e1705f8bdcd07383fc7c2518d17", + "version": "v79" + }, + { + "filename": "debug_unknown_traffic_light_v79", + "build-id": "ASSET_SPRITE_UNUSED_DEBUGUNKNOWNTRAFFICLIGHT", + "folder": "objects", + "type": "Sprite", + "sha1": "240b1d20b26738fca00b2346dc744d83e648a733", + "version": "v79" + }, + { + "filename": "debug_audio_reverb_v79", + "build-id": "ASSET_SPRITE_OBJECTS_DEBUGAUDIOREVERB", + "folder": "objects", + "type": "Sprite", + "sha1": "2637c53a2dc45daf2a615c79587d31706075597e", + "version": "v79" + }, + { + "filename": "balloon_boost_v79", + "build-id": "ASSET_SPRITE_OBJECTS_BALLOONBOOST", + "folder": "objects", + "type": "Sprite", + "sha1": "a5d7c00707a834b9f1ffa707cdf4c45d96b3a9e9", + "version": "v79" + }, + { + "filename": "balloon_missle_v79", + "build-id": "ASSET_SPRITE_OBJECTS_BALLOONMISSLE", + "folder": "objects", + "type": "Sprite", + "sha1": "7ccc583a487414cd90d6e78dfaed71fe02fb3296", + "version": "v79" + }, + { + "filename": "balloon_trap_v79", + "build-id": "ASSET_SPRITE_OBJECTS_BALLOONTRAP", + "folder": "objects", + "type": "Sprite", + "sha1": "a3a3eda52c328def804152ce024accab59f2a36c", + "version": "v79" + }, + { + "filename": "balloon_shield_v79", + "build-id": "ASSET_SPRITE_OBJECTS_BALLOONSHIELD", + "folder": "objects", + "type": "Sprite", + "sha1": "c892e82c955340a2d4cba3db59a1f55d43d1b952", + "version": "v79" + }, + { + "filename": "balloon_magnet_v79", + "build-id": "ASSET_SPRITE_OBJECTS_BALLOONMAGNET", + "folder": "objects", + "type": "Sprite", + "sha1": "41f3699050abe4e74e1963c66d641e8f99a12c32", + "version": "v79" + }, + { + "filename": "balloon_missle_gift_v79", + "build-id": "ASSET_SPRITE_UNUSED_BALLOONMISSLEGIFT", + "folder": "unused", + "type": "Sprite", + "sha1": "3e7e2fba0949705058144bd07d1058d5e86f6178", + "version": "v79" + }, + { + "filename": "balloon_boost_gift_v79", + "build-id": "ASSET_SPRITE_UNUSED_BALLOONBOOSTGIFT", + "folder": "unused", + "type": "Sprite", + "sha1": "c23e1497267dfa584781cdff03fff14f48d235b5", + "version": "v79" + }, + { + "filename": "balloon_gold_v79", + "build-id": "ASSET_SPRITE_OBJECTS_BALLOONGOLD", + "folder": "objects", + "type": "Sprite", + "sha1": "1a34e753a8c86121d47820be01c9ab5292786e5d", + "version": "v79" + }, + { + "filename": "balloon_silver_v79", + "build-id": "ASSET_SPRITE_OBJECTS_BALLOONSILVER", + "folder": "objects", + "type": "Sprite", + "sha1": "18bf35a74b620178e83d96c829af20ebf55615df", + "version": "v79" + }, + { + "filename": "banana_v79", + "build-id": "ASSET_SPRITE_OBJECTS_BANANA", + "folder": "objects", + "type": "Sprite", + "sha1": "216e1dec767318aa41baad74900c0ae92ce44a71", + "version": "v79" + }, + { + "filename": "silver_coin_v79", + "build-id": "ASSET_SPRITE_OBJECTS_SILVERCOIN", + "folder": "objects", + "type": "Sprite", + "sha1": "cfad0684cf22cd7c80fc118811f7a69b4faecb88", + "version": "v79" + }, + { + "filename": "checkpoint_flag_v79", + "build-id": "ASSET_SPRITE_OBJECTS_CHECKPOINTFLAG", + "folder": "objects", + "type": "Sprite", + "sha1": "0b1db24b35728d8cb35b0eda0c29d1d414275f1c", + "version": "v79" + }, + { + "filename": "rareware_coin_v79", + "build-id": "ASSET_SPRITE_UNUSED_RAREWARECOIN", + "folder": "unused", + "type": "Sprite", + "sha1": "05ec6d466b73be8973e9eff11dafc629885f8bd9", + "version": "v79" + }, + { + "filename": "silver_coin_vertical_v79", + "build-id": "ASSET_SPRITE_UNUSED_SILVERCOINVERTICAL", + "folder": "unused", + "type": "Sprite", + "sha1": "6d2ebc8d2cd71163d5097ead93625696125d3a64", + "version": "v79" + }, + { + "filename": "banana_icon_v79", + "build-id": "ASSET_SPRITE_HUD_BANANAICON", + "folder": "hud", + "type": "Sprite", + "sha1": "a6471acf30a3ecab0e097da5bbd5b597422e5c9b", + "version": "v79" + }, + { + "filename": "sparkle_v79", + "build-id": "ASSET_SPRITE_PARTICLES_SPARKLE", + "folder": "particles", + "type": "Sprite", + "sha1": "704a1dcc2d3cda3041237e5c55c747f8b215bb18", + "version": "v79" + }, + { + "filename": "debug_egg_creator_v79", + "build-id": "ASSET_SPRITE_OBJECTS_DEBUGEGGCREATOR", + "folder": "objects", + "type": "Sprite", + "sha1": "a5c5505def28513df6edd5ccd475842498d87bea", + "version": "v79" + }, + { + "filename": "bonus_gem_v79", + "build-id": "ASSET_SPRITE_UNUSED_BONUSGEM", + "folder": "unused", + "type": "Sprite", + "sha1": "054106dc3e1adf3beccabaca20ecabad2317be9c", + "version": "v79" + }, + { + "filename": "indicator_icon_caution_v79", + "build-id": "ASSET_SPRITE_HUD_INDICATORICONCAUTION", + "folder": "hud", + "type": "Sprite", + "sha1": "f63fbd66e270f0f29ed0725fa6d2745d5ec9e2ba", + "version": "v79" + }, + { + "filename": "indicator_icon_down_v79", + "build-id": "ASSET_SPRITE_HUD_INDICATORICONDOWN", + "folder": "hud", + "type": "Sprite", + "sha1": "e45d853b4e56e1baaa4ebb745cb7a7bebacc8f8f", + "version": "v79" + }, + { + "filename": "indicator_icon_uturn_v79", + "build-id": "ASSET_SPRITE_HUD_INDICATORICONUTURN", + "folder": "hud", + "type": "Sprite", + "sha1": "25fd7efb31c5d86751baae4c1e9d5323e0e27c1a", + "version": "v79" + }, + { + "filename": "indicator_icon_turn_v79", + "build-id": "ASSET_SPRITE_HUD_INDICATORICONTURN", + "folder": "hud", + "type": "Sprite", + "sha1": "35003f0a3aae4a7f97003a61cefd1ab8d2cef877", + "version": "v79" + }, + { + "filename": "indicator_icon_slight_turn_v79", + "build-id": "ASSET_SPRITE_HUD_INDICATORICONSLIGHTTURN", + "folder": "hud", + "type": "Sprite", + "sha1": "8eaa8fffa5d18f7e8ab224ef9e3cac635b8b23e6", + "version": "v79" + }, + { + "filename": "smoke_object_v79", + "build-id": "ASSET_SPRITE_OBJECTS_SMOKEOBJECT", + "folder": "objects", + "type": "Sprite", + "sha1": "650cb06f3026592ab332170822994d941ad4ea67", + "version": "v79" + }, + { + "filename": "smoke_cloud_v79", + "build-id": "ASSET_SPRITE_OBJECTS_SMOKECLOUD", + "folder": "objects", + "type": "Sprite", + "sha1": "d1ab3235f4f1624bc651d818ab7f6e8cc37f7906", + "version": "v79" + }, + { + "filename": "smoke_grass_v79", + "build-id": "ASSET_SPRITE_OBJECTS_SMOKEGRASS", + "folder": "objects", + "type": "Sprite", + "sha1": "7932bbdcce8b7d903da5d35ccbb18a10a568253e", + "version": "v79" + }, + { + "filename": "mist_v79", + "build-id": "ASSET_SPRITE_OBJECTS_MIST", + "folder": "objects", + "type": "Sprite", + "sha1": "97bb7f7ccabc1d1e542f7f8488977969fb90e240", + "version": "v79" + }, + { + "filename": "flaming_torch_v79", + "build-id": "ASSET_SPRITE_OBJECTS_FLAMINGTORCH", + "folder": "objects", + "type": "Sprite", + "sha1": "9f416e60b70973d6934cee07ff5ba00f5efbb94b", + "version": "v79" + }, + { + "filename": "splash_v79", + "build-id": "ASSET_SPRITE_UNUSED_SPLASH", + "folder": "unused", + "type": "Sprite", + "sha1": "ff292056736ceee590259fa224fcf321a27debe0", + "version": "v79" + }, + { + "filename": "weapon_balloon_pop_v79", + "build-id": "ASSET_SPRITE_UNUSED_WEAPONBALLOONPOP", + "folder": "unused", + "type": "Sprite", + "sha1": "06db4a11133cdc4252fa7ac9df3f1dc413bd66e8", + "version": "v79" + }, + { + "filename": "lava_spurt_v79", + "build-id": "ASSET_SPRITE_OBJECTS_LAVASPURT", + "folder": "objects", + "type": "Sprite", + "sha1": "1eb67863b2b05579c6d27caa99d5ecc40d207ead", + "version": "v79" + }, + { + "filename": "unknown_small_pop_v79", + "build-id": "ASSET_SPRITE_UNKNOWN_UNKNOWNSMALLPOP", + "folder": "unknown", + "type": "Sprite", + "sha1": "69a4ec323444d320a8e0e75655a2e91c941a4e82", + "version": "v79" + }, + { + "filename": "tyre0_v79", + "build-id": "ASSET_SPRITE_VEHICLE_PARTS_TYRE0", + "folder": "vehicle_parts", + "type": "Sprite", + "sha1": "bbd25abfd7a331415be350c4969bb38509706128", + "version": "v79" + }, + { + "filename": "tyre1_v79", + "build-id": "ASSET_SPRITE_VEHICLE_PARTS_TYRE1", + "folder": "vehicle_parts", + "type": "Sprite", + "sha1": "7652a48e20a4671c3c8e595f6c83af8cb82b21f6", + "version": "v79" + }, + { + "filename": "tyre2_v79", + "build-id": "ASSET_SPRITE_VEHICLE_PARTS_TYRE2", + "folder": "vehicle_parts", + "type": "Sprite", + "sha1": "8f5712e736df207067a36fdcec24bee31cc97567", + "version": "v79" + }, + { + "filename": "tyre3_v79", + "build-id": "ASSET_SPRITE_VEHICLE_PARTS_TYRE3", + "folder": "vehicle_parts", + "type": "Sprite", + "sha1": "8b2393549344393f9ebde1a2b56ba66a78bcf423", + "version": "v79" + }, + { + "filename": "fan0_v79", + "build-id": "ASSET_SPRITE_VEHICLE_PARTS_FAN0", + "folder": "vehicle_parts", + "type": "Sprite", + "sha1": "de85cbf1b3e819f858e15b0e3d366435f706595f", + "version": "v79" + }, + { + "filename": "fan1_v79", + "build-id": "ASSET_SPRITE_VEHICLE_PARTS_FAN1", + "folder": "vehicle_parts", + "type": "Sprite", + "sha1": "648e563a79873630c2c984b36db5a6b80ed0f9a5", + "version": "v79" + }, + { + "filename": "propeller0_v79", + "build-id": "ASSET_SPRITE_VEHICLE_PARTS_PROPELLER0", + "folder": "vehicle_parts", + "type": "Sprite", + "sha1": "1fcda8a7fdc1497d582bcc3072a73da20957945c", + "version": "v79" + }, + { + "filename": "propeller1_v79", + "build-id": "ASSET_SPRITE_VEHICLE_PARTS_PROPELLER1", + "folder": "vehicle_parts", + "type": "Sprite", + "sha1": "3b7542c7a2f3aa300ef9a0e94ac38d82dcfc2500", + "version": "v79" + }, + { + "filename": "rare_letters_v79", + "build-id": "ASSET_SPRITE_UNUSED_RARELETTERS", + "folder": "unused", + "type": "Sprite", + "sha1": "a8c2cc4939a93b5ee2c2bc600c1490b6ecdeccb7", + "version": "v79" + }, + { + "filename": "bolt_glow_v79", + "build-id": "ASSET_SPRITE_OBJECTS_BOLTGLOW", + "folder": "objects", + "type": "Sprite", + "sha1": "d135ecb5924413c55c0cad6ddd13a5f56fb857e4", + "version": "v79" + }, + { + "filename": "icon_trophy_v79", + "build-id": "ASSET_SPRITE_MENU_ICONTROPHY", + "folder": "menu", + "type": "Sprite", + "sha1": "1fcd858a394094fa2e853a96dbea7e80b69f3c7f", + "version": "v79" + }, + { + "filename": "icon_key_v79", + "build-id": "ASSET_SPRITE_MENU_ICONKEY", + "folder": "menu", + "type": "Sprite", + "sha1": "7873769bc069186fb1c079f83fb7d396571a4a40", + "version": "v79" + }, + { + "filename": "icon_wizpig_amulet_v79", + "build-id": "ASSET_SPRITE_MENU_ICONWIZPIGAMULET", + "folder": "menu", + "type": "Sprite", + "sha1": "6e37f657cf8e528ba10f4cae8db357bf28418202", + "version": "v79" + }, + { + "filename": "magic_codes_v79", + "build-id": "ASSET_MISC_MAGIC_CODES", + "misc-type": "MagicCodes", + "folder": "cheats", + "type": "Miscellaneous", + "sha1": "e62388ef2ec31af8352be16c6073c15d93d62110", + "version": "v79" + }, + { + "filename": "menu_element_ids_v79", + "build-id": "ASSET_MENU_ELEMENT_IDS", + "type": "Binary", + "sha1": "74a5d93bb16b708652952b6c779adca9ca4e951b", + "version": "v79" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_6", + "filename": "asset_level_object_maps_6_v79", + "folder": "unknown", + "sha1": "f893a0166d38ef8fc82593599a057980f896f668", + "type": "LevelObjectMap", + "version": "v79" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_18", + "filename": "asset_level_object_maps_18_v79", + "folder": "unknown", + "sha1": "4294e434b4841fa056de4a6593167ed77cce589f", + "type": "LevelObjectMap", + "version": "v79" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_87", + "filename": "asset_level_object_maps_87_v79", + "folder": "unknown", + "sha1": "aaf6c5d614e4679a134cab44bf86bc2b02d8f752", + "type": "LevelObjectMap", + "version": "v79" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_129", + "filename": "asset_level_object_maps_129_v79", + "folder": "unknown", + "sha1": "9869c32a01adbe155c38ad7de680088b335c0851", + "type": "LevelObjectMap", + "version": "v79" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_131", + "filename": "asset_level_object_maps_131_v79", + "folder": "unknown", + "sha1": "f38ac0b2f7a9a1729ef4a69e4cfd32625508811f", + "type": "LevelObjectMap", + "version": "v79" + }, + { + "filename": "CentralAreaHub_v79", + "build-id": "ASSET_LEVEL_CENTRALAREAHUB", + "type": "LevelHeader", + "sha1": "3ab50616e0447042822af0604b22673032e65a58", + "version": "v79" + }, + { + "filename": "Bluey1_v79", + "build-id": "ASSET_LEVEL_BLUEY1", + "type": "LevelHeader", + "sha1": "57aa6005862d4bd7ddf1f865b787fde21c1f27b1", + "version": "v79" + }, + { + "filename": "DragonForestHub_v79", + "build-id": "ASSET_LEVEL_DRAGONFORESTHUB", + "type": "LevelHeader", + "sha1": "e142ab0703dad7249401ff7ec57f4214921c5a63", + "version": "v79" + }, + { + "filename": "FossilCanyon_v79", + "build-id": "ASSET_LEVEL_FOSSILCANYON", + "type": "LevelHeader", + "sha1": "6c9d38ff6c77ad0ddcbb981f22a860fc2f5bffe1", + "version": "v79" + }, + { + "filename": "PirateLagoon_v79", + "build-id": "ASSET_LEVEL_PIRATELAGOON", + "type": "LevelHeader", + "sha1": "699c008dcf1a793389f8317b803093cc21cc0042", + "version": "v79" + }, + { + "filename": "AncientLake_v79", + "build-id": "ASSET_LEVEL_ANCIENTLAKE", + "type": "LevelHeader", + "sha1": "459e5e94766b9055f2b4c37a382fd21f0705b130", + "version": "v79" + }, + { + "filename": "WalrusCove_v79", + "build-id": "ASSET_LEVEL_WALRUSCOVE", + "type": "LevelHeader", + "sha1": "853aefd96cbdf27d555fdd26faaf01fdbd258e7e", + "version": "v79" + }, + { + "filename": "HotTopVolcano_v79", + "build-id": "ASSET_LEVEL_HOTTOPVOLCANO", + "type": "LevelHeader", + "sha1": "5907579e82bf3d3e0f1e395395fd4c9befb1e419", + "version": "v79" + }, + { + "filename": "WhaleBay_v79", + "build-id": "ASSET_LEVEL_WHALEBAY", + "type": "LevelHeader", + "sha1": "ae61f763d86061bcafdcb32583a7caa8828029ed", + "version": "v79" + }, + { + "filename": "SnowballValley_v79", + "build-id": "ASSET_LEVEL_SNOWBALLVALLEY", + "type": "LevelHeader", + "sha1": "5a68a73b4e3c0e181312b1ba88265b0c55cafb07", + "version": "v79" + }, + { + "filename": "CrescentIsland_v79", + "build-id": "ASSET_LEVEL_CRESCENTISLAND", + "type": "LevelHeader", + "sha1": "bb411a9204da4d4845c2d0f597600522748b2725", + "version": "v79" + }, + { + "filename": "FireMountain_v79", + "build-id": "ASSET_LEVEL_FIREMOUNTAIN", + "type": "LevelHeader", + "sha1": "9c81ad18c4238cf9e75ebc53b0af76a34e17c74e", + "version": "v79" + }, + { + "filename": "DinoDomainHub_v79", + "build-id": "ASSET_LEVEL_DINODOMAINHUB", + "type": "LevelHeader", + "sha1": "8f5882fa996477afd067052eda82857813aee3d5", + "version": "v79" + }, + { + "filename": "EverfrostPeak_v79", + "build-id": "ASSET_LEVEL_EVERFROSTPEAK", + "type": "LevelHeader", + "sha1": "c99cfa89c6ae18264d86331e54cdaa1c19cb3ef7", + "version": "v79" + }, + { + "filename": "SherbetIslandHub_v79", + "build-id": "ASSET_LEVEL_SHERBETISLANDHUB", + "type": "LevelHeader", + "sha1": "1bc958b3f6508c110fd704fd7c0ba1456739fbc4", + "version": "v79" + }, + { + "filename": "SpaceportAlpha_v79", + "build-id": "ASSET_LEVEL_SPACEPORTALPHA", + "type": "LevelHeader", + "sha1": "d82f286994258dc2fcbdd5a2e2d6bafc9f3c5e3b", + "version": "v79" + }, + { + "filename": "HorseshoeGulch_v79", + "build-id": "ASSET_LEVEL_HORSESHOEGULCH", + "type": "LevelHeader", + "sha1": "26146b879f8819f8faacb483acec9493f5572996", + "version": "v79" + }, + { + "filename": "SpacedustAlley_v79", + "build-id": "ASSET_LEVEL_SPACEDUSTALLEY", + "type": "LevelHeader", + "sha1": "f0b0b4ef160769fb49d173f1db19b062d6164da0", + "version": "v79" + }, + { + "filename": "GreenwoodVillage_v79", + "build-id": "ASSET_LEVEL_GREENWOODVILLAGE", + "type": "LevelHeader", + "sha1": "483dedf9a289fe5ffe6b0dc7a2e9ef8a4fb45c29", + "version": "v79" + }, + { + "filename": "BoulderCanyon_v79", + "build-id": "ASSET_LEVEL_BOULDERCANYON", + "type": "LevelHeader", + "sha1": "6b919512c3f807de9794b0616cba02c10f0ed624", + "version": "v79" + }, + { + "filename": "WindmillPlains_v79", + "build-id": "ASSET_LEVEL_WINDMILLPLAINS", + "type": "LevelHeader", + "sha1": "634944dd96c16759bdc393ddc89ac25d8f532768", + "version": "v79" + }, + { + "filename": "FrontEnd_v79", + "build-id": "ASSET_LEVEL_FRONTEND", + "type": "LevelHeader", + "sha1": "63862b0e8f4f2089879a88952bd5b7d0135037c8", + "version": "v79" + }, + { + "filename": "CharacterSelect_v79", + "build-id": "ASSET_LEVEL_CHARACTERSELECT", + "type": "LevelHeader", + "sha1": "4f6b716d015874d62353f019f9cd6966a1cbd1af", + "version": "v79" + }, + { + "filename": "TitleScreenSequence_v79", + "build-id": "ASSET_LEVEL_TITLESCREENSEQUENCE", + "type": "LevelHeader", + "sha1": "84bb2947e8264ccb76eb3e032530333e885d8aa8", + "version": "v79" + }, + { + "filename": "SnowflakeMountainHub_v79", + "build-id": "ASSET_LEVEL_SNOWFLAKEMOUNTAINHUB", + "type": "LevelHeader", + "sha1": "b6ff07570e8c36cf5c5653ef70fc40a76406d98c", + "version": "v79" + }, + { + "filename": "SmokeyCastle_v79", + "build-id": "ASSET_LEVEL_SMOKEYCASTLE", + "type": "LevelHeader", + "sha1": "c55a07238bc1f663e73cec0645dba54c23df6240", + "version": "v79" + }, + { + "filename": "DarkwaterBeach_v79", + "build-id": "ASSET_LEVEL_DARKWATERBEACH", + "type": "LevelHeader", + "sha1": "b4b280afae5aa7c59692026322e2f21d97b4bd3a", + "version": "v79" + }, + { + "filename": "IciclePyramid_v79", + "build-id": "ASSET_LEVEL_ICICLEPYRAMID", + "type": "LevelHeader", + "sha1": "d56e155f9ba3b2248621a8ab209c495120ecdb7e", + "version": "v79" + }, + { + "filename": "FrostyVillage_v79", + "build-id": "ASSET_LEVEL_FROSTYVILLAGE", + "type": "LevelHeader", + "sha1": "73d35c6ba23b07f21c3896af12ce7f5d4c5116c3", + "version": "v79" + }, + { + "filename": "JungleFalls_v79", + "build-id": "ASSET_LEVEL_JUNGLEFALLS", + "type": "LevelHeader", + "sha1": "a6594f2211f12c54e7007cb2f97a1e294d6baefb", + "version": "v79" + }, + { + "filename": "TreasureCaves_v79", + "build-id": "ASSET_LEVEL_TREASURECAVES", + "type": "LevelHeader", + "sha1": "ddd605cb35031d8a2d64538e6f7dd400660dc8de", + "version": "v79" + }, + { + "filename": "HauntedWoods_v79", + "build-id": "ASSET_LEVEL_HAUNTEDWOODS", + "type": "LevelHeader", + "sha1": "14d52b8c7b79feae269174ec1e6c17f76a61344f", + "version": "v79" + }, + { + "filename": "DarkmoonCaverns_v79", + "build-id": "ASSET_LEVEL_DARKMOONCAVERNS", + "type": "LevelHeader", + "sha1": "9867570918942d9d7f545a417b8cb58c4f367d40", + "version": "v79" + }, + { + "filename": "StarCity_v79", + "build-id": "ASSET_LEVEL_STARCITY", + "type": "LevelHeader", + "sha1": "2c6aef6ecc3ebea86ee3045ae2f1e54d7e84b74e", + "version": "v79" + }, + { + "filename": "TrophyRace_v79", + "build-id": "ASSET_LEVEL_TROPHYRACE", + "type": "LevelHeader", + "sha1": "2c041d8812fac208a5e985e99274cf593342c5fa", + "version": "v79" + }, + { + "filename": "FutureFunLandHub_v79", + "build-id": "ASSET_LEVEL_FUTUREFUNLANDHUB", + "type": "LevelHeader", + "sha1": "7358d934091e517dafabf016e4310864977e4da5", + "version": "v79" + }, + { + "filename": "OpeningSequence_v79", + "build-id": "ASSET_LEVEL_OPENINGSEQUENCE", + "type": "LevelHeader", + "sha1": "cf622574e5e8e89763afcfae361cb80e9f5155b2", + "version": "v79" + }, + { + "filename": "Wizpig1_v79", + "build-id": "ASSET_LEVEL_WIZPIG1", + "type": "LevelHeader", + "sha1": "cae79b3f06b7ab5b89265d1e515a5c50cd3f801d", + "version": "v79" + }, + { + "filename": "Trickytops1_v79", + "build-id": "ASSET_LEVEL_TRICKYTOPS1", + "type": "LevelHeader", + "sha1": "7c92a539a6f67e983fcfffb1c686b4350d34a5d0", + "version": "v79" + }, + { + "filename": "OptionsBackground_v79", + "build-id": "ASSET_LEVEL_OPTIONSBACKGROUND", + "type": "LevelHeader", + "sha1": "0b91574eb93ae6fb3394a6da829a0e5e836e688d", + "version": "v79" + }, + { + "filename": "Bubbler1_v79", + "build-id": "ASSET_LEVEL_BUBBLER1", + "type": "LevelHeader", + "sha1": "4a070a8346778ba9ae0e74c033e5851b06e7a931", + "version": "v79" + }, + { + "filename": "Smokey1_v79", + "build-id": "ASSET_LEVEL_SMOKEY1", + "type": "LevelHeader", + "sha1": "9c5470b93c055286cd91a26a7c0d6498c900a512", + "version": "v79" + }, + { + "filename": "WizpigMouthSequence_v79", + "build-id": "ASSET_LEVEL_WIZPIGMOUTHSEQUENCE", + "type": "LevelHeader", + "sha1": "6a3065a69a9b85c78c80d70b951e6a7f31af1ee9", + "version": "v79" + }, + { + "filename": "WizpigAmuletSequence_v79", + "build-id": "ASSET_LEVEL_WIZPIGAMULETSEQUENCE", + "type": "LevelHeader", + "sha1": "ff3f6a0a1f39db0b80a4c48aff6d6b2ac6551c5c", + "version": "v79" + }, + { + "filename": "TTAmuletSequence_v79", + "build-id": "ASSET_LEVEL_TTAMULETSEQUENCE", + "type": "LevelHeader", + "sha1": "525ca967ea70a6fd098d7fbd2f323ba79bf5841f", + "version": "v79" + }, + { + "filename": "RocketSequence_v79", + "build-id": "ASSET_LEVEL_ROCKETSEQUENCE", + "type": "LevelHeader", + "sha1": "b58c78d1673d54bf8c9a8a083af3d4f51fbf6357", + "version": "v79" + }, + { + "filename": "Trickytops2_v79", + "build-id": "ASSET_LEVEL_TRICKYTOPS2", + "type": "LevelHeader", + "sha1": "e71fd2791531bc8ad0659a0707239d23d10af320", + "version": "v79" + }, + { + "filename": "DinoDomainTrophyAnim_v79", + "build-id": "ASSET_LEVEL_DINODOMAINTROPHYANIM", + "type": "LevelHeader", + "sha1": "fac3071fdcea4457fe419b4cb36346cbaffd76f7", + "version": "v79" + }, + { + "filename": "SnowflakeMountainTrophyAnim_v79", + "build-id": "ASSET_LEVEL_SNOWFLAKEMOUNTAINTROPHYANIM", + "type": "LevelHeader", + "sha1": "ee66a231ed0ba746c4346a3f810356b06826c877", + "version": "v79" + }, + { + "filename": "SherbetIslandTrophyAnim_v79", + "build-id": "ASSET_LEVEL_SHERBETISLANDTROPHYANIM", + "type": "LevelHeader", + "sha1": "3d51a930d2631b17976b87f0141ed6c56e42d044", + "version": "v79" + }, + { + "filename": "DragonForestTrophyAnim_v79", + "build-id": "ASSET_LEVEL_DRAGONFORESTTROPHYANIM", + "type": "LevelHeader", + "sha1": "35c7d3ad1f47a35d8d0017dc47241fda6c84b284", + "version": "v79" + }, + { + "filename": "FutureFunLandTrophyAnim_v79", + "build-id": "ASSET_LEVEL_FUTUREFUNLANDTROPHYANIM", + "type": "LevelHeader", + "sha1": "e86529dda343274a683211535cc3ebb767864942", + "version": "v79" + }, + { + "filename": "Bluey2_v79", + "build-id": "ASSET_LEVEL_BLUEY2", + "type": "LevelHeader", + "sha1": "1354995fb63d07b3bde7204e97436b5aef023325", + "version": "v79" + }, + { + "filename": "Bubbler2_v79", + "build-id": "ASSET_LEVEL_BUBBLER2", + "type": "LevelHeader", + "sha1": "0c00c4f516f66dd0fbe9da7e4a6fe3035ef129e4", + "version": "v79" + }, + { + "filename": "Smokey2_v79", + "build-id": "ASSET_LEVEL_SMOKEY2", + "type": "LevelHeader", + "sha1": "5b36c89bbfcc01b61b093db2848c42b649ea3f84", + "version": "v79" + }, + { + "filename": "Wizpig2_v79", + "build-id": "ASSET_LEVEL_WIZPIG2", + "type": "LevelHeader", + "sha1": "eec55885faa6db754a85bc266a5decb738b15d2c", + "version": "v79" + }, + { + "filename": "PartySequence_v79", + "build-id": "ASSET_LEVEL_PARTYSEQUENCE", + "type": "LevelHeader", + "sha1": "91ede38aa7006f043deb2a36b91adb8587dcf85b", + "version": "v79" + }, + { + "filename": "TricktopsAnim_v79", + "build-id": "ASSET_LEVEL_TRICKTOPSANIM", + "type": "LevelHeader", + "sha1": "cf3b2936190632ae43c122b51a94b3d70c86f647", + "version": "v79" + }, + { + "filename": "SmokeyAnim_v79", + "build-id": "ASSET_LEVEL_SMOKEYANIM", + "type": "LevelHeader", + "sha1": "9becf40b0c13292bf40194973478117195414ffa", + "version": "v79" + }, + { + "filename": "BlueyAnim_v79", + "build-id": "ASSET_LEVEL_BLUEYANIM", + "type": "LevelHeader", + "sha1": "a1f9345fa5d2a79633f0c0936aa67be12de257bd", + "version": "v79" + }, + { + "filename": "Wizpig1Anim_v79", + "build-id": "ASSET_LEVEL_WIZPIG1ANIM", + "type": "LevelHeader", + "sha1": "1b68677f26e712e621fec72b88905a78a464961f", + "version": "v79" + }, + { + "filename": "BubblerAnim_v79", + "build-id": "ASSET_LEVEL_BUBBLERANIM", + "type": "LevelHeader", + "sha1": "65531fdd141616c996cbf7a5055d20d06ffe92ca", + "version": "v79" + }, + { + "filename": "Wizpig2Anim_v79", + "build-id": "ASSET_LEVEL_WIZPIG2ANIM", + "type": "LevelHeader", + "sha1": "a242d05d4e14c95894e382f32aba3e5fb458d3f0", + "version": "v79" + }, + { + "filename": "LastBit_v79", + "build-id": "ASSET_LEVEL_LASTBIT", + "type": "LevelHeader", + "sha1": "a915e8c224bca224888a10a5f8a0a6d31b593309", + "version": "v79" + }, + { + "filename": "LastBitB_v79", + "build-id": "ASSET_LEVEL_LASTBITB", + "type": "LevelHeader", + "sha1": "65fe0bee76596823b38af34ece85287d6c436c5e", + "version": "v79" + }, + { + "filename": "CentralAreaHubName_v79", + "build-id": "ASSET_LEVELNAME_CENTRALAREAHUB", + "type": "LevelName", + "sha1": "c03c18b95400a8a479e12555b0143fcc9ff4c05a", + "version": "v79" + }, + { + "filename": "Bluey1Name_v79", + "build-id": "ASSET_LEVELNAME_BLUEY1", + "type": "LevelName", + "sha1": "037177d26d7643c4f4f7f37ed96bb381927d2c50", + "version": "v79" + }, + { + "filename": "DragonForestHubName_v79", + "build-id": "ASSET_LEVELNAME_DRAGONFORESTHUB", + "type": "LevelName", + "sha1": "b5f94a54164d5a81f88322fa2c56063c6eea50ab", + "version": "v79" + }, + { + "filename": "FossilCanyonName_v79", + "build-id": "ASSET_LEVELNAME_FOSSILCANYON", + "type": "LevelName", + "sha1": "583a04f7c855060cf51c5dc112d3669bdf17cbe0", + "version": "v79" + }, + { + "filename": "PirateLagoonName_v79", + "build-id": "ASSET_LEVELNAME_PIRATELAGOON", + "type": "LevelName", + "sha1": "2f56a6b4e37b06b8bd0c94cd77029d87f8e48308", + "version": "v79" + }, + { + "filename": "AncientLakeName_v79", + "build-id": "ASSET_LEVELNAME_ANCIENTLAKE", + "type": "LevelName", + "sha1": "2efdcee061075cb9ba111f9843988f3d21056ddd", + "version": "v79" + }, + { + "filename": "WalrusCoveName_v79", + "build-id": "ASSET_LEVELNAME_WALRUSCOVE", + "type": "LevelName", + "sha1": "952bcb2fff125b37dbf24720605de863922ab6e4", + "version": "v79" + }, + { + "filename": "HotTopVolcanoName_v79", + "build-id": "ASSET_LEVELNAME_HOTTOPVOLCANO", + "type": "LevelName", + "sha1": "3fe629df8527dd564ea19f53ef1ddf5d6cfd75cf", + "version": "v79" + }, + { + "filename": "WhaleBayName_v79", + "build-id": "ASSET_LEVELNAME_WHALEBAY", + "type": "LevelName", + "sha1": "d74085df6c13deccb8ddab4863210f9a74b886d9", + "version": "v79" + }, + { + "filename": "SnowballValleyName_v79", + "build-id": "ASSET_LEVELNAME_SNOWBALLVALLEY", + "type": "LevelName", + "sha1": "dde015c59653a0557af43c21d09a27f2b2ca5d24", + "version": "v79" + }, + { + "filename": "CrescentIslandName_v79", + "build-id": "ASSET_LEVELNAME_CRESCENTISLAND", + "type": "LevelName", + "sha1": "7aee43f028f89305d21c3e16505f1b0bc29b90f2", + "version": "v79" + }, + { + "filename": "FireMountainName_v79", + "build-id": "ASSET_LEVELNAME_FIREMOUNTAIN", + "type": "LevelName", + "sha1": "ec284428c869d26fbb876bdbddec65829687297f", + "version": "v79" + }, + { + "filename": "DinoDomainHubName_v79", + "build-id": "ASSET_LEVELNAME_DINODOMAINHUB", + "type": "LevelName", + "sha1": "dc1b61ada385599c68b3e6f95a60b8f614a2522a", + "version": "v79" + }, + { + "filename": "EverfrostPeakName_v79", + "build-id": "ASSET_LEVELNAME_EVERFROSTPEAK", + "type": "LevelName", + "sha1": "7b9f948d77269ed8eaf54ae60f24f6d0493f5053", + "version": "v79" + }, + { + "filename": "SherbetIslandHubName_v79", + "build-id": "ASSET_LEVELNAME_SHERBETISLANDHUB", + "type": "LevelName", + "sha1": "a4b41f4497dc3a282aed5f5ba554526048331f82", + "version": "v79" + }, + { + "filename": "SpaceportAlphaName_v79", + "build-id": "ASSET_LEVELNAME_SPACEPORTALPHA", + "type": "LevelName", + "sha1": "cf78901ef3ff570014c07b6084381a858e72e12d", + "version": "v79" + }, + { + "filename": "HorseshoeGulchName_v79", + "build-id": "ASSET_LEVELNAME_HORSESHOEGULCH", + "type": "LevelName", + "sha1": "872b1fdacb07e8ee2c9e08f7f6c3c5132589c3ad", + "version": "v79" + }, + { + "filename": "SpacedustAlleyName_v79", + "build-id": "ASSET_LEVELNAME_SPACEDUSTALLEY", + "type": "LevelName", + "sha1": "3ef7574b8bad97fb8dcb7acac5697ad098f768b2", + "version": "v79" + }, + { + "filename": "GreenwoodVillageName_v79", + "build-id": "ASSET_LEVELNAME_GREENWOODVILLAGE", + "type": "LevelName", + "sha1": "112cbdb72069e058bdbdb22e087b166c9c60cd3b", + "version": "v79" + }, + { + "filename": "BoulderCanyonName_v79", + "build-id": "ASSET_LEVELNAME_BOULDERCANYON", + "type": "LevelName", + "sha1": "487be4a068cca62ce64c9fc8a6408682d5a3cf09", + "version": "v79" + }, + { + "filename": "WindmillPlainsName_v79", + "build-id": "ASSET_LEVELNAME_WINDMILLPLAINS", + "type": "LevelName", + "sha1": "5a4ecdc0e1e0e93e91ecd099128b7d7bf599e3bb", + "version": "v79" + }, + { + "filename": "FrontEndName_v79", + "build-id": "ASSET_LEVELNAME_FRONTEND", + "type": "LevelName", + "sha1": "076cf50c1702db6c47f1672ee94f451c268b0543", + "version": "v79" + }, + { + "filename": "CharacterSelectName_v79", + "build-id": "ASSET_LEVELNAME_CHARACTERSELECT", + "type": "LevelName", + "sha1": "4e195203f9f3cce235538f751d06b3e3f5c6565c", + "version": "v79" + }, + { + "filename": "TitleScreenSequenceName_v79", + "build-id": "ASSET_LEVELNAME_TITLESCREENSEQUENCE", + "type": "LevelName", + "sha1": "4d88a271baf180d84ff19a7f2b1f0ed1785ee293", + "version": "v79" + }, + { + "filename": "SnowflakeMountainHubName_v79", + "build-id": "ASSET_LEVELNAME_SNOWFLAKEMOUNTAINHUB", + "type": "LevelName", + "sha1": "ee2079303621df8cdaddafff631f169b92134095", + "version": "v79" + }, + { + "filename": "SmokeyCastleName_v79", + "build-id": "ASSET_LEVELNAME_SMOKEYCASTLE", + "type": "LevelName", + "sha1": "27773e3a0838f126dc66f18a15f8090cb8f7a884", + "version": "v79" + }, + { + "filename": "DarkwaterBeachName_v79", + "build-id": "ASSET_LEVELNAME_DARKWATERBEACH", + "type": "LevelName", + "sha1": "7b0ddee411708f1dc5414f946849e4b571eec255", + "version": "v79" + }, + { + "filename": "IciclePyramidName_v79", + "build-id": "ASSET_LEVELNAME_ICICLEPYRAMID", + "type": "LevelName", + "sha1": "2cfef4798d7bc6feb50cca6a6ec05cdd0b8be128", + "version": "v79" + }, + { + "filename": "FrostyVillageName_v79", + "build-id": "ASSET_LEVELNAME_FROSTYVILLAGE", + "type": "LevelName", + "sha1": "a6e05c67baee5b148d752cfe45f5317d34b0b855", + "version": "v79" + }, + { + "filename": "JungleFallsName_v79", + "build-id": "ASSET_LEVELNAME_JUNGLEFALLS", + "type": "LevelName", + "sha1": "05258dfc48d6bfc4cee56494cb99bb55d9c52bc6", + "version": "v79" + }, + { + "filename": "TreasureCavesName_v79", + "build-id": "ASSET_LEVELNAME_TREASURECAVES", + "type": "LevelName", + "sha1": "3921290adac3e888355c988d591ca98fafffc76b", + "version": "v79" + }, + { + "filename": "HauntedWoodsName_v79", + "build-id": "ASSET_LEVELNAME_HAUNTEDWOODS", + "type": "LevelName", + "sha1": "50024ebcd733d318ed6d1ab1fbfcf856d678faed", + "version": "v79" + }, + { + "filename": "DarkmoonCavernsName_v79", + "build-id": "ASSET_LEVELNAME_DARKMOONCAVERNS", + "type": "LevelName", + "sha1": "6ceb727cb974307d56ea2c19286d7f75444d99b0", + "version": "v79" + }, + { + "filename": "StarCityName_v79", + "build-id": "ASSET_LEVELNAME_STARCITY", + "type": "LevelName", + "sha1": "18fb487ce8a1ba8211ddf8ede1f49685e1e574cc", + "version": "v79" + }, + { + "filename": "TrophyRaceName_v79", + "build-id": "ASSET_LEVELNAME_TROPHYRACE", + "type": "LevelName", + "sha1": "c12b498a823ad0ad10c2374d2e58f282de50d09a", + "version": "v79" + }, + { + "filename": "FutureFunLandHubName_v79", + "build-id": "ASSET_LEVELNAME_FUTUREFUNLANDHUB", + "type": "LevelName", + "sha1": "87ad30c91877fc9ecdd63eb2d30b1b46a329e14f", + "version": "v79" + }, + { + "filename": "OpeningSequenceName_v79", + "build-id": "ASSET_LEVELNAME_OPENINGSEQUENCE", + "type": "LevelName", + "sha1": "44288922ea595e97e97bc63563a5a73b3011b40d", + "version": "v79" + }, + { + "filename": "Wizpig1Name_v79", + "build-id": "ASSET_LEVELNAME_WIZPIG1", + "type": "LevelName", + "sha1": "51116c287ac369a13f0961002b43f0ed145e6cd7", + "version": "v79" + }, + { + "filename": "Trickytops1Name_v79", + "build-id": "ASSET_LEVELNAME_TRICKYTOPS1", + "type": "LevelName", + "sha1": "dda475f22b4242e46557feeb417001c2077ef766", + "version": "v79" + }, + { + "filename": "OptionsBackgroundName_v79", + "build-id": "ASSET_LEVELNAME_OPTIONSBACKGROUND", + "type": "LevelName", + "sha1": "7c400ad9486f697257ef21eb515c8ddf6bff7b3a", + "version": "v79" + }, + { + "filename": "Bubbler1Name_v79", + "build-id": "ASSET_LEVELNAME_BUBBLER1", + "type": "LevelName", + "sha1": "ef96a185c09addc919300694ea7cf0a2d9039332", + "version": "v79" + }, + { + "filename": "Smokey1Name_v79", + "build-id": "ASSET_LEVELNAME_SMOKEY1", + "type": "LevelName", + "sha1": "c509b2e0366c8f94da775b90bb92d41c69dce618", + "version": "v79" + }, + { + "filename": "WizpigMouthSequenceName_v79", + "build-id": "ASSET_LEVELNAME_WIZPIGMOUTHSEQUENCE", + "type": "LevelName", + "sha1": "d4035be066643b6f2bfdc56468ef4f23dffbe3db", + "version": "v79" + }, + { + "filename": "WizpigAmuletSequenceName_v79", + "build-id": "ASSET_LEVELNAME_WIZPIGAMULETSEQUENCE", + "type": "LevelName", + "sha1": "2bf23b33c9a22babbae680384cae4592b7ad7710", + "version": "v79" + }, + { + "filename": "TTAmuletSequenceName_v79", + "build-id": "ASSET_LEVELNAME_TTAMULETSEQUENCE", + "type": "LevelName", + "sha1": "6b42f03ac7c93a9717443c8a15193ea9a1428873", + "version": "v79" + }, + { + "filename": "RocketSequenceName_v79", + "build-id": "ASSET_LEVELNAME_ROCKETSEQUENCE", + "type": "LevelName", + "sha1": "2713c239ae45981115dc3613fda67a7105b77611", + "version": "v79" + }, + { + "filename": "Trickytops2Name_v79", + "build-id": "ASSET_LEVELNAME_TRICKYTOPS2", + "type": "LevelName", + "sha1": "740b447c96c1ae6369e371b1599435e23ba1a53f", + "version": "v79" + }, + { + "filename": "DinoDomainTrophyAnimName_v79", + "build-id": "ASSET_LEVELNAME_DINODOMAINTROPHYANIM", + "type": "LevelName", + "sha1": "d0a31a840391c839a690599eae2992185744d4fb", + "version": "v79" + }, + { + "filename": "SnowflakeMountainTrophyAnimName_v79", + "build-id": "ASSET_LEVELNAME_SNOWFLAKEMOUNTAINTROPHYANIM", + "type": "LevelName", + "sha1": "2e03f230ca4cc85315e7338f9d42e9dbd7106433", + "version": "v79" + }, + { + "filename": "SherbetIslandTrophyAnimName_v79", + "build-id": "ASSET_LEVELNAME_SHERBETISLANDTROPHYANIM", + "type": "LevelName", + "sha1": "460094d19342ac6236f8b1d5da854f3cf078df0d", + "version": "v79" + }, + { + "filename": "DragonForestTrophyAnimName_v79", + "build-id": "ASSET_LEVELNAME_DRAGONFORESTTROPHYANIM", + "type": "LevelName", + "sha1": "0ac6257dc408839a632847102a28f0805cce6d3f", + "version": "v79" + }, + { + "filename": "FutureFunLandTrophyAnimName_v79", + "build-id": "ASSET_LEVELNAME_FUTUREFUNLANDTROPHYANIM", + "type": "LevelName", + "sha1": "b98fd5e9c00c8a80ece64f7159882578c8e823da", + "version": "v79" + }, + { + "filename": "Bluey2Name_v79", + "build-id": "ASSET_LEVELNAME_BLUEY2", + "type": "LevelName", + "sha1": "d6291eb8d23afa42bb4a3a527ac0643eba400448", + "version": "v79" + }, + { + "filename": "Bubbler2Name_v79", + "build-id": "ASSET_LEVELNAME_BUBBLER2", + "type": "LevelName", + "sha1": "ba4efb7103c5cf87fdb41b1b94a1a24b737e2a44", + "version": "v79" + }, + { + "filename": "Smokey2Name_v79", + "build-id": "ASSET_LEVELNAME_SMOKEY2", + "type": "LevelName", + "sha1": "296e85a47323d2c7c2d10ced85187ff9254036b8", + "version": "v79" + }, + { + "filename": "Wizpig2Name_v79", + "build-id": "ASSET_LEVELNAME_WIZPIG2", + "type": "LevelName", + "sha1": "d3492af0123adcc07285b1f9e0a8151c88ea00ba", + "version": "v79" + }, + { + "filename": "PartySequenceName_v79", + "build-id": "ASSET_LEVELNAME_PARTYSEQUENCE", + "type": "LevelName", + "sha1": "143eb9b97bc2cf99207987521306a8e5fb3f1d71", + "version": "v79" + }, + { + "filename": "TricktopsAnimName_v79", + "build-id": "ASSET_LEVELNAME_TRICKTOPSANIM", + "type": "LevelName", + "sha1": "76987b40f0f648b89682261d508c67cb28f97b14", + "version": "v79" + }, + { + "filename": "SmokeyAnimName_v79", + "build-id": "ASSET_LEVELNAME_SMOKEYANIM", + "type": "LevelName", + "sha1": "6f503121189929e896f6246d2256273c159b60c5", + "version": "v79" + }, + { + "filename": "BlueyAnimName_v79", + "build-id": "ASSET_LEVELNAME_BLUEYANIM", + "type": "LevelName", + "sha1": "5d807f218ed9794431a86bc3bad7528410d70643", + "version": "v79" + }, + { + "filename": "Wizpig1AnimName_v79", + "build-id": "ASSET_LEVELNAME_WIZPIG1ANIM", + "type": "LevelName", + "sha1": "64f6ab92faeaf84b4bdd8fab936d8f517964e030", + "version": "v79" + }, + { + "filename": "BubblerAnimName_v79", + "build-id": "ASSET_LEVELNAME_BUBBLERANIM", + "type": "LevelName", + "sha1": "8743bd9be58c8b5610f450350465700d145bf19a", + "version": "v79" + }, + { + "filename": "Wizpig2AnimName_v79", + "build-id": "ASSET_LEVELNAME_WIZPIG2ANIM", + "type": "LevelName", + "sha1": "a70b003068f310b401e51eca34e599f93928d7dd", + "version": "v79" + }, + { + "filename": "LastBitName_v79", + "build-id": "ASSET_LEVELNAME_LASTBIT", + "type": "LevelName", + "sha1": "fbff962412e8a9040d8f933ac30c5b8dac4792c6", + "version": "v79" + }, + { + "filename": "LastBitBName_v79", + "build-id": "ASSET_LEVELNAME_LASTBITB", + "type": "LevelName", + "sha1": "ab58e50324fc78e47dc9d52adafcd904efa25d19", + "version": "v79" + }, + { + "filename": "pirate_lagoon_v79", + "build-id": "ASSET_LEVELMODEL_PIRATELAGOON", + "folder": "sherbet_island", + "type": "LevelModel", + "sha1": "214863549c50c96d5aceb59657cb90b6cc2187f3", + "version": "v79" + }, + { + "filename": "crescent_island_v79", + "build-id": "ASSET_LEVELMODEL_CRESCENTISLAND", + "folder": "sherbet_island", + "type": "LevelModel", + "sha1": "ccc9b60eac883c5b213f77a840174b3381d742f7", + "version": "v79" + }, + { + "filename": "fire_mountain_v79", + "build-id": "ASSET_LEVELMODEL_FIREMOUNTAIN", + "folder": "dino_domain", + "type": "LevelModel", + "sha1": "89754df3c98c6f7d692524c2c0a2517eb113fd29", + "version": "v79" + }, + { + "filename": "spaceport_alpha_v79", + "build-id": "ASSET_LEVELMODEL_SPACEPORTALPHA", + "folder": "future_fun_land", + "type": "LevelModel", + "sha1": "b29378890d354467e9ace91f6f88a8fb0e075d51", + "version": "v79" + }, + { + "filename": "star_city_v79", + "build-id": "ASSET_LEVELMODEL_STARCITY", + "folder": "future_fun_land", + "type": "LevelModel", + "sha1": "c42f572a49bd6d7cb79d640f0abe10a4374a1ef3", + "version": "v79" + }, + { + "build-id": "ASSET_AUDIO_7", + "filename": "asset_audio_7_v79", + "folder": "unknown", + "sha1": "b34110a6c19d32b6bd4ba6dcbd10aacda2b49113", + "type": "Audio", + "version": "v79" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_0", + "filename": "asset_particle_behaviors_0_v79", + "folder": "unknown", + "sha1": "f8497a470b13d4d62c626afa8d0cf6f954d5db35", + "type": "ParticleBehavior", + "version": "v79" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_1", + "filename": "asset_particle_behaviors_1_v79", + "folder": "unknown", + "sha1": "b235a069a22c0dd24462ea264e0a97925c1d078a", + "type": "ParticleBehavior", + "version": "v79" + }, + { + "build-id": "ASSET_FONTS", + "filename": "fonts_v79", + "sha1": "4bc24a772953547c046d67e011804338880da241", + "type": "Fonts", + "version": "v79" + }, + { + "build-id": "ASSET_JAPANESE_FONTS_TABLE", + "filename": "asset_japanese_fonts_table_v79", + "sha1": "fd5cd900959bfff5f859ffbc2a5d3a1bd78e27f2", + "type": "JPFontsTable", + "version": "v79" + }, + { + "build-id": "ASSET_JAPANESE_FONTS", + "filename": "jp_fonts_v79", + "sha1": "3fb32ccabc14277b1c0ccedccd1bad024e905cae", + "type": "JPFonts", + "version": "v79" + } + ], + "file-type-attributes": { + "MenuText": { + "language-order": [ + "LANGUAGE_ENGLISH", + "LANGUAGE_FRENCH", + "LANGUAGE_GERMAN", + "LANGUAGE_JAPANESE" + ], + "menu-text-build-ids": [ + "ASSET_MENU_TEXT_STEREO", + "ASSET_MENU_TEXT_MONO", + "ASSET_MENU_TEXT_HEADPHONES", + "ASSET_MENU_TEXT_SFXVOLUME", + "ASSET_MENU_TEXT_MUSICVOLUME", + "ASSET_MENU_TEXT_RETURN", + "ASSET_MENU_TEXT_AUDIOOPTIONS", + "ASSET_MENU_TEXT_MUSICTEST", + "ASSET_MENU_TEXT_ENTERINITIALS", + "ASSET_MENU_TEXT_BESTTIME", + "ASSET_MENU_TEXT_BESTLAP", + "ASSET_MENU_TEXT_SILVERCOIN", + "ASSET_MENU_TEXT_GOLDCOIN", + "ASSET_MENU_TEXT_CHALLENGE", + "ASSET_MENU_TEXT_ENTERCODE", + "ASSET_MENU_TEXT_CLEARALLCODES", + "ASSET_MENU_TEXT_CODELIST", + "ASSET_MENU_TEXT_MAGICCODES", + "ASSET_MENU_TEXT_BADCODE", + "ASSET_MENU_TEXT_ALLCODESDELETED", + "ASSET_MENU_TEXT_MAGICCODESLIST", + "ASSET_MENU_TEXT_ON", + "ASSET_MENU_TEXT_OFF", + "ASSET_MENU_TEXT_TRYAGAIN", + "ASSET_MENU_TEXT_SELECTTRACK", + "ASSET_MENU_TEXT_RETURNTOLOBBY", + "ASSET_MENU_TEXT_SELECTCHARACTER", + "ASSET_MENU_TEXT_SAVEGHOST", + "ASSET_MENU_TEXT_QUIT", + "ASSET_MENU_TEXT_LAPTIMES", + "ASSET_MENU_TEXT_OVERALLTIME", + "ASSET_MENU_TEXT_RACEORDER", + "ASSET_MENU_TEXT_RECORDTIMES", + "ASSET_MENU_TEXT_RANKINGS", + "ASSET_MENU_TEXT_LANGUAGE", + "ASSET_MENU_TEXT_CONTPAK", + "ASSET_MENU_TEXT_OPTIONS", + "ASSET_MENU_TEXT_CHANGEVEHICLE", + "ASSET_MENU_TEXT_HELP", + "ASSET_MENU_TEXT_CHALLENGES", + "ASSET_MENU_TEXT_VEHICLESELECT", + "ASSET_MENU_TEXT_CAR", + "ASSET_MENU_TEXT_HOVERCRAFT", + "ASSET_MENU_TEXT_PLANE", + "ASSET_MENU_TEXT_MAINMENU", + "ASSET_MENU_TEXT_CHALLENGESELECT", + "ASSET_MENU_TEXT_CARCHALLENGE", + "ASSET_MENU_TEXT_HOVERCHALLENGE", + "ASSET_MENU_TEXT_PLANECHALLENGE", + "ASSET_MENU_TEXT_LOSETOTAJ_0", + "ASSET_MENU_TEXT_LOSETOTAJ_1", + "ASSET_MENU_TEXT_EXIT", + "ASSET_MENU_TEXT_TTINTRO_0", + "ASSET_MENU_TEXT_TTINTRO_1", + "ASSET_MENU_TEXT_TTINTRO_2", + "ASSET_MENU_TEXT_TTINTRO_3", + "ASSET_MENU_TEXT_TTINTRO_4", + "ASSET_MENU_TEXT_TTINTRO_5", + "ASSET_MENU_TEXT_TTINTRO_6", + "ASSET_MENU_TEXT_TTINTRO_7", + "ASSET_MENU_TEXT_TTINTRO_8", + "ASSET_MENU_TEXT_TTINTRO_9", + "ASSET_MENU_TEXT_TTINTRO_10", + "ASSET_MENU_TEXT_TTINTRO_11", + "ASSET_MENU_TEXT_PAKERROR", + "ASSET_MENU_TEXT_TIMETRIALON", + "ASSET_MENU_TEXT_TIMETRIALOFF", + "ASSET_MENU_TEXT_NOCONTPAK", + "ASSET_MENU_TEXT_CONTPAKFULL", + "ASSET_MENU_TEXT_BADCONTPAK", + "ASSET_MENU_TEXT_TROPHYRACE", + "ASSET_MENU_TEXT_STATUS", + "ASSET_MENU_TEXT_GAMEA", + "ASSET_MENU_TEXT_GAMEB", + "ASSET_MENU_TEXT_GAMEC", + "ASSET_MENU_TEXT_NEW", + "ASSET_MENU_TEXT_GAMESELECT", + "ASSET_MENU_TEXT_GAMETOCOPY", + "ASSET_MENU_TEXT_GAMETOCOPYTO", + "ASSET_MENU_TEXT_GAMETOERASE", + "ASSET_MENU_TEXT_COPY", + "ASSET_MENU_TEXT_ERASE", + "ASSET_MENU_TEXT_GHOSTDATA", + "ASSET_MENU_TEXT_NOGHOSTSSAVED", + "ASSET_MENU_TEXT_ERASEGHOST", + "ASSET_MENU_TEXT_CANCEL", + "ASSET_MENU_TEXT_CONTPAK1", + "ASSET_MENU_TEXT_CONTPAK2", + "ASSET_MENU_TEXT_CONTPAK3", + "ASSET_MENU_TEXT_CONTPAK4", + "ASSET_MENU_TEXT_CONTPAKX", + "ASSET_MENU_TEXT_CONTPAKNOTPRESENT", + "ASSET_MENU_TEXT_CONTPAKTRYAGAIN", + "ASSET_MENU_TEXT_CONTPAKHASCORRUPTDATA_0", + "ASSET_MENU_TEXT_CONTPAKHASCORRUPTDATA_1", + "ASSET_MENU_TEXT_CONTPAKISDAMAGED_0", + "ASSET_MENU_TEXT_CONTPAKISDAMAGED_1", + "ASSET_MENU_TEXT_CONTPAKISFULL", + "ASSET_MENU_TEXT_CONTINUE", + "ASSET_MENU_TEXT_CONTPAKDIFFERENT_0", + "ASSET_MENU_TEXT_CONTPAKDIFFERENT_1", + "ASSET_MENU_TEXT_CONTPAKRETRY", + "ASSET_MENU_TEXT_CANNOTSTOREANYMOREGHOSTS_0", + "ASSET_MENU_TEXT_CANNOTSTOREANYMOREGHOSTS_1", + "ASSET_MENU_TEXT_ADVTWOLOADERROR_0", + "ASSET_MENU_TEXT_ADVTWOLOADERROR_1", + "ASSET_MENU_TEXT_ADVTWOLOADERROR_2", + "ASSET_MENU_TEXT_ADVTWOLOADERROR_3", + "ASSET_MENU_TEXT_ADVTWOLOADERROR_4", + "ASSET_MENU_TEXT_ADVTWOLOADERROR_5", + "ASSET_MENU_TEXT_PAKNOTES", + "ASSET_MENU_TEXT_DELETENOTEX", + "ASSET_MENU_TEXT_DELETE", + "ASSET_MENU_TEXT_CANCELDELETE", + "ASSET_MENU_TEXT_FREEPAGESX", + "ASSET_MENU_TEXT_NOTE", + "ASSET_MENU_TEXT_FILENAME", + "ASSET_MENU_TEXT_PAGES", + "ASSET_MENU_TEXT_MORE", + "ASSET_MENU_TEXT_GAMEPAK", + "ASSET_MENU_TEXT_TIMES", + "ASSET_MENU_TEXT_GHOSTS", + "ASSET_MENU_TEXT_EMPTYSLOT", + "ASSET_MENU_TEXT_VIEWGHOSTS", + "ASSET_MENU_TEXT_PLEASEWAIT", + "ASSET_MENU_TEXT_GAMEERROR", + "ASSET_MENU_TEXT_RESTARTRACE", + "ASSET_MENU_TEXT_RESTARTCHALLENGE", + "ASSET_MENU_TEXT_ABANDONCHALLENGE", + "ASSET_MENU_TEXT_QUITTROPHYRACE", + "ASSET_MENU_TEXT_QUITTROPHYRACETITLE", + "ASSET_MENU_TEXT_QUITGAME", + "ASSET_MENU_TEXT_QUITGAMETITLE", + "ASSET_MENU_TEXT_PAUSEOPTIONS", + "ASSET_MENU_TEXT_OK", + "ASSET_MENU_TEXT_PLAYERSELECT", + "ASSET_MENU_TEXT_NUMBEROFRACERS", + "ASSET_MENU_TEXT_START", + "ASSET_MENU_TEXT_ROUNDONE", + "ASSET_MENU_TEXT_ROUNDTWO", + "ASSET_MENU_TEXT_ROUNDTHREE", + "ASSET_MENU_TEXT_ROUNDFOUR", + "ASSET_MENU_TEXT_ADVENTURE", + "ASSET_MENU_TEXT_ADVENTURETWO", + "ASSET_MENU_TEXT_TRACKS", + "ASSET_MENU_TEXT_TROPHYCEREMONY", + "ASSET_MENU_TEXT_ADVENTURE2", + "ASSET_MENU_TEXT_ADVENTURETWO2", + "ASSET_MENU_TEXT_CLEARALLCODESTITLE", + "ASSET_MENU_TEXT_CLEARALLCODESCONFIRM", + "ASSET_MENU_TEXT_CLEARALLCODESCANCEL", + "ASSET_MENU_TEXT_CONTROLLERNOTCONNECTED", + "ASSET_MENU_TEXT_CAUTION", + "ASSET_MENU_TEXT_RUMBLEPAKDETECTED_0", + "ASSET_MENU_TEXT_RUMBLEPAKDETECTED_1", + "ASSET_MENU_TEXT_RUMBLEPAKDETECTED_2", + "ASSET_MENU_TEXT_INSERTDEVICE_0", + "ASSET_MENU_TEXT_INSERTDEVICE_1", + "ASSET_MENU_TEXT_INSERTDEVICE_2", + "ASSET_MENU_TEXT_INSERTDEVICE_3", + "ASSET_MENU_TEXT_INSERTDEVICE_4", + "ASSET_MENU_TEXT_INSERTDEVICE_5", + "ASSET_MENU_TEXT_INSERTDEVICE_6", + "ASSET_MENU_TEXT_TURNOFFN64_0", + "ASSET_MENU_TEXT_TURNOFFN64_1", + "ASSET_MENU_TEXT_SAVEOPTIONS", + "ASSET_MENU_TEXT_CAUTIONMESSAGE_0", + "ASSET_MENU_TEXT_CAUTIONMESSAGE_1", + "ASSET_MENU_TEXT_CAUTIONMESSAGE_2", + "ASSET_MENU_TEXT_CAUTIONMESSAGE_3", + "ASSET_MENU_TEXT_CAUTIONMESSAGE_4", + "ASSET_MENU_TEXT_CAUTIONMESSAGE_5", + "ASSET_MENU_TEXT_CAUTIONMESSAGE_6", + "ASSET_MENU_TEXT_CAUTIONMESSAGE_7", + "ASSET_MENU_TEXT_CAUTIONMESSAGE_8", + "ASSET_MENU_TEXT_CAUTIONMESSAGE_9", + "ASSET_MENU_TEXT_CAUTIONMESSAGE_10", + "ASSET_MENU_TEXT_CANNOTSAVEGHOSTDATA_0", + "ASSET_MENU_TEXT_CANNOTSAVEGHOSTDATA_1", + "ASSET_MENU_TEXT_CANNOTSAVEGHOSTDATA_2", + "ASSET_MENU_TEXT_ENTERTROPHYRACE", + "ASSET_MENU_TEXT_GAMEPAKBONUSES", + "ASSET_MENU_TEXT_SUBTITLESON", + "ASSET_MENU_TEXT_SUBTITLESOFF", + "ASSET_MENU_TEXT_CORRUPTDATA_0", + "ASSET_MENU_TEXT_CORRUPTDATA_1", + "ASSET_MENU_TEXT_UNKNOWN_186", + "ASSET_MENU_TEXT_UNKNOWN_187", + "ASSET_MENU_TEXT_UNKNOWN_188", + "ASSET_MENU_TEXT_UNKNOWN_189", + "ASSET_MENU_TEXT_UNKNOWN_190", + "ASSET_MENU_TEXT_UNKNOWN_191" + ] + } + }, + "sections": [ + { + "build-id": "ASSET_AI_BEHAVIOUR", + "folder": "ai-racers", + "default-type": "Binary" + }, + { + "build-id": "ASSET_AI_BEHAVIOUR_TABLE", + "for": "ASSET_AI_BEHAVIOUR", + "default-type": "Table" + }, + { + "build-id": "ASSET_TEXTURES_3D", + "folder": "textures/3d", + "flip-textures-by-default": true, + "files-default-folder": "unlabeled", + "default-build-id-prefix": "ASSET_TEX3D_", + "default-type": "Texture" + }, + { + "build-id": "ASSET_TEXTURES_3D_TABLE", + "for": "ASSET_TEXTURES_3D", + "default-type": "Table" + }, + { + "build-id": "ASSET_TEXTURES_2D", + "folder": "textures/2d", + "flip-textures-by-default": false, + "files-default-folder": "unlabeled", + "default-build-id-prefix": "ASSET_TEX2D_", + "default-type": "Texture" + }, + { + "build-id": "ASSET_TEXTURES_2D_TABLE", + "for": "ASSET_TEXTURES_2D", + "default-type": "Table" + }, + { + "build-id": "ASSET_GAME_TEXT", + "folder": "text/game", + "group": 1, + "default-type": "GameText" + }, + { + "build-id": "ASSET_GAME_TEXT_TABLE", + "for": "ASSET_GAME_TEXT", + "default-type": "Table" + }, + { + "build-id": "ASSET_MENU_TEXT", + "folder": "text/menu", + "default-type": "MenuText" + }, + { + "build-id": "ASSET_MENU_TEXT_TABLE", + "for": "ASSET_MENU_TEXT", + "default-type": "Table" + }, + { + "build-id": "ASSET_SCREENS", + "folder": "screens", + "default-type": "Binary" + }, + { + "build-id": "ASSET_SCREENS_TABLE", + "for": "ASSET_SCREENS", + "default-type": "Table" + }, + { + "build-id": "ASSET_SPRITES", + "folder": "sprites", + "files-default-folder": "unlabeled", + "default-build-id-prefix": "ASSET_SPRITE_", + "default-type": "Sprite" + }, + { + "build-id": "ASSET_SPRITES_TABLE", + "for": "ASSET_SPRITES", + "default-type": "Table" + }, + { + "build-id": "ASSET_EMPTY_14", + "default-type": "Empty" + }, + { + "build-id": "ASSET_MISC", + "folder": "misc", + "files-default-folder": "unlabeled", + "default-build-id-prefix": "ASSET_MISC_", + "default-type": "Miscellaneous" + }, + { + "build-id": "ASSET_MISC_TABLE", + "for": "ASSET_MISC", + "default-type": "Table" + }, + { + "build-id": "ASSET_HUD_ELEMENT_IDS", + "folder": "ids", + "default-type": "Binary" + }, + { + "build-id": "ASSET_MENU_ELEMENT_IDS", + "folder": "ids", + "default-type": "Binary" + }, + { + "build-id": "ASSET_WEATHER_PARTICLES", + "folder": "levels", + "default-type": "Binary" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS_TABLE", + "for": "ASSET_LEVEL_OBJECT_MAPS", + "default-type": "Table" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_MAPS", + "folder": "levels/objectMaps", + "group": 1, + "default-type": "LevelObjectMap" + }, + { + "build-id": "ASSET_LEVEL_HEADERS_TABLE", + "for": "ASSET_LEVEL_HEADERS", + "default-type": "Table" + }, + { + "build-id": "ASSET_LEVEL_HEADERS", + "folder": "levels/headers", + "default-type": "LevelHeader" + }, + { + "build-id": "ASSET_LEVEL_NAMES_TABLE", + "for": "ASSET_LEVEL_NAMES", + "default-type": "Table" + }, + { + "build-id": "ASSET_LEVEL_NAMES", + "defer": true, + "defer-info": { + "from-section": "ASSET_LEVEL_HEADERS", + "id-postfix": "_NAME", + "output-path": "../names" + }, + "folder": "levels/names", + "default-type": "LevelName" + }, + { + "build-id": "ASSET_LEVEL_MODELS_TABLE", + "for": "ASSET_LEVEL_MODELS", + "default-type": "Table" + }, + { + "build-id": "ASSET_LEVEL_MODELS", + "folder": "levels/models", + "default-build-id-prefix": "ASSET_LEVELMODEL_", + "default-type": "LevelModel" + }, + { + "build-id": "ASSET_OBJECT_MODELS_TABLE", + "for": "ASSET_OBJECT_MODELS", + "default-type": "Table" + }, + { + "build-id": "ASSET_OBJECT_MODELS", + "folder": "objects/models", + "default-type": "ObjectModel" + }, + { + "build-id": "ASSET_ANIMATION_IDS", + "folder": "objects", + "default-type": "ObjectAnimationIdsTable", + "defer": true + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS_TABLE", + "for": "ASSET_OBJECT_ANIMATIONS", + "default-type": "Table" + }, + { + "build-id": "ASSET_OBJECT_ANIMATIONS", + "folder": "objects/animations", + "default-type": "ObjectAnimation" + }, + { + "build-id": "ASSET_OBJECT_HEADERS_TABLE", + "for": "ASSET_OBJECTS", + "default-type": "Table" + }, + { + "build-id": "ASSET_OBJECTS", + "folder": "objects/headers", + "default-type": "ObjectHeader" + }, + { + "build-id": "ASSET_LEVEL_OBJECT_TRANSLATION_TABLE", + "folder": "objects", + "default-type": "LevelObjectTranslationTable" + }, + { + "build-id": "ASSET_EMPTY_37_TABLE", + "for": "ASSET_EMPTY_37", + "default-type": "Table" + }, + { + "build-id": "ASSET_EMPTY_37", + "default-type": "Empty" + }, + { + "build-id": "ASSET_AUDIO_TABLE", + "for": "ASSET_AUDIO", + "default-type": "Table" + }, + { + "build-id": "ASSET_AUDIO", + "folder": "audio", + "default-type": "Audio" + }, + { + "build-id": "ASSET_PARTICLES_TABLE", + "for": "ASSET_PARTICLES", + "default-type": "Table" + }, + { + "build-id": "ASSET_PARTICLES", + "folder": "particles/particles", + "default-type": "Particle" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS_TABLE", + "for": "ASSET_PARTICLE_BEHAVIORS", + "default-type": "Table" + }, + { + "build-id": "ASSET_PARTICLE_BEHAVIORS", + "folder": "particles/behaviors", + "default-type": "ParticleBehavior" + }, + { + "build-id": "ASSET_FONTS", + "folder": "fonts", + "default-type": "Fonts" + }, + { + "build-id": "ASSET_JAPANESE_FONTS_TABLE", + "folder": "fonts", + "default-type": "JPFontsTable", + "defer": true, + "defer-info": { + "from-section": "ASSET_JAPANESE_FONTS", + "id-postfix": "_TABLE", + "output-path": "../jpfontstable" + } + }, + { + "build-id": "ASSET_JAPANESE_FONTS", + "filename": "jp_fonts", + "folder": "fonts", + "default-type": "JPFonts" + }, + { + "build-id": "ASSET_BINARY_47", + "folder": "ids", + "default-type": "Binary" + }, + { + "build-id": "ASSET_TTGHOSTS_TABLE", + "for": "ASSET_TTGHOSTS", + "default-type": "Table" + }, + { + "build-id": "ASSET_TTGHOSTS", + "folder": "tt_ghosts", + "default-type": "TTGhost" + } + ], + "misc": { + "default-object-entries-order": [ + "LevelObjectEntryCommon", + "LevelObjectEntry_Racer", + "LevelObjectEntry_Scenery", + "LevelObjectEntry_Fish", + "LevelObjectEntry_Animator", + "LevelObjectEntry_Weapon", + "LevelObjectEntry_Smoke", + "LevelObjectEntry_Exit", + "LevelObjectEntry_Audio", + "LevelObjectEntry_AudioLine", + "LevelObjectEntry_CameraControl", + "LevelObjectEntry_SetupPoint", + "LevelObjectEntry_Dino_Whale", + "LevelObjectEntry_Checkpoint", + "LevelObjectEntry_Door", + "LevelObjectEntry_FogChanger", + "LevelObjectEntry_AiNode", + "LevelObjectEntry_WeaponBalloon", + "LevelObjectEntry_Weapon", + "LevelObjectEntry_AudioSeqLine", + "LevelObjectEntry_Unknown20", + "LevelObjectEntry_Unknown21", + "LevelObjectEntry_BombExplosion", + "LevelObjectEntryCommon", + "LevelObjectEntry_Unknown24", + "LevelObjectEntry_Unknown25", + "LevelObjectEntry_SkyControl", + "LevelObjectEntry_AudioReverb", + "LevelObjectEntry_Torch_Mist", + "LevelObjectEntry_TexScroll", + "LevelObjectEntry_ModeChange", + "LevelObjectEntry_StopWatchMan", + "LevelObjectEntry_Banana", + "LevelObjectEntry_RgbaLight", + "LevelObjectEntry_Unknown34", + "LevelObjectEntry_Unknown35", + "LevelObjectEntry_Buoy_PirateShip", + "LevelObjectEntry_Weather", + "LevelObjectEntry_Bridge_WhaleRamp", + "LevelObjectEntry_RampSwitch", + "LevelObjectEntry_SeaMonster", + "LevelObjectEntry_Bonus", + "LevelObjectEntry_Unknown42", + "LevelObjectEntry_LensFlare", + "LevelObjectEntry_LensFlareSwitch", + "LevelObjectEntry_CollectEgg", + "LevelObjectEntry_EggCreator", + "LevelObjectEntry_CharacterFlag", + "LevelObjectEntry_Unknown48", + "LevelObjectEntry_Animation", + "LevelObjectEntry_AnimatedObject", + "LevelObjectEntry_CameraAnimation", + "LevelObjectEntry_InfoPoint", + "LevelObjectEntryCommon", + "LevelObjectEntry_CharacterSelect", + "LevelObjectEntry_Trigger", + "LevelObjectEntryCommon", + "LevelObjectEntry_AirZippers_WaterZippers", + "LevelObjectEntry_TimeTrial_Ghost", + "LevelObjectEntry_WaveGenerator", + "LevelObjectEntry_WavePower", + "LevelObjectEntry_Butterfly", + "LevelObjectEntry_Parkwarden", + "LevelObjectEntry_Unknown63", + "LevelObjectEntry_WorldKey", + "LevelObjectEntry_BananaCreator", + "LevelObjectEntry_TreasureSucker", + "LevelObjectEntry_Log", + "LevelObjectEntry_LavaSpurt", + "LevelObjectEntry_PosArrow", + "LevelObjectEntry_HitTester", + "LevelObjectEntry_MidiFade", + "LevelObjectEntry_HitTester", + "LevelObjectEntry_EffectBox", + "LevelObjectEntry_TrophyCab", + "LevelObjectEntry_Bubbler", + "LevelObjectEntry_FlyCoin", + "LevelObjectEntry_GoldenBalloon", + "LevelObjectEntry_Laserbolt", + "LevelObjectEntry_Lasergun", + "LevelObjectEntry_ParkWarden", + "LevelObjectEntry_AnimatedObject", + "LevelObjectEntry_GroundZipper", + "LevelObjectEntry_OverridePos", + "LevelObjectEntry_WizpigShip", + "LevelObjectEntry_AnimatedObject", + "LevelObjectEntry_AnimatedObject", + "LevelObjectEntry_TajTelepoint", + "LevelObjectEntry_SilverCoin", + "LevelObjectEntry_Boost", + "LevelObjectEntry_WardenSmoke", + "LevelObjectEntry_Unknown91", + "LevelObjectEntry_Unknown92", + "LevelObjectEntry_AirZippers_WaterZippers", + "LevelObjectEntry_Unknown94", + "LevelObjectEntry_DynamicLightObject2", + "LevelObjectEntry_Snowball", + "LevelObjectEntry_Snowball", + "LevelObjectEntry_Teleport", + "LevelObjectEntry_Lighthouse_RocketSignpost", + "LevelObjectEntry_Lighthouse_RocketSignpost", + "LevelObjectEntry_Snowball", + "LevelObjectEntry_Snowball", + "LevelObjectEntry_HitTester", + "LevelObjectEntry_HitTester", + "LevelObjectEntry_RangeTrigger", + "LevelObjectEntry_Unknown106", + "LevelObjectEntry_BossHazardTrigger", + "LevelObjectEntry_Fireball_Octoweapon", + "LevelObjectEntry_Frog", + "LevelObjectEntry_SilverCoinAdv2", + "LevelObjectEntry_TTDoor", + "LevelObjectEntry_MidiFadePoint", + "LevelObjectEntry_DoorOpener", + "LevelObjectEntry_Unknown114", + "LevelObjectEntry_PigRocketeer", + "LevelObjectEntry_Fireball_Octoweapon", + "LevelObjectEntry_LevelName", + "LevelObjectEntry_Midichset", + "LevelObjectEntry_WizpigGhosts", + "LevelObjectEntry_Unknown120", + "LevelObjectEntry_Unknown121", + "LevelObjectEntry_Unknown122", + "LevelObjectEntry_Unknown123", + "LevelObjectEntry_Unknown124", + "LevelObjectEntry_Unknown125", + "LevelObjectEntry_Unknown126", + "LevelObjectEntry_Unknown127" + ] + } +} \ No newline at end of file diff --git a/tools/dkr_assets_tool_settings.json b/tools/dkr_assets_tool_settings.json index 0764994a..27dfd4e9 100644 --- a/tools/dkr_assets_tool_settings.json +++ b/tools/dkr_assets_tool_settings.json @@ -1,14 +1,16 @@ { - "default_dkr_version": "us_1.0", - "baseroms_subpath" : "baseroms/", - "assets_subpath" : "assets/", - "configs_subpath" : "extract-ver/", - "include_subpath" : "include/", - "asm_subpath" : "asm/", - "build_subpath" : "build/", - "data_subpath" : "data/", - "model_scale": 0.001, + "extract-config" : "tools/dkr_assets_tool_extract.json", + "baseroms-subpath" : "baseroms/", + "assets-subpath" : "assets/", + "configs-subpath" : "extract-ver/", + "include-subpath" : "include/", + "asm-subpath" : "asm/", + "build-subpath" : "build/", + "data-subpath" : "data/", + "model-scale": 0.001, + "threads" : 0, "debug": { - "keep-uncompressed": true + "keep-uncompressed": true, + "write-assets-map": false } } \ No newline at end of file diff --git a/tools/dkr_assets_tool_src/builder/buildAssetTable.cpp b/tools/dkr_assets_tool_src/builder/buildAssetTable.cpp new file mode 100644 index 00000000..12e901a0 --- /dev/null +++ b/tools/dkr_assets_tool_src/builder/buildAssetTable.cpp @@ -0,0 +1,193 @@ +#include "buildAssetTable.h" + +#include "helpers/assetsHelper.h" +#include "helpers/jsonHelper.h" +#include "helpers/dataHelper.h" +#include "helpers/debugHelper.h" + +using namespace DkrAssetsTool; + +BuildAssetTable::BuildAssetTable(std::string assetType) { + _type = AssetTable::table_type_from_section_type(assetType); + _isDirty = true; +} + +BuildAssetTable::BuildAssetTable(DkrAssetTableType tableType) : _type(tableType) { + _isDirty = true; +} + +BuildAssetTable::~BuildAssetTable() { +} + +void BuildAssetTable::add_entry(int32_t size, bool highestBitSet) { + DebugHelper::assert_(_type != DkrAssetTableType::ObjectAnimationIdsTable, + "(BuildAssetTable::add_entry) Table is the incorrect type! Should NOT be a ObjectAnimationIdsTable."); + + if(_type == DkrAssetTableType::MiscTable) { + size /= 4; // Misc table entries have to be divided by 4 (for some reason) + } + + // GameText uses the highest bit to determine if the entry is a textbox or dialog. + int32_t offset = _currentOffset | (highestBitSet ? (0x80000000) : 0); + _entries.emplace_back(offset, size); + _currentOffset += size; + _isDirty = true; +} + +int BuildAssetTable::_find_index_of_object_model_id(int32_t objectModelId) { + int foundIndex = -1; + for(size_t i = 0; i < _entries.size(); i++) { + if(_entries[i].objectModelId == objectModelId) { + foundIndex = i; + break; + } + } + return foundIndex; +} + +void BuildAssetTable::add_object_animation_ids_entry(int32_t objectModelId) { + DebugHelper::assert_(_type == DkrAssetTableType::ObjectAnimationIdsTable, + "(BuildAssetTable::add_object_animation_ids_entry) Table is the incorrect type! Should be a ObjectAnimationIdsTable."); + + int foundIndex = _find_index_of_object_model_id(objectModelId); + + if(foundIndex < 0) { + foundIndex = _entries.size(); + _entries.emplace_back(objectModelId, 0); + } + + _entries[foundIndex].count++; + _isDirty = true; +} + +BytesView BuildAssetTable::get_view(CContext &cContext) { + if(_isDirty) { + _compile_entries_to_data(cContext); + } + return BytesView(_data); +} + +size_t BuildAssetTable::get_size_of_entries() const { + return _currentOffset; +} + +BytesView BuildAssetTable::_reset_data(size_t newSize) { + _data.clear(); + _data.resize(DataHelper::align16(newSize)); + return BytesView(_data); +} + +void BuildAssetTable::_compile_entries_to_data(CContext &cContext) { + int32_t totalSizeOfEntries = _currentOffset; + + switch(_type) { + case DkrAssetTableType::FixedTable: + { + int32_t numberOfEntries = (int32_t)_entries.size(); + BytesView view = _reset_data((numberOfEntries + 2) * 4); + + view.set_s32_be(0, numberOfEntries); // First entry is the number of following entries. + + for(int32_t i = 0; i < numberOfEntries; i++) { + view.set_s32_be((1 + i) * 4, _entries[i].offset); + } + + view.set_s32_be((1 + numberOfEntries) * 4, totalSizeOfEntries); // Last entry is the total size of the assets. + } + break; + case DkrAssetTableType::VariableTable: + case DkrAssetTableType::GameTextTable: + case DkrAssetTableType::MiscTable: + case DkrAssetTableType::AudioTable: + { + int32_t numberOfEntries = (int32_t)_entries.size(); + BytesView view = _reset_data((numberOfEntries + 2) * 4); + + int startOffset = 0; + + // The audio table skips the first entry for whatever reason. + if(_type == DkrAssetTableType::AudioTable) { + numberOfEntries--; + startOffset = 1; + } + + for(int i = 0; i < numberOfEntries; i++) { + view.set_s32_be(i * 4, _entries[startOffset + i].offset); + } + + view.set_s32_be(numberOfEntries * 4, totalSizeOfEntries); // 2nd to last entry is the total size of the assets. + view.set_s32_be((numberOfEntries + 1) * 4, -1); // Last entry should be -1 + } + break; + case DkrAssetTableType::MenuTextTable: + { + int32_t numberOfEntries = (int32_t)_entries.size(); + JsonFile &menuTextSectionJson = AssetsHelper::get_asset_section_json("ASSET_MENU_TEXT"); + size_t numberOfMenuTextEntries = menuTextSectionJson.length_of_array("/menu-text-build-ids"); + + BytesView view = _reset_data((numberOfEntries + 3) * 4); + + view.set_s32_be(0, numberOfMenuTextEntries); // First entry is the number of menu text entries. + + for(int32_t i = 0; i < numberOfEntries; i++) { + view.set_s32_be((1 + i) * 4, _entries[i].offset); + } + + view.set_s32_be((1 + numberOfEntries) * 4, totalSizeOfEntries); // 2nd to last entry is the total size of the assets. + view.set_s32_be((1 + numberOfEntries + 1) * 4, -1); // Last entry should be -1 + } + break; + case DkrAssetTableType::TTGhostTable: + { + int32_t numberOfEntries = (int32_t)_entries.size(); + BytesView view = _reset_data((numberOfEntries + 2) * 8); + + for(int32_t i = 0; i < numberOfEntries; i++) { + std::string ttGhostBuildId = AssetsHelper::get_build_id_of_index("ASSET_TTGHOSTS", i); + JsonFile &ttGhostJson = AssetsHelper::get_asset_json("ASSET_TTGHOSTS", ttGhostBuildId); + std::string levelBuildId = ttGhostJson.get_string("/header/level"); + std::string vehicleEnumStr = ttGhostJson.get_string("/header/vehicle"); + + int levelIndex = AssetsHelper::get_asset_index("ASSET_LEVEL_HEADERS", levelBuildId) & 0xFF; + int vehicleEnumValue = cContext.get_int_value_of_symbol(vehicleEnumStr) & 0xFF; + + view.set_s32_be((i * 8) + 0, (levelIndex << 24) | (vehicleEnumValue << 16)); + view.set_s32_be((i * 8) + 4, _entries[i].offset); + } + + view.set_s32_be((numberOfEntries * 8) + 0, 0xFFFF0000); + view.set_s32_be((numberOfEntries * 8) + 4, totalSizeOfEntries); // 2nd to last entry is the total size of the assets. + view.set_s32_be(((numberOfEntries + 1) * 8) + 0, 0xFFFF0000); + view.set_s32_be(((numberOfEntries + 1) * 8) + 4, -1); // Last entry should be -1 + } + break; + case DkrAssetTableType::ObjectAnimationIdsTable: + { + int32_t numberOfModels = AssetsHelper::get_asset_section_count("ASSET_OBJECT_MODELS"); + BytesView view = _reset_data((numberOfModels + 1) * sizeof(int16_t)); + + int16_t currAnimOffset = 0; + for(int32_t modelIndex = 0; modelIndex < numberOfModels; modelIndex++) { + view.set_s16_be(modelIndex * sizeof(int16_t), currAnimOffset); + + int foundIndex = _find_index_of_object_model_id(modelIndex); + + if(foundIndex < 0) { + continue; + } + + currAnimOffset += _entries[foundIndex].count; + } + + // Last entry should be the total number of animations. + view.set_s16_be(numberOfModels * sizeof(int16_t), currAnimOffset); + } + break; + default: + DebugHelper::error("Unknown table type: ", _type); + break; + } + + _isDirty = false; +} + diff --git a/tools/dkr_assets_tool_src/builder/buildAssetTable.h b/tools/dkr_assets_tool_src/builder/buildAssetTable.h new file mode 100644 index 00000000..9220f19f --- /dev/null +++ b/tools/dkr_assets_tool_src/builder/buildAssetTable.h @@ -0,0 +1,42 @@ +#pragma once + +#include + +// Refactor TODO: Combine this with extract/assetTable.h? +#include "extract/assetTable.h" + +#include "helpers/c/cContext.h" + +#include "libs/bytes_view.hpp" + +namespace DkrAssetsTool { + +class BuildAssetTable { +public: + BuildAssetTable(std::string assetType="Binary"); + BuildAssetTable(DkrAssetTableType tableType); + ~BuildAssetTable(); + + // GameText uses the highest bit to determine if the entry is a textbox or dialog. + void add_entry(int32_t size, bool highestBitSet=false); + + void add_object_animation_ids_entry(int32_t objectModelId); + + BytesView get_view(CContext &cContext); + + size_t get_size_of_entries() const; + +private: + std::vector _entries; + DkrAssetTableType _type; + std::vector _data; + + bool _isDirty = false; + size_t _currentOffset = 0; + + BytesView _reset_data(size_t newSize); + void _compile_entries_to_data(CContext &cContext); + int _find_index_of_object_model_id(int32_t objectModelId); +}; + +} diff --git a/tools/dkr_assets_tool_src/builder/buildInfo.cpp b/tools/dkr_assets_tool_src/builder/buildInfo.cpp index 01833d39..a500249b 100644 --- a/tools/dkr_assets_tool_src/builder/buildInfo.cpp +++ b/tools/dkr_assets_tool_src/builder/buildInfo.cpp @@ -1,8 +1,221 @@ #include "buildInfo.h" +#include "misc/globalSettings.h" +#include "helpers/c/cContext.h" +#include "helpers/jsonHelper.h" + +using namespace DkrAssetsTool; + +/**************************************************************************/ + +BuildInfoContext::BuildInfoContext(CContext &cContext, BuildStats &stats, BuildInfoCollection &collection) + : _cContext(cContext), _stats(stats), _collection(collection) {} + +CContext &BuildInfoContext::get_c_context() const { + return _cContext; +} + +BuildStats &BuildInfoContext::get_stats() const { + return _stats; +} + +BuildInfoCollection &BuildInfoContext::get_collection() const { + return _collection; +} + +void BuildInfoContext::init_obj_beh_to_entry_map() { + if(!_objBehaviorToEntry.empty()) { + return; // Don't redo this if the map is already filled! + } + + // TODO: This was copy-pasted from extract/config.cpp; need to refactor to not require the config file. + + fs::path pathToConfig = GlobalSettings::get_decomp_path("tools", "tools/") / "dkr_assets_tool_extract.json"; + auto tryGetConfigFile = JsonHelper::get_file(pathToConfig); + DebugHelper::assert_(tryGetConfigFile.has_value(), + "(BuildInfoContext::init_obj_beh_to_entry_map) Could not find the config file at: ", pathToConfig); + JsonFile &configJson = tryGetConfigFile.value(); + + CContext &cContext = get_c_context(); + + CEnum *objBehaviors = cContext.get_enum("ObjectBehaviours"); + + DebugHelper::assert_(objBehaviors != nullptr, + "(BuildInfoContext::init_obj_beh_to_entry_map) The enum ObjectBehaviours could not be loaded!"); + + std::vector defaultObjEntriesOrder; + configJson.get_array("/misc/default-object-entries-order", defaultObjEntriesOrder); + + for(int i = 0; i < 128; i++) { + std::string symbol; + DebugHelper::assert_(objBehaviors->get_symbol_of_value(i, symbol), + "(BuildInfoContext::init_obj_beh_to_entry_map) Could not get a symbol for the value ", i, " in the ObjectBehaviors enum."); + + CStruct *entryStruct = cContext.get_struct(defaultObjEntriesOrder[i]); + DebugHelper::assert_(entryStruct != nullptr, + "(BuildInfoContext::init_obj_beh_to_entry_map) Could not find struct \"", defaultObjEntriesOrder[i], "\""); + + _objBehaviorToEntry[symbol] = defaultObjEntriesOrder[i]; + } +} + +std::string BuildInfoContext::get_object_entry_from_behavior(std::string objBehavior) const { + DebugHelper::assert_(_objBehaviorToEntry.find(objBehavior) != _objBehaviorToEntry.end(), + "(AssetExtractConfig::get_object_entry_from_behavior) ", objBehavior, + " was not in the _objBehaviorToEntry map!"); + + return _objBehaviorToEntry.at(objBehavior); +} + +/**************************************************************************/ + +BuildInfo::BuildInfo() { + DebugHelper::error("Must not initalize empty build info."); +} +/* BuildInfo::BuildInfo(JsonFile *src, const fs::path &dst, const fs::path &dir) : srcFile(src), dstPath(dst), localDirectory(dir) { + _buildType = BUILD_TO_FILE; +}*/ + +/* +BuildInfo::BuildInfo(JsonFile *src, const fs::path &dir) + : srcFile(src), dstPath(""), localDirectory(dir) { + _buildType = BUILD_TO_BINARY; +} +*/ + +BuildInfo::BuildInfo(std::string buildId, const JsonFile &src, size_t fileIndex, const fs::path &dir, const BuildInfoContext &infoContext) + : _dstPath(""), _localDirectory(dir), _jsonFile(src), _infoContext(infoContext), _buildId(buildId), _fileIndex(fileIndex) { + _buildType = BUILD_TO_BINARY; + const JsonFile &jsonFile = get_src_json_file(); + _type = jsonFile.get_string("/type", "NoType"); +} + +BuildInfo::BuildInfo(std::string buildId, const std::vector &outData, size_t fileIndex, const fs::path &dir, const BuildInfoContext &infoContext) + : out(outData), _dstPath(""), _localDirectory(dir), _jsonFile(std::nullopt), _infoContext(infoContext), _buildId(buildId), _type("Binary"), _fileIndex(fileIndex) { + _buildType = BUILD_TO_BINARY; } BuildInfo::~BuildInfo() { } + +BuildInfoType BuildInfo::get_build_type() const { + return _buildType; +} + +bool BuildInfo::build_to_file() const { + return _buildType == BUILD_TO_FILE; +} + +bool BuildInfo::build_to_binary() const { + return _buildType == BUILD_TO_BINARY; +} + +void BuildInfo::write_out_to_dstPath() { + FileHelper::write_binary_file(out, _dstPath, true); +} + +void BuildInfo::copy_to_dstPath(fs::path srcPath) { + FileHelper::copy(srcPath, _dstPath); +} + +void BuildInfo::write_empty_file_to_dstPath() { + FileHelper::write_empty_file(_dstPath, true); +} + +fs::path BuildInfo::get_dstPath() const { + return _dstPath; +} + +fs::path BuildInfo::get_dst_folder() const { + return _dstPath.parent_path(); +} + +fs::path BuildInfo::get_dst_filename() const { + return _dstPath.filename(); +} + +fs::path BuildInfo::get_path_to_directory() const { + return GlobalSettings::get_decomp_path_to_output_assets() / _localDirectory; +} + +CContext &BuildInfo::get_c_context() const { + const BuildInfoContext &infoContext = _infoContext.value(); + return infoContext.get_c_context(); +} + +BuildStats &BuildInfo::get_stats() const { + const BuildInfoContext &infoContext = _infoContext.value(); + return infoContext.get_stats(); +} + +BuildInfoCollection &BuildInfo::get_collection() const { + const BuildInfoContext &infoContext = _infoContext.value(); + return infoContext.get_collection(); +} + +const JsonFile &BuildInfo::get_src_json_file() const { + DebugHelper::assert_(_jsonFile.has_value(), + "(BuildInfo::get_src_json_file) _jsonFile is null! build id was \"", _buildId, "\""); + return _jsonFile.value(); +} + +const BuildInfoContext &BuildInfo::get_info_context() const { + DebugHelper::assert_(_infoContext.has_value(), + "(BuildInfo::get_info_context) _infoContext is null! build id was \"", _buildId, "\""); + return _infoContext.value(); +} + +std::string BuildInfo::get_type() const { + return _type; +} + +std::string BuildInfo::get_build_id() const { + return _buildId; +} + +size_t BuildInfo::get_file_index() const { + return _fileIndex; +} + +bool BuildInfo::is_complete() const { + return _complete; +} + +void BuildInfo::done() { + _complete = true; + //pad_output_data(); +} + +void BuildInfo::pad_output_data() { + while((out.size() % 8) != 0) { + out.push_back(0); + } +} + +void BuildInfo::load_structs_into_c_context(std::vector structFilesToLoad) { + fs::path includeFolder = GlobalSettings::get_decomp_path("include_subpath", "include/"); + + DebugHelper::assert_(!includeFolder.empty(), + "(BuildInfo::load_structs_into_c_context) Could not find the include folder!"); + + CContext &cContext = get_c_context(); + + for(fs::path &structPath : structFilesToLoad) { + CStructHelper::load_structs_from_file(cContext, includeFolder / structPath); + } +} + +void BuildInfo::load_enums_into_c_context(std::vector enumFilesToLoad) { + fs::path includeFolder = GlobalSettings::get_decomp_path("include_subpath", "include/"); + + DebugHelper::assert_(!includeFolder.empty(), + "(BuildInfo::load_enums_into_c_context) Could not find the include folder!"); + + CContext &cContext = get_c_context(); + + for(fs::path &enumPath : enumFilesToLoad) { + CEnumsHelper::load_enums_from_file(cContext, includeFolder / enumPath); + } +} diff --git a/tools/dkr_assets_tool_src/builder/buildInfo.h b/tools/dkr_assets_tool_src/builder/buildInfo.h index e4af0f39..a66fb8e3 100644 --- a/tools/dkr_assets_tool_src/builder/buildInfo.h +++ b/tools/dkr_assets_tool_src/builder/buildInfo.h @@ -1,16 +1,105 @@ #pragma once #include +#include +#include +#include +#include +#include "helpers/fileHelper.h" #include "helpers/jsonHelper.h" +#include "helpers/c/cContext.h" + +namespace DkrAssetsTool { + +typedef enum BuildInfoType { + BUILD_TO_FILE, // When building a single asset. + BUILD_TO_BINARY // When building all assets +} BuildInfoType; + +class BuildStats; +class BuildInfoCollection; + +class BuildInfoContext { +public: + BuildInfoContext(CContext &cContext, BuildStats &stats, BuildInfoCollection &collection); + + CContext &get_c_context() const; + BuildStats &get_stats() const; + BuildInfoCollection &get_collection() const; + + // Used in BuildObjectMap + void init_obj_beh_to_entry_map(); + std::string get_object_entry_from_behavior(std::string objBehavior) const; +private: + std::reference_wrapper _cContext; + std::reference_wrapper _stats; + std::reference_wrapper _collection; + + std::unordered_map _objBehaviorToEntry; +}; class BuildInfo { public: - BuildInfo(JsonFile *src, const fs::path &dst, const fs::path &dir); + BuildInfo(); + //BuildInfo(std::string buildId, JsonFile *src, const fs::path &dst, const fs::path &dir); // BUILD_TO_FILE, TODO + //BuildInfo(std::string buildId, JsonFile *src, const fs::path &dir); // BUILD_TO_BINARY + BuildInfo(std::string buildId, const JsonFile &src, size_t fileIndex, const fs::path &dir, const BuildInfoContext &infoContext); // BUILD_TO_BINARY + BuildInfo(std::string buildId, const std::vector &outData, size_t fileIndex, const fs::path &dir, const BuildInfoContext &infoContext); // BUILD_TO_BINARY ~BuildInfo(); - JsonFile *srcFile; - const fs::path &dstPath; - const fs::path &localDirectory; + //JsonFile *srcFile; // Deprecated! + std::vector out; + + BuildInfoType get_build_type() const; + bool build_to_file() const; + bool build_to_binary() const; + + void write_out_to_dstPath(); + void copy_to_dstPath(fs::path srcPath); + void write_empty_file_to_dstPath(); + + fs::path get_dstPath() const; + fs::path get_dst_folder() const; + fs::path get_dst_filename() const; + + //void set_c_context(CContext &cContext); + //void set_stats(BuildStats &stats); + //void set_collection(BuildInfoCollection &collection); + + fs::path get_path_to_directory() const; + + CContext &get_c_context() const; + BuildStats &get_stats() const; + BuildInfoCollection &get_collection() const; + + const JsonFile &get_src_json_file() const; + const BuildInfoContext &get_info_context() const; + + std::string get_type() const; + std::string get_build_id() const; + size_t get_file_index() const; + + bool is_complete() const; + void done(); + + void pad_output_data(); + + void load_structs_into_c_context(std::vector structFilesToLoad); + void load_enums_into_c_context(std::vector enumsFilesToLoad); + private: -}; \ No newline at end of file + fs::path _dstPath; // Only used for BUILD_TO_FILE + fs::path _localDirectory; + + std::optional> _jsonFile; + std::optional> _infoContext; + + std::string _buildId; + std::string _type; + size_t _fileIndex; + BuildInfoType _buildType; + bool _complete = false; +}; + +} \ No newline at end of file diff --git a/tools/dkr_assets_tool_src/builder/buildInfoCollection.cpp b/tools/dkr_assets_tool_src/builder/buildInfoCollection.cpp new file mode 100644 index 00000000..e8cc5b34 --- /dev/null +++ b/tools/dkr_assets_tool_src/builder/buildInfoCollection.cpp @@ -0,0 +1,186 @@ +#include "buildInfoCollection.h" + +#include "libs/ThreadPool.h" + +#include "helpers/debugHelper.h" +#include "helpers/dataHelper.h" +#include "misc/globalSettings.h" + +using namespace DkrAssetsTool; + +const size_t MAX_NUMBER_OF_BUILD_INFOS = 10000; + +BuildInfoCollection::BuildInfoCollection() { + fs::path assetsPath = GlobalSettings::get_decomp_path_to_output_assets(); + _buildInfos.reserve(MAX_NUMBER_OF_BUILD_INFOS); // More than likely overkill, but I REALLY don't want pointers changing mid-build. +} + +BuildInfoCollection::~BuildInfoCollection() { +} + +void BuildInfoCollection::add_build_info(std::string sectionBuildId, std::string buildId, const JsonFile &src, const fs::path &dir, const BuildInfoContext &infoContext) { + _buildInfoMutex.lock(); + + if(_buildInfoSections.find(sectionBuildId) == _buildInfoSections.end()) { + _buildInfoSections[sectionBuildId] = {}; + + // Textures have a lot of files. + if(sectionBuildId == "ASSET_TEXTURES_2D") { + _buildInfoSections[sectionBuildId].reserve(1000); + } else if(sectionBuildId == "ASSET_TEXTURES_3D") { + _buildInfoSections[sectionBuildId].reserve(1500); + } + } + + size_t index = _buildInfos.size(); + + DebugHelper::assert_(index < MAX_NUMBER_OF_BUILD_INFOS, + "(BuildInfoCollection::add_build_info) Max number of assets reached! Limit was ", MAX_NUMBER_OF_BUILD_INFOS); + + size_t fileIndex = _buildInfoSections[sectionBuildId].size(); + _buildInfos.emplace_back(buildId, src, fileIndex, dir, infoContext); + + // Add the index to the section. + _buildInfoSections[sectionBuildId].emplace_back(index); + + _buildInfoMutex.unlock(); +} + +size_t BuildInfoCollection::add_deferred_build_info(std::string sectionBuildId, std::string buildId, const std::vector &out, const fs::path &dir, const BuildInfoContext &infoContext) { + _buildInfoMutex.lock(); + + if(_buildInfoSections.find(sectionBuildId) == _buildInfoSections.end()) { + _buildInfoSections[sectionBuildId] = {}; + } + + int index = _buildInfos.size(); + + DebugHelper::assert_(index < MAX_NUMBER_OF_BUILD_INFOS, + "(BuildInfoCollection::add_build_info) Max number of assets reached! Limit was ", MAX_NUMBER_OF_BUILD_INFOS); + + size_t fileIndex = _buildInfoSections[sectionBuildId].size(); + _buildInfos.emplace_back(buildId, out, fileIndex, dir, infoContext); + + // Do not process deferred assets. + _buildInfos.back().done(); + + // Add the index to the section. + _buildInfoSections[sectionBuildId].emplace_back(index); + + _buildInfoMutex.unlock(); + + return fileIndex; +} + +void BuildInfoCollection::add_deferred_build_info(std::string sectionBuildId, std::string buildId, size_t fileIndex, const std::vector &out, + const fs::path &dir, const BuildInfoContext &infoContext) { + _buildInfoMutex.lock(); + + if(_buildInfoSections.find(sectionBuildId) == _buildInfoSections.end()) { + _buildInfoSections[sectionBuildId] = {}; + } + + if(_buildInfoSections[sectionBuildId].size() <= fileIndex) { + _buildInfoSections[sectionBuildId].resize(fileIndex + 1); + } + + size_t index = _buildInfos.size(); + + DebugHelper::assert_(index < MAX_NUMBER_OF_BUILD_INFOS, + "(BuildInfoCollection::add_build_info) Max number of assets reached! Limit was ", MAX_NUMBER_OF_BUILD_INFOS); + + _buildInfos.emplace_back(buildId, out, fileIndex, dir, infoContext); + + // Do not process deferred assets. + _buildInfos.back().done(); + + // Add the index to the section. + _buildInfoSections[sectionBuildId][fileIndex] = index; + + _buildInfoMutex.unlock(); +} + +void BuildInfoCollection::run_builds(std::function callbackFunction) { + size_t threadCount = GlobalSettings::get_max_thread_count(); + bool multithreaded = threadCount != 1; + DebugHelper::info_verbose("Using ", threadCount, " thread", (multithreaded ? "s" : "")); + + if(multithreaded) { + // Multi-threaded (Better for performance) + ThreadPool pool(threadCount); + for(auto &pair : _buildInfoSections) { + for(int buildInfoIndex : pair.second) { + BuildInfo &info = _buildInfos[buildInfoIndex]; + pool.enqueue([&info, &callbackFunction] { + if(!info.is_complete()) { + callbackFunction(info); + info.done(); + } + }); + } + } + } else { + // Single-threaded (Better for debugging) + for(auto &pair : _buildInfoSections) { + for(int buildInfoIndex : pair.second) { + BuildInfo &info = _buildInfos[buildInfoIndex]; + if(!info.is_complete()) { + callbackFunction(info); + info.done(); + } + } + } + } + +} + +void BuildInfoCollection::get_infos_for_section(std::string sectionBuildId, std::function callbackFunction) { + std::vector §ionIndices = _buildInfoSections[sectionBuildId]; + for(int buildInfoIndex : sectionIndices) { + callbackFunction(_buildInfos[buildInfoIndex]); + } +} + +void BuildInfoCollection::create_assets_file() { + +} + +void BuildInfoCollection::print_section_counts() { + for(auto &pair : _buildInfoSections) { + DebugHelper::info(pair.first, ": ", pair.second.size()); + } +} + +std::mutex &BuildInfoCollection::get_global_mutex() { + return _globalMutex; +} + +size_t BuildInfoCollection::get_section_count() const { + return _buildInfoSections.size(); +} + +size_t BuildInfoCollection::get_file_count_for_section(std::string sectionBuildId) const { + if(_buildInfoSections.find(sectionBuildId) == _buildInfoSections.end()) { + return 0; + } + return _buildInfoSections.at(sectionBuildId).size(); +} + +size_t BuildInfoCollection::get_size_of_section(std::string sectionBuildId) const { + if(_buildInfoSections.find(sectionBuildId) == _buildInfoSections.end()) { + return 0; + } + + const std::vector §ionIndices = _buildInfoSections.at(sectionBuildId); + + size_t totalSize = 0; + + for(int buildInfoIndex : sectionIndices) { + totalSize += _buildInfos.at(buildInfoIndex).out.size(); + } + + // Make sure the size is 16-byte aligned + totalSize = DataHelper::align16(totalSize); + + return totalSize; +} diff --git a/tools/dkr_assets_tool_src/builder/buildInfoCollection.h b/tools/dkr_assets_tool_src/builder/buildInfoCollection.h new file mode 100644 index 00000000..f84451fd --- /dev/null +++ b/tools/dkr_assets_tool_src/builder/buildInfoCollection.h @@ -0,0 +1,61 @@ +#pragma once + +#include +#include +#include +#include + +#include "helpers/fileHelper.h" + +#include "builder/buildInfo.h" + +namespace DkrAssetsTool { + +class BuildInfoCollection { +public: + BuildInfoCollection(); + ~BuildInfoCollection(); + + void add_build_info(std::string sectionBuildId, std::string buildId, const JsonFile &src, const fs::path &dir, const BuildInfoContext &infoContext); + + // Adds deferred info to the end of the list. Returns the fileIndex of the added asset. + size_t add_deferred_build_info(std::string sectionBuildId, std::string buildId, const std::vector &out, + const fs::path &dir, const BuildInfoContext &infoContext); + + // Adds deferred info to a specific file index. + void add_deferred_build_info(std::string sectionBuildId, std::string buildId, size_t fileIndex, const std::vector &out, + const fs::path &dir, const BuildInfoContext &infoContext); + + void run_builds(std::function callbackFunction); + + void get_infos_for_section(std::string sectionBuildId, std::function callbackFunction); + + void create_assets_file(); + + void print_section_counts(); + + std::mutex &get_global_mutex(); + + size_t get_section_count() const; + + // Returns number of files for section. + size_t get_file_count_for_section(std::string sectionBuildId) const; + + // Returns total bytes size for section. + size_t get_size_of_section(std::string sectionBuildId) const; + +private: + // Place for all of the build infos to exist. + // Note: Should only ever be added to! Do NOT erase any entries during the building process! + std::vector _buildInfos; + + std::vector _sectionOrder; + + // + std::unordered_map> _buildInfoSections; + + std::mutex _buildInfoMutex; + std::mutex _globalMutex; +}; + +} diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildAudio.cpp b/tools/dkr_assets_tool_src/builder/buildTypes/buildAudio.cpp index b371a0c9..0833c1dd 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildAudio.cpp +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildAudio.cpp @@ -1,20 +1,29 @@ #include "buildAudio.h" -BuildAudio::BuildAudio(DkrAssetsSettings &settings, BuildInfo &info) : _settings(settings), _info(info) { - if(info.srcFile->is_value_null("/raw")) { - FileHelper::write_empty_file(_info.dstPath, true); +using namespace DkrAssetsTool; + +void BuildAudio::build(BuildInfo &info) { + const JsonFile &jsonFile = info.get_src_json_file(); + + if(jsonFile.is_value_null("/raw")) { + if(info.build_to_file()) { + info.write_empty_file_to_dstPath(); + } + // Don't need to do anything for the BUILD_TO_BINARY case. return; } - std::string rawPath = info.srcFile->get_string("/raw"); + std::string rawPath = jsonFile.get_string("/raw"); DebugHelper::assert(!rawPath.empty(), "(BuildAudio::BuildAudio) \"raw\" not specified!"); - // Copy file from rawPath to destination path. - FileHelper::copy(_info.localDirectory / rawPath, info.dstPath); -} - -BuildAudio::~BuildAudio() { + fs::path dir = info.get_path_to_directory(); + if(info.build_to_file()) { + // Copy file from rawPath to destination path. + info.copy_to_dstPath(dir / rawPath); + } else { + // Load raw binary into info's out + info.out = FileHelper::read_binary_file(dir / rawPath); + } } - diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildAudio.h b/tools/dkr_assets_tool_src/builder/buildTypes/buildAudio.h index a3e137bf..4635128b 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildAudio.h +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildAudio.h @@ -1,19 +1,10 @@ #pragma once #include "builder/buildInfo.h" -#include "misc/settings.hpp" +#include "helpers/c/cContext.h" -#include "fileTypes/fonts.hpp" - -#include "helpers/debugHelper.h" -#include "helpers/fileHelper.h" -#include "helpers/jsonHelper.h" - -class BuildAudio { -public: - BuildAudio(DkrAssetsSettings &settings, BuildInfo &info); - ~BuildAudio(); -private: - DkrAssetsSettings &_settings; - BuildInfo &_info; -}; +namespace DkrAssetsTool { +namespace BuildAudio { + void build(BuildInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildBinary.cpp b/tools/dkr_assets_tool_src/builder/buildTypes/buildBinary.cpp index ea81fa7a..cde7cc79 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildBinary.cpp +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildBinary.cpp @@ -1,15 +1,24 @@ #include "buildBinary.h" -BuildBinary::BuildBinary(DkrAssetsSettings &settings, BuildInfo &info) : _settings(settings), _info(info) { - std::string rawPath = info.srcFile->get_string("/raw"); +#include "misc/globalSettings.h" + +using namespace DkrAssetsTool; + +void BuildBinary::build(BuildInfo &info) { + const JsonFile &jsonFile = info.get_src_json_file(); + std::string rawPath = jsonFile.get_string("/raw"); - DebugHelper::assert(!rawPath.empty(), "(BuildBinary::BuildBinary) \"raw\" not specified!"); + DebugHelper::assert(!rawPath.empty(), "(BuildBinary::build) \"raw\" not specified!"); - // Copy file from rawPath to destination path. - FileHelper::copy(_info.localDirectory / rawPath, info.dstPath); + fs::path dir = info.get_path_to_directory(); + + if(info.build_to_file()) { + // Copy file from rawPath to destination path. + info.copy_to_dstPath(dir / rawPath); + } else { + // Load raw binary into info's out + info.out = FileHelper::read_binary_file(dir / rawPath); + } } -BuildBinary::~BuildBinary() { - -} diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildBinary.h b/tools/dkr_assets_tool_src/builder/buildTypes/buildBinary.h index 8303b0fa..8916efd0 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildBinary.h +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildBinary.h @@ -1,19 +1,10 @@ #pragma once #include "builder/buildInfo.h" -#include "misc/settings.hpp" +#include "helpers/c/cContext.h" -#include "fileTypes/fonts.hpp" - -#include "helpers/debugHelper.h" -#include "helpers/fileHelper.h" -#include "helpers/jsonHelper.h" - -class BuildBinary { -public: - BuildBinary(DkrAssetsSettings &settings, BuildInfo &info); - ~BuildBinary(); -private: - DkrAssetsSettings &_settings; - BuildInfo &_info; -}; +namespace DkrAssetsTool { +namespace BuildBinary { + void build(BuildInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildFonts.cpp b/tools/dkr_assets_tool_src/builder/buildTypes/buildFonts.cpp index 7813fa2e..bf1d45eb 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildFonts.cpp +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildFonts.cpp @@ -2,103 +2,30 @@ #include // for memset +#include "fileTypes/fonts.hpp" + +#include "helpers/debugHelper.h" +#include "helpers/dataHelper.h" +#include "helpers/fileHelper.h" +#include "helpers/jsonHelper.h" #include "helpers/stringHelper.h" #include "helpers/assetsHelper.h" -BuildFonts::BuildFonts(DkrAssetsSettings &settings, BuildInfo &info) : _settings(settings), _info(info) { - size_t numberOfFonts = info.srcFile->length_of_array("/fonts-order"); - - // "rawDataSize" is the size of the FontData structure with the correct number of fonts. - // Have to do this, since the number of fonts is dynamic. - size_t rawDataSize = FileHelper::align16(sizeof(be_uint32_t) + (numberOfFonts * sizeof(FontFile))); - uint8_t *rawData = new uint8_t[rawDataSize]; - std::memset(rawData, 0, rawDataSize); // zero out rawData bytes. - - // Convert the raw bytes into the FontData structure. - FontData *fontData = reinterpret_cast(rawData); - - fontData->numberOfFonts = numberOfFonts; - - for(size_t fontIndex = 0; fontIndex < numberOfFonts; fontIndex++) { - std::string fontBuildId = info.srcFile->get_string("/fonts-order/" + std::to_string(fontIndex)); - fs::path localFontFilepath = info.srcFile->get_string("/fonts/" + fontBuildId); - - JsonFile *fontJson = _get_font_file(localFontFilepath); - FontFile *outFontFile = &fontData->fonts[fontIndex]; - - fontJson->copy_string_to("/name", outFontFile->name, FONTS_NAME_LENGTH, "unnamedFont"); - fontJson->copy_string_to("/junk-text", outFontFile->junkText, FONTS_JUNKTEXT_LENGTH); - - outFontFile->tabWidth = fontJson->get_int("/tab-width"); - outFontFile->fixedWidth = fontJson->get_int("/fixed-width"); - outFontFile->yOffset = fontJson->get_int("/y-offset"); - outFontFile->specialCharacterWidth = fontJson->get_int("/special-character-width"); - - size_t numTextures = fontJson->length_of_array("/textures"); - - if(numTextures > FONTS_NUMBER_OF_TEXTURE_INDICES) { - std::string fontName = fontJson->get_string("/name"); - DebugHelper::warn("(BuildFonts::BuildFonts) Too many textures in font \"", fontName, "\". Have ", numTextures, " texture ids, but the limit is ", FONTS_NUMBER_OF_TEXTURE_INDICES); - numTextures = FONTS_NUMBER_OF_TEXTURE_INDICES; - } - - for(size_t texIndex = 0; texIndex < numTextures; texIndex++) { - std::string texIndexPtr = "/textures/" + std::to_string(texIndex); - - if(fontJson->is_value_null(texIndexPtr)) { - outFontFile->textureIndices[texIndex] = -1; // -1 = No Texture - continue; - } - - DebugHelper::assert(fontJson->is_value_a_string(texIndexPtr), "(BuildFonts::BuildFonts) [", texIndexPtr, "] is not a string!"); - - std::string texBuildId = fontJson->get_string(texIndexPtr); - - int fontTextureIndex = AssetsHelper::get_asset_index(settings, "ASSET_TEXTURES_2D", texBuildId); - - DebugHelper::info(texBuildId, " = ", fontTextureIndex); - - outFontFile->textureIndices[texIndex] = fontTextureIndex; - } - - // Fills in the rest with nulls - for(size_t texIndex = numTextures; texIndex < FONTS_NUMBER_OF_TEXTURE_INDICES; texIndex++) { - outFontFile->textureIndices[texIndex] = -1; - } - - // Assume ASCII by default. - std::string encodingType = fontJson->get_string("/encoding/type", "ASCII"); - - StringHelper::make_uppercase(encodingType); // Make sure string is uppercase. - - if(encodingType == "ASCII") { - _parse_ascii_encoding(fontJson, outFontFile); - } else { - // TODO: Support other encodings! - DebugHelper::error("(BuildFonts::BuildFonts) Unsupported font encoding type: \"", encodingType, "\""); - } - } - - FileHelper::write_binary_file(rawData, rawDataSize, _info.dstPath, true); - - delete[] rawData; -} +using namespace DkrAssetsTool; -BuildFonts::~BuildFonts() { -} - -JsonFile *BuildFonts::_get_font_file(fs::path &localFontFilepath) { - fs::path fontPath = _info.localDirectory / localFontFilepath; +static std::reference_wrapper get_font_file(BuildInfo &info, fs::path &localFontFilepath) { + fs::path fontPath = info.get_path_to_directory() / localFontFilepath; - JsonFile *jsonFile; + auto tryGetJsonFile = JsonHelper::get_file(fontPath); // Get the font file, and throw an error if it doesn't exist. - DebugHelper::assert(JsonHelper::get().get_file(fontPath, &jsonFile), "(BuildFonts::_get_font_file) Could not font file ", fontPath); + DebugHelper::assert_(tryGetJsonFile.has_value(), + "(BuildFonts::get_font_file) Could not font file ", fontPath); - return jsonFile; + return tryGetJsonFile.value(); } - void BuildFonts::_parse_ascii_encoding(JsonFile *fontJson, FontFile *fontFile) { + static void parse_ascii_encoding(const JsonFile &fontJson, FontFile *fontFile) { for(int i = 0; i < FONTS_NUMBER_OF_CHARACTERS; i++) { FontCharacter *outFontCharacter = &fontFile->characters[i]; char character = (char)(FONTS_START_CHAR + i); @@ -114,13 +41,91 @@ JsonFile *BuildFonts::_get_font_file(fs::path &localFontFilepath) { charPtr += character; } - outFontCharacter->texIndex = fontJson->get_int(charPtr + "/tex-index"); - outFontCharacter->charWidth = fontJson->get_int(charPtr + "/char-width", 0); - outFontCharacter->offsetX = fontJson->get_int(charPtr + "/offset/x", 0); - outFontCharacter->offsetY = fontJson->get_int(charPtr + "/offset/y", 0); - outFontCharacter->texU = fontJson->get_int(charPtr + "/uv/u", 0); - outFontCharacter->texV = fontJson->get_int(charPtr + "/uv/v", 0); - outFontCharacter->texWidth = fontJson->get_int(charPtr + "/tex-size/width", 0); - outFontCharacter->texHeight = fontJson->get_int(charPtr + "/tex-size/height", 0); + outFontCharacter->texIndex = fontJson.get_int(charPtr + "/tex-index"); + outFontCharacter->charWidth = fontJson.get_int(charPtr + "/char-width", 0); + outFontCharacter->offsetX = fontJson.get_int(charPtr + "/offset/x", 0); + outFontCharacter->offsetY = fontJson.get_int(charPtr + "/offset/y", 0); + outFontCharacter->texU = fontJson.get_int(charPtr + "/uv/u", 0); + outFontCharacter->texV = fontJson.get_int(charPtr + "/uv/v", 0); + outFontCharacter->texWidth = fontJson.get_int(charPtr + "/tex-size/width", 0); + outFontCharacter->texHeight = fontJson.get_int(charPtr + "/tex-size/height", 0); } } + + +void BuildFonts::build(BuildInfo &info) { + const JsonFile &jsonFile = info.get_src_json_file(); + + size_t numberOfFonts = jsonFile.length_of_array("/fonts-order"); + + size_t outSize = DataHelper::align16(sizeof(be_uint32_t) + (numberOfFonts * sizeof(FontFile))); + info.out.resize(outSize); + + // Convert the raw bytes into the FontData structure. + FontData *fontData = reinterpret_cast(&info.out[0]); + + fontData->numberOfFonts = numberOfFonts; + + for(size_t fontIndex = 0; fontIndex < numberOfFonts; fontIndex++) { + std::string fontBuildId = jsonFile.get_string("/fonts-order/" + std::to_string(fontIndex)); + fs::path localFontFilepath = jsonFile.get_string("/fonts/" + fontBuildId); + + JsonFile &fontJson = get_font_file(info, localFontFilepath); + FontFile *outFontFile = &fontData->fonts[fontIndex]; + + fontJson.copy_string_to("/name", outFontFile->name, FONTS_NAME_LENGTH, "unnamedFont"); + fontJson.copy_string_to("/junk-text", outFontFile->junkText, FONTS_JUNKTEXT_LENGTH); + + outFontFile->tabWidth = fontJson.get_int("/tab-width"); + outFontFile->fixedWidth = fontJson.get_int("/fixed-width"); + outFontFile->yOffset = fontJson.get_int("/y-offset"); + outFontFile->specialCharacterWidth = fontJson.get_int("/special-character-width"); + + size_t numTextures = fontJson.length_of_array("/textures"); + + if(numTextures > FONTS_NUMBER_OF_TEXTURE_INDICES) { + std::string fontName = fontJson.get_string("/name"); + DebugHelper::warn("(BuildFonts::build) Too many textures in font \"", fontName, "\". Have ", + numTextures, " texture ids, but the limit is ", FONTS_NUMBER_OF_TEXTURE_INDICES); + numTextures = FONTS_NUMBER_OF_TEXTURE_INDICES; + } + + for(size_t texIndex = 0; texIndex < numTextures; texIndex++) { + std::string texIndexPtr = "/textures/" + std::to_string(texIndex); + + if(fontJson.is_value_null(texIndexPtr)) { + outFontFile->textureIndices[texIndex] = -1; // -1 = No Texture + continue; + } + + DebugHelper::assert(fontJson.is_value_a_string(texIndexPtr), "(BuildFonts::build) [", texIndexPtr, "] is not a string!"); + + std::string texBuildId = fontJson.get_string(texIndexPtr); + + int fontTextureIndex = AssetsHelper::get_asset_index("ASSET_TEXTURES_2D", texBuildId); + + outFontFile->textureIndices[texIndex] = fontTextureIndex; + } + + // Fills in the rest with nulls + for(size_t texIndex = numTextures; texIndex < FONTS_NUMBER_OF_TEXTURE_INDICES; texIndex++) { + outFontFile->textureIndices[texIndex] = -1; + } + + // Assume ASCII by default. + std::string encodingType = fontJson.get_string("/encoding/type", "ASCII"); + + StringHelper::make_uppercase(encodingType); // Make sure string is uppercase. + + if(encodingType == "ASCII") { + parse_ascii_encoding(fontJson, outFontFile); + } else { + // TODO: Support other encodings? + DebugHelper::error("(BuildFonts::build) Unsupported font encoding type: \"", encodingType, "\""); + } + } + + if(info.build_to_file()) { + info.write_out_to_dstPath(); + } +} diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildFonts.h b/tools/dkr_assets_tool_src/builder/buildTypes/buildFonts.h index 1b535e8b..51092c9b 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildFonts.h +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildFonts.h @@ -1,22 +1,9 @@ #pragma once #include "builder/buildInfo.h" -#include "misc/settings.hpp" -#include "fileTypes/fonts.hpp" - -#include "helpers/debugHelper.h" -#include "helpers/fileHelper.h" -#include "helpers/jsonHelper.h" - -class BuildFonts { -public: - BuildFonts(DkrAssetsSettings &settings, BuildInfo &info); - ~BuildFonts(); -private: - DkrAssetsSettings &_settings; - BuildInfo &_info; - - JsonFile *_get_font_file(fs::path &localFontPath); - void _parse_ascii_encoding(JsonFile *fontJson, FontFile *fontFile); -}; +namespace DkrAssetsTool { +namespace BuildFonts { + void build(BuildInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildGameText.cpp b/tools/dkr_assets_tool_src/builder/buildTypes/buildGameText.cpp index 1cc0203f..9694a768 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildGameText.cpp +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildGameText.cpp @@ -1,5 +1,7 @@ #include "buildGameText.h" +using namespace DkrAssetsTool; + #include #include #include @@ -8,168 +10,185 @@ #include "helpers/assetsHelper.h" #include "helpers/stringHelper.h" #include "helpers/dataHelper.h" +#include "helpers/debugHelper.h" +#include "helpers/fileHelper.h" +#include "helpers/jsonHelper.h" #include "fileTypes/gameText.hpp" +#include "text/dkrText.h" -#define TEXTBOX_CMD_ARGS std::vector &out, const std::string &cmdPtr -#define TEXTBOX_CMD_LAMDA(func) [this](TEXTBOX_CMD_ARGS) { func(out, cmdPtr); } +#define TEXTBOX_CMD_ARGS BuildInfo &info_, const std::string &cmdPtr, const JsonFile &jsonFile +#define TEXTBOX_CMD_LAMDA(func) [](TEXTBOX_CMD_ARGS) { func(info_, cmdPtr, jsonFile); } -//typedef void (*MiscFuncPtr)(MISC_ARGS); - -BuildGameText::BuildGameText(DkrAssetsSettings &settings, BuildInfo &info) : _settings(settings), _info(info) { - // Get text-type as lowercase to make sure it is case-insensitive - std::string textType = _info.srcFile->get_string_lowercase("/text-type", "not_set"); +void build_dialog(BuildInfo &info, const JsonFile &jsonFile) { + std::string rawPath = jsonFile.get_string("/raw"); - if(textType == "dialog") { - _build_dialog(); - } else if(textType == "textbox") { - _build_textbox(); + DebugHelper::assert_(!rawPath.empty(), + "(BuildGameText::BuildGameText) \"raw\" not specified!"); + + fs::path dir = info.get_path_to_directory(); + + if(info.build_to_file()) { + // Copy file from rawPath to destination path. + info.copy_to_dstPath(dir / rawPath); } else { - DebugHelper::error("Invalid text type: ", textType); + // Load raw binary into info's out + info.out = FileHelper::read_binary_file(dir / rawPath); } } -BuildGameText::~BuildGameText() { +void textbox_set_font(BuildInfo &info, const std::string &cmdPtr, const JsonFile &jsonFile) { + std::string fontId = jsonFile.get_string(cmdPtr + "/value"); + JsonFile &fontsFile = AssetsHelper::get_asset_json("ASSET_FONTS"); + DebugHelper::assert_(fontsFile.has("/fonts-order"), + "(textbox_set_font) fonts.json is missing the `/fonts-order` property!"); + uint8_t font = fontsFile.get_index_of_elem_in_array("/fonts-order", fontId); -} - -void BuildGameText::_build_dialog() { - std::string rawPath = _info.srcFile->get_string("/raw"); - - DebugHelper::assert(!rawPath.empty(), "(BuildGameText::BuildGameText) \"raw\" not specified!"); - - // Copy file from rawPath to destination path. - FileHelper::copy(_info.localDirectory / rawPath, _info.dstPath); -} - -void BuildGameText::_textbox_set_font(std::vector &out, const std::string &cmdPtr) { - std::string fontId = _info.srcFile->get_string(cmdPtr + "/value"); - JsonFile *fontsFile = AssetsHelper::get_asset_json(_settings, "ASSET_FONTS"); - uint8_t font = fontsFile->get_index_of_elem_in_array("/fonts-order", fontId); + DebugHelper::assert_(font != 0xFF, "(textbox_set_font) Could not find the font: ", fontId); // Write font id - out.push_back(font); + info.out.push_back(font); } -void BuildGameText::_textbox_set_border(std::vector &out, const std::string &cmdPtr) { - size_t offset = out.size(); - out.resize(offset + sizeof(SetBorderCommand)); +void textbox_set_border(BuildInfo &info, const std::string &cmdPtr, const JsonFile &jsonFile) { + size_t offset = info.out.size(); + info.out.resize(offset + sizeof(SetBorderCommand)); - SetBorderCommand *borderCmd = reinterpret_cast(&out[offset]); + SetBorderCommand *borderCmd = reinterpret_cast(&info.out[offset]); - borderCmd->left = _info.srcFile->get_int(cmdPtr + "/value/left"); - borderCmd->top = _info.srcFile->get_int(cmdPtr + "/value/top"); - borderCmd->right = _info.srcFile->get_int(cmdPtr + "/value/right"); - borderCmd->bottom = _info.srcFile->get_int(cmdPtr + "/value/bottom"); + borderCmd->left = jsonFile.get_int(cmdPtr + "/value/left"); + borderCmd->top = jsonFile.get_int(cmdPtr + "/value/top"); + borderCmd->right = jsonFile.get_int(cmdPtr + "/value/right"); + borderCmd->bottom = jsonFile.get_int(cmdPtr + "/value/bottom"); } -void BuildGameText::_textbox_set_colour(std::vector &out, const std::string &cmdPtr) { - size_t offset = out.size(); - out.resize(offset + sizeof(SetColourCommand)); +void textbox_set_colour(BuildInfo &info, const std::string &cmdPtr, const JsonFile &jsonFile) { + size_t offset = info.out.size(); + info.out.resize(offset + sizeof(SetColourCommand)); - SetColourCommand *colourCmd = reinterpret_cast(&out[offset]); + SetColourCommand *colourCmd = reinterpret_cast(&info.out[offset]); - colourCmd->red = _info.srcFile->get_int(cmdPtr + "/value/red"); - colourCmd->green = _info.srcFile->get_int(cmdPtr + "/value/green"); - colourCmd->blue = _info.srcFile->get_int(cmdPtr + "/value/blue"); - colourCmd->alpha = _info.srcFile->get_int(cmdPtr + "/value/alpha"); + colourCmd->red = jsonFile.get_int(cmdPtr + "/value/red"); + colourCmd->green = jsonFile.get_int(cmdPtr + "/value/green"); + colourCmd->blue = jsonFile.get_int(cmdPtr + "/value/blue"); + colourCmd->alpha = jsonFile.get_int(cmdPtr + "/value/alpha"); } -void BuildGameText::_textbox_set_alignment(std::vector &out, const std::string &cmdPtr) { - std::string alignment = _info.srcFile->get_string_lowercase(cmdPtr + "/value"); +void textbox_set_alignment(BuildInfo &info, const std::string &cmdPtr, const JsonFile &jsonFile) { + std::string alignment = jsonFile.get_string_lowercase(cmdPtr + "/value"); if(alignment == "center") { - out.push_back(0); + info.out.push_back(0); } else { // alignment == "left" - out.push_back(1); + info.out.push_back(1); } } -void BuildGameText::_textbox_unknown7(std::vector &out, const std::string &cmdPtr) { - out.push_back(_info.srcFile->get_int(cmdPtr + "/value")); +void textbox_unknown7(BuildInfo &info, const std::string &cmdPtr, const JsonFile &jsonFile) { + info.out.push_back(jsonFile.get_int(cmdPtr + "/value")); } -void BuildGameText::_textbox_add_vertical_spacing(std::vector &out, const std::string &cmdPtr) { - out.push_back(_info.srcFile->get_int(cmdPtr + "/value")); +void textbox_add_vertical_spacing(BuildInfo &info, const std::string &cmdPtr, const JsonFile &jsonFile) { + info.out.push_back(jsonFile.get_int(cmdPtr + "/value")); } -void BuildGameText::_textbox_set_line_height(std::vector &out, const std::string &cmdPtr) { - out.push_back(_info.srcFile->get_int(cmdPtr + "/value")); +void textbox_set_line_height(BuildInfo &info, const std::string &cmdPtr, const JsonFile &jsonFile) { + info.out.push_back(jsonFile.get_int(cmdPtr + "/value")); } -void BuildGameText::_textbox_set_timer(std::vector &out, const std::string &cmdPtr) { - out.push_back(_info.srcFile->get_int(cmdPtr + "/value")); +void textbox_set_timer(BuildInfo &info, const std::string &cmdPtr, const JsonFile &jsonFile) { + info.out.push_back(jsonFile.get_int(cmdPtr + "/value")); } -void BuildGameText::_textbox_allow_user_input(std::vector &out, const std::string &cmdPtr) { - out.push_back(_info.srcFile->get_int(cmdPtr + "/value")); +void textbox_allow_user_input(BuildInfo &info, const std::string &cmdPtr, const JsonFile &jsonFile) { + info.out.push_back(jsonFile.get_int(cmdPtr + "/value")); } -void BuildGameText::_textbox_text(std::vector &out, const std::string &cmdPtr) { - std::string valueStr = _info.srcFile->get_string(cmdPtr + "/value"); - size_t valueStrLen = valueStr.size(); - int offset = out.size(); +void textbox_text(BuildInfo &info, const std::string &cmdPtr, const JsonFile &jsonFile) { + std::string valueStr = jsonFile.get_string(cmdPtr + "/value"); + + DKRText text(valueStr); + + std::vector textBytes = text.get_bytes(); + + size_t numBytesToCopy = textBytes.size(); + + int offset = info.out.size(); // Expand `out` to include the string. - out.resize(out.size() + valueStrLen + 1); // +1 for the NULL terminator. + info.out.resize(info.out.size() + numBytesToCopy + 1); // +1 for the NULL terminator. - char *outText = reinterpret_cast(&out[offset]); - std::strncpy(outText, valueStr.c_str(), valueStrLen); // Copy text to out. - outText[valueStrLen] = '\0'; // Add Null terminator to the end of the string. + std::copy(textBytes.begin(), textBytes.begin() + numBytesToCopy, info.out.begin() + offset); } -void BuildGameText::_build_textbox() { - if(!_info.srcFile->has("/pages")) { - // No pages means it is an empty file! - FileHelper::write_empty_file(_info.dstPath, true); +void build_textbox(BuildInfo &info, const JsonFile &jsonFile) { + if(!jsonFile.has("/pages")) { + if(info.build_to_file()) { + info.write_empty_file_to_dstPath(); + } return; } - std::vector out; - - size_t numberOfPages = _info.srcFile->length_of_array("/pages"); + size_t numberOfPages = jsonFile.length_of_array("/pages"); for(size_t page = 0; page < numberOfPages; page++) { std::string pagePtr = "/pages/" + std::to_string(page); - size_t numberOfCmds = _info.srcFile->length_of_array(pagePtr); + size_t numberOfCmds = jsonFile.length_of_array(pagePtr); for(size_t cmd = 0; cmd < numberOfCmds; cmd++) { std::string cmdPtr = pagePtr + "/" + std::to_string(cmd); - std::string command = _info.srcFile->get_string(cmdPtr + "/command"); + std::string command = jsonFile.get_string(cmdPtr + "/command"); const std::unordered_map> cmdFunctions = { - { "SetFont", TEXTBOX_CMD_LAMDA(_textbox_set_font) }, - { "SetBorder", TEXTBOX_CMD_LAMDA(_textbox_set_border) }, - { "SetColour", TEXTBOX_CMD_LAMDA(_textbox_set_colour) }, - { "SetAlignment", TEXTBOX_CMD_LAMDA(_textbox_set_alignment) }, - { "Unknown7", TEXTBOX_CMD_LAMDA(_textbox_unknown7) }, - { "AddVerticalSpacing", TEXTBOX_CMD_LAMDA(_textbox_add_vertical_spacing) }, - { "SetLineHeight", TEXTBOX_CMD_LAMDA(_textbox_set_line_height) }, - { "SetTimer", TEXTBOX_CMD_LAMDA(_textbox_set_timer) }, - { "AllowUserInput", TEXTBOX_CMD_LAMDA(_textbox_allow_user_input) }, - { "Text", TEXTBOX_CMD_LAMDA(_textbox_text) }, + { "SetFont", TEXTBOX_CMD_LAMDA(textbox_set_font) }, + { "SetBorder", TEXTBOX_CMD_LAMDA(textbox_set_border) }, + { "SetColour", TEXTBOX_CMD_LAMDA(textbox_set_colour) }, + { "SetAlignment", TEXTBOX_CMD_LAMDA(textbox_set_alignment) }, + { "Unknown7", TEXTBOX_CMD_LAMDA(textbox_unknown7) }, + { "AddVerticalSpacing", TEXTBOX_CMD_LAMDA(textbox_add_vertical_spacing) }, + { "SetLineHeight", TEXTBOX_CMD_LAMDA(textbox_set_line_height) }, + { "SetTimer", TEXTBOX_CMD_LAMDA(textbox_set_timer) }, + { "AllowUserInput", TEXTBOX_CMD_LAMDA(textbox_allow_user_input) }, + { "Text", TEXTBOX_CMD_LAMDA(textbox_text) }, }; // Make sure the misc type has a function to extract it. DebugHelper::assert(cmdFunctions.find(command) != cmdFunctions.end(), - "(BuildGameText::_build_textbox) Invalid textbox command: ", command); + "(build_textbox) Invalid textbox command: ", command); if(command != "Text") { int commandIndex = std::find(TEXTBOX_COMMANDS.begin(), TEXTBOX_COMMANDS.end(), command) - TEXTBOX_COMMANDS.begin(); - out.push_back(commandIndex); // Add command byte to out + info.out.push_back(commandIndex); // Add command byte to out } - cmdFunctions.at(command)(out, cmdPtr); + cmdFunctions.at(command)(info, cmdPtr, jsonFile); } if(page < numberOfPages - 1) { - out.push_back(1); // cmd 0x01 means next-page. + info.out.push_back(1); // cmd 0x01 means next-page. } } // TODO: Probably should pre-allocate the correct size. - if((out.size() & 0x7)) { - out.resize(DataHelper::align8(out.size()), 0); + if((info.out.size() & 0x7)) { + info.out.resize(DataHelper::align8(info.out.size()), 0); } - FileHelper::write_binary_file(out, _info.dstPath, true); + if(info.build_to_file()) { + info.write_out_to_dstPath(); + } +} + +void BuildGameText::build(BuildInfo &info) { + const JsonFile &jsonFile = info.get_src_json_file(); + + // Get text-type as lowercase to make sure it is case-insensitive + std::string textType = jsonFile.get_string_lowercase("/text-type", "not_set"); + + if(textType == "dialog") { + build_dialog(info, jsonFile); + } else if(textType == "textbox") { + build_textbox(info, jsonFile); + } else { + DebugHelper::error("Invalid text type: ", textType); + } } diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildGameText.h b/tools/dkr_assets_tool_src/builder/buildTypes/buildGameText.h index 996aad72..77fb6c71 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildGameText.h +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildGameText.h @@ -1,34 +1,10 @@ #pragma once #include "builder/buildInfo.h" -#include "misc/settings.hpp" +#include "helpers/c/cContext.h" -#include "fileTypes/fonts.hpp" - -#include "helpers/debugHelper.h" -#include "helpers/fileHelper.h" -#include "helpers/jsonHelper.h" - -class BuildGameText { -public: - BuildGameText(DkrAssetsSettings &settings, BuildInfo &info); - ~BuildGameText(); -private: - DkrAssetsSettings &_settings; - BuildInfo &_info; - - void _build_dialog(); - - void _textbox_set_font(std::vector &out, const std::string &cmdPtr); - void _textbox_set_border(std::vector &out, const std::string &cmdPtr); - void _textbox_set_colour(std::vector &out, const std::string &cmdPtr); - void _textbox_set_alignment(std::vector &out, const std::string &cmdPtr); - void _textbox_unknown7(std::vector &out, const std::string &cmdPtr); - void _textbox_add_vertical_spacing(std::vector &out, const std::string &cmdPtr); - void _textbox_set_line_height(std::vector &out, const std::string &cmdPtr); - void _textbox_set_timer(std::vector &out, const std::string &cmdPtr); - void _textbox_allow_user_input(std::vector &out, const std::string &cmdPtr); - void _textbox_text(std::vector &out, const std::string &cmdPtr); - - void _build_textbox(); -}; +namespace DkrAssetsTool { +namespace BuildGameText { + void build(BuildInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildJpFonts.cpp b/tools/dkr_assets_tool_src/builder/buildTypes/buildJpFonts.cpp new file mode 100644 index 00000000..20ffa775 --- /dev/null +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildJpFonts.cpp @@ -0,0 +1,310 @@ +#include "buildJpFonts.h" + +#include "fileTypes/jpFonts.hpp" +#include "fileTypes/texture.hpp" + +#include "helpers/dataHelper.h" +#include "helpers/debugHelper.h" +#include "helpers/imageHelper.h" +#include "helpers/fileHelper.h" +#include "helpers/jsonHelper.h" +#include "helpers/stringHelper.h" +#include "helpers/assetsHelper.h" + +#include "misc/globalSettings.h" + +#include "libs/bytes_view.hpp" + +#include "text/dkrText.h" + +#include "builder/buildInfoCollection.h" + +using namespace DkrAssetsTool; + +void build_v77_beta_font(BuildInfo &info, const JsonFile &jsonFile) { + DeferredAssetInfo deferInfo = AssetsHelper::get_deferred_asset_info("ASSET_JAPANESE_FONTS_TABLE"); + BuildInfoCollection &collection = info.get_collection(); + + size_t numberOfFonts = jsonFile.length_of_array("/fonts-order"); + + std::vector outJpFontTable(numberOfFonts * sizeof(BetaJpFontHeader)); + + BytesView outJpFontTableView(outJpFontTable); + BetaJpFontHeader *headers = outJpFontTableView.data_cast(); + + std::vector images; + images.reserve(numberOfFonts); + + size_t totalDataSize = 0; + + for(size_t fontIndex = 0; fontIndex < numberOfFonts; fontIndex++) { + std::string fontBuildId = jsonFile.get_string("/fonts-order/" + std::to_string(fontIndex)); + + std::string fontLocalFilepath = jsonFile.get_string("/fonts/" + fontBuildId); + + DebugHelper::assert_(!fontLocalFilepath.empty(), + "(BuildJpFonts::build_v77_beta_font) Could not find a filepath for jp font \"", fontBuildId, "\""); + + fs::path fontFilepath = info.get_path_to_directory() / fontLocalFilepath; + + auto tryGetFontJsonFile = JsonHelper::get_file(fontFilepath); + + DebugHelper::assert_(tryGetFontJsonFile.has_value(), + "(BuildJpFonts::build_v77_beta_font) Could not find the file ", fontFilepath); + + JsonFile &fontJsonFile = tryGetFontJsonFile.value(); + + fs::path imgPath = fontJsonFile.get_filepath().parent_path() / fontJsonFile.get_string("/image/filename"); + std::string imgFormat = fontJsonFile.get_string("/image/format", "I4"); + + DebugHelper::assert_(imgFormat == "I4", + "(BuildJpFonts::build_v77_beta_font) The image format \"", imgFormat, + "\" is currently not supported for beta JP fonts. Only I4 images are supported at the moment. Sorry!"); + + //DebugHelper::info(fontJsonFile.get_filepath()); + + images.emplace_back(imgPath, imgFormat); + + size_t imgWidth = images[fontIndex].get_width(); + size_t imgHeight = images[fontIndex].get_height(); + + //DebugHelper::info(fontJsonFile.get_int("/header/unk0")); + + headers[fontIndex].unk0 = fontJsonFile.get_int("/header/unk0"); + headers[fontIndex].x = fontJsonFile.get_int("/header/x"); + headers[fontIndex].y = fontJsonFile.get_int("/header/y"); + headers[fontIndex].charWidth = fontJsonFile.get_int("/header/charWidth"); + headers[fontIndex].height = fontJsonFile.get_int("/header/height"); + headers[fontIndex].unk5 = fontJsonFile.get_int("/header/unk5"); + headers[fontIndex].imgWidth = imgWidth; + headers[fontIndex].unk8 = fontJsonFile.get_int("/header/unk8"); + headers[fontIndex].unkA = fontJsonFile.get_int("/header/unkA"); + headers[fontIndex].unkC = totalDataSize; // Not sure about this! Not like it is getting used anyway. + + totalDataSize += (imgWidth * imgHeight) / 2; + } + + info.out.resize(totalDataSize); + + size_t curOutOffset = 0; + for(size_t i = 0; i < numberOfFonts; i++) { + BytesView outImgData(info.out, curOutOffset); + N64Image &curImg = images[i]; + + curImg.flip_vertically(); // Was flipped vertically during extraction, now I need to flip it back. + + uint8_t *imgData = curImg.get_img_as_ia16(); // Must be freed! + + size_t imgWidth = images[i].get_width(); + size_t imgHeight = images[i].get_height(); + + size_t numberOfBytes = (imgWidth * imgHeight) / 2; + + for(size_t j = 0; j < numberOfBytes; j++) { + uint8_t a = imgData[j * 4]; // Should be either 0xFF or 0x00 + uint8_t b = imgData[j * 4 + 2]; // Should be either 0xFF or 0x00 + + if(a == 0xFF) { + a = 0x10; + } + if(b == 0xFF) { + b = 0x1; + } + outImgData[j] = a | b; + } + + curOutOffset += numberOfBytes; + + free(imgData); + } + + //outJpFontTableView.print(0, outJpFontTable.size()); + + // Add jp font table to build collection. + collection.add_deferred_build_info("ASSET_JAPANESE_FONTS_TABLE", "ASSET_JAPANESE_FONTS_TABLE", outJpFontTable, + info.get_dst_folder() / deferInfo.outputPath, info.get_info_context()); + +} + +void build_v79_jp_fonts(BuildInfo &info, const JsonFile &jsonFile) { + DeferredAssetInfo deferInfo = AssetsHelper::get_deferred_asset_info("ASSET_JAPANESE_FONTS_TABLE"); + BuildInfoCollection &collection = info.get_collection(); + + size_t numberOfFonts = jsonFile.length_of_array("/fonts-order"); + + std::vector outJpFontTable(numberOfFonts * sizeof(JpFontHeader)); + + BytesView outJpFontTableView(outJpFontTable); + JpFontHeader *headers = outJpFontTableView.data_cast(); + + size_t totalDataSize = 0; + + std::vector> fontImageOffsets(numberOfFonts); + std::vector fontJsonPaths(numberOfFonts); + + // First loop to fill in the font headers and get offsets; + for(size_t fontIndex = 0; fontIndex < numberOfFonts; fontIndex++) { + std::string fontBuildId = jsonFile.get_string("/fonts-order/" + std::to_string(fontIndex)); + + std::string fontLocalFilepath = jsonFile.get_string("/fonts/" + fontBuildId); + + DebugHelper::assert_(!fontLocalFilepath.empty(), + "(BuildJpFonts::build_v79_jp_fonts) Could not find a filepath for jp font \"", fontBuildId, "\""); + + fontJsonPaths[fontIndex] = info.get_path_to_directory() / fontLocalFilepath; + + auto tryGetFontJsonFile = JsonHelper::get_file(fontJsonPaths[fontIndex]); + + DebugHelper::assert_(tryGetFontJsonFile.has_value(), + "(BuildJpFonts::build_v79_jp_fonts) Could not find the file ", fontJsonPaths[fontIndex]); + + JsonFile &fontJsonFile = tryGetFontJsonFile.value(); + + headers[fontIndex].unk0 = fontJsonFile.get_int("/header/unk0"); + headers[fontIndex].cellWidth = fontJsonFile.get_int("/header/cellWidth"); + headers[fontIndex].cellHeight = fontJsonFile.get_int("/header/cellHeight"); + headers[fontIndex].charWidth = fontJsonFile.get_int("/header/charWidth"); + headers[fontIndex].height = fontJsonFile.get_int("/header/height"); + headers[fontIndex].unk5 = fontJsonFile.get_int("/header/unk5"); + headers[fontIndex].unk6 = fontJsonFile.get_int("/header/unk6"); + headers[fontIndex].unk7 = fontJsonFile.get_int("/header/unk7"); + + headers[fontIndex].offset = totalDataSize; + + size_t bytesPerCharacter = sizeof(JpFontChar); + fontImageOffsets[fontIndex].first = bytesPerCharacter; + + fs::path colorImgFilename = fontJsonFile.get_string("/image/filename"); + fs::path colorImageFilepath = fontJsonFile.get_filepath().parent_path() / colorImgFilename; + int imgWidth, imgHeight; + ImageHelper::get_width_and_height(colorImageFilepath, imgWidth, imgHeight); + + DebugHelper::assert_(imgWidth % 16 == 0, + "(BuildJpFonts::build_v79_jp_fonts) ", colorImgFilename, " width of ", imgWidth, " is not divisible by 16!"); + DebugHelper::assert_(imgHeight % 16 == 0, + "(BuildJpFonts::build_v79_jp_fonts) ", colorImgFilename, " height of ", imgHeight, " is not divisible by 16!"); + + int cellWidth = imgWidth / 16; + int cellHeight = imgHeight / 16; + + std::string colorImageFormat = fontJsonFile.get_string("/image/format", "RGBA16"); + + size_t colorImgSize = ImageHelper::image_size(cellWidth, cellHeight, colorImageFormat); + bytesPerCharacter += colorImgSize; + + bool hasAlphaImage = fontJsonFile.has("/image-alpha/filename"); + + if(hasAlphaImage) { + fontImageOffsets[fontIndex].second = bytesPerCharacter; + std::string alphaImageFormat = fontJsonFile.get_string("/image-alpha/format", "I4"); + bytesPerCharacter += ImageHelper::image_size(cellWidth, cellHeight, alphaImageFormat); + } else { + fontImageOffsets[fontIndex].second = -1; // JpFontChar.offsetToSecondImg is -1 if there is no alpha image. + } + + headers[fontIndex].bytesPerCharacter = bytesPerCharacter; + totalDataSize += bytesPerCharacter * 256; + } + + info.out.resize(totalDataSize); + BytesView outFontImagesBytesView(info.out); + + const std::vector &DKRJP_FONT_CHARACTERS = DKRText::get_dkrjp_characters(); + + std::string charactersPtr = "/characters/"; + + // Second loop to build the data for each font. + for(size_t fontIndex = 0; fontIndex < numberOfFonts; fontIndex++) { + size_t bytesPerCharacter = headers[fontIndex].bytesPerCharacter; + size_t sizeOfFont = bytesPerCharacter * 256; + BytesView outFontImgBytesView = outFontImagesBytesView.get_sub_view(headers[fontIndex].offset, sizeOfFont); + + // Already checked the existance of the file in the previous loop, so it *should* be safe to just do value() here. + JsonFile &fontJsonFile = JsonHelper::get_file(fontJsonPaths[fontIndex]).value(); + bool hasAlphaImage = fontJsonFile.has("/image-alpha/filename"); + + std::string colorImageFormat = fontJsonFile.get_string("/image/format", "RGBA16"); + + fs::path colorImageFilepath = fontJsonFile.get_filepath().parent_path() / fontJsonFile.get_string("/image/filename"); + N64Image colorImage = ImageHelper::load_image(colorImageFilepath, colorImageFormat); + colorImage.interlace(); + + N64Image alphaImage; + std::string alphaImageFormat = fontJsonFile.get_string("/image-alpha/format", "I4"); + if(hasAlphaImage) { + fs::path alphaImageFilepath = fontJsonFile.get_filepath().parent_path() / fontJsonFile.get_string("/image-alpha/filename"); + alphaImage = ImageHelper::load_image(alphaImageFilepath, alphaImageFormat); + alphaImage.interlace(); + } + + uint8_t colorImageFormatInt = DataHelper::vector_index_of(TEXTURE_FORMAT_INT_TO_STRING, colorImageFormat); + uint8_t alphaImageFormatInt = DataHelper::vector_index_of(TEXTURE_FORMAT_INT_TO_STRING, alphaImageFormat); + + for(size_t charIndex = 0; charIndex < 256; charIndex++) { + std::string jpChar = DKRJP_FONT_CHARACTERS[charIndex]; + + if(jpChar.empty()) { + jpChar = ""; + } else if(jpChar == "/") { + jpChar = "~1"; // Frontslash + } + + std::string charPtr = charactersPtr + jpChar; + + BytesView outCharImgBytesView = outFontImgBytesView.get_sub_view(charIndex * bytesPerCharacter, bytesPerCharacter); + JpFontChar *outChar = outCharImgBytesView.data_cast(); + + outChar->offsetToFirstImg = fontImageOffsets[fontIndex].first; + outChar->offsetToSecondImg = fontImageOffsets[fontIndex].second; + outChar->firstImageFormat = colorImageFormatInt; + outChar->secondImageFormat = alphaImageFormatInt; + outChar->spacing = fontJsonFile.get_int(charPtr + "/spacing", 0); + // TODO: Calculate these automatically. + outChar->left = fontJsonFile.get_int(charPtr + "/left", 0); + outChar->top = fontJsonFile.get_int(charPtr + "/top", 0); + outChar->right = fontJsonFile.get_int(charPtr + "/right", 0); + outChar->bottom = fontJsonFile.get_int(charPtr + "/bottom", 0); + + int x = (charIndex % 16) * headers[fontIndex].cellWidth; + int y = (charIndex / 16) * headers[fontIndex].cellHeight; + + N64Image::Region region = { x, y, x + headers[fontIndex].cellWidth, y + headers[fontIndex].cellHeight }; + + uint8_t *outCharColorData = (uint8_t*)outCharImgBytesView.data() + outChar->offsetToFirstImg; + colorImage.copy_data_from_region(outCharColorData, headers[fontIndex].cellWidth, region); + + if(hasAlphaImage) { + uint8_t *outCharAlphaData = (uint8_t*)outCharImgBytesView.data() + outChar->offsetToSecondImg; + alphaImage.copy_data_from_region(outCharAlphaData, headers[fontIndex].cellWidth, region); + } + } + + } + + // Add jp font table to build collection. + collection.add_deferred_build_info("ASSET_JAPANESE_FONTS_TABLE", "ASSET_JAPANESE_FONTS_TABLE", outJpFontTable, + info.get_dst_folder() / deferInfo.outputPath, info.get_info_context()); +} + +void BuildJPFonts::build(BuildInfo &info) { + const JsonFile &jsonFile = info.get_src_json_file(); + + //size_t numberOfFonts = jsonFile.length_of_array("/fonts-order"); + + //size_t outSize = FileHelper::align16(sizeof(be_uint32_t) + (numberOfFonts * sizeof(FontFile))); + //info.out.resize(outSize); + + // Note: The format is different in v79/v80. So gotta check if this is the beta version of the JP font. + bool isBetaJpFont = StringHelper::ends_with(GlobalSettings::get_dkr_version(), "v77"); + + if(isBetaJpFont) { + build_v77_beta_font(info, jsonFile); + } else { + // v79/v80 + build_v79_jp_fonts(info, jsonFile); + } + + if(info.build_to_file()) { + info.write_out_to_dstPath(); + } +} diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildJpFonts.h b/tools/dkr_assets_tool_src/builder/buildTypes/buildJpFonts.h new file mode 100644 index 00000000..0641f0a8 --- /dev/null +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildJpFonts.h @@ -0,0 +1,9 @@ +#pragma once + +#include "builder/buildInfo.h" + +namespace DkrAssetsTool { +namespace BuildJPFonts { + void build(BuildInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildLevelHeader.cpp b/tools/dkr_assets_tool_src/builder/buildTypes/buildLevelHeader.cpp index 34a7e893..0bd2eb5b 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildLevelHeader.cpp +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildLevelHeader.cpp @@ -2,242 +2,65 @@ #include "helpers/assetsHelper.h" +#include "fileTypes/levelHeader.hpp" + +#include "text/dkrText.h" + +#include "builder/buildInfoCollection.h" + #include // for strncpy -BuildLevelHeader::BuildLevelHeader(DkrAssetsSettings &settings, BuildInfo &info) : _settings(settings), _info(info) { - _preload_c_context(); // For enums - - _build_level_name(); - - LevelHeader *header = new LevelHeader(); - - // World ID - std::string worldId = _info.srcFile->get_string("/world"); - header->world = _c_context.get_int_value_of_symbol(worldId); - - // Course Height - header->courseHeight = _info.srcFile->get_float("/course-height"); - - // Track ID - std::string trackId = _info.srcFile->get_string("/model"); - header->geometry = AssetsHelper::get_asset_index(_settings, "ASSET_LEVEL_MODELS", trackId); - - // Object Maps - std::string collectableMapId = _info.srcFile->get_string("/map-collectables"); - std::string objMap2Id = _info.srcFile->get_string("/map-2"); - header->collectablesObjMap = AssetsHelper::get_asset_index(_settings, "ASSET_LEVEL_OBJECT_MAPS", collectableMapId); - header->objectMap2 = AssetsHelper::get_asset_index(_settings, "ASSET_LEVEL_OBJECT_MAPS", objMap2Id); - - // Other - header->velocityCap = _info.srcFile->get_int("/max-velocity", 0); - header->cameraFOV = _info.srcFile->get_int("/fov", 60); - header->laps = _info.srcFile->get_int("/lap-count", 3); - - // Pulsing light data - header->pulseLightData = -1; // Default value. - std::string pulsatingLightId = _info.srcFile->get_string("/pulsating-lights"); - if(!pulsatingLightId.empty()) { - header->pulseLightData = AssetsHelper::get_asset_index(_settings, "ASSET_MISC", pulsatingLightId); - } - - // Race Type - std::string raceTypeId = _info.srcFile->get_string("/race-type"); - header->raceType = _c_context.get_int_value_of_symbol(raceTypeId); - - // Audio related - header->music = _info.srcFile->get_int("/music"); - header->instruments = _info.srcFile->get_int("/instruments"); - - const size_t MAX_NUM_OF_MISC_ASSETS = 7; - - // Misc assets - size_t numMiscAssets = 0; - if(_info.srcFile->has("/misc-assets")) { - numMiscAssets = _info.srcFile->length_of_array("/misc-assets"); - if(numMiscAssets > MAX_NUM_OF_MISC_ASSETS) { - DebugHelper::warn("Level Headers are limited to 7 misc assets! You have ", numMiscAssets, ". Only setting the first 7."); - numMiscAssets = MAX_NUM_OF_MISC_ASSETS; - } - for(size_t i = 0; i < numMiscAssets; i++) { - std::string miscAssetId = _info.srcFile->get_string("/misc-assets/" + std::to_string(i)); - header->miscAssets[i] = AssetsHelper::get_asset_index(_settings, "ASSET_MISC", miscAssetId); - } - } - - // Fill the rest of the misc asset slots with -1 - for(size_t i = numMiscAssets; i < MAX_NUM_OF_MISC_ASSETS; i++) { - header->miscAssets[i] = -1; - } - - // Vehicle info - std::string vehicle = _info.srcFile->get_string("/default-vehicle", "VEHICLE_CAR"); - header->vehicle = _c_context.get_int_value_of_symbol(vehicle); - - if(_info.srcFile->has("/avaliable-vehicles")) { - header->avaliableVehicles = _build_enum_bitfield("/avaliable-vehicles"); - } - - // AI levels - _build_ai_levels("/ai-levels/adv1", header->adv1AiLevels); - _build_ai_levels("/ai-levels/adv2", header->adv2AiLevels); - - // Weather - _build_weather("/weather", header->weather); - - // Fog - _build_fog("/fog", header->fog); - - - // Background related stuff - header->skybox = -1; // Default value - header->specialSkyTexture = -1; // Default value - if(_info.srcFile->has("/background/skybox/id")) { - std::string skyboxObjId = _info.srcFile->get_string("/background/skybox/id"); - header->skybox = AssetsHelper::get_asset_index(_settings, "ASSET_OBJECTS", skyboxObjId); - } else if (_info.srcFile->has("/background/skybox/special-sky")) { // Only used in wizpig 2 - header->specialSky = _info.srcFile->get_int("/background/skybox/special-sky"); - header->specialSkyTexture = _info.srcFile->get_int("/background/skybox/special-sky-texture"); - } - - header->bgColour[0] = _info.srcFile->get_int("/background/colour/red"); - header->bgColour[1] = _info.srcFile->get_int("/background/colour/green"); - header->bgColour[2] = _info.srcFile->get_int("/background/colour/blue"); - header->bgColourBottom[0] = _info.srcFile->get_int("/background/multiplayer/gradient-colour/bottom/red"); - header->bgColourBottom[1] = _info.srcFile->get_int("/background/multiplayer/gradient-colour/bottom/green"); - header->bgColourBottom[2] = _info.srcFile->get_int("/background/multiplayer/gradient-colour/bottom/blue"); - header->bgColourTop[0] = _info.srcFile->get_int("/background/multiplayer/gradient-colour/top/red"); - header->bgColourTop[1] = _info.srcFile->get_int("/background/multiplayer/gradient-colour/top/green"); - header->bgColourTop[2] = _info.srcFile->get_int("/background/multiplayer/gradient-colour/top/blue"); - - // Unknowns - header->unk1 = _info.srcFile->get_int("/unknown/unk1"); - header->unk2 = _info.srcFile->get_int("/unknown/unk2"); - header->unk3 = _info.srcFile->get_int("/unknown/unk3"); - - for(size_t i = 0; i < 4; i++) { - header->unk4[i] = _info.srcFile->get_int("/unknown/unk4/" + std::to_string(i)); - } - - for(size_t i = 0; i < 10; i++) { - header->unkC[i] = _info.srcFile->get_int("/unknown/unkC/" + std::to_string(i)); - } - - for(size_t i = 0; i < 10; i++) { - header->unk16[i] = _info.srcFile->get_int("/unknown/unk16/" + std::to_string(i)); - } - - header->unk2A = _info.srcFile->get_int("/unknown/unk2A"); - - for(size_t i = 0; i < 9; i++) { - header->unk2B[i] = _info.srcFile->get_int("/unknown/unk2B/" + std::to_string(i)); - } - - for(size_t i = 0; i < 5; i++) { - header->unk44[i] = _info.srcFile->get_int("/unknown/unk44/" + std::to_string(i)); - } - - for(size_t i = 0; i < 3; i++) { - header->unk4F[i] = _info.srcFile->get_int("/unknown/unk4F/" + std::to_string(i)); - } - - header->unk53 = _info.srcFile->get_int("/unknown/unk53"); - - header->unk56 = _info.srcFile->get_int("/waves/unk56"); - header->unk57 = _info.srcFile->get_int("/waves/unk57"); - header->unk58 = _info.srcFile->get_int("/waves/unk58"); - header->unk59 = _info.srcFile->get_int("/waves/unk59"); - header->unk5A = _info.srcFile->get_int("/waves/unk5A"); - header->unk5C = _info.srcFile->get_int("/waves/unk5C"); - header->unk5D = _info.srcFile->get_int("/waves/unk5D"); - header->unk5E = _info.srcFile->get_int("/waves/unk5E"); - header->unk60 = _info.srcFile->get_int("/waves/unk60"); - header->wavePower = _info.srcFile->get_int("/waves/wave-power"); - header->unk64 = _info.srcFile->get_int("/waves/unk64"); - header->unk66 = _info.srcFile->get_int("/waves/unk66"); - header->unk68 = _info.srcFile->get_int("/waves/unk68"); - header->unk6A = _info.srcFile->get_int("/waves/unk6A"); - header->unk6B = _info.srcFile->get_int("/waves/unk6B"); - header->unk6C = _info.srcFile->get_int("/waves/unk6C"); - header->unk6D = _info.srcFile->get_int("/waves/unk6D"); - header->unk6E = _info.srcFile->get_int("/waves/unk6E"); - header->unk70 = _info.srcFile->get_int("/waves/unk70"); - header->unk71 = _info.srcFile->get_int("/waves/unk71"); - header->unk72 = _info.srcFile->get_int("/unknown/unk72"); - header->unk73 = _info.srcFile->get_int("/unknown/unk73"); - - header->unkA0 = _info.srcFile->get_int("/unknown/unkA0"); - header->unkA2 = _info.srcFile->get_int("/unknown/unkA2"); - header->unkA3 = _info.srcFile->get_int("/unknown/unkA3"); - - header->unkA8 = _info.srcFile->get_int("/unknown/unkA8"); - header->unkAA = _info.srcFile->get_int("/unknown/unkAA"); - - header->unkB0 = _info.srcFile->get_int("/unknown/unkB0"); - header->unkB2 = _info.srcFile->get_int("/unknown/unkB2"); - header->unkB3 = _info.srcFile->get_int("/unknown/unkB3"); - header->unkB4 = _info.srcFile->get_int("/unknown/unkB4"); - header->unkB5 = _info.srcFile->get_int("/unknown/unkB5"); - header->unkB6 = _info.srcFile->get_int("/unknown/unkB6"); - header->unkB7 = _info.srcFile->get_int("/unknown/unkB7"); - std::string bossRaceID = _info.srcFile->get_string("/boss-race-id"); - header->bossRaceID = _c_context.get_int_value_of_symbol(bossRaceID); - header->unkB9 = _info.srcFile->get_int("/unknown/unkB9"); - header->unkBC = _info.srcFile->get_int("/unknown/unkBC"); - header->unkBD = _info.srcFile->get_int("/unknown/unkBD"); - header->unkC4 = _info.srcFile->get_int("/unknown/unkC4"); - - FileHelper::write_binary_file(reinterpret_cast(header), sizeof(LevelHeader), - _info.dstPath, true); +using namespace DkrAssetsTool; + +void build_weather(const JsonFile &jsonFile, std::string ptr, LevelHeader_Weather &weather) { + weather.enable = jsonFile.get_int(ptr + "/enable"); + weather.type = jsonFile.get_int(ptr + "/type"); + weather.intensity = jsonFile.get_int(ptr + "/intensity"); + weather.opacity = jsonFile.get_int(ptr + "/opacity"); + weather.velocity[0] = jsonFile.get_int(ptr + "/velocity/x"); + weather.velocity[1] = jsonFile.get_int(ptr + "/velocity/y"); + weather.velocity[2] = jsonFile.get_int(ptr + "/velocity/z"); } -BuildLevelHeader::~BuildLevelHeader() { - +void build_ai_levels(const JsonFile &jsonFile, std::string ptr, LevelHeader_AiLevels &aiLevels) { + aiLevels.baseAiLevel = jsonFile.get_int(ptr + "/base"); + aiLevels.silverCoinsAiLevel = jsonFile.get_int(ptr + "/silver-coins"); + aiLevels.completedAiLevel = jsonFile.get_int(ptr + "/completed"); + aiLevels.tracksModeAiLevel = jsonFile.get_int(ptr + "/tracks-mode"); + aiLevels.trophyRaceAiLevel = jsonFile.get_int(ptr + "/trophy-race"); } -void BuildLevelHeader::_build_weather(std::string ptr, LevelHeader_Weather &weather) { - weather.enable = _info.srcFile->get_int(ptr + "/enable"); - weather.type = _info.srcFile->get_int(ptr + "/type"); - weather.intensity = _info.srcFile->get_int(ptr + "/intensity"); - weather.opacity = _info.srcFile->get_int(ptr + "/opacity"); - weather.velocity[0] = _info.srcFile->get_int(ptr + "/velocity/x"); - weather.velocity[1] = _info.srcFile->get_int(ptr + "/velocity/y"); - weather.velocity[2] = _info.srcFile->get_int(ptr + "/velocity/z"); -} - -void BuildLevelHeader::_build_ai_levels(std::string ptr, LevelHeader_AiLevels &aiLevels) { - aiLevels.baseAiLevel = _info.srcFile->get_int(ptr + "/base"); - aiLevels.silverCoinsAiLevel = _info.srcFile->get_int(ptr + "/silver-coins"); - aiLevels.completedAiLevel = _info.srcFile->get_int(ptr + "/completed"); - aiLevels.tracksModeAiLevel = _info.srcFile->get_int(ptr + "/tracks-mode"); - aiLevels.trophyRaceAiLevel = _info.srcFile->get_int(ptr + "/trophy-race"); -} - -void BuildLevelHeader::_build_fog(std::string ptr, LevelHeader_Fog &fogInfo) { - fogInfo.near = _info.srcFile->get_int(ptr + "/near"); - fogInfo.far = _info.srcFile->get_int(ptr + "/far"); - fogInfo.colour[0] = _info.srcFile->get_int(ptr + "/colour/red"); - fogInfo.colour[1] = _info.srcFile->get_int(ptr + "/colour/green"); - fogInfo.colour[2] = _info.srcFile->get_int(ptr + "/colour/blue"); +void build_fog(const JsonFile &jsonFile, std::string ptr, LevelHeader_Fog &fogInfo) { + fogInfo.near = jsonFile.get_int(ptr + "/near"); + fogInfo.far = jsonFile.get_int(ptr + "/far"); + fogInfo.colour[0] = jsonFile.get_int(ptr + "/colour/red"); + fogInfo.colour[1] = jsonFile.get_int(ptr + "/colour/green"); + fogInfo.colour[2] = jsonFile.get_int(ptr + "/colour/blue"); } template -T BuildLevelHeader::_build_enum_bitfield(std::string ptr) { +T build_enum_bitfield(BuildInfo &info, const JsonFile &jsonFile, std::string ptr) { + CContext &cContext = info.get_c_context(); + T out = 0; - size_t numValues = _info.srcFile->length_of_array(ptr); + size_t numValues = jsonFile.length_of_array(ptr); for(size_t i = 0; i < numValues; i++) { - std::string enumSym = _info.srcFile->get_string(ptr + "/" + std::to_string(i)); - out |= 1 << _c_context.get_int_value_of_symbol(enumSym); + std::string enumSym = jsonFile.get_string(ptr + "/" + std::to_string(i)); + out |= 1 << cContext.get_int_value_of_symbol(enumSym); } return out; } -void BuildLevelHeader::_build_level_name() { - DeferredAssetInfo deferInfo = AssetsHelper::get_deferred_asset_info(_settings, "ASSET_LEVEL_NAMES"); +void build_level_name(BuildInfo &info, const JsonFile &jsonFile) { + const std::string levelNamesSectionBuildId = "ASSET_LEVEL_NAMES"; + DeferredAssetInfo deferInfo = AssetsHelper::get_deferred_asset_info(levelNamesSectionBuildId); - CEnum *langEnum = _c_context.get_enum("Language"); + CContext &cContext = info.get_c_context(); + + CEnum *langEnum = cContext.get_enum("Language"); size_t numLanguages = langEnum->get_member_count(); @@ -249,30 +72,219 @@ void BuildLevelHeader::_build_level_name() { std::string langName; langEnum->get_symbol_of_value(i, langName); - std::string levelLangName = _info.srcFile->get_string("/name/" + langName); + DKRText nameText(jsonFile.get_string("/name/" + langName)); + std::vector nameTextBytes = nameText.get_bytes(); - size_t langNameSize = levelLangName.size(); size_t offset = out.size(); - out.resize(offset + langNameSize + 1); // Resize out to fit new string. - char *outLangName = reinterpret_cast(&out[offset]); - strncpy(outLangName, levelLangName.c_str(), langNameSize); + out.resize(offset + nameTextBytes.size() + 1); // Resize out to fit new string. + + strncpy((char*)&out[offset], (char*)&nameTextBytes[0], nameTextBytes.size()); } - fs::path outPath = _info.dstPath.parent_path() / deferInfo.outputPath / _info.dstPath.filename(); + fs::path outPath = info.get_dst_folder() / deferInfo.outputPath / info.get_dst_filename(); - FileHelper::write_binary_file(out, outPath, true); -} - -void BuildLevelHeader::_preload_c_context() { - fs::path includeFolder = _settings.pathToRepo / "include/"; - - // Load all enums from these files. - fs::path enumPaths[] = { - includeFolder / "enums.h" - }; - - for(fs::path &enumPath : enumPaths) { - CEnumsHelper::load_enums_from_file(&_c_context, enumPath); + if(info.build_to_file()) { + FileHelper::write_binary_file(out, outPath, true); + } else { + BuildInfoCollection &collection = info.get_collection(); + std::string buildId = info.get_build_id() + deferInfo.idPostfix; + + collection.add_deferred_build_info(levelNamesSectionBuildId, buildId, info.get_file_index(), + out, info.get_dst_folder() / deferInfo.outputPath, info.get_info_context()); } } +void BuildLevelHeader::build(BuildInfo &info) { + const JsonFile &jsonFile = info.get_src_json_file(); + + // Make sure the enums in "/include/enums.h" are loaded. + if(info.build_to_file()) { + info.load_enums_into_c_context({ "enums.h" }); + } + + build_level_name(info, jsonFile); + + CContext &cContext = info.get_c_context(); + + info.out.resize(sizeof(LevelHeader)); + LevelHeader *header = reinterpret_cast(&info.out[0]); + + // World ID + std::string worldId = jsonFile.get_string("/world"); + header->world = cContext.get_int_value_of_symbol(worldId); + + // Course Height + header->courseHeight = jsonFile.get_float("/course-height"); + + // Track ID + std::string trackId = jsonFile.get_string("/model"); + header->geometry = AssetsHelper::get_asset_index("ASSET_LEVEL_MODELS", trackId); + + // Object Maps + std::string collectableMapId = jsonFile.get_string("/map-collectables"); + std::string objMap2Id = jsonFile.get_string("/map-2"); + header->collectablesObjMap = AssetsHelper::get_asset_index("ASSET_LEVEL_OBJECT_MAPS", collectableMapId); + header->objectMap2 = AssetsHelper::get_asset_index("ASSET_LEVEL_OBJECT_MAPS", objMap2Id); + + // Other + header->velocityCap = jsonFile.get_int("/max-velocity", 0); + header->cameraFOV = jsonFile.get_int("/fov", 60); + header->laps = jsonFile.get_int("/lap-count", 3); + + // Pulsing light data + header->pulseLightData = -1; // Default value. + std::string pulsatingLightId = jsonFile.get_string("/pulsating-lights"); + if(!pulsatingLightId.empty()) { + header->pulseLightData = AssetsHelper::get_asset_index("ASSET_MISC", pulsatingLightId); + } + + // Race Type + std::string raceTypeId = jsonFile.get_string("/race-type"); + header->raceType = cContext.get_int_value_of_symbol(raceTypeId); + + // Audio related + header->music = jsonFile.get_int("/music"); + header->instruments = jsonFile.get_int("/instruments"); + + const size_t MAX_NUM_OF_MISC_ASSETS = 7; + + // Misc assets + size_t numMiscAssets = 0; + if(jsonFile.has("/misc-assets")) { + numMiscAssets = jsonFile.length_of_array("/misc-assets"); + if(numMiscAssets > MAX_NUM_OF_MISC_ASSETS) { + DebugHelper::warn("Level Headers are limited to 7 misc assets! You have ", numMiscAssets, ". Only setting the first 7."); + numMiscAssets = MAX_NUM_OF_MISC_ASSETS; + } + for(size_t i = 0; i < numMiscAssets; i++) { + std::string miscAssetId = jsonFile.get_string("/misc-assets/" + std::to_string(i)); + header->miscAssets[i] = AssetsHelper::get_asset_index("ASSET_MISC", miscAssetId); + } + } + + // Fill the rest of the misc asset slots with -1 + for(size_t i = numMiscAssets; i < MAX_NUM_OF_MISC_ASSETS; i++) { + header->miscAssets[i] = -1; + } + + // Vehicle info + std::string vehicle = jsonFile.get_string("/default-vehicle", "VEHICLE_CAR"); + header->vehicle = cContext.get_int_value_of_symbol(vehicle); + + if(jsonFile.has("/avaliable-vehicles")) { + header->avaliableVehicles = build_enum_bitfield(info, jsonFile, "/avaliable-vehicles"); + } + + // AI levels + build_ai_levels(jsonFile, "/ai-levels/adv1", header->adv1AiLevels); + build_ai_levels(jsonFile, "/ai-levels/adv2", header->adv2AiLevels); + + // Weather + build_weather(jsonFile, "/weather", header->weather); + + // Fog + build_fog(jsonFile, "/fog", header->fog); + + + // Background related stuff + header->skybox = -1; // Default value + header->specialSkyTexture = -1; // Default value + if(jsonFile.has("/background/skybox/id")) { + std::string skyboxObjId = jsonFile.get_string("/background/skybox/id"); + header->skybox = AssetsHelper::get_asset_index("ASSET_OBJECTS", skyboxObjId); + } else if (jsonFile.has("/background/skybox/special-sky")) { // Only used in wizpig 2 + header->specialSky = jsonFile.get_int("/background/skybox/special-sky"); + header->specialSkyTexture = jsonFile.get_int("/background/skybox/special-sky-texture"); + } + + header->bgColour[0] = jsonFile.get_int("/background/colour/red"); + header->bgColour[1] = jsonFile.get_int("/background/colour/green"); + header->bgColour[2] = jsonFile.get_int("/background/colour/blue"); + header->bgColourBottom[0] = jsonFile.get_int("/background/multiplayer/gradient-colour/bottom/red"); + header->bgColourBottom[1] = jsonFile.get_int("/background/multiplayer/gradient-colour/bottom/green"); + header->bgColourBottom[2] = jsonFile.get_int("/background/multiplayer/gradient-colour/bottom/blue"); + header->bgColourTop[0] = jsonFile.get_int("/background/multiplayer/gradient-colour/top/red"); + header->bgColourTop[1] = jsonFile.get_int("/background/multiplayer/gradient-colour/top/green"); + header->bgColourTop[2] = jsonFile.get_int("/background/multiplayer/gradient-colour/top/blue"); + + // Unknowns + header->unk1 = jsonFile.get_int("/unknown/unk1"); + header->unk2 = jsonFile.get_int("/unknown/unk2"); + header->unk3 = jsonFile.get_int("/unknown/unk3"); + + for(size_t i = 0; i < 4; i++) { + header->unk4[i] = jsonFile.get_int("/unknown/unk4/" + std::to_string(i)); + } + + for(size_t i = 0; i < 10; i++) { + header->unkC[i] = jsonFile.get_int("/unknown/unkC/" + std::to_string(i)); + } + + for(size_t i = 0; i < 10; i++) { + header->unk16[i] = jsonFile.get_int("/unknown/unk16/" + std::to_string(i)); + } + + header->unk2A = jsonFile.get_int("/unknown/unk2A"); + + for(size_t i = 0; i < 9; i++) { + header->unk2B[i] = jsonFile.get_int("/unknown/unk2B/" + std::to_string(i)); + } + + for(size_t i = 0; i < 5; i++) { + header->unk44[i] = jsonFile.get_int("/unknown/unk44/" + std::to_string(i)); + } + + for(size_t i = 0; i < 3; i++) { + header->unk4F[i] = jsonFile.get_int("/unknown/unk4F/" + std::to_string(i)); + } + + header->unk53 = jsonFile.get_int("/unknown/unk53"); + + header->unk56 = jsonFile.get_int("/waves/unk56"); + header->unk57 = jsonFile.get_int("/waves/unk57"); + header->unk58 = jsonFile.get_int("/waves/unk58"); + header->unk59 = jsonFile.get_int("/waves/unk59"); + header->unk5A = jsonFile.get_int("/waves/unk5A"); + header->unk5C = jsonFile.get_int("/waves/unk5C"); + header->unk5D = jsonFile.get_int("/waves/unk5D"); + header->unk5E = jsonFile.get_int("/waves/unk5E"); + header->unk60 = jsonFile.get_int("/waves/unk60"); + header->wavePower = jsonFile.get_int("/waves/wave-power"); + header->unk64 = jsonFile.get_int("/waves/unk64"); + header->unk66 = jsonFile.get_int("/waves/unk66"); + header->unk68 = jsonFile.get_int("/waves/unk68"); + header->unk6A = jsonFile.get_int("/waves/unk6A"); + header->unk6B = jsonFile.get_int("/waves/unk6B"); + header->unk6C = jsonFile.get_int("/waves/unk6C"); + header->unk6D = jsonFile.get_int("/waves/unk6D"); + header->unk6E = jsonFile.get_int("/waves/unk6E"); + header->unk70 = jsonFile.get_int("/waves/unk70"); + header->unk71 = jsonFile.get_int("/waves/unk71"); + header->unk72 = jsonFile.get_int("/unknown/unk72"); + header->unk73 = jsonFile.get_int("/unknown/unk73"); + + header->unkA0 = jsonFile.get_int("/unknown/unkA0"); + header->unkA2 = jsonFile.get_int("/unknown/unkA2"); + header->unkA3 = jsonFile.get_int("/unknown/unkA3"); + + header->unkA8 = jsonFile.get_int("/unknown/unkA8"); + header->unkAA = jsonFile.get_int("/unknown/unkAA"); + + header->unkB0 = jsonFile.get_int("/unknown/unkB0"); + header->unkB2 = jsonFile.get_int("/unknown/unkB2"); + header->unkB3 = jsonFile.get_int("/unknown/unkB3"); + header->unkB4 = jsonFile.get_int("/unknown/unkB4"); + header->unkB5 = jsonFile.get_int("/unknown/unkB5"); + header->unkB6 = jsonFile.get_int("/unknown/unkB6"); + header->unkB7 = jsonFile.get_int("/unknown/unkB7"); + std::string bossRaceID = jsonFile.get_string("/boss-race-id"); + header->bossRaceID = cContext.get_int_value_of_symbol(bossRaceID); + header->unkB9 = jsonFile.get_int("/unknown/unkB9"); + header->unkBC = jsonFile.get_int("/unknown/unkBC"); + header->unkBD = jsonFile.get_int("/unknown/unkBD"); + header->unkC4 = jsonFile.get_int("/unknown/unkC4"); + + if(info.build_to_file()) { + info.write_out_to_dstPath(); + } +} diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildLevelHeader.h b/tools/dkr_assets_tool_src/builder/buildTypes/buildLevelHeader.h index 1b1b5ad8..6d732d13 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildLevelHeader.h +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildLevelHeader.h @@ -1,34 +1,9 @@ #pragma once #include "builder/buildInfo.h" -#include "misc/settings.hpp" -#include "fileTypes/fonts.hpp" - -#include "helpers/debugHelper.h" -#include "helpers/fileHelper.h" -#include "helpers/jsonHelper.h" -#include "helpers/c/cContext.h" -#include "fileTypes/levelHeader.hpp" - -class BuildLevelHeader { -public: - BuildLevelHeader(DkrAssetsSettings &settings, BuildInfo &info); - ~BuildLevelHeader(); -private: - DkrAssetsSettings &_settings; - BuildInfo &_info; - - CContext _c_context; // C Code context. (For loading enums & structs) - - void _build_weather(std::string ptr, LevelHeader_Weather &weather); - void _build_ai_levels(std::string ptr, LevelHeader_AiLevels &aiLevels); - void _build_fog(std::string ptr, LevelHeader_Fog &fogInfo); - - template - T _build_enum_bitfield(std::string ptr); - - void _build_level_name(); - - void _preload_c_context(); -}; +namespace DkrAssetsTool { +namespace BuildLevelHeader { + void build(BuildInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildLevelModel.cpp b/tools/dkr_assets_tool_src/builder/buildTypes/buildLevelModel.cpp index bb73c3b7..4571bce2 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildLevelModel.cpp +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildLevelModel.cpp @@ -1,15 +1,21 @@ #include "buildLevelModel.h" -BuildLevelModel::BuildLevelModel(DkrAssetsSettings &settings, BuildInfo &info) : _settings(settings), _info(info) { - std::string rawPath = info.srcFile->get_string("/raw"); +using namespace DkrAssetsTool; + +void BuildLevelModel::build(BuildInfo &info) { + const JsonFile &jsonFile = info.get_src_json_file(); + std::string rawPath = jsonFile.get_string("/raw"); - DebugHelper::assert(!rawPath.empty(), "(BuildLevelModel::BuildLevelModel) \"raw\" not specified!"); - - // Copy file from rawPath to destination path. - FileHelper::copy(_info.localDirectory / rawPath, info.dstPath); -} - -BuildLevelModel::~BuildLevelModel() { + DebugHelper::assert(!rawPath.empty(), "(BuildLevelModel::build) \"raw\" not specified!"); + fs::path dir = info.get_path_to_directory(); + + if(info.build_to_file()) { + // Copy file from rawPath to destination path. + info.copy_to_dstPath(dir / rawPath); + } else { + // Load raw binary into info's out + info.out = FileHelper::read_binary_file(dir / rawPath); + } } diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildLevelModel.h b/tools/dkr_assets_tool_src/builder/buildTypes/buildLevelModel.h index 31b84cdc..a3fd2640 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildLevelModel.h +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildLevelModel.h @@ -1,19 +1,10 @@ #pragma once #include "builder/buildInfo.h" -#include "misc/settings.hpp" +#include "helpers/c/cContext.h" -#include "fileTypes/fonts.hpp" - -#include "helpers/debugHelper.h" -#include "helpers/fileHelper.h" -#include "helpers/jsonHelper.h" - -class BuildLevelModel { -public: - BuildLevelModel(DkrAssetsSettings &settings, BuildInfo &info); - ~BuildLevelModel(); -private: - DkrAssetsSettings &_settings; - BuildInfo &_info; -}; +namespace DkrAssetsTool { +namespace BuildLevelModel { + void build(BuildInfo &info); +} +} \ No newline at end of file diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildLevelObjectTranslationTable.cpp b/tools/dkr_assets_tool_src/builder/buildTypes/buildLevelObjectTranslationTable.cpp index facf6ae6..887e255f 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildLevelObjectTranslationTable.cpp +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildLevelObjectTranslationTable.cpp @@ -1,33 +1,39 @@ #include "buildLevelObjectTranslationTable.h" +using namespace DkrAssetsTool; + // Defines LOTT_ENTRY and LOTT_SIZE #include "fileTypes/levelObjectTranslationTable.hpp" #include "helpers/assetsHelper.h" -BuildLOTT::BuildLOTT(DkrAssetsSettings &settings, BuildInfo &info) : _settings(settings), _info(info) { - LOTT_ENTRY entries[LOTT_SIZE]; +void BuildLOTT::build(BuildInfo &info){ + info.out.resize(LOTT_SIZE * sizeof(LOTT_ENTRY)); - size_t numberOfEntries = _info.srcFile->length_of_array("/table"); + LOTT_ENTRY *entries = reinterpret_cast(&info.out[0]); + + const JsonFile &jsonFile = info.get_src_json_file(); + + size_t numberOfEntries = jsonFile.length_of_array("/table"); DebugHelper::assert(numberOfEntries <= LOTT_SIZE, - "(BuildLOTT::BuildLOTT) The Level-Object Translation Table has too many entries! Can only have ", LOTT_SIZE, " entries."); + "(BuildLOTT::build) The Level-Object Translation Table has too many entries! Can only have ", LOTT_SIZE, " entries."); for(size_t i = 0; i < numberOfEntries; i++) { std::string ptr = "/table/" + std::to_string(i); - if(_info.srcFile->is_value_null(ptr)) { + if(jsonFile.is_value_null(ptr)) { entries[i] = LOTT_SIZE; continue; } // Not null. - std::string entryId = _info.srcFile->get_string(ptr); + std::string entryId = jsonFile.get_string(ptr); if(entryId.empty()) { entries[i] = LOTT_SIZE; continue; } // Not empty. - entries[i] = AssetsHelper::get_asset_index(_settings, "ASSET_OBJECTS", entryId); + entries[i] = AssetsHelper::get_asset_index("ASSET_OBJECTS", entryId); } // Fill rest of the entries as empty slots. @@ -35,11 +41,8 @@ BuildLOTT::BuildLOTT(DkrAssetsSettings &settings, BuildInfo &info) : _settings(s entries[i] = LOTT_SIZE; } - FileHelper::write_binary_file(reinterpret_cast(entries), sizeof(LOTT_ENTRY) * LOTT_SIZE, - _info.dstPath, true); + if(info.build_to_file()) { + info.write_out_to_dstPath(); + } + } - -BuildLOTT::~BuildLOTT() { - -} - diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildLevelObjectTranslationTable.h b/tools/dkr_assets_tool_src/builder/buildTypes/buildLevelObjectTranslationTable.h index 34232652..8f233953 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildLevelObjectTranslationTable.h +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildLevelObjectTranslationTable.h @@ -1,5 +1,17 @@ #pragma once +#include "builder/buildInfo.h" +#include "helpers/c/cContext.h" + +namespace DkrAssetsTool { +namespace BuildLOTT { + void build(BuildInfo &info); +} +} + +/* +#pragma once + #include "builder/buildInfo.h" #include "misc/settings.hpp" @@ -9,6 +21,7 @@ #include "helpers/fileHelper.h" #include "helpers/jsonHelper.h" +namespace DkrAssetsTool { class BuildLOTT { public: BuildLOTT(DkrAssetsSettings &settings, BuildInfo &info); @@ -17,3 +30,5 @@ private: DkrAssetsSettings &_settings; BuildInfo &_info; }; +} +*/ diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildMenuText.cpp b/tools/dkr_assets_tool_src/builder/buildTypes/buildMenuText.cpp index 708f939c..e14dce4e 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildMenuText.cpp +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildMenuText.cpp @@ -1,64 +1,79 @@ #include "buildMenuText.h" -#include // for strncpy +#include #include "helpers/assetsHelper.h" #include "helpers/dataHelper.h" -BuildMenuText::BuildMenuText(DkrAssetsSettings &settings, BuildInfo &info) : _settings(settings), _info(info) { - JsonFile *menuTextSection = AssetsHelper::get_asset_section_json(_settings, "ASSET_MENU_TEXT"); +#include "fileTypes/types.hpp" + +#include "misc/globalSettings.h" +#include "text/dkrText.h" + +using namespace DkrAssetsTool; + +size_t get_total_string_lengths(BuildInfo &info, const JsonFile &jsonFile, std::vector &menuTextOrder, bool forceDKRJP) { + size_t totalLength = 0; + + for(std::string &entryId : menuTextOrder) { + const std::string ptr = "/sections/" + entryId; + if(!jsonFile.has(ptr)) { + continue; + } + + std::string strValue = jsonFile.get_string(ptr); + DKRText text(strValue); + totalLength += text.bytes_size(forceDKRJP) + 1; // +1 for null terminator + } + + return totalLength; +} + +void BuildMenuText::build(BuildInfo &info) { + JsonFile &menuTextSection = AssetsHelper::get_asset_section_json("ASSET_MENU_TEXT"); std::vector menuTextOrder; - menuTextSection->get_array("/menu-text-build-ids", menuTextOrder); + menuTextSection.get_array("/menu-text-build-ids", menuTextOrder); size_t numberOfEntries = menuTextOrder.size(); - size_t outSize = (numberOfEntries * 4) + _get_total_string_lengths(menuTextOrder); + const JsonFile &jsonFile = info.get_src_json_file(); + + std::string buildId = info.get_build_id(); + std::string dkrVersion = GlobalSettings::get_dkr_version(); + + // If the version is not v77 and the language is japanese, then we need to force the DKRJP text format. + bool forceDKRJP = !StringHelper::ends_with(dkrVersion, "v77") && StringHelper::has(buildId, "JAPANESE"); + + size_t outSize = (numberOfEntries * 4) + get_total_string_lengths(info, jsonFile, menuTextOrder, forceDKRJP); outSize = DataHelper::align8(outSize); // Make sure the output is 8-byte aligned. - std::vector out(outSize); + info.out.resize(outSize); - be_uint32_t *offsets = reinterpret_cast(&out[0]); + be_uint32_t *offsets = reinterpret_cast(&info.out[0]); size_t currentTextOffset = numberOfEntries * 4; for(size_t i = 0; i < numberOfEntries; i++) { const std::string &entryId = menuTextOrder[i]; const std::string ptr = "/sections/" + entryId; - if(!_info.srcFile->has(ptr)) { + if(!jsonFile.has(ptr)) { offsets[i] = 0xFFFFFFFF; // Null entry. continue; } offsets[i] = currentTextOffset; - std::string entryStr = _info.srcFile->get_string(ptr); - char *text = reinterpret_cast(&out[currentTextOffset]); - std::strncpy(text, entryStr.c_str(), entryStr.size()); - currentTextOffset += entryStr.size() + 1; + std::string entryStr = jsonFile.get_string(ptr); + DKRText text(entryStr); + std::vector textBytes = text.get_bytes(forceDKRJP); + char *outText = reinterpret_cast(&info.out[currentTextOffset]); - // Shouldn't need to write the null terminator? + memcpy(outText, (char*)&textBytes[0], textBytes.size()); + currentTextOffset += textBytes.size() + 1; } - FileHelper::write_binary_file(out, _info.dstPath, true); -} - -BuildMenuText::~BuildMenuText() { - -} - -size_t BuildMenuText::_get_total_string_lengths(std::vector &menuTextOrder) { - size_t totalLength = 0; - - for(std::string &entryId : menuTextOrder) { - const std::string ptr = "/sections/" + entryId; - if(!_info.srcFile->has(ptr)) { - continue; - } - // +1 for null terminator - totalLength += _info.srcFile->length_of_string(ptr) + 1; + if(info.build_to_file()) { + info.write_out_to_dstPath(); } - - return totalLength; } - diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildMenuText.h b/tools/dkr_assets_tool_src/builder/buildTypes/buildMenuText.h index fc336b1b..2b671ca3 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildMenuText.h +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildMenuText.h @@ -1,23 +1,10 @@ #pragma once -#include - #include "builder/buildInfo.h" -#include "misc/settings.hpp" +#include "helpers/c/cContext.h" -#include "fileTypes/fonts.hpp" - -#include "helpers/debugHelper.h" -#include "helpers/fileHelper.h" -#include "helpers/jsonHelper.h" - -class BuildMenuText { -public: - BuildMenuText(DkrAssetsSettings &settings, BuildInfo &info); - ~BuildMenuText(); -private: - DkrAssetsSettings &_settings; - BuildInfo &_info; - - size_t _get_total_string_lengths(std::vector &menuTextOrder); -}; +namespace DkrAssetsTool { +namespace BuildMenuText { + void build(BuildInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildMisc.cpp b/tools/dkr_assets_tool_src/builder/buildTypes/buildMisc.cpp index bf4e357c..f34d92b9 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildMisc.cpp +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildMisc.cpp @@ -1,62 +1,51 @@ #include "buildMisc.h" +using namespace DkrAssetsTool; + +#include "fileTypes/misc.hpp" + #include "helpers/dataHelper.h" #include "helpers/assetsHelper.h" #include "helpers/miscHelper.h" +#include "helpers/debugHelper.h" +#include "helpers/fileHelper.h" +#include "helpers/jsonHelper.h" +#include "helpers/c/cContext.h" #include #include #include // for std::strcpy & std::memset -#define MISC_ARGS BuildInfo &info, size_t &outDataSize -#define MISC_LAMDA(func) [this](MISC_ARGS) { return func(info, outDataSize); } +#define MISC_ARGS BuildInfo &info_, const JsonFile &jsonFile_ +#define MISC_LAMDA(func) [](MISC_ARGS) { func(info_, jsonFile_); } typedef void (*MiscFuncPtr)(MISC_ARGS); -BuildMisc::BuildMisc(DkrAssetsSettings &settings, BuildInfo &info) : _settings(settings), _info(info) { - //std::string rawPath = info.srcFile->get_string("raw"); +void build_binary(BuildInfo &info, const JsonFile &jsonFile) { + std::string rawPath = jsonFile.get_string("/raw"); - std::string miscType = info.srcFile->get_string("/misc-type"); + DebugHelper::assert(!rawPath.empty(), "(build_binary) \"raw\" not specified!"); - const std::unordered_map> miscFunctions = { - { "Binary", MISC_LAMDA(_build_binary) }, - { "RacerStat", MISC_LAMDA(_build_racer_stat) }, - { "RacerAcceleration", MISC_LAMDA(_build_racer_acceleration) }, - { "TrackIds", MISC_LAMDA(_build_track_ids) }, - { "MagicCodes", MISC_LAMDA(_build_magic_codes) }, - { "TitleScreenDemos", MISC_LAMDA(_build_title_screen_demos) }, - }; + fs::path dir = info.get_path_to_directory(); - size_t outDataSize; - uint8_t *outData = miscFunctions.at(miscType)(info, outDataSize); - - if(outData == nullptr) { - return; + if(info.build_to_file()) { + // Copy file from rawPath to destination path. + info.copy_to_dstPath(dir / rawPath); + } else { + // Load raw binary into info's out + info.out = FileHelper::read_binary_file(dir / rawPath); + } +} + +void build_racer_stat(BuildInfo &info, const JsonFile &jsonFile) { + if(info.build_to_file()) { + // Make sure the enums in "/include/enums.h" are loaded. + info.load_enums_into_c_context({ "enums.h" }); } - FileHelper::write_binary_file(outData, outDataSize, info.dstPath, true); - delete outData; -} - -BuildMisc::~BuildMisc() { + CContext &cContext = info.get_c_context(); -} - -uint8_t *BuildMisc::_build_binary(BuildInfo &info, size_t &outDataSize) { - std::string rawPath = info.srcFile->get_string("/raw"); - - DebugHelper::assert(!rawPath.empty(), "(BuildMisc::_build_binary) \"raw\" not specified!"); - - // Copy file from rawPath to destination path. - FileHelper::copy(_info.localDirectory / rawPath, info.dstPath); - return nullptr; -} - -uint8_t *BuildMisc::_build_racer_stat(BuildInfo &info, size_t &outDataSize) { - // Load enums - _preload_c_context(); - - CEnum *characters = _c_context.get_enum("Character"); + CEnum *characters = cContext.get_enum("Character"); int numberOfCharacters; @@ -65,10 +54,11 @@ uint8_t *BuildMisc::_build_racer_stat(BuildInfo &info, size_t &outDataSize) { numberOfCharacters = characters->get_member_count(); } - outDataSize = sizeof(be_float) * numberOfCharacters; - uint8_t *out = new uint8_t[outDataSize]; - std::memset(out, 0, outDataSize); // zero out memory. - be_float *values = reinterpret_cast(out); + size_t outDataSize = sizeof(be_float) * numberOfCharacters; + + info.out.resize(outDataSize); + + be_float *values = reinterpret_cast(&info.out[0]); for(int i = 0; i < numberOfCharacters; i++) { std::string charId; @@ -76,54 +66,46 @@ uint8_t *BuildMisc::_build_racer_stat(BuildInfo &info, size_t &outDataSize) { values[i] = -1; // Could not get symbol for character, so set it to -1 to indicate so. continue; } - values[i] = info.srcFile->get_float("/values/" + charId); + values[i] = jsonFile.get_float("/values/" + charId); } - - return out; } -uint8_t *BuildMisc::_build_racer_acceleration(BuildInfo &info, size_t &outDataSize) { - size_t numberOfValues = _info.srcFile->length_of_array("/values"); +void build_racer_acceleration(BuildInfo &info, const JsonFile &jsonFile) { + size_t numberOfValues = jsonFile.length_of_array("/values"); - outDataSize = sizeof(be_float) * numberOfValues; + size_t outDataSize = sizeof(be_float) * numberOfValues; outDataSize = DataHelper::align8(outDataSize); // Make sure the data is 16-byte aligned. - uint8_t *out = new uint8_t[outDataSize]; - std::memset(out, 0, outDataSize); // zero out memory. + info.out.resize(outDataSize); - be_float *values = reinterpret_cast(out); + be_float *values = reinterpret_cast(&info.out[0]); for(size_t i = 0; i < numberOfValues; i++) { - values[i] = info.srcFile->get_float("/values/" + std::to_string(i)); + values[i] = jsonFile.get_float("/values/" + std::to_string(i)); } - - return out; } -uint8_t *BuildMisc::_build_track_ids(BuildInfo &info, size_t &outDataSize) { - size_t numberOfIds = _info.srcFile->length_of_array("/ids"); - outDataSize = DataHelper::align4(numberOfIds); - uint8_t *out = new uint8_t[outDataSize]; - std::memset(out, 0, outDataSize); // zero out memory. +void build_track_ids(BuildInfo &info, const JsonFile &jsonFile) { + size_t numberOfIds = jsonFile.length_of_array("/ids"); + size_t outDataSize = DataHelper::align4(numberOfIds); + info.out.resize(outDataSize); for(size_t i = 0; i < numberOfIds; i++) { std::string ptr = "/ids/" + std::to_string(i); - if(info.srcFile->is_value_null(ptr)) { - out[i] = 0xFF; // Marks the end of the list for some files. + if(jsonFile.is_value_null(ptr)) { + info.out[i] = 0xFF; // Marks the end of the list for some files. continue; } - std::string levelBuildId = info.srcFile->get_string(ptr); - out[i] = AssetsHelper::get_asset_index(_settings, "ASSET_LEVEL_HEADERS", levelBuildId); + std::string levelBuildId = jsonFile.get_string(ptr); + info.out[i] = AssetsHelper::get_asset_index("ASSET_LEVEL_HEADERS", levelBuildId); } - - return out; } -uint8_t *BuildMisc::_build_magic_codes(BuildInfo &info, size_t &outDataSize) { - size_t numberOfCheats = _info.srcFile->length_of_array("/cheats"); +void build_magic_codes(BuildInfo &info, const JsonFile &jsonFile) { + size_t numberOfCheats = jsonFile.length_of_array("/cheats"); // The first two bytes are the total number of cheats - outDataSize = sizeof(be_int16_t); + size_t outDataSize = sizeof(be_int16_t); // Then comes the lookup table. outDataSize += (numberOfCheats) * sizeof(be_int16_t) * 2; @@ -135,8 +117,8 @@ uint8_t *BuildMisc::_build_magic_codes(BuildInfo &info, size_t &outDataSize) { std::string cheatPtr = "/cheats/" + std::to_string(i); // +1 for null terminator - size_t codeLen = _info.srcFile->length_of_string(cheatPtr + "/code") + 1; - size_t descLen = _info.srcFile->length_of_string(cheatPtr + "/description") + 1; + size_t codeLen = jsonFile.length_of_string(cheatPtr + "/code") + 1; + size_t descLen = jsonFile.length_of_string(cheatPtr + "/description") + 1; outDataSize += codeLen + descLen; } @@ -144,9 +126,9 @@ uint8_t *BuildMisc::_build_magic_codes(BuildInfo &info, size_t &outDataSize) { // Make sure cheats data is 16-byte aligned. outDataSize = DataHelper::align16(outDataSize); - uint8_t *out = new uint8_t[outDataSize]; - std::memset(out, 0, outDataSize); // zero out memory. - be_int16_t *cheatsTable = reinterpret_cast(&out[0]); + info.out.resize(outDataSize); + + be_int16_t *cheatsTable = reinterpret_cast(&info.out[0]); // Set number of cheats. cheatsTable[0] = numberOfCheats; @@ -156,47 +138,46 @@ uint8_t *BuildMisc::_build_magic_codes(BuildInfo &info, size_t &outDataSize) { // Second loop to write the data for each cheat entry. for(size_t i = 0; i < numberOfCheats; i++) { std::string cheatPtr = "/cheats/" + std::to_string(i); - std::string code = _info.srcFile->get_string(cheatPtr + "/code"); - std::string description = _info.srcFile->get_string(cheatPtr + "/description"); + std::string code = jsonFile.get_string(cheatPtr + "/code"); + std::string description = jsonFile.get_string(cheatPtr + "/description"); entries[i].codeOffset = offsetToText; offsetToText += code.size() + 1; // +1 for null terminator entries[i].descOffset = offsetToText; offsetToText += description.size() + 1; // +1 for null terminator - char *codeOut = reinterpret_cast(&out[entries[i].codeOffset]); - char *descriptionOut = reinterpret_cast(&out[entries[i].descOffset]); + char *codeOut = reinterpret_cast(&info.out[entries[i].codeOffset]); + char *descriptionOut = reinterpret_cast(&info.out[entries[i].descOffset]); - // Copy strings to out. + // Copy strings to info.out. std::strcpy(codeOut, code.c_str()); std::strcpy(descriptionOut, description.c_str()); } + /* if(_settings.debugBuildKeepUncompressed) { fs::path unencryptedCheatsPath = _settings.pathToBuild / "debug/cheats" / info.dstPath.filename(); - FileHelper::write_binary_file(out, outDataSize, unencryptedCheatsPath, true); + FileHelper::write_binary_file(info.out, outDataSize, unencryptedCheatsPath, true); } + */ - MiscHelper::process_cheats_encryption(out, outDataSize); // Encrypt the cheats data. - - return out; + MiscHelper::process_cheats_encryption(info.out.data(), outDataSize); // Encrypt the cheats data. } -uint8_t *BuildMisc::_build_title_screen_demos(BuildInfo &info, size_t &outDataSize) { - size_t numberOfEntries = _info.srcFile->length_of_array("/entries"); +void build_title_screen_demos(BuildInfo &info, const JsonFile &jsonFile) { + size_t numberOfEntries = jsonFile.length_of_array("/entries"); size_t entriesSize = ((numberOfEntries + 1) * 3); - outDataSize = DataHelper::align8(entriesSize); + size_t outDataSize = DataHelper::align8(entriesSize); - uint8_t *out = new uint8_t[outDataSize]; - std::memset(out, 0, outDataSize); // zero out memory. + info.out.resize(outDataSize); - TitleScreenDemos *demos = reinterpret_cast(out); + TitleScreenDemos *demos = reinterpret_cast(&info.out[0]); for(size_t i = 0; i < numberOfEntries; i++) { std::string ptr = "/entries/" + std::to_string(i); - std::string levelBuildId = _info.srcFile->get_string(ptr + "/level"); - demos[i].levelId = AssetsHelper::get_asset_index(_settings, "ASSET_LEVEL_HEADERS", levelBuildId); + std::string levelBuildId = jsonFile.get_string(ptr + "/level"); + demos[i].levelId = AssetsHelper::get_asset_index("ASSET_LEVEL_HEADERS", levelBuildId); // Different default values for the title screen. int defaultNumberOfPlayers = 0; @@ -205,23 +186,28 @@ uint8_t *BuildMisc::_build_title_screen_demos(BuildInfo &info, size_t &outDataSi defaultNumberOfPlayers = -2; defaultCutsceneId = 100; } - demos[i].numberOfPlayers = _info.srcFile->get_int(ptr + "/number-of-players", defaultNumberOfPlayers); - demos[i].cutsceneId = _info.srcFile->get_int(ptr + "/cutscene-id", defaultCutsceneId); + demos[i].numberOfPlayers = jsonFile.get_int(ptr + "/number-of-players", defaultNumberOfPlayers); + demos[i].cutsceneId = jsonFile.get_int(ptr + "/cutscene-id", defaultCutsceneId); } demos[numberOfEntries].levelId = 0xFF; // Mark end of data with 0xFF. - - return out; } -void BuildMisc::_preload_c_context() { - fs::path includeFolder = _settings.pathToRepo / "include/"; +void BuildMisc::build(BuildInfo &info) { + const JsonFile &jsonFile = info.get_src_json_file(); + std::string miscType = jsonFile.get_string("/misc-type"); - // Load all enums from these files. - fs::path enumPaths[] = { - includeFolder / "enums.h" + const std::unordered_map> miscFunctions = { + { "Binary", MISC_LAMDA(build_binary) }, + { "RacerStat", MISC_LAMDA(build_racer_stat) }, + { "RacerAcceleration", MISC_LAMDA(build_racer_acceleration) }, + { "TrackIds", MISC_LAMDA(build_track_ids) }, + { "MagicCodes", MISC_LAMDA(build_magic_codes) }, + { "TitleScreenDemos", MISC_LAMDA(build_title_screen_demos) }, }; - for(fs::path &enumPath : enumPaths) { - CEnumsHelper::load_enums_from_file(&_c_context, enumPath); + miscFunctions.at(miscType)(info, jsonFile); + + if(info.build_to_file()) { + info.write_out_to_dstPath(); } -} \ No newline at end of file +} diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildMisc.h b/tools/dkr_assets_tool_src/builder/buildTypes/buildMisc.h index 2a0080f2..f83de73d 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildMisc.h +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildMisc.h @@ -1,32 +1,10 @@ #pragma once #include "builder/buildInfo.h" -#include "misc/settings.hpp" - -#include "fileTypes/misc.hpp" - -#include "helpers/debugHelper.h" -#include "helpers/fileHelper.h" -#include "helpers/jsonHelper.h" -#include "helpers/miscHelper.h" #include "helpers/c/cContext.h" -class BuildMisc { -public: - BuildMisc(DkrAssetsSettings &settings, BuildInfo &info); - ~BuildMisc(); -private: - DkrAssetsSettings &_settings; - BuildInfo &_info; - CContext _c_context; - - uint8_t *_build_binary(BuildInfo &info, size_t &outDataSize); - uint8_t *_build_racer_stat(BuildInfo &info, size_t &outDataSize); - uint8_t *_build_racer_acceleration(BuildInfo &info, size_t &outDataSize); - uint8_t *_build_track_ids(BuildInfo &info, size_t &outDataSize); - uint8_t *_build_magic_codes(BuildInfo &info, size_t &outDataSize); - uint8_t *_build_title_screen_demos(BuildInfo &info, size_t &outDataSize); - uint8_t *_build_boss_data(BuildInfo &info, size_t &outDataSize); - - void _preload_c_context(); // For enums -}; +namespace DkrAssetsTool { +namespace BuildMisc { + void build(BuildInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModel.cpp b/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModel.cpp new file mode 100644 index 00000000..0601ab8f --- /dev/null +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModel.cpp @@ -0,0 +1,174 @@ +#include "buildModel.h" + +#include "helpers/dataHelper.h" +#include "helpers/fileHelper.h" +#include "helpers/gzipHelper.h" + +#include "fileTypes/objectModel.hpp" +#include "fileTypes/batch.hpp" +#include "fileTypes/triangle.hpp" +#include "fileTypes/vertex.hpp" +#include "fileTypes/textureInfo.hpp" + +#include "misc/globalSettings.h" + +using namespace DkrAssetsTool; + +void BuildModel::generate_object_model(BuildInfo &info) { + size_t numberOfTriangles = _total_number_of_triangles(); + size_t numberOfVertices = _total_number_of_vertices(); + size_t numberOfBatches = _total_number_of_batches(); + size_t numberOfBatchesToAllocate = _total_number_of_batches_to_allocate(); + size_t numberOfTextures = _total_number_of_textures(); + + size_t sizeOfHeader = DataHelper::align16(sizeof(ObjectModel)); + size_t sizeOfTextures = DataHelper::align16(sizeof(DkrTextureInfo) * numberOfTextures); + size_t sizeOfVertices = DataHelper::align16(sizeof(DkrVertex) * numberOfVertices); + size_t sizeOfTriangles = DataHelper::align16(sizeof(DkrTriangle) * numberOfTriangles); + size_t sizeOfBatches = DataHelper::align16(sizeof(DkrBatch) * numberOfBatchesToAllocate); + + // Calculated the file size for the binary model file. + size_t calculatedFileSize = sizeOfHeader + + sizeOfTextures + + sizeOfVertices + + sizeOfTriangles + + sizeOfBatches; + + info.out.resize(calculatedFileSize); + + ObjectModel *objectModelHeader = reinterpret_cast(&info.out[0]); + + objectModelHeader->textures = sizeOfHeader; + objectModelHeader->vertices = objectModelHeader->textures + sizeOfTextures; + objectModelHeader->triangles = objectModelHeader->vertices + sizeOfVertices; + objectModelHeader->batches = objectModelHeader->triangles + sizeOfTriangles; + objectModelHeader->numberOfTextures= (int16_t)numberOfTextures; + objectModelHeader->numberOfTriangles = (int16_t)numberOfTriangles; + objectModelHeader->numberOfVertices = (int16_t)numberOfVertices; + objectModelHeader->numberOfBatches = (int16_t)numberOfBatches; + objectModelHeader->fileSize = (int16_t)calculatedFileSize; + + DkrTextureInfo *textures = reinterpret_cast(&info.out[objectModelHeader->textures]); + DkrVertex *vertices = reinterpret_cast(&info.out[objectModelHeader->vertices]); + DkrTriangle *triangles = reinterpret_cast(&info.out[objectModelHeader->triangles]); + DkrBatch *batches = reinterpret_cast(&info.out[objectModelHeader->batches]); + + for(size_t materialIndex = 0; materialIndex < numberOfTextures; materialIndex++) { + _materials[materialIndex].write_to(&textures[materialIndex], info); + } + + for(auto &block : _blocks) { + block.write_batches(_materialIds, batches, vertices, triangles); + } + + bool debugKeepUncompressed = GlobalSettings::get_value("/debug/keep-uncompressed", false); + + if(debugKeepUncompressed) { + fs::path outUncompressedPath = GlobalSettings::get_decomp_path("build_subpath", "build/"); + outUncompressedPath /= "debug/models"; + outUncompressedPath /= info.get_src_json_file().get_filepath().filename().replace_extension(".bin"); + FileHelper::write_binary_file(info.out, outUncompressedPath, true); + } + + info.out = GzipHelper::compress_gzip(info.out); + + if(info.build_to_file()) { + info.write_out_to_dstPath(); + } +} + +void BuildModel::_add_new_triangle_to_current_block(const BuildModelVertex& vertA, const BuildModelVertex& vertB, const BuildModelVertex& vertC, Vec2f uv0, Vec2f uv1, Vec2f uv2) { + if(_blocks.size() == 0) { + _new_block(); + } + _blocks.back().add_new_triangle(vertA, vertB, vertC, uv0, uv1, uv2); +} + +void BuildModel::_add_new_triangle_to_current_block(const BuildModelVertex& vertA, const BuildModelVertex& vertB, const BuildModelVertex& vertC) { + if(_blocks.size() == 0) { + _new_block(); + } + _blocks.back().add_new_triangle(vertA, vertB, vertC, Vec2f(), Vec2f(), Vec2f()); +} + +void BuildModel::_new_block() { + _blocks.emplace_back(_currentMaterialId); +} + +void BuildModel::_add_material(std::string id, fs::path texturePath) { + if(texturePath.empty()) { + _materialIds[id] = -1; + return; + } + _materialIds[id] = _materials.size(); + _materials.emplace_back(texturePath); +} + +void BuildModel::_set_material(std::string id) { + _currentMaterialId = id; + if(_blocks.size() == 0) { + _new_block(); + } else { + _blocks.back().set_material(_currentMaterialId); + } +} + +std::optional> BuildModel::_try_get_material(std::string id) { + if(_materialIds.find(id) == _materialIds.end() || _materialIds.at(id) == -1) { + return std::nullopt; + } + + return _materials.at(_materialIds.at(id)); +} + +size_t BuildModel::_total_number_of_triangles() { + size_t count = 0; + + for(auto &block : _blocks) { + count += block.total_number_of_triangles(); + } + + return count; +} + +size_t BuildModel::_total_number_of_vertices() { + size_t count = 0; + + for(auto &block : _blocks) { + count += block.total_number_of_vertices(); + } + + return count; +} + +size_t BuildModel::_total_number_of_textures() { + size_t count = 0; + + for(auto &material : _materials) { + if(material.has_texture()) { + count++; + } + } + + return count; +} + +size_t BuildModel::_total_number_of_batches() { + size_t count = 0; + + for(auto &block : _blocks) { + count += block.number_of_batches(); + } + + return count; +} + +size_t BuildModel::_total_number_of_batches_to_allocate() { + size_t count = 0; + + for(auto &block : _blocks) { + count += block.number_of_batches_to_allocate(); + } + + return count; +} diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModel.h b/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModel.h new file mode 100644 index 00000000..8dee74f3 --- /dev/null +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModel.h @@ -0,0 +1,46 @@ +#pragma once + +#include +#include +#include + +#include "builder/buildInfo.h" + +#include "helpers/fileHelper.h" +#include "fileTypes/batch.hpp" + +#include "buildModelBlock.h" +#include "buildModelMaterial.h" + +namespace DkrAssetsTool { + +// Generic version of ObjBuildModel/GltfBuildModel +class BuildModel { +public: + void generate_object_model(BuildInfo &info); + +protected: + std::optional _currentMaterialId = std::nullopt; + std::vector _blocks; + + std::vector _materials; + std::map _materialIds; + + void _add_new_triangle_to_current_block(const BuildModelVertex& vertA, const BuildModelVertex& vertB, const BuildModelVertex& vertC, + Vec2f uv0, Vec2f uv1, Vec2f uv2); + void _add_new_triangle_to_current_block(const BuildModelVertex& vertA, const BuildModelVertex& vertB, const BuildModelVertex& vertC); + void _new_block(); + + void _add_material(std::string id, fs::path texturePath=""); + void _set_material(std::string id); + + std::optional> _try_get_material(std::string id); + + size_t _total_number_of_triangles(); + size_t _total_number_of_vertices(); + size_t _total_number_of_textures(); + size_t _total_number_of_batches(); + size_t _total_number_of_batches_to_allocate(); +}; + +} \ No newline at end of file diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModelBatch.cpp b/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModelBatch.cpp new file mode 100644 index 00000000..945acf28 --- /dev/null +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModelBatch.cpp @@ -0,0 +1,90 @@ +#include "buildModelBatch.h" + +#include "helpers/debugHelper.h" +#include "helpers/dataHelper.h" + +using namespace DkrAssetsTool; + +BuildModelBatch::BuildModelBatch(std::optional materialId) : _materialId(materialId) { +} + +bool BuildModelBatch::add_new_triangle(const BuildModelVertex& vertA, const BuildModelVertex& vertB, const BuildModelVertex& vertC, Vec2f uv0, Vec2f uv1, Vec2f uv2) { + if(_triangles.size() >= 16) { + return false; + } + + auto tryGetIndexA = _index_of_vertex(vertA); + auto tryGetIndexB = _index_of_vertex(vertB); + auto tryGetIndexC = _index_of_vertex(vertC); + + size_t numberOfNewVertices = tryGetIndexA.has_value() + tryGetIndexB.has_value() + tryGetIndexC.has_value(); + + if(_vertices.size() + numberOfNewVertices >= 24) { + return false; + } + + // Cannot use .value_or() here, since we only want to run _add_vertex() if it is needed. + uint16_t indexA = tryGetIndexA.has_value() ? tryGetIndexA.value() : _add_vertex(vertA); + uint16_t indexB = tryGetIndexB.has_value() ? tryGetIndexB.value() : _add_vertex(vertB); + uint16_t indexC = tryGetIndexC.has_value() ? tryGetIndexC.value() : _add_vertex(vertC); + + _triangles.emplace_back(indexA, indexB, indexC, uv0, uv1, uv2); + + return true; +} + + +void BuildModelBatch::set_material(std::optional materialId) { + _materialId = materialId; +} + +size_t BuildModelBatch::number_of_triangles() { + return _triangles.size(); +} + +size_t BuildModelBatch::number_of_vertices() { + return _vertices.size(); +} + +void BuildModelBatch::write_batch(const std::map &materialIds, DkrBatch* outBatch, DkrVertex*& outVertices, DkrTriangle*& outTriangles) { + if(_materialId.has_value()) { + outBatch->textureIndex = materialIds.at(_materialId.value()); + } else { + outBatch->textureIndex = 0xFF; // No texture + } + + //outBatch->lightSource = 0; // 0xFF = vertex colors, 0 = Use generated normals. + outBatch->flags = 0x00000003; // TODO + + for(auto &vertex : _vertices) { + vertex.write_to(outVertices); + outVertices++; // Next out vertex. + } + + for(auto &tri : _triangles) { + outTriangles->flags = 0x40; // double-sided (debug) + outTriangles->vi0 = tri.a; + outTriangles->vi1 = tri.b; + outTriangles->vi2 = tri.c; + outTriangles->uv0.u = tri.uv0.u; + outTriangles->uv0.v = tri.uv0.v; + outTriangles->uv1.u = tri.uv1.u; + outTriangles->uv1.v = tri.uv1.v; + outTriangles->uv2.u = tri.uv2.u; + outTriangles->uv2.v = tri.uv2.v; + outTriangles++; // next out triangle. + } +} + +std::optional BuildModelBatch::_index_of_vertex(const BuildModelVertex& vertex) { + int index = DataHelper::vector_index_of(_vertices, vertex); + if(index == -1) { + return std::nullopt; + } + return static_cast(index); +} + +uint16_t BuildModelBatch::_add_vertex(const BuildModelVertex& vertex) { + _vertices.emplace_back(vertex); + return static_cast(_vertices.size()) - 1; +} diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModelBatch.h b/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModelBatch.h new file mode 100644 index 00000000..a9b0d39e --- /dev/null +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModelBatch.h @@ -0,0 +1,48 @@ +#pragma once + +#include +#include +#include + +#include "helpers/mathHelper.h" + +#include "buildModelVertex.h" + +#include "fileTypes/vertex.hpp" +#include "fileTypes/triangle.hpp" +#include "fileTypes/batch.hpp" + +namespace DkrAssetsTool { + +struct BuildModelTriangle { + uint16_t a, b, c; + Vec2f uv0, uv1, uv2; + + BuildModelTriangle(uint16_t a, uint16_t b, uint16_t c, Vec2f uv0, Vec2f uv1, Vec2f uv2) : + a(a), b(b), c(c), uv0(uv0), uv1(uv1), uv2(uv2){} +}; + + +class BuildModelBatch { +public: + BuildModelBatch(std::optional materialId = std::nullopt); + + // Returns true if successful, or false if a new batch needs to be created. + bool add_new_triangle(const BuildModelVertex& vertA, const BuildModelVertex& vertB, const BuildModelVertex& vertC, + Vec2f uv0, Vec2f uv1, Vec2f uv2); + void set_material(std::optional materialId); + + size_t number_of_triangles(); + size_t number_of_vertices(); + + void write_batch(const std::map &materialIds, DkrBatch* outBatch, DkrVertex*& outVertices, DkrTriangle*& outTriangles); + +private: + std::vector _triangles; + std::vector _vertices; + std::optional _materialId = std::nullopt; + + std::optional _index_of_vertex(const BuildModelVertex& vertex); + uint16_t _add_vertex(const BuildModelVertex& vertex); +}; +} diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModelBlock.cpp b/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModelBlock.cpp new file mode 100644 index 00000000..39949cab --- /dev/null +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModelBlock.cpp @@ -0,0 +1,79 @@ +#include "buildModelBlock.h" + +#include "helpers/debugHelper.h" + +using namespace DkrAssetsTool; + +BuildModelBlock::BuildModelBlock(std::optional materialId) : _materialId(materialId) { +} + +void BuildModelBlock::add_new_triangle(const BuildModelVertex& vertA, const BuildModelVertex& vertB, const BuildModelVertex& vertC, Vec2f uv0, Vec2f uv1, Vec2f uv2) { + if(_batches.size() == 0) { + _batches.emplace_back(_materialId); // Create a new batch if none exist yet. + } + + bool addedTriangle = false; + + addedTriangle = _batches.back().add_new_triangle(vertA, vertB, vertC, uv0, uv1, uv2); + if(addedTriangle) { + return; + } + + _batches.emplace_back(_materialId); // Create a new batch, then add the triangle to it. + addedTriangle = _batches.back().add_new_triangle(vertA, vertB, vertC, uv0, uv1, uv2); + DebugHelper::assert_(addedTriangle, + "(BuildModelBlock::add_new_triangle) Failed to add a new triangle to a new batch. Something is terribly wrong!"); +} + +void BuildModelBlock::set_material(std::optional materialId) { + if(materialId == _materialId) { + return; + } + _materialId = materialId; + _batches.emplace_back(_materialId); // Create a new batch with the new material. +} + +size_t BuildModelBlock::total_number_of_triangles() { + size_t count = 0; + + for(auto &batch : _batches) { + count += batch.number_of_triangles(); + } + + return count; +} + +size_t BuildModelBlock::total_number_of_vertices() { + size_t count = 0; + + for(auto &batch : _batches) { + count += batch.number_of_vertices(); + } + + return count; +} + +size_t BuildModelBlock::number_of_batches() { + return _batches.size(); +} + +size_t BuildModelBlock::number_of_batches_to_allocate() { + return _batches.size() + 1; // Must have an extra entry to calculate the sizes for the last batch. +} + +void BuildModelBlock::write_batches(const std::map &materialIds, DkrBatch*& outBatches, DkrVertex*& outVertices, DkrTriangle*& outTriangles) { + size_t vertexCount = 0; + size_t triCount = 0; + for(auto &batch : _batches) { + batch.write_batch(materialIds, outBatches, outVertices, outTriangles); + outBatches->verticesOffset = vertexCount; + outBatches->trianglesOffset = triCount; + outBatches->unk1 = (int8_t)batch.number_of_vertices(); + vertexCount += batch.number_of_vertices(); + triCount += batch.number_of_triangles(); + outBatches++; // next out batch. + } + // One extra batch for that extra entry. + outBatches->verticesOffset = vertexCount; + outBatches->trianglesOffset = triCount; +} \ No newline at end of file diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModelBlock.h b/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModelBlock.h new file mode 100644 index 00000000..c7709e62 --- /dev/null +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModelBlock.h @@ -0,0 +1,34 @@ +#pragma once + +#include +#include +#include + +#include "buildModelVertex.h" +#include "buildModelBatch.h" + +#include "fileTypes/vertex.hpp" +#include "fileTypes/triangle.hpp" +#include "fileTypes/batch.hpp" + +namespace DkrAssetsTool { +class BuildModelBlock { +public: + BuildModelBlock(std::optional materialId = std::nullopt); + + void add_new_triangle(const BuildModelVertex& vertA, const BuildModelVertex& vertB, const BuildModelVertex& vertC, + Vec2f uv0, Vec2f uv1, Vec2f uv2); + void set_material(std::optional materialId); + + size_t total_number_of_triangles(); + size_t total_number_of_vertices(); + size_t number_of_batches(); + size_t number_of_batches_to_allocate(); + + void write_batches(const std::map &materialIds, DkrBatch*& outBatches, DkrVertex*& outVertices, DkrTriangle*& outTriangles); + +private: + std::vector _batches; + std::optional _materialId = std::nullopt; +}; +} diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModelMaterial.cpp b/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModelMaterial.cpp new file mode 100644 index 00000000..d994498a --- /dev/null +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModelMaterial.cpp @@ -0,0 +1,48 @@ +#include "buildModelMaterial.h" + +#include "helpers/debugHelper.h" +#include "helpers/imageHelper.h" + +#include "builder/buildTypes/buildTexture.h" + +using namespace DkrAssetsTool; + +BuildModelMaterial::BuildModelMaterial() : _texturePath(std::nullopt) { +} + +BuildModelMaterial::BuildModelMaterial(fs::path texturePath) : _texturePath(texturePath) { +} + +void BuildModelMaterial::write_to(DkrTextureInfo *outTexInfo, BuildInfo &info) { + DebugHelper::assert_(has_texture(), + "(BuildModelMaterial::write_to) Trying to write out to a DkrTextureInfo without a texture!"); + + int width, height; + + ImageHelper::get_width_and_height(_texturePath.value(), width, height); + + DebugHelper::assert_((width > 0) && (width < 255), + "(BuildModelMaterial::write_to) Invalid width of ", width, " for texture ", _texturePath.value().filename()); + + DebugHelper::assert_((height > 0) && (height < 255), + "(BuildModelMaterial::write_to) Invalid height of ", height, " for texture ", _texturePath.value().filename()); + + outTexInfo->width = width; + outTexInfo->height = height; + outTexInfo->format = 0x11; // 0x11 = Opaque RGBA16 texture. TODO: Add support for more formats! + outTexInfo->id = BuildTexture::build_deferred(info, _texturePath.value()); +} + +bool BuildModelMaterial::has_texture() const { + return _texturePath.has_value(); +} + +void BuildModelMaterial::get_texture_width_and_height(int &outWidth, int &outHeight) { + if(!_texturePath.has_value()) { + outWidth = 0; + outHeight = 0; + return; + } + + ImageHelper::get_width_and_height(_texturePath.value(), outWidth, outHeight); +} diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModelMaterial.h b/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModelMaterial.h new file mode 100644 index 00000000..d59dfdd6 --- /dev/null +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModelMaterial.h @@ -0,0 +1,29 @@ +#pragma once + +#include + +#include "helpers/fileHelper.h" + +#include "builder/buildInfo.h" + +#include "fileTypes/textureInfo.hpp" + +namespace DkrAssetsTool { + +class BuildModelMaterial { +public: + BuildModelMaterial(); + BuildModelMaterial(fs::path texturePath); // Path to texture. + + void write_to(DkrTextureInfo *outTexInfo, BuildInfo &info); + + std::optional get_texture_path(); + bool has_texture() const; + + void get_texture_width_and_height(int &outWidth, int &outHeight); + +private: + std::optional _texturePath; +}; + +} diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModelVertex.cpp b/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModelVertex.cpp new file mode 100644 index 00000000..5dbc4153 --- /dev/null +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModelVertex.cpp @@ -0,0 +1,53 @@ +#include "buildModelVertex.h" + +using namespace DkrAssetsTool; + +const Vec3f POSITION_ZERO = {}; +const Vec4f COLOR_NULL = {}; +const Vec4f COLOR_WHITE = { 1.0f }; + +BuildModelVertex::BuildModelVertex() : _position(POSITION_ZERO), _color(COLOR_NULL) { +} + +BuildModelVertex::BuildModelVertex(const Vec3f position) : _position(position), _color(COLOR_WHITE) { +} + +BuildModelVertex::BuildModelVertex(const Vec3f position, const Vec4f color) : _position(position), _color(color) { +} + +BuildModelVertex::~BuildModelVertex() { +} + +bool BuildModelVertex::operator==(const BuildModelVertex& other) const { + return (_position == other._position) && (_color == other._color); +} + +bool BuildModelVertex::operator!=(const BuildModelVertex& other) const { + return !operator==(other); +} + +Vec3f BuildModelVertex::position() const { + return _position; +} + +Vec4f BuildModelVertex::color() const { + return _color; +} + +void BuildModelVertex::write_to(DkrVertex *outVertex) { + // Write position + outVertex->x = static_cast(_position.x * 10); + outVertex->y = static_cast(_position.y * 10); + outVertex->z = static_cast(_position.z * 10); + + // Write color + outVertex->r = _color.get_red_as_byte(); + outVertex->g = _color.get_green_as_byte(); + outVertex->b = _color.get_blue_as_byte(); + outVertex->a = _color.get_alpha_as_byte(); +} + + std::ostream& operator<<(std::ostream& os, const BuildModelVertex& vertex) { + os << "{ pos: " << vertex.position() << ", color: 0x" << std::hex << vertex.color().get_as_rgba() << std::dec << " }"; + return os; +} diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModelVertex.h b/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModelVertex.h new file mode 100644 index 00000000..1e77024d --- /dev/null +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/buildModelVertex.h @@ -0,0 +1,36 @@ +#pragma once + +#include +#include + +#include "helpers/mathHelper.h" +#include "fileTypes/types.hpp" +#include "fileTypes/vertex.hpp" + +namespace DkrAssetsTool { + +// NOTE: Normals are not set in DKR, they are generated automatically in-game. +class BuildModelVertex { +public: + BuildModelVertex(); // Null Vertex (Blank, All zeroes) + BuildModelVertex(const Vec3f position); // position only (Color set to white, UV is zero) + BuildModelVertex(const Vec3f position, const Vec4f color); // position & color (UV is zero) + + ~BuildModelVertex(); + + bool operator==(const BuildModelVertex& other) const; + bool operator!=(const BuildModelVertex& other) const; + friend std::ostream& operator<<(std::ostream& os, const BuildModelVertex& vertex); + + // Read-Only copies + Vec3f position() const; + Vec4f color() const; + + void write_to(DkrVertex *outVertex); + +private: + Vec3f _position; + Vec4f _color; +}; + +} diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/gltfModel.cpp b/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/gltfModel.cpp new file mode 100644 index 00000000..e69de29b diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/gltfModel.h b/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/gltfModel.h new file mode 100644 index 00000000..3f59c932 --- /dev/null +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/gltfModel.h @@ -0,0 +1,2 @@ +#pragma once + diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/objModel.cpp b/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/objModel.cpp new file mode 100644 index 00000000..9f762b76 --- /dev/null +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/objModel.cpp @@ -0,0 +1,179 @@ +#include "objModel.h" + +#include "helpers/fileHelper.h" +#include "helpers/debugHelper.h" + +using namespace DkrAssetsTool; + +ObjBuildModel::ObjBuildModel(fs::path filepath) { + std::string objText = FileHelper::read_text_file(filepath); + + std::vector lines; + StringHelper::split_and_trim(objText, '\n', lines); + + std::vector vertices; + std::vector uvs; + + std::string currentMaterial = ""; + + size_t faceIndex = 0; + + for(std::string &line : lines) { + if(line[0] == '#' || line.empty()) { + // Skip this line if it is empty or a comment. + continue; + } + std::vector components; + StringHelper::split(line, ' ', components); + if(components[0] == "v") { + // Parse position coordinates. + double x = std::stod(components[1]); + double y = std::stod(components[2]); + double z = std::stod(components[3]); + + // Scale the model according that is specified in settings. + //settings.adjust_from_model_scale(x); + //settings.adjust_from_model_scale(y); + // settings.adjust_from_model_scale(z); + + // Add the new vertex + vertices.emplace_back(Vec3f(x, y, z)); + continue; + } + if(components[0] == "vn") { + // User-generated normals are not used in DKR. + continue; + } + if(components[0] == "vt") { + double u = std::stod(components[1]); + double v = std::stod(components[2]); + + uvs.emplace_back(Vec2f(u, v)); + continue; + } + if(components[0] == "f") { + std::vector faceComponentsA; + std::vector faceComponentsB; + std::vector faceComponentsC; + + // split the different indicies for a face. + StringHelper::split(components[1], '/', faceComponentsA); + StringHelper::split(components[2], '/', faceComponentsB); + StringHelper::split(components[3], '/', faceComponentsC); + + // parse index for vertex. + int positionAIndex = std::stoi(faceComponentsA[0]) - 1; + int positionBIndex = std::stoi(faceComponentsB[0]) - 1; + int positionCIndex = std::stoi(faceComponentsC[0]) - 1; + + // Make sure the indicies are in the correct range. + DebugHelper::assert_((positionAIndex >= 0) && (positionAIndex < vertices.size()), + "(ObjBuildModel::ObjBuildModel) Face ", faceIndex, " first index is out of range!"); + DebugHelper::assert_((positionBIndex >= 0) && (positionBIndex < vertices.size()), + "(ObjBuildModel::ObjBuildModel) Face ", faceIndex, " second index is out of range!"); + DebugHelper::assert_((positionCIndex >= 0) && (positionCIndex < vertices.size()), + "(ObjBuildModel::ObjBuildModel) Face ", faceIndex, " third index is out of range!"); + + if(faceComponentsA.size() == 1 || faceComponentsA[1].empty()) { + DebugHelper::info("No UVs!"); + // Add the new triangle with no UV coordinates. + _add_new_triangle_to_current_block(vertices[positionAIndex], vertices[positionBIndex], vertices[positionCIndex]); + } else { + int uvAIndex = std::stoi(faceComponentsA[1]) - 1; + int uvBIndex = std::stoi(faceComponentsB[1]) - 1; + int uvCIndex = std::stoi(faceComponentsC[1]) - 1; + + // Adjust the uv coordinates to the N64 format. + Vec2f uv0 = _get_adjusted_uv(uvs[uvAIndex], currentMaterial); + Vec2f uv1 = _get_adjusted_uv(uvs[uvBIndex], currentMaterial); + Vec2f uv2 = _get_adjusted_uv(uvs[uvCIndex], currentMaterial); + + // Add the new triangle with UV coordinates. + _add_new_triangle_to_current_block(vertices[positionAIndex], vertices[positionBIndex], vertices[positionCIndex], uv0, uv1, uv2); + } + + faceIndex++; + continue; + } + if(components[0] == "usemtl") { + currentMaterial = components[1]; + _set_material(currentMaterial); + continue; + } + if(components[0] == "o") { + continue; + } + if(components[0] == "mtllib") { + fs::path mtlFilepath = StringHelper::join(components, " ", 1); + auto tryGetFilepath = FileHelper::determine_full_filepath(mtlFilepath, filepath.parent_path()); + if(!tryGetFilepath.has_value()) { + DebugHelper::error("Could not find the .mtl file: ", mtlFilepath); + } + _parse_mtllib(tryGetFilepath.value()); + continue; + } + } + + DebugHelper::info("Done!"); +} + +Vec2f ObjBuildModel::_get_adjusted_uv(Vec2f uv, std::string materialId) { + auto tryGetMaterial = _try_get_material(materialId); + DebugHelper::assert_(tryGetMaterial.has_value(), + "(ObjBuildModel::_get_adjusted_uv) Failed parsing UV coordinates. Could not get the material \"", materialId, "\""); + + BuildModelMaterial &material = tryGetMaterial.value(); + + int texWidth, texHeight; + material.get_texture_width_and_height(texWidth, texHeight); + + if(texWidth == 0 || texHeight == 0) { + DebugHelper::warn("Could not process UV! width = ", texWidth, ", height = ", texHeight); + return uv; + } + + uv.u *= (texWidth * 32.0); + uv.v *= (texHeight * 32.0); + + return uv; +} + +void ObjBuildModel::_parse_mtllib(fs::path pathToLib) { + std::string mtlText = FileHelper::read_text_file(pathToLib); + + std::vector lines; + StringHelper::split_and_trim(mtlText, '\n', lines); + + std::string currentMaterial = ""; + fs::path currentTexture = ""; + + for(std::string &line : lines) { + if(line[0] == '#' || line.empty()) { + // Skip this line if it is empty or a comment. + continue; + } + std::vector components; + StringHelper::split(line, ' ', components); + + if(components[0] == "newmtl") { + if(!currentMaterial.empty()) { + _add_material(currentMaterial, currentTexture); + } + currentMaterial = components[1]; + continue; + } + if(components[0] == "map_Kd") { + fs::path texturePath = StringHelper::join(components, " ", 1); + auto tryGetFilepath = FileHelper::determine_full_filepath(texturePath, pathToLib.parent_path()); + if(!tryGetFilepath.has_value()) { + DebugHelper::error("Could not find the texture image: ", texturePath); + } + currentTexture = tryGetFilepath.value(); + continue; + } + } + + if(!currentMaterial.empty()) { + _add_material(currentMaterial, currentTexture); + } +} diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/objModel.h b/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/objModel.h new file mode 100644 index 00000000..6688d17d --- /dev/null +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildModel/objModel.h @@ -0,0 +1,17 @@ +#pragma once + +#include "helpers/fileHelper.h" + +#include "buildModel.h" + +namespace DkrAssetsTool { + +class ObjBuildModel : public BuildModel { +public: + ObjBuildModel(fs::path filepath); +private: + Vec2f _get_adjusted_uv(Vec2f uv, std::string materialId); + void _parse_mtllib(fs::path pathToLib); +}; + +} \ No newline at end of file diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildObjectAnimation.cpp b/tools/dkr_assets_tool_src/builder/buildTypes/buildObjectAnimation.cpp index cd51f575..9c4ecd30 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildObjectAnimation.cpp +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildObjectAnimation.cpp @@ -1,15 +1,20 @@ #include "buildObjectAnimation.h" -BuildObjectAnimation::BuildObjectAnimation(DkrAssetsSettings &settings, BuildInfo &info) : _settings(settings), _info(info) { - std::string rawPath = info.srcFile->get_string("/raw"); - - DebugHelper::assert(!rawPath.empty(), "(BuildObjectAnimation::BuildObjectAnimation) \"raw\" not specified!"); - - // Copy file from rawPath to destination path. - FileHelper::copy(_info.localDirectory / rawPath, info.dstPath); -} +using namespace DkrAssetsTool; -BuildObjectAnimation::~BuildObjectAnimation() { +void BuildObjectAnimation::build(BuildInfo &info) { + const JsonFile &jsonFile = info.get_src_json_file(); + std::string rawPath = jsonFile.get_string("/raw"); + DebugHelper::assert(!rawPath.empty(), "(BuildObjectAnimation::build) \"raw\" not specified!"); + + fs::path dir = info.get_path_to_directory(); + + if(info.build_to_file()) { + // Copy file from rawPath to destination path. + info.copy_to_dstPath(dir / rawPath); + } else { + // Load raw binary into info's out + info.out = FileHelper::read_binary_file(dir / rawPath); + } } - diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildObjectAnimation.h b/tools/dkr_assets_tool_src/builder/buildTypes/buildObjectAnimation.h index c9a48505..1313d61d 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildObjectAnimation.h +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildObjectAnimation.h @@ -1,19 +1,10 @@ #pragma once #include "builder/buildInfo.h" -#include "misc/settings.hpp" +#include "helpers/c/cContext.h" -#include "fileTypes/fonts.hpp" - -#include "helpers/debugHelper.h" -#include "helpers/fileHelper.h" -#include "helpers/jsonHelper.h" - -class BuildObjectAnimation { -public: - BuildObjectAnimation(DkrAssetsSettings &settings, BuildInfo &info); - ~BuildObjectAnimation(); -private: - DkrAssetsSettings &_settings; - BuildInfo &_info; -}; +namespace DkrAssetsTool { +namespace BuildObjectAnimation { + void build(BuildInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildObjectHeader.cpp b/tools/dkr_assets_tool_src/builder/buildTypes/buildObjectHeader.cpp index 1f98cd46..6fed2e59 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildObjectHeader.cpp +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildObjectHeader.cpp @@ -7,14 +7,47 @@ #include "helpers/dataHelper.h" #include "fileTypes/objectHeader.hpp" -BuildObjectHeader::BuildObjectHeader(DkrAssetsSettings &settings, BuildInfo &info) : _settings(settings), _info(info) { - _preload_c_context(); +using namespace DkrAssetsTool; + +be_uint16_t string_to_flags(BuildInfo &info, const JsonFile &jsonFile) { + size_t flagCount = jsonFile.length_of_array("/flags"); + + if(flagCount < 1) { + return 0; + } + + uint16_t result = 0; + + for(size_t i = 0; i < flagCount; i++) { + std::string curFlag = jsonFile.get_string_uppercase("/flags/" + std::to_string(i)); + uint16_t flagVal; + if(StringHelper::starts_with(curFlag, "FLAG_")) { + std::string flagHexVal = curFlag.substr(5); + flagVal = std::stoi(flagHexVal, 0, 16); + } else { + DebugHelper::assert(OBJECT_HEADER_FLAGS.has_key(curFlag), + "(BuildObjectHeader::string_to_flags) Invalid object header flag: \"", curFlag, "\""); + flagVal = OBJECT_HEADER_FLAGS.get_value(curFlag); + } + + result |= flagVal; + } + + return result; +} + +void BuildObjectHeader::build(BuildInfo &info) { + if(info.build_to_file()) { + info.load_enums_into_c_context({ "enums.h", "object_behaviors.h" }); + } + + const JsonFile &jsonFile = info.get_src_json_file(); // Get the counts for each section. - size_t numberOfModels = _info.srcFile->length_of_array("/models"); - size_t numberOfVehicleParts = _info.srcFile->length_of_array("/vehicle-parts"); - size_t numberOfParticles = _info.srcFile->length_of_array("/particles"); - size_t numberOfJunkBytes = _info.srcFile->length_of_array("/junk-data"); + size_t numberOfModels = jsonFile.length_of_array("/models"); + size_t numberOfVehicleParts = jsonFile.length_of_array("/vehicle-parts"); + size_t numberOfParticles = jsonFile.length_of_array("/particles"); + size_t numberOfJunkBytes = jsonFile.length_of_array("/junk-data"); // Calculate size & offsets to the different sections. size_t outSize = sizeof(ObjectHeader); @@ -29,17 +62,19 @@ BuildObjectHeader::BuildObjectHeader(DkrAssetsSettings &settings, BuildInfo &inf size_t offsetToJunkData = outSize; outSize += numberOfJunkBytes; // random bytes - std::vector out(outSize); + info.out.resize(outSize); // Make pointers to the different sections based on the offsets. - ObjectHeader *objectHeader = reinterpret_cast(&out[0]); - be_int32_t *modelIds = reinterpret_cast(&out[offsetToModels]); - be_int32_t *vehiclePartIds = reinterpret_cast(&out[offsetToVehiclePartIds]); - uint8_t *vehiclePartIndices = &out[offsetToVehiclePartIndices]; - ObjectHeaderParticleData *particles = reinterpret_cast(&out[offsetToParticles]); - uint8_t *junkData = &out[offsetToJunkData]; + ObjectHeader *objectHeader = reinterpret_cast(&info.out[0]); + be_int32_t *modelIds = reinterpret_cast(&info.out[offsetToModels]); + be_int32_t *vehiclePartIds = reinterpret_cast(&info.out[offsetToVehiclePartIds]); + uint8_t *vehiclePartIndices = &info.out[offsetToVehiclePartIndices]; + ObjectHeaderParticleData *particles = reinterpret_cast(&info.out[offsetToParticles]); + uint8_t *junkData = &info.out[offsetToJunkData]; - std::string modelType = _info.srcFile->get_string("/model-type"); + std::string modelType = jsonFile.get_string("/model-type"); + + CContext &cContext = info.get_c_context(); /** Object Header **/ @@ -52,68 +87,68 @@ BuildObjectHeader::BuildObjectHeader(DkrAssetsSettings &settings, BuildInfo &inf objectHeader->unk24 = offsetToJunkData; // Behavior - if(_info.srcFile->has("/behavior")) { - std::string behavior = _info.srcFile->get_string("/behavior"); - objectHeader->behaviorId = _c_context.get_int_value_of_symbol(behavior); + if(jsonFile.has("/behavior")) { + std::string behavior = jsonFile.get_string("/behavior"); + objectHeader->behaviorId = cContext.get_int_value_of_symbol(behavior); } else { objectHeader->behaviorId = -1; } // Model Type - objectHeader->modelType = _c_context.get_int_value_of_symbol(modelType); + objectHeader->modelType = cContext.get_int_value_of_symbol(modelType); // Flags - objectHeader->flags = _string_to_flags(); + objectHeader->flags = string_to_flags(info, jsonFile); // Internal Name - std::string internalName = _info.srcFile->get_string("/internal-name"); + std::string internalName = jsonFile.get_string("/internal-name"); std::strncpy(objectHeader->internalName, internalName.c_str(), internalName.size()); // Floats - objectHeader->shadowScale = _info.srcFile->get_float("/shadow-scale"); - objectHeader->scale = _info.srcFile->get_float("/scale"); - objectHeader->shadeBrightness = _info.srcFile->get_float("/shade-brightness"); - objectHeader->shadeAmbient = _info.srcFile->get_float("/shade-ambient"); + objectHeader->shadowScale = jsonFile.get_float("/shadow-scale"); + objectHeader->scale = jsonFile.get_float("/scale"); + objectHeader->shadeBrightness = jsonFile.get_float("/shade-brightness"); + objectHeader->shadeAmbient = jsonFile.get_float("/shade-ambient"); // Unknowns - objectHeader->unk0 = _info.srcFile->get_int("/unknown/unk0"); - objectHeader->unk8 = _info.srcFile->get_float("/unknown/unk8"); - objectHeader->unk34 = _info.srcFile->get_int("/unknown/unk34"); - objectHeader->unk38 = _info.srcFile->get_int("/unknown/unk38"); - objectHeader->unk3A = _info.srcFile->get_int("/unknown/unk3A"); - objectHeader->unk3B = _info.srcFile->get_int("/unknown/unk3B"); - objectHeader->unk3C = _info.srcFile->get_int("/unknown/unk3C"); - objectHeader->unk3D = _info.srcFile->get_int("/unknown/unk3D"); - objectHeader->unk42 = _info.srcFile->get_int("/unknown/unk42"); - objectHeader->unk44 = _info.srcFile->get_int("/unknown/unk44"); - objectHeader->unk46 = _info.srcFile->get_int("/unknown/unk46"); - objectHeader->unk48 = _info.srcFile->get_int("/unknown/unk48"); - objectHeader->unk4A = _info.srcFile->get_int("/unknown/unk4A"); - objectHeader->unk4C = _info.srcFile->get_int("/unknown/unk4C"); - objectHeader->unk50 = _info.srcFile->get_int("/unknown/unk50"); - objectHeader->unk52 = _info.srcFile->get_int("/unknown/unk52"); - objectHeader->unk58 = _info.srcFile->get_int("/unknown/unk58"); - objectHeader->unk59 = _info.srcFile->get_int("/unknown/unk59"); - objectHeader->unk5B = _info.srcFile->get_int("/unknown/unk5B"); - objectHeader->unk5C = _info.srcFile->get_int("/unknown/unk5C"); - objectHeader->unk5D = _info.srcFile->get_int("/unknown/unk5D"); - objectHeader->unk5E = _info.srcFile->get_int("/unknown/unk5E"); - objectHeader->unk5F = _info.srcFile->get_int("/unknown/unk5F"); - objectHeader->unk70 = _info.srcFile->get_int("/unknown/unk70"); - objectHeader->unk71 = _info.srcFile->get_int("/unknown/unk71"); - objectHeader->unk72 = _info.srcFile->get_int("/unknown/unk72"); - objectHeader->unk73 = _info.srcFile->get_int("/unknown/unk73"); - objectHeader->unk74 = _info.srcFile->get_int("/unknown/unk74"); - objectHeader->unk75 = _info.srcFile->get_int("/unknown/unk75"); - objectHeader->unk76 = _info.srcFile->get_int("/unknown/unk76"); - objectHeader->unk77 = _info.srcFile->get_int("/unknown/unk77"); + objectHeader->unk0 = jsonFile.get_int("/unknown/unk0"); + objectHeader->unk8 = jsonFile.get_float("/unknown/unk8"); + objectHeader->unk34 = jsonFile.get_int("/unknown/unk34"); + objectHeader->unk38 = jsonFile.get_int("/unknown/unk38"); + objectHeader->unk3A = jsonFile.get_int("/unknown/unk3A"); + objectHeader->unk3B = jsonFile.get_int("/unknown/unk3B"); + objectHeader->unk3C = jsonFile.get_int("/unknown/unk3C"); + objectHeader->unk3D = jsonFile.get_int("/unknown/unk3D"); + objectHeader->unk42 = jsonFile.get_int("/unknown/unk42"); + objectHeader->unk44 = jsonFile.get_int("/unknown/unk44"); + objectHeader->unk46 = jsonFile.get_int("/unknown/unk46"); + objectHeader->unk48 = jsonFile.get_int("/unknown/unk48"); + objectHeader->unk4A = jsonFile.get_int("/unknown/unk4A"); + objectHeader->unk4C = jsonFile.get_int("/unknown/unk4C"); + objectHeader->unk50 = jsonFile.get_int("/unknown/unk50"); + objectHeader->unk52 = jsonFile.get_int("/unknown/unk52"); + objectHeader->unk58 = jsonFile.get_int("/unknown/unk58"); + objectHeader->unk59 = jsonFile.get_int("/unknown/unk59"); + objectHeader->unk5B = jsonFile.get_int("/unknown/unk5B"); + objectHeader->unk5C = jsonFile.get_int("/unknown/unk5C"); + objectHeader->unk5D = jsonFile.get_int("/unknown/unk5D"); + objectHeader->unk5E = jsonFile.get_int("/unknown/unk5E"); + objectHeader->unk5F = jsonFile.get_int("/unknown/unk5F"); + objectHeader->unk70 = jsonFile.get_int("/unknown/unk70"); + objectHeader->unk71 = jsonFile.get_int("/unknown/unk71"); + objectHeader->unk72 = jsonFile.get_int("/unknown/unk72"); + objectHeader->unk73 = jsonFile.get_int("/unknown/unk73"); + objectHeader->unk74 = jsonFile.get_int("/unknown/unk74"); + objectHeader->unk75 = jsonFile.get_int("/unknown/unk75"); + objectHeader->unk76 = jsonFile.get_int("/unknown/unk76"); + objectHeader->unk77 = jsonFile.get_int("/unknown/unk77"); // Other - objectHeader->shadowGroup = _info.srcFile->get_int("/shadow-group"); - objectHeader->waterEffectGroup = _info.srcFile->get_int("/water-effect-group"); - objectHeader->shadeAngleY = _info.srcFile->get_int("/shade-angle-y"); - objectHeader->shadeAngleZ = _info.srcFile->get_int("/shade-angle-z"); - objectHeader->drawDistance = _info.srcFile->get_int("/draw-distance"); + objectHeader->shadowGroup = jsonFile.get_int("/shadow-group"); + objectHeader->waterEffectGroup = jsonFile.get_int("/water-effect-group"); + objectHeader->shadeAngleY = jsonFile.get_int("/shade-angle-y"); + objectHeader->shadeAngleZ = jsonFile.get_int("/shade-angle-z"); + objectHeader->drawDistance = jsonFile.get_int("/draw-distance"); objectHeader->numberOfModelIds = numberOfModels; @@ -137,20 +172,20 @@ BuildObjectHeader::BuildObjectHeader(DkrAssetsSettings &settings, BuildInfo &inf } for(size_t i = 0; i < numberOfModels; i++) { - std::string modelBuildId = _info.srcFile->get_string("/models/" + std::to_string(i)); - modelIds[i] = AssetsHelper::get_asset_index(_settings, assetSection, modelBuildId); + std::string modelBuildId = jsonFile.get_string("/models/" + std::to_string(i)); + modelIds[i] = AssetsHelper::get_asset_index(assetSection, modelBuildId); } /** Vehicle Parts **/ for(size_t i = 0; i < numberOfVehicleParts; i++) { - vehiclePartIds[i] = _info.srcFile->get_int("/vehicle-parts/" + std::to_string(i)); - vehiclePartIndices[i] = _info.srcFile->get_int("/vehicle-part-indices/" + std::to_string(i)); + vehiclePartIds[i] = jsonFile.get_int("/vehicle-parts/" + std::to_string(i)); + vehiclePartIndices[i] = jsonFile.get_int("/vehicle-part-indices/" + std::to_string(i)); } - if(_info.srcFile->has("/vehicle-part-indices-junk-bytes")) { - size_t numberOfJunkVehiclePartsIndexBytes = _info.srcFile->length_of_array("/vehicle-part-indices-junk-bytes"); + if(jsonFile.has("/vehicle-part-indices-junk-bytes")) { + size_t numberOfJunkVehiclePartsIndexBytes = jsonFile.length_of_array("/vehicle-part-indices-junk-bytes"); for(size_t i = 0; i < numberOfJunkVehiclePartsIndexBytes; i++) { - vehiclePartIndices[i + numberOfVehicleParts] = _info.srcFile->get_int("/vehicle-part-indices-junk-bytes/" + std::to_string(i)); + vehiclePartIndices[i + numberOfVehicleParts] = jsonFile.get_int("/vehicle-part-indices-junk-bytes/" + std::to_string(i)); } } @@ -159,71 +194,27 @@ BuildObjectHeader::BuildObjectHeader(DkrAssetsSettings &settings, BuildInfo &inf std::string ptr = "/particles/" + std::to_string(i); // Not sure what this special case actually is. Just that the args are different. - bool isSpecialCase = _info.srcFile->get_bool(ptr + "/special-case"); + bool isSpecialCase = jsonFile.get_bool(ptr + "/special-case"); if(isSpecialCase) { - particles[i].lower = _info.srcFile->get_int(ptr + "/junk-data"); // Not actually used I think. + particles[i].lower = jsonFile.get_int(ptr + "/junk-data"); // Not actually used I think. particles[i].upper_w.s0_s = -1; // Marks this as the special case - particles[i].upper_w.s1_b.b0 = _info.srcFile->get_int(ptr + "/arg1"); - particles[i].upper_w.s1_b.b1 = _info.srcFile->get_int(ptr + "/arg2"); + particles[i].upper_w.s1_b.b0 = jsonFile.get_int(ptr + "/arg1"); + particles[i].upper_w.s1_b.b1 = jsonFile.get_int(ptr + "/arg2"); } else { - particles[i].upper_w.s0_b.b0 = _info.srcFile->get_int(ptr + "/arg1"); - particles[i].upper_w.s0_b.b1 = _info.srcFile->get_int(ptr + "/arg2"); - particles[i].upper_w.s1_s = _info.srcFile->get_int(ptr + "/arg3"); - particles[i].lower_w.s0_s = _info.srcFile->get_int(ptr + "/arg4"); - particles[i].lower_w.s1_s = _info.srcFile->get_int(ptr + "/arg5"); + particles[i].upper_w.s0_b.b0 = jsonFile.get_int(ptr + "/arg1"); + particles[i].upper_w.s0_b.b1 = jsonFile.get_int(ptr + "/arg2"); + particles[i].upper_w.s1_s = jsonFile.get_int(ptr + "/arg3"); + particles[i].lower_w.s0_s = jsonFile.get_int(ptr + "/arg4"); + particles[i].lower_w.s1_s = jsonFile.get_int(ptr + "/arg5"); } } /** Junk Data **/ for(size_t i = 0; i < numberOfJunkBytes; i++) { - junkData[i] = _info.srcFile->get_int("/junk-data/" + std::to_string(i)); + junkData[i] = jsonFile.get_int("/junk-data/" + std::to_string(i)); } - // Write Object Header. - FileHelper::write_binary_file(out, _info.dstPath, true); -} - -BuildObjectHeader::~BuildObjectHeader() { - -} - -be_uint16_t BuildObjectHeader::_string_to_flags() { - size_t flagCount = _info.srcFile->length_of_array("/flags"); - - if(flagCount < 1) { - return 0; - } - - uint16_t result = 0; - - for(size_t i = 0; i < flagCount; i++) { - std::string curFlag = _info.srcFile->get_string_uppercase("/flags/" + std::to_string(i)); - uint16_t flagVal; - if(StringHelper::starts_with(curFlag, "FLAG_")) { - std::string flagHexVal = curFlag.substr(5); - flagVal = std::stoi(flagHexVal, 0, 16); - } else { - DebugHelper::assert(OBJECT_HEADER_FLAGS.has_key(curFlag), - "(BuildObjectHeader::_string_to_flags) Invalid object header flag: \"", curFlag, "\""); - flagVal = OBJECT_HEADER_FLAGS.get_value(curFlag); - } - - result |= flagVal; - } - - return result; -} - -void BuildObjectHeader::_preload_c_context() { - fs::path includeFolder = _settings.pathToRepo / "include/"; - - // Load all enums from these files. - fs::path enumPaths[] = { - includeFolder / "object_behaviors.h", - includeFolder / "enums.h" - }; - - for(fs::path &enumPath : enumPaths) { - CEnumsHelper::load_enums_from_file(&_c_context, enumPath); + if(info.build_to_file()) { + info.write_out_to_dstPath(); } } diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildObjectHeader.h b/tools/dkr_assets_tool_src/builder/buildTypes/buildObjectHeader.h index 595c2c02..a149d1fb 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildObjectHeader.h +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildObjectHeader.h @@ -1,24 +1,10 @@ #pragma once #include "builder/buildInfo.h" -#include "misc/settings.hpp" - -#include "fileTypes/fonts.hpp" - -#include "helpers/debugHelper.h" -#include "helpers/fileHelper.h" -#include "helpers/jsonHelper.h" #include "helpers/c/cContext.h" -class BuildObjectHeader { -public: - BuildObjectHeader(DkrAssetsSettings &settings, BuildInfo &info); - ~BuildObjectHeader(); -private: - DkrAssetsSettings &_settings; - BuildInfo &_info; - CContext _c_context; - - be_uint16_t _string_to_flags(); - void _preload_c_context(); -}; +namespace DkrAssetsTool { +namespace BuildObjectHeader { + void build(BuildInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildObjectMap.cpp b/tools/dkr_assets_tool_src/builder/buildTypes/buildObjectMap.cpp index 1075b293..4a882035 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildObjectMap.cpp +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildObjectMap.cpp @@ -8,105 +8,19 @@ #include "helpers/c/cStructGltfHelper.h" +#include "builder/buildInfoCollection.h" + +using namespace DkrAssetsTool; + +// Both are populated in calculate_size() +std::unordered_map _objectIdStructSizeCache; +std::unordered_map _objectIdToStructCache; + void search_for_objects_node() { } -BuildObjectMap::BuildObjectMap(DkrAssetsSettings &settings, BuildInfo &info) : _settings(settings), _info(info) { - _preload_c_context(); - - _transTable = AssetsHelper::get_asset_json(_settings, "ASSET_LEVEL_OBJECT_TRANSLATION_TABLE"); - _objBehaviorToEntryTable = AssetsHelper::get_meta_file(_settings, "objects/obj_beh_to_entry.meta.json"); - - if(info.srcFile->is_value_null("/objects")) { - FileHelper::write_empty_file(_info.dstPath, true); - return; - } - - fs::path gltfPath = info.localDirectory / info.srcFile->get_string("/objects"); - - GltfFile gltf(gltfPath); - - int objectsNodeIndex; - DebugHelper::assert_(gltf.search_for_node_by_name("objects", objectsNodeIndex), - "(BuildObjectMap::BuildObjectMap) .glTF file does not contain a node named \"objects\"!"); - - GltfFileNode *objectsNode = gltf.get_node(objectsNodeIndex); - - // _calculate_size() also fills the `_objectIdToStructCache` map. - size_t dataSize = _calculate_size(objectsNode); - - size_t outSize = DataHelper::align8(dataSize + sizeof(LevelObjectMapHeader)); - - std::vector out(outSize); - - LevelObjectMap *objectMap = reinterpret_cast(&out[0]); - - // Set number of bytes. - objectMap->header.fileSize = dataSize; - uint8_t *bytes = &objectMap->entriesData[0]; - - int numberOfChildNodes = objectsNode->get_child_count(); - - for(int i = 0; i < numberOfChildNodes; i++) { - GltfFileNode *objNode = objectsNode->get_child_node_by_index(i); - - std::string objectBuildId = objNode->get_extra("id", ""); - - DebugHelper::assert_(!objectBuildId.empty(), "(BuildObjectMap::BuildObjectMap) Node", i, - " does not have id defined!"); - - int id = _transTable->get_index_of_elem_in_array("/table", objectBuildId); - - DebugHelper::assert_(id >= 0, "(BuildObjectMap::BuildObjectMap) ", objectBuildId, " is not in the level-object translation table!"); - - CStruct *entryStruct = _objectIdToStructCache[objectBuildId]; - size_t entrySize = _objectIdStructSizeCache[objectBuildId]; - - // TODO: Increase this limit? - DebugHelper::assert_(entrySize < 128, "(BuildObjectMap::BuildObjectMap) Entry for ", objectBuildId, " is too big! 127 bytes is the maximum."); - - bytes[0] = (id & 0xFF); // First byte is the lower 8 bits of the id. - bytes[1] = ((id >> 8) << 7) | entrySize; // Upper-most bit is the 9th bit of the id, lower 7 bits is the length. - - // Assumption: entryStruct is LevelObjectEntryCommon - CStruct *entryCommon = entryStruct; - - // Check assumption by seeing if the first entry is a LevelObjectEntryCommon - if(entryStruct->get_entry(0)->type == "LevelObjectEntryCommon") { - // Assumption was wrong, so fix it! - entryCommon = _c_context.get_struct("LevelObjectEntryCommon"); - } - - _set_obj_position(objNode, bytes, entryCommon, i); - - if(entryCommon != entryStruct) { - for(size_t entry = 0; entry < entryStruct->entry_count(); entry++) { - CStructEntry *structMember = entryStruct->get_entry(entry); - CStructGltfHelper::put_gltf_node_extra_into_struct_entry(_settings, structMember, objNode, bytes); - } - } - - bytes += entrySize; - } - - if(_settings.debugBuildKeepUncompressed) { - // Have the uncompressed binary in a seperate directory in the build folder. - fs::path outUncompressedPath = _settings.pathToBuild / "debug/objectMaps" / (_info.dstPath.stem().string() + ".bin"); - FileHelper::write_binary_file(out, outUncompressedPath, true); - } - - // Note: `out` becomes garbled after this. - std::vector compressedOut = GzipHelper::compress_gzip(out); - - FileHelper::write_binary_file(compressedOut, _info.dstPath, true); -} - -BuildObjectMap::~BuildObjectMap() { - -} - -void BuildObjectMap::_set_obj_position(GltfFileNode *objNode, uint8_t *bytes, CStruct *entryCommon, int nodeIndex) { +void set_obj_position(GltfFileNode *objNode, uint8_t *bytes, CStruct *entryCommon, int nodeIndex) { CStructEntry *memberX = entryCommon->get_entry(2); CStructEntry *memberY = entryCommon->get_entry(3); CStructEntry *memberZ = entryCommon->get_entry(4); @@ -114,26 +28,30 @@ void BuildObjectMap::_set_obj_position(GltfFileNode *objNode, uint8_t *bytes, CS double scaledX, scaledY, scaledZ; objNode->get_position(scaledX, scaledY, scaledZ); - int xPos = _settings.adjust_from_model_scale(scaledX); - int yPos = _settings.adjust_from_model_scale(scaledY); - int zPos = _settings.adjust_from_model_scale(scaledZ); + int xPos = scaledX; //_settings.adjust_from_model_scale(scaledX); + int yPos = scaledY; //_settings.adjust_from_model_scale(scaledY); + int zPos = scaledZ; //_settings.adjust_from_model_scale(scaledZ); memberX->set_integer_to_data(bytes, xPos); memberY->set_integer_to_data(bytes, yPos); memberZ->set_integer_to_data(bytes, zPos); } -size_t BuildObjectMap::_calculate_size(GltfFileNode *objectsNode) { +size_t calculate_size(GltfFileNode *objectsNode, BuildInfo &info, CContext &cContext, std::mutex &globalMutex) { + const BuildInfoContext &infoContext = info.get_info_context(); + size_t out = 0; int numberOfChildNodes = objectsNode->get_child_count(); + globalMutex.lock(); + for(int i = 0; i < numberOfChildNodes; i++) { GltfFileNode *objNode = objectsNode->get_child_node_by_index(i); std::string objectBuildId = objNode->get_extra("id", ""); DebugHelper::assert_(!objectBuildId.empty(), - "(BuildObjectMap::_calculate_size) id was not defined in node: ", objNode->get_name()); + "(calculate_size) id was not defined in node: ", objNode->get_name()); // First check if we have already calcuated the size of this object build id. if(_objectIdStructSizeCache.find(objectBuildId) != _objectIdStructSizeCache.end()) { @@ -142,21 +60,21 @@ size_t BuildObjectMap::_calculate_size(GltfFileNode *objectsNode) { } // Get behavior from object id. - JsonFile *objJson = AssetsHelper::get_asset_json(_settings, "ASSET_OBJECTS", objectBuildId); - std::string objBehavior = objJson->get_string("/behavior"); + JsonFile &objJson = AssetsHelper::get_asset_json("ASSET_OBJECTS", objectBuildId); + std::string objBehavior = objJson.get_string("/behavior"); DebugHelper::assert_( !objBehavior.empty(), - "(BuildObjectMap::_calculate_size) Object \"", objectBuildId, "\" does not specify a behavior!" + "(calculate_size) Object \"", objectBuildId, "\" does not specify a behavior!" ); - std::string entryStructName = _objBehaviorToEntryTable->get_string("/" + objBehavior); + std::string entryStructName = infoContext.get_object_entry_from_behavior(objBehavior); DebugHelper::assert_( !entryStructName.empty(), - "(ExtractObjectMap::ExtractObjectMap) The behavior \"", objBehavior, "\" does not specify an entry struct!" + "(calculate_size) The behavior \"", objBehavior, "\" does not specify an entry struct!" ); - CStruct *entryStruct = _c_context.get_struct(entryStructName); + CStruct *entryStruct = cContext.get_struct(entryStructName); // Save struct pointer to cache. _objectIdToStructCache[objectBuildId] = entryStruct; @@ -169,28 +87,112 @@ size_t BuildObjectMap::_calculate_size(GltfFileNode *objectsNode) { out += byteSize; } + globalMutex.unlock(); return out; } -void BuildObjectMap::_preload_c_context() { - fs::path includeFolder = _settings.pathToRepo / "include/"; +void BuildObjectMap::build(BuildInfo &info) { + std::mutex &globalMutex = info.get_collection().get_global_mutex(); - // Load all structs from these files. - fs::path structPaths[] = { - includeFolder / "level_object_entries.h", - }; - - for(fs::path &structPath : structPaths) { - CStructHelper::load_structs_from_file(&_c_context, structPath); + if(info.build_to_file()) { + info.load_enums_into_c_context({ "enums.h", "object_behaviors.h" }); + info.load_structs_into_c_context({ "level_object_entries.h" }); } - // Load all enums from these files. - fs::path enumPaths[] = { - includeFolder / "enums.h", - includeFolder / "object_behaviors.h", - }; + CContext &cContext = info.get_c_context(); - for(fs::path &enumPath : enumPaths) { - CEnumsHelper::load_enums_from_file(&_c_context, enumPath); + JsonFile &transTable = AssetsHelper::get_asset_json("ASSET_LEVEL_OBJECT_TRANSLATION_TABLE"); + + const JsonFile &jsonFile = info.get_src_json_file(); + + if(jsonFile.is_value_null("/objects")) { + if(info.build_to_file()) { + info.write_empty_file_to_dstPath(); + } + return; } + + fs::path gltfPath = info.get_path_to_directory() / jsonFile.get_string("/objects"); + + GltfFile gltf(gltfPath); + + int objectsNodeIndex; + DebugHelper::assert_(gltf.search_for_node_by_name("objects", objectsNodeIndex), + "(BuildObjectMap::build) .glTF file does not contain a node named \"objects\"!"); + + GltfFileNode *objectsNode = gltf.get_node(objectsNodeIndex); + + // calculate_size() also fills the `_objectIdToStructCache` map. + size_t dataSize = calculate_size(objectsNode, info, cContext, globalMutex); + + size_t outSize = DataHelper::align8(dataSize + sizeof(LevelObjectMapHeader)); + + info.out.resize(outSize); + + LevelObjectMap *objectMap = reinterpret_cast(&info.out[0]); + + // Set number of bytes. + objectMap->header.fileSize = dataSize; + uint8_t *bytes = &objectMap->entriesData[0]; + + int numberOfChildNodes = objectsNode->get_child_count(); + + for(int i = 0; i < numberOfChildNodes; i++) { + GltfFileNode *objNode = objectsNode->get_child_node_by_index(i); + + std::string objectBuildId = objNode->get_extra("id", ""); + + DebugHelper::assert_(!objectBuildId.empty(), "(BuildObjectMap::build) Node", i, + " does not have id defined!"); + + int id = transTable.get_index_of_elem_in_array("/table", objectBuildId); + + DebugHelper::assert_(id >= 0, "(BuildObjectMap::build) ", objectBuildId, " is not in the level-object translation table!"); + + CStruct *entryStruct = _objectIdToStructCache[objectBuildId]; + size_t entrySize = _objectIdStructSizeCache[objectBuildId]; + + // TODO: Increase this limit? + DebugHelper::assert_(entrySize < 128, "(BuildObjectMap::build) Entry for ", objectBuildId, " is too big! 127 bytes is the maximum."); + + bytes[0] = (id & 0xFF); // First byte is the lower 8 bits of the id. + bytes[1] = ((id >> 8) << 7) | entrySize; // Upper-most bit is the 9th bit of the id, lower 7 bits is the length. + + // Assumption: entryStruct is LevelObjectEntryCommon + CStruct *entryCommon = entryStruct; + + // Check assumption by seeing if the first entry is a LevelObjectEntryCommon + if(entryStruct->get_entry(0)->type == "LevelObjectEntryCommon") { + // Assumption was wrong, so fix it! + entryCommon = cContext.get_struct("LevelObjectEntryCommon"); + } + + set_obj_position(objNode, bytes, entryCommon, i); + + if(entryCommon != entryStruct) { + for(size_t entry = 0; entry < entryStruct->entry_count(); entry++) { + globalMutex.lock(); + CStructEntry *structMember = entryStruct->get_entry(entry); + CStructGltfHelper::put_gltf_node_extra_into_struct_entry(structMember, objNode, bytes); + globalMutex.unlock(); + } + } + + bytes += entrySize; + } + /* + // TODO: Use new GlobalSettings + if(_settings.debugBuildKeepUncompressed) { + // Have the uncompressed binary in a seperate directory in the build folder. + fs::path outUncompressedPath = _settings.pathToBuild / "debug/objectMaps" / (_info.dstPath.stem().string() + ".bin"); + FileHelper::write_binary_file(out, outUncompressedPath, true); + } + */ + + info.out = GzipHelper::compress_gzip(info.out); + + if(info.build_to_file()) { + info.write_out_to_dstPath(); + } + } diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildObjectMap.h b/tools/dkr_assets_tool_src/builder/buildTypes/buildObjectMap.h index 7be7a7c0..ecdf4457 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildObjectMap.h +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildObjectMap.h @@ -1,37 +1,10 @@ #pragma once -#include - #include "builder/buildInfo.h" -#include "misc/settings.hpp" - -#include "fileTypes/fonts.hpp" - -#include "helpers/debugHelper.h" -#include "helpers/fileHelper.h" -#include "helpers/jsonHelper.h" -#include "helpers/gltf/gltfHelper.h" #include "helpers/c/cContext.h" -#include "helpers/c/cStructHelper.h" -class BuildObjectMap { -public: - BuildObjectMap(DkrAssetsSettings &settings, BuildInfo &info); - ~BuildObjectMap(); -private: - DkrAssetsSettings &_settings; - BuildInfo &_info; - CContext _c_context; // C Code context. (For loading enums & structs) - - // Both are populated in _calculate_size() - std::unordered_map _objectIdStructSizeCache; - std::unordered_map _objectIdToStructCache; - - JsonFile *_transTable; - JsonFile *_objBehaviorToEntryTable; - - void _set_obj_position(GltfFileNode *objNode, uint8_t *bytes, CStruct *entryCommon, int nodeIndex); - - size_t _calculate_size(GltfFileNode *objectsNode); - void _preload_c_context(); -}; +namespace DkrAssetsTool { +namespace BuildObjectMap { + void build(BuildInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildObjectModel.cpp b/tools/dkr_assets_tool_src/builder/buildTypes/buildObjectModel.cpp index 0b6a4ef5..a4b10aaf 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildObjectModel.cpp +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildObjectModel.cpp @@ -1,15 +1,51 @@ #include "buildObjectModel.h" -BuildObjectModel::BuildObjectModel(DkrAssetsSettings &settings, BuildInfo &info) : _settings(settings), _info(info) { - std::string rawPath = info.srcFile->get_string("/raw"); - - DebugHelper::assert(!rawPath.empty(), "(BuildObjectModel::BuildObjectModel) \"raw\" not specified!"); - - // Copy file from rawPath to destination path. - FileHelper::copy(_info.localDirectory / rawPath, info.dstPath); -} +#include "helpers/debugHelper.h" +#include "helpers/stringHelper.h" -BuildObjectModel::~BuildObjectModel() { - -} +#include "buildModel/objModel.h" +#include "buildModel/gltfModel.h" +using namespace DkrAssetsTool; + +void BuildObjectModel::build(BuildInfo &info) { + const JsonFile &jsonFile = info.get_src_json_file(); + + // Vanilla models will just use the original raw binary. + if(jsonFile.has("/raw")) { + std::string rawPath = jsonFile.get_string("/raw"); + + fs::path dir = info.get_path_to_directory(); + + if(info.build_to_file()) { + // Copy file from rawPath to destination path. + info.copy_to_dstPath(dir / rawPath); + } else { + // Load raw binary into info's out + info.out = FileHelper::read_binary_file(dir / rawPath); + } + return; + } + + // Custom models should support .obj (simple static models) and .gltf (for animated models) + + std::string localPathToModel = jsonFile.get_string("/model"); + + DebugHelper::assert_(!localPathToModel.empty(), "(BuildObjectModel::build) \"model\" property not specified!"); + + fs::path modelPath = info.get_path_to_directory() / localPathToModel; + + std::string modelExtension = modelPath.extension().generic_string(); + + // Make the extension case-insensitive. + StringHelper::make_lowercase(modelExtension); + + if(modelExtension == ".obj") { + ObjBuildModel objModel(modelPath); + objModel.generate_object_model(info); + } else if(modelExtension == ".gltf") { + DebugHelper::error("(BuildObjectModel::build) TODO: GLTF support"); + } else { + DebugHelper::error("(BuildObjectModel::build) Unsupported model type: \"", modelExtension, "\""); + } +} diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildObjectModel.h b/tools/dkr_assets_tool_src/builder/buildTypes/buildObjectModel.h index 125c0bb8..16495452 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildObjectModel.h +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildObjectModel.h @@ -1,19 +1,9 @@ #pragma once #include "builder/buildInfo.h" -#include "misc/settings.hpp" -#include "fileTypes/fonts.hpp" - -#include "helpers/debugHelper.h" -#include "helpers/fileHelper.h" -#include "helpers/jsonHelper.h" - -class BuildObjectModel { -public: - BuildObjectModel(DkrAssetsSettings &settings, BuildInfo &info); - ~BuildObjectModel(); -private: - DkrAssetsSettings &_settings; - BuildInfo &_info; -}; +namespace DkrAssetsTool { +namespace BuildObjectModel { + void build(BuildInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildParticle.cpp b/tools/dkr_assets_tool_src/builder/buildTypes/buildParticle.cpp index 9f6a5ca5..a1c8d161 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildParticle.cpp +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildParticle.cpp @@ -1,15 +1,20 @@ #include "buildParticle.h" -BuildParticle::BuildParticle(DkrAssetsSettings &settings, BuildInfo &info) : _settings(settings), _info(info) { - std::string rawPath = info.srcFile->get_string("/raw"); - - DebugHelper::assert(!rawPath.empty(), "(BuildParticle::BuildParticle) \"raw\" not specified!"); - - // Copy file from rawPath to destination path. - FileHelper::copy(_info.localDirectory / rawPath, info.dstPath); -} +using namespace DkrAssetsTool; -BuildParticle::~BuildParticle() { +void BuildParticle::build(BuildInfo &info) { + const JsonFile &jsonFile = info.get_src_json_file(); + std::string rawPath = jsonFile.get_string("/raw"); + DebugHelper::assert(!rawPath.empty(), "(BuildParticle::build) \"raw\" not specified!"); + + fs::path dir = info.get_path_to_directory(); + + if(info.build_to_file()) { + // Copy file from rawPath to destination path. + info.copy_to_dstPath(dir / rawPath); + } else { + // Load raw binary into info's out + info.out = FileHelper::read_binary_file(dir / rawPath); + } } - diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildParticle.h b/tools/dkr_assets_tool_src/builder/buildTypes/buildParticle.h index 0ebebfde..20ec0688 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildParticle.h +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildParticle.h @@ -1,19 +1,9 @@ #pragma once #include "builder/buildInfo.h" -#include "misc/settings.hpp" -#include "fileTypes/fonts.hpp" - -#include "helpers/debugHelper.h" -#include "helpers/fileHelper.h" -#include "helpers/jsonHelper.h" - -class BuildParticle { -public: - BuildParticle(DkrAssetsSettings &settings, BuildInfo &info); - ~BuildParticle(); -private: - DkrAssetsSettings &_settings; - BuildInfo &_info; -}; +namespace DkrAssetsTool { +namespace BuildParticle { + void build(BuildInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildParticleBehavior.cpp b/tools/dkr_assets_tool_src/builder/buildTypes/buildParticleBehavior.cpp index 7ea40612..d9bd1592 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildParticleBehavior.cpp +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildParticleBehavior.cpp @@ -1,15 +1,20 @@ #include "buildParticleBehavior.h" -BuildParticleBehavior::BuildParticleBehavior(DkrAssetsSettings &settings, BuildInfo &info) : _settings(settings), _info(info) { - std::string rawPath = info.srcFile->get_string("/raw"); - - DebugHelper::assert(!rawPath.empty(), "(BuildParticleBehavior::BuildParticleBehavior) \"raw\" not specified!"); - - // Copy file from rawPath to destination path. - FileHelper::copy(_info.localDirectory / rawPath, _info.dstPath); -} +using namespace DkrAssetsTool; -BuildParticleBehavior::~BuildParticleBehavior() { +void BuildParticleBehavior::build(BuildInfo &info) { + const JsonFile &jsonFile = info.get_src_json_file(); + std::string rawPath = jsonFile.get_string("/raw"); + DebugHelper::assert(!rawPath.empty(), "(BuildParticleBehavior::build) \"raw\" not specified!"); + + fs::path dir = info.get_path_to_directory(); + + if(info.build_to_file()) { + // Copy file from rawPath to destination path. + info.copy_to_dstPath(dir / rawPath); + } else { + // Load raw binary into info's out + info.out = FileHelper::read_binary_file(dir / rawPath); + } } - diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildParticleBehavior.h b/tools/dkr_assets_tool_src/builder/buildTypes/buildParticleBehavior.h index 950b1f14..fc9be2ef 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildParticleBehavior.h +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildParticleBehavior.h @@ -1,19 +1,9 @@ #pragma once #include "builder/buildInfo.h" -#include "misc/settings.hpp" -#include "fileTypes/fonts.hpp" - -#include "helpers/debugHelper.h" -#include "helpers/fileHelper.h" -#include "helpers/jsonHelper.h" - -class BuildParticleBehavior { -public: - BuildParticleBehavior(DkrAssetsSettings &settings, BuildInfo &info); - ~BuildParticleBehavior(); -private: - DkrAssetsSettings &_settings; - BuildInfo &_info; -}; +namespace DkrAssetsTool { +namespace BuildParticleBehavior { + void build(BuildInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildSprite.cpp b/tools/dkr_assets_tool_src/builder/buildTypes/buildSprite.cpp index 571aba8c..960f061c 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildSprite.cpp +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildSprite.cpp @@ -4,38 +4,39 @@ #include "helpers/dataHelper.h" #include "helpers/assetsHelper.h" -BuildSprite::BuildSprite(DkrAssetsSettings &settings, BuildInfo &info) : _settings(settings), _info(info) { - size_t numberOfTextures = _info.srcFile->length_of_array("/frame-tex-count"); +using namespace DkrAssetsTool; + +void BuildSprite::build(BuildInfo &info) { + const JsonFile &jsonFile = info.get_src_json_file(); + size_t numberOfTextures = jsonFile.length_of_array("/frame-tex-count"); size_t outSize = sizeof(SpriteHeader) + numberOfTextures + 1; outSize = DataHelper::align16(outSize); - std::vector out(outSize); + info.out.resize(outSize); - SpriteHeader *spriteHeader = reinterpret_cast(&out[0]); + SpriteHeader *spriteHeader = reinterpret_cast(&info.out[0]); - std::string texBuildId = _info.srcFile->get_string("/start-texture"); - DebugHelper::assert(!texBuildId.empty(), "(BuildSprite::BuildSprite) [/start-texture] was not defined!"); + std::string texBuildId = jsonFile.get_string("/start-texture"); + DebugHelper::assert_(!texBuildId.empty(), + "(BuildSprite::build) [/start-texture] was not defined!"); - spriteHeader->startTextureIndex = AssetsHelper::get_asset_index(_settings, "ASSET_TEXTURES_2D", texBuildId); - spriteHeader->unk4 = _info.srcFile->get_int("/unk4"); - spriteHeader->unk6 = _info.srcFile->get_int("/unk6"); + spriteHeader->startTextureIndex = AssetsHelper::get_asset_index("ASSET_TEXTURES_2D", texBuildId); + spriteHeader->unk4 = jsonFile.get_int("/unk4"); + spriteHeader->unk6 = jsonFile.get_int("/unk6"); spriteHeader->unk8 = 0; // Set in-game, always zero in ROM. spriteHeader->numberOfFrames = numberOfTextures; std::string frameTexCountPtr = "/frame-tex-count"; - uint8_t *data = &out[sizeof(SpriteHeader)]; + uint8_t *data = &info.out[sizeof(SpriteHeader)]; uint8_t output = 0; for(size_t i = 0; i < numberOfTextures + 1; i++) { data[i] = output; - output += _info.srcFile->get_int(frameTexCountPtr + "/" + std::to_string(i)); + output += jsonFile.get_int(frameTexCountPtr + "/" + std::to_string(i)); } - FileHelper::write_binary_file(out, _info.dstPath, true); + if(info.build_to_file()) { + info.write_out_to_dstPath(); + } } - -BuildSprite::~BuildSprite() { - -} - diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildSprite.h b/tools/dkr_assets_tool_src/builder/buildTypes/buildSprite.h index 9bdec0a1..10058019 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildSprite.h +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildSprite.h @@ -1,19 +1,9 @@ #pragma once #include "builder/buildInfo.h" -#include "misc/settings.hpp" -#include "fileTypes/fonts.hpp" - -#include "helpers/debugHelper.h" -#include "helpers/fileHelper.h" -#include "helpers/jsonHelper.h" - -class BuildSprite { -public: - BuildSprite(DkrAssetsSettings &settings, BuildInfo &info); - ~BuildSprite(); -private: - DkrAssetsSettings &_settings; - BuildInfo &_info; -}; +namespace DkrAssetsTool { +namespace BuildSprite { + void build(BuildInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildTTGhost.cpp b/tools/dkr_assets_tool_src/builder/buildTypes/buildTTGhost.cpp index 59d022ab..3a8c6670 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildTTGhost.cpp +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildTTGhost.cpp @@ -5,61 +5,55 @@ #include "fileTypes/ttGhost.hpp" #include "helpers/assetsHelper.h" #include "helpers/dataHelper.h" +#include "helpers/c/cContext.h" -BuildTTGhost::BuildTTGhost(DkrAssetsSettings &settings, BuildInfo &info) : _settings(settings), _info(info) { - _preload_c_context(); +using namespace DkrAssetsTool; + +void BuildTTGhost::build(BuildInfo &info) { + if(info.build_to_file()) { + // Make sure the enums in "/include/enums.h" are loaded. + info.load_enums_into_c_context({ "enums.h" }); + } - size_t numberOfNodes = _info.srcFile->length_of_array("/nodes"); + const JsonFile &jsonFile = info.get_src_json_file(); + + size_t numberOfNodes = jsonFile.length_of_array("/nodes"); size_t outSize = sizeof(GhostHeader) + (sizeof(GhostNode) * numberOfNodes); // Ghost Data must be 16-byte aligned. outSize = DataHelper::align16(outSize); - std::vector out(outSize); + info.out.resize(outSize); - GhostHeader *ghostHeader = reinterpret_cast(&out[0]); - GhostNode *ghostNodes = reinterpret_cast(&out[sizeof(GhostHeader)]); + GhostHeader *ghostHeader = reinterpret_cast(&info.out[0]); + GhostNode *ghostNodes = reinterpret_cast(&info.out[sizeof(GhostHeader)]); - std::string level = _info.srcFile->get_string("/header/level"); - ghostHeader->levelId = AssetsHelper::get_asset_index(_settings, "ASSET_LEVEL_HEADERS", level); + std::string level = jsonFile.get_string("/header/level"); + ghostHeader->levelId = AssetsHelper::get_asset_index("ASSET_LEVEL_HEADERS", level); - std::string vehicle = _info.srcFile->get_string("/header/vehicle"); - ghostHeader->vehicleId = _c_context.get_int_value_of_symbol(vehicle); + CContext &cContext = info.get_c_context(); + std::string vehicle = jsonFile.get_string("/header/vehicle"); + ghostHeader->vehicleId = cContext.get_int_value_of_symbol(vehicle); // Default character ID is 9 if not specified. - ghostHeader->characterId = _info.srcFile->get_int("/header/character", 0x09); + ghostHeader->characterId = jsonFile.get_int("/header/character", 0x09); - ghostHeader->time = std::round(_info.srcFile->get_float("/header/time") * GHOST_TIME_FPS); + ghostHeader->time = std::round(jsonFile.get_float("/header/time") * GHOST_TIME_FPS); ghostHeader->nodeCount = numberOfNodes; for(size_t i = 0; i < numberOfNodes; i++) { std::string ptr = "/nodes/" + std::to_string(i); - ghostNodes[i].x = _info.srcFile->get_int(ptr + "/x"); - ghostNodes[i].y = _info.srcFile->get_int(ptr + "/y"); - ghostNodes[i].z = _info.srcFile->get_int(ptr + "/z"); - ghostNodes[i].zRotation = _info.srcFile->get_int(ptr + "/rz"); - ghostNodes[i].xRotation = _info.srcFile->get_int(ptr + "/rx"); - ghostNodes[i].yRotation = _info.srcFile->get_int(ptr + "/ry"); + ghostNodes[i].x = jsonFile.get_int(ptr + "/x"); + ghostNodes[i].y = jsonFile.get_int(ptr + "/y"); + ghostNodes[i].z = jsonFile.get_int(ptr + "/z"); + ghostNodes[i].zRotation = jsonFile.get_int(ptr + "/rz"); + ghostNodes[i].xRotation = jsonFile.get_int(ptr + "/rx"); + ghostNodes[i].yRotation = jsonFile.get_int(ptr + "/ry"); } - FileHelper::write_binary_file(out, _info.dstPath, true); -} - -BuildTTGhost::~BuildTTGhost() { - -} - -void BuildTTGhost::_preload_c_context() { - fs::path includeFolder = _settings.pathToRepo / "include/"; - - // Load all enums from these files. - fs::path enumPaths[] = { - includeFolder / "enums.h", - }; - - for(fs::path &enumPath : enumPaths) { - CEnumsHelper::load_enums_from_file(&_c_context, enumPath); + if(info.build_to_file()) { + info.write_out_to_dstPath(); } } diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildTTGhost.h b/tools/dkr_assets_tool_src/builder/buildTypes/buildTTGhost.h index b2899355..447c805c 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildTTGhost.h +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildTTGhost.h @@ -1,24 +1,9 @@ #pragma once #include "builder/buildInfo.h" -#include "misc/settings.hpp" -#include "fileTypes/fonts.hpp" - -#include "helpers/debugHelper.h" -#include "helpers/fileHelper.h" -#include "helpers/jsonHelper.h" -#include "helpers/c/cContext.h" - -class BuildTTGhost { -public: - BuildTTGhost(DkrAssetsSettings &settings, BuildInfo &info); - ~BuildTTGhost(); -private: - DkrAssetsSettings &_settings; - BuildInfo &_info; - - CContext _c_context; // C Code context. (For loading enums & structs) - - void _preload_c_context(); -}; +namespace DkrAssetsTool { +namespace BuildTTGhost { + void build(BuildInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildTexture.cpp b/tools/dkr_assets_tool_src/builder/buildTypes/buildTexture.cpp index 3055c3a2..53f7d493 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildTexture.cpp +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildTexture.cpp @@ -7,33 +7,59 @@ #include "helpers/gzipHelper.h" #include "fileTypes/texture.hpp" -BuildTexture::BuildTexture(DkrAssetsSettings &settings, BuildInfo &info) : _settings(settings), _info(info) { - std::vector out(_calculate_out_size()); +#include "misc/globalSettings.h" + +#include "libs/bytes_view.hpp" + +#include "builder/buildInfoCollection.h" + +using namespace DkrAssetsTool; + +size_t calculate_out_size(BuildInfo &info, const JsonFile &jsonFile) { + int numberOfTextures = jsonFile.length_of_array("/images"); + std::string format = jsonFile.get_string_uppercase("/format", DEFAULT_TEXTURE_FORMAT); - int numberOfTextures = _info.srcFile->length_of_array("/images"); - std::string format = _info.srcFile->get_string_uppercase("/format", DEFAULT_TEXTURE_FORMAT); + size_t sizeOfAllImages = 0; - bool isCompressed = _info.srcFile->get_bool("/compressed"); - bool isFlipped = _info.srcFile->get_bool("/flipped-image", false); - int frameAdvanceDelay = std::round(_info.srcFile->get_float("/frame-advance-delay", 0) * TEXTURE_FPS); - std::string renderMode = _info.srcFile->get_string("/render-mode", "OPAQUE"); + for(int i = 0; i < numberOfTextures; i++) { + fs::path localImagePath = jsonFile.get_string("/images/" + std::to_string(i)); + fs::path filepath = info.get_path_to_directory() / localImagePath; + + sizeOfAllImages += ImageHelper::image_size(filepath, format); + } - int spriteX = _info.srcFile->get_int("/sprite-x", 0); - int spriteY = _info.srcFile->get_int("/sprite-y", 0); + return (numberOfTextures * sizeof(TextureHeader)) + sizeOfAllImages; +} + +void BuildTexture::build(BuildInfo &info) { + const JsonFile &jsonFile = info.get_src_json_file(); - bool writeSize = _info.srcFile->get_bool("/write-size"); + info.out.resize(calculate_out_size(info, jsonFile)); + + int numberOfTextures = jsonFile.length_of_array("/images"); + std::string format = jsonFile.get_string_uppercase("/format", DEFAULT_TEXTURE_FORMAT); + + bool isCompressed = jsonFile.get_bool("/compressed"); + bool isFlipped = jsonFile.get_bool("/flipped-image", false); + int frameAdvanceDelay = std::round(jsonFile.get_float("/frame-advance-delay", 0) * TEXTURE_FPS); + std::string renderMode = jsonFile.get_string("/render-mode", "OPAQUE"); + + int spriteX = jsonFile.get_int("/sprite-x", 0); + int spriteY = jsonFile.get_int("/sprite-y", 0); + + bool writeSize = jsonFile.get_bool("/write-size"); uint8_t formatVal = DataHelper::vector_index_of(TEXTURE_FORMAT_INT_TO_STRING, format); uint8_t renderModeVal = DataHelper::vector_index_of(TEXTURE_RENDER_MODES, renderMode); size_t currentOffset = 0; - bool wrapSClamped = _info.srcFile->get_string_lowercase("/flags/wrap-s", "wrap") == "clamp"; - bool wrapTClamped = _info.srcFile->get_string_lowercase("/flags/wrap-t", "wrap") == "clamp"; - bool antiAliased = _info.srcFile->get_bool("/flags/anti-aliased"); - bool semiTransparent = _info.srcFile->get_bool("/flags/semi-transparent"); - bool cutout = _info.srcFile->get_bool("/flags/cutout"); - bool interlaced = _info.srcFile->get_bool("/flags/interlaced"); + bool wrapSClamped = jsonFile.get_string_lowercase("/flags/wrap-s", "wrap") == "clamp"; + bool wrapTClamped = jsonFile.get_string_lowercase("/flags/wrap-t", "wrap") == "clamp"; + bool antiAliased = jsonFile.get_bool("/flags/anti-aliased"); + bool semiTransparent = jsonFile.get_bool("/flags/semi-transparent"); + bool cutout = jsonFile.get_bool("/flags/cutout"); + bool interlaced = jsonFile.get_bool("/flags/interlaced"); // TODO: Make flags not hardcoded! be_int16_t flags = ( @@ -46,7 +72,7 @@ BuildTexture::BuildTexture(DkrAssetsSettings &settings, BuildInfo &info) : _sett ); for(int i = 0; i < numberOfTextures; i++) { - TextureHeader *header = reinterpret_cast(&out[currentOffset]); + TextureHeader *header = reinterpret_cast(&info.out[currentOffset]); header->format = (renderModeVal << 4) | formatVal; header->spriteX = spriteX; @@ -57,11 +83,11 @@ BuildTexture::BuildTexture(DkrAssetsSettings &settings, BuildInfo &info) : _sett header->flags = flags; currentOffset += sizeof(TextureHeader); - uint8_t *textureData = &out[currentOffset]; + uint8_t *textureData = &info.out[currentOffset]; - fs::path localImgPath = _info.srcFile->get_string("/images/" + std::to_string(i)); + fs::path localImgPath = jsonFile.get_string("/images/" + std::to_string(i)); - N64Image img(_info.localDirectory / localImgPath, format); + N64Image img(info.get_path_to_directory() / localImgPath, format); int imgWidth = img.get_width(); int imgHeight = img.get_height(); @@ -92,57 +118,90 @@ BuildTexture::BuildTexture(DkrAssetsSettings &settings, BuildInfo &info) : _sett } if(!writeSize) { - // Make sure `out` is 16-byte aligned. - while(out.size() % 16 != 0) { - out.push_back(0); + // Make sure `out` is 16-byte aligned only for this specific case? + while(info.out.size() % 16 != 0) { + info.out.push_back(0); } } - if(_settings.debugBuildKeepUncompressed) { - // Have the uncompressed binary in a seperate directory in the build folder. - fs::path outUncompressedPath = _settings.pathToBuild / "debug/textures" / (_info.dstPath.stem().string() + ".bin"); - FileHelper::write_binary_file(out, outUncompressedPath, true); + bool debugKeepUncompressed = GlobalSettings::get_value("/debug/keep-uncompressed", false); + + if(debugKeepUncompressed) { + fs::path outUncompressedPath = GlobalSettings::get_decomp_path("build_subpath", "build/"); + outUncompressedPath /= "debug/textures"; + outUncompressedPath /= info.get_src_json_file().get_filepath().filename().replace_extension(".bin"); + FileHelper::write_binary_file(info.out, outUncompressedPath, true); } if(isCompressed) { std::vector compressedHeader; // Copy header from first texture into compressedHeader vector. - compressedHeader.insert(compressedHeader.end(), out.begin(), out.begin() + sizeof(TextureHeader)); + compressedHeader.insert(compressedHeader.end(), info.out.begin(), info.out.begin() + sizeof(TextureHeader)); TextureHeader *compressedTexHeader = reinterpret_cast(&compressedHeader[0]); compressedTexHeader->isCompressed = 1; // Very important for this to be set for compressed textures! - // out is garbled at this point, so don't use it after this point! - std::vector compressedOut = GzipHelper::compress_gzip(out); + info.out = GzipHelper::compress_gzip(info.out); - // Add the compressed header to the start of compressedOut - compressedOut.insert(compressedOut.begin(), compressedHeader.begin(), compressedHeader.end()); - - FileHelper::write_binary_file(compressedOut, _info.dstPath, true); - - return; + // Add the compressed header to the start of info.out. + info.out.insert(info.out.begin(), compressedHeader.begin(), compressedHeader.end()); } - FileHelper::write_binary_file(out, _info.dstPath, true); + if(info.build_to_file()) { + info.write_out_to_dstPath(); + } } -BuildTexture::~BuildTexture() { +size_t BuildTexture::build_deferred(BuildInfo &baseInfo, fs::path pathToImage) { + std::string format = "RGBA16"; + std::string renderMode = "OPAQUE"; -} - -size_t BuildTexture::_calculate_out_size() { - int numberOfTextures = _info.srcFile->length_of_array("/images"); - std::string format = _info.srcFile->get_string_uppercase("/format", DEFAULT_TEXTURE_FORMAT); + N64Image img(pathToImage, format); - size_t sizeOfAllImages = 0; + int imgWidth = img.get_width(); + int imgHeight = img.get_height(); - for(int i = 0; i < numberOfTextures; i++) { - fs::path localImagePath = _info.srcFile->get_string("/images/" + std::to_string(i)); - fs::path filepath = _info.localDirectory / localImagePath; - - sizeOfAllImages += ImageHelper::image_size(filepath, format); + std::vector out(sizeof(TextureHeader) + ImageHelper::image_size(imgWidth, imgHeight, format)); + + TextureHeader *header = reinterpret_cast(&out[0]); + uint8_t *textureData = &out[sizeof(TextureHeader)]; + + uint8_t formatVal = DataHelper::vector_index_of(TEXTURE_FORMAT_INT_TO_STRING, format); + uint8_t renderModeVal = DataHelper::vector_index_of(TEXTURE_RENDER_MODES, renderMode); + + header->width = imgWidth; + header->height = imgHeight; + header->format = (renderModeVal << 4) | formatVal; + header->numberOfInstances = 1; + header->numOfTextures = 1; + header->textureSize = DataHelper::align16(out.size()); + + be_int16_t flags = ( + ((int)1 << 10) | + ((int)1 << 6) | + ((int)1 << 7) + ); + + header->flags = flags; + + img.flip_vertically(); + img.interlace(); + img.copy_to(textureData); + + BuildInfoCollection &collection = baseInfo.get_collection(); + + std::string buildId = baseInfo.get_build_id() + "_" + pathToImage.stem().generic_string(); + StringHelper::make_uppercase(buildId); + + bool debugKeepUncompressed = GlobalSettings::get_value("/debug/keep-uncompressed", false); + + if(debugKeepUncompressed) { + fs::path outUncompressedPath = GlobalSettings::get_decomp_path("build_subpath", "build/"); + outUncompressedPath /= "debug/custom-textures"; + outUncompressedPath /= buildId + ".bin"; + FileHelper::write_binary_file(out, outUncompressedPath, true); } - return (numberOfTextures * sizeof(TextureHeader)) + sizeOfAllImages; + return collection.add_deferred_build_info("ASSET_TEXTURES_3D", buildId, out, baseInfo.get_path_to_directory(), baseInfo.get_info_context()); } diff --git a/tools/dkr_assets_tool_src/builder/buildTypes/buildTexture.h b/tools/dkr_assets_tool_src/builder/buildTypes/buildTexture.h index affc1496..ea7c0b06 100644 --- a/tools/dkr_assets_tool_src/builder/buildTypes/buildTexture.h +++ b/tools/dkr_assets_tool_src/builder/buildTypes/buildTexture.h @@ -1,21 +1,13 @@ #pragma once #include "builder/buildInfo.h" -#include "misc/settings.hpp" -#include "fileTypes/fonts.hpp" - -#include "helpers/debugHelper.h" -#include "helpers/fileHelper.h" -#include "helpers/jsonHelper.h" - -class BuildTexture { -public: - BuildTexture(DkrAssetsSettings &settings, BuildInfo &info); - ~BuildTexture(); -private: - DkrAssetsSettings &_settings; - BuildInfo &_info; +namespace DkrAssetsTool { +namespace BuildTexture { + void build(BuildInfo &info); - size_t _calculate_out_size(); -}; + // Called from object/level model builders to add new textures. + // Returns the fileIndex of the new texture asset. + size_t build_deferred(BuildInfo &baseInfo, fs::path pathToImage); +} +} diff --git a/tools/dkr_assets_tool_src/builder/builder.cpp b/tools/dkr_assets_tool_src/builder/builder.cpp index 1ce16ac1..01e62a10 100644 --- a/tools/dkr_assets_tool_src/builder/builder.cpp +++ b/tools/dkr_assets_tool_src/builder/builder.cpp @@ -3,18 +3,36 @@ #include #include #include +#include +#include "libs/bytes_view.hpp" + +#include "prebuild/compileAssets/compile.h" + +#include "helpers/assetsHelper.h" #include "helpers/stringHelper.h" #include "helpers/jsonHelper.h" #include "helpers/fileHelper.h" #include "helpers/debugHelper.h" +#include "helpers/dataHelper.h" +#include "helpers/c/cContext.h" +#include "helpers/c/cHeader.h" + +#include "misc/args.h" +#include "misc/globalSettings.h" + +#include "fileTypes/types.hpp" #include "builder/buildInfo.h" +#include "builder/buildInfoCollection.h" +#include "builder/buildAssetTable.h" +#include "builder/stats.h" #include "buildTypes/buildAudio.h" #include "buildTypes/buildBinary.h" #include "buildTypes/buildTexture.h" #include "buildTypes/buildFonts.h" +#include "buildTypes/buildJpFonts.h" #include "buildTypes/buildGameText.h" #include "buildTypes/buildLevelModel.h" #include "buildTypes/buildLevelHeader.h" @@ -30,53 +48,349 @@ #include "buildTypes/buildTTGhost.h" #include "buildTypes/buildMisc.h" -// Hope this doesn't cause too much cringe. -#define BUILDER_ARGS DkrAssetsSettings &settings, BuildInfo &info -#define BUILDER_LAMDA(classConstructorCode) [](BUILDER_ARGS) { classConstructorCode(settings, info); } +using namespace DkrAssetsTool; + +/*************************************************************************************************/ + +#define BUILDER_ARGS BuildInfo &info +#define BUILDER_LAMDA(classConstructorCode) [](BUILDER_ARGS) { classConstructorCode(info); } typedef std::function BuilderFunction; -// Put build class constructors here with the type in the JSON file! std::unordered_map builderMap = { - { "Binary", BUILDER_LAMDA(BuildBinary) }, - { "Fonts", BUILDER_LAMDA(BuildFonts) }, - { "LevelObjectTranslationTable", BUILDER_LAMDA(BuildLOTT) }, - { "Texture", BUILDER_LAMDA(BuildTexture) }, - { "LevelObjectMap", BUILDER_LAMDA(BuildObjectMap) }, - { "LevelModel", BUILDER_LAMDA(BuildLevelModel) }, - { "LevelHeader", BUILDER_LAMDA(BuildLevelHeader) }, - { "ObjectHeader", BUILDER_LAMDA(BuildObjectHeader) }, - { "ObjectModel", BUILDER_LAMDA(BuildObjectModel) }, - { "ObjectAnimation", BUILDER_LAMDA(BuildObjectAnimation) }, - { "TTGhost", BUILDER_LAMDA(BuildTTGhost) }, - { "GameText", BUILDER_LAMDA(BuildGameText) }, - { "MenuText", BUILDER_LAMDA(BuildMenuText) }, - { "Miscellaneous", BUILDER_LAMDA(BuildMisc) }, - { "Sprite", BUILDER_LAMDA(BuildSprite) }, - { "Audio", BUILDER_LAMDA(BuildAudio) }, - { "Particle", BUILDER_LAMDA(BuildParticle) }, - { "ParticleBehavior", BUILDER_LAMDA(BuildParticleBehavior) }, + { "Binary", BUILDER_LAMDA(BuildBinary::build) }, + { "Fonts", BUILDER_LAMDA(BuildFonts::build) }, + { "JPFonts", BUILDER_LAMDA(BuildJPFonts::build) }, + { "LevelObjectTranslationTable", BUILDER_LAMDA(BuildLOTT::build) }, + { "Texture", BUILDER_LAMDA(BuildTexture::build) }, + { "LevelObjectMap", BUILDER_LAMDA(BuildObjectMap::build) }, + { "LevelModel", BUILDER_LAMDA(BuildLevelModel::build) }, + { "LevelHeader", BUILDER_LAMDA(BuildLevelHeader::build) }, + { "ObjectHeader", BUILDER_LAMDA(BuildObjectHeader::build) }, + { "ObjectModel", BUILDER_LAMDA(BuildObjectModel::build) }, + { "ObjectAnimation", BUILDER_LAMDA(BuildObjectAnimation::build) }, + { "TTGhost", BUILDER_LAMDA(BuildTTGhost::build) }, + { "GameText", BUILDER_LAMDA(BuildGameText::build) }, + { "MenuText", BUILDER_LAMDA(BuildMenuText::build) }, + { "Miscellaneous", BUILDER_LAMDA(BuildMisc::build) }, + { "Sprite", BUILDER_LAMDA(BuildSprite::build) }, + { "Audio", BUILDER_LAMDA(BuildAudio::build) }, + { "Particle", BUILDER_LAMDA(BuildParticle::build) }, + { "ParticleBehavior", BUILDER_LAMDA(BuildParticleBehavior::build) }, }; -DkrAssetBuilder::DkrAssetBuilder(DkrAssetsSettings &settings, const fs::path &srcPath, const fs::path &dstPath) { - settings.pathToAssets /= settings.dkrVersion + "/"; +/*************************************************************************************************/ + +// Generate the asset_enums.h file in the include folder. +void generate_asset_enums_header_file(BuildInfoCollection &collection, std::vector §ionIds) { + WritableCHeader assetEnumsHeader; + + assetEnumsHeader.write_comment("// This file is automatically generated. Any changes you make to this file will get overwritten when building assets."); + assetEnumsHeader.write_newline(); + assetEnumsHeader.write_raw_text_line("#ifndef _ASSET_ENUMS_H"); + assetEnumsHeader.write_raw_text_line("#define _ASSET_ENUMS_H"); + assetEnumsHeader.write_newline(); + + assetEnumsHeader.write_header_comment("Asset Sections"); + WriteableCEnum assetSectionsEnum("AssetSectionsEnum"); + + for(const std::string §ionBuildId : sectionIds) { + assetSectionsEnum.add_symbol(sectionBuildId); + } + + assetSectionsEnum.add_symbol("ASSET_SECTIONS_COUNT"); + + assetEnumsHeader.write_enum(assetSectionsEnum); + + for(const std::string §ionBuildId : sectionIds) { + + if(collection.get_file_count_for_section(sectionBuildId) == 1) { + if(sectionBuildId == "ASSET_FONTS" || sectionBuildId == "ASSET_LEVEL_OBJECT_TRANSLATION_TABLE") { + assetEnumsHeader.write_header_comment(sectionBuildId.c_str()); + std::string enumName = StringHelper::upper_snake_case_to_pascal_case(sectionBuildId) + "Enum"; + WriteableCEnum assetEnum(enumName); + + if(sectionBuildId == "ASSET_FONTS") { + // Need to list out the individual fonts for ASSET_FONTS + JsonFile &fontJson = AssetsHelper::get_asset_json(sectionBuildId); + std::vector fontBuildIds; + fontJson.get_array("/fonts-order", fontBuildIds); + for(const std::string &fontBuildId : fontBuildIds) { + assetEnum.add_symbol(fontBuildId); + } + } else if(sectionBuildId == "ASSET_LEVEL_OBJECT_TRANSLATION_TABLE") { + // Need to list out the object ids for this table. + JsonFile &lottJson = AssetsHelper::get_asset_json(sectionBuildId); + size_t tableLen = lottJson.length_of_array("/table"); + for(size_t i = 0; i < tableLen; i++) { + std::string ptr = "/table/" + std::to_string(i); + if(lottJson.is_value_null(ptr)) { + assetEnum.add_symbol("NULL_OBJECT_" + std::to_string(i) + "_ID"); + continue; + } + std::string objectId = lottJson.get_string(ptr); + + if(StringHelper::starts_with(objectId, "ASSET_OBJECT_")) { + objectId.insert(13, "ID_"); + } else { + objectId += "_ID"; + } + + assetEnum.add_symbol(objectId); + } + } + + assetEnum.add_symbol(sectionBuildId + "_COUNT"); + + assetEnumsHeader.write_enum(assetEnum); + } + + // Ignore sections with only one entry, since the build id is already covered in AssetSectionsEnum. + continue; + } + + assetEnumsHeader.write_header_comment(sectionBuildId.c_str()); + + std::string enumName = StringHelper::upper_snake_case_to_pascal_case(sectionBuildId) + "Enum"; + WriteableCEnum assetEnum(enumName); + + collection.get_infos_for_section(sectionBuildId, [&assetEnum](BuildInfo &info){ + assetEnum.add_symbol(info.get_build_id()); + }); + + assetEnum.add_symbol(sectionBuildId + "_COUNT"); + + assetEnumsHeader.write_enum(assetEnum); + + if(sectionBuildId == "ASSET_MENU_TEXT") { + std::string enumName = StringHelper::upper_snake_case_to_pascal_case(sectionBuildId) + "IdsEnum"; + WriteableCEnum menuTextIdsEnum(enumName); + JsonFile &menuTextSectionJson = AssetsHelper::get_asset_section_json(sectionBuildId); + std::vector menuTextIds; + menuTextSectionJson.get_array("/menu-text-build-ids", menuTextIds); + + for(const std::string &menuTextId : menuTextIds) { + menuTextIdsEnum.add_symbol(menuTextId); + } + + assetEnumsHeader.write_enum(menuTextIdsEnum); + } + } + + assetEnumsHeader.write_raw_text_line("#endif"); + assetEnumsHeader.write_newline(); + + fs::path assetEnumsHeaderPath = GlobalSettings::get_decomp_path("/include-subpath", "include/") / "asset_enums.h"; + + assetEnumsHeader.save(assetEnumsHeaderPath); + + DebugHelper::info("Generated asset_enums.h in the include folder."); +} + +/*************************************************************************************************/ + +// Build all assets. +void AssetBuilder::build_all(const fs::path &dstPath) { + + if(Args::get("-m", false)) { + // Attempt to compile assets if mods/order.json has any. + CompileAssets::compile(); + } + + JsonFile &mainJson = AssetsHelper::get_main_json(); + + std::vector sectionIds; + mainJson.get_array("/assets/order", sectionIds); + size_t numberOfAssetSections = sectionIds.size(); + + CContext cContext; + BuildStats stats; + BuildInfoCollection collection; + + // BuildInfoContext holds info that is shared between all assets. + BuildInfoContext infoContext(cContext, stats, collection); + + fs::path includeFolder = GlobalSettings::get_decomp_path("include_subpath", "include/"); + CEnumsHelper::load_enums_from_file(cContext, includeFolder / "enums.h"); + + // Need to do this here for Object Maps to get built correctly. + CEnumsHelper::load_enums_from_file(cContext, includeFolder / "object_behaviors.h"); + CStructHelper::load_structs_from_file(cContext, includeFolder / "level_object_entries.h"); + infoContext.init_obj_beh_to_entry_map(); + + // First loop to get all the information about assets to be extracted, and put them into the BuildInfoCollection. + for(size_t sectionIndex = 0; sectionIndex < numberOfAssetSections; sectionIndex++) { + std::string sectionBuildId = sectionIds[sectionIndex]; + + std::string sectionPtr = "/assets/sections/" + sectionBuildId; + std::string sectionType = mainJson.get_string(sectionPtr + "/type"); + bool isDeferred = mainJson.get_bool(sectionPtr + "/deferred"); + + if(isDeferred || sectionType == "Table" || sectionType == "Empty" || sectionType == "NoExtract") { + continue; + } + + JsonFile §ionJson = AssetsHelper::get_asset_section_json(sectionBuildId); + std::string sectionFolder = sectionJson.get_string("/folder"); + + if(sectionJson.has("/filename")) { + JsonFile &assetJson = AssetsHelper::get_asset_json(sectionBuildId); + collection.add_build_info(sectionBuildId, sectionBuildId, assetJson, sectionFolder, infoContext); + continue; + } + + std::vector sectionFileBuildIds; + sectionJson.get_array("/files/order", sectionFileBuildIds); + size_t numberOfFiles = sectionFileBuildIds.size(); + + for(size_t fileIndex = 0; fileIndex < numberOfFiles; fileIndex++) { + std::string fileBuildId = sectionFileBuildIds[fileIndex]; + JsonFile &assetJson = AssetsHelper::get_asset_json(sectionBuildId, fileBuildId); + collection.add_build_info(sectionBuildId, fileBuildId, assetJson, assetJson.get_filepath().parent_path(), infoContext); + } + } + + // Build all the assets + collection.run_builds([](BuildInfo &info) { + std::string type = info.get_type(); + builderMap[type](info); + }); + + // Second loop to create the tables for the asset sections. + for(size_t sectionIndex = 0; sectionIndex < numberOfAssetSections; sectionIndex++) { + std::string sectionBuildId = sectionIds[sectionIndex]; + + std::string sectionPtr = "/assets/sections/" + sectionBuildId; + std::string sectionType = mainJson.get_string(sectionPtr + "/type"); + + if(sectionType != "Table" && sectionType != "ObjectAnimationIdsTable") { + continue; + } + + bool isNormalTable = sectionType == "Table"; + + std::string forSection = mainJson.get_string(sectionPtr + "/for"); + + DebugHelper::assert_(!forSection.empty(), + "(AssetBuilder::build_all) Table section \"", sectionBuildId, "\" needs a `for` parameter."); + + std::string forSectionPtr = "/assets/sections/" + forSection; + + std::string forType = mainJson.get_string(forSectionPtr + "/type", "Binary"); + + BuildAssetTable table(isNormalTable ? forType : "ObjectAnimationIdsTable"); + + // Add entries into the table. + collection.get_infos_for_section(forSection, [&table, &isNormalTable](BuildInfo &info) { + bool highestBitSet = false; + std::string type = info.get_type(); + + if(type == "GameText") { + const JsonFile &infoJson = info.get_src_json_file(); + highestBitSet = infoJson.get_string("/text-type", "Textbox") == "Dialog"; + } + + if(isNormalTable) { + table.add_entry(info.out.size(), highestBitSet); + } else { + // ObjectAnimationIdsTable + const JsonFile &infoJson = info.get_src_json_file(); + std::string modelBuildId = infoJson.get_string("/for-model"); + int modelIndex = AssetsHelper::get_asset_index("ASSET_OBJECT_MODELS", modelBuildId); + DebugHelper::assert_(modelIndex >= 0, + "(AssetBuilder::build_all) Could not find object model \"", modelBuildId, "\" in ASSETS_OBJECT_MODELS section."); + table.add_object_animation_ids_entry(modelIndex); + } + }); + + BytesView tableView = table.get_view(cContext); + + const std::vector &tableData = tableView.data_vector(); + + collection.add_deferred_build_info(sectionBuildId, sectionBuildId, tableData, "", infoContext); + } + + //collection.print_section_counts(); + + BuildAssetTable mainTable(DkrAssetTableType::FixedTable); + + // Third loop to fill in the entries for the main assets table + for(const std::string §ionId : sectionIds) { + mainTable.add_entry(collection.get_size_of_section(sectionId)); + } + + BytesView mainTableView = mainTable.get_view(cContext); + + size_t assetsSize = mainTableView.size() + mainTable.get_size_of_entries(); + + std::vector outAssets(assetsSize); + + BytesView outAssetsView(outAssets); + + outAssetsView.copy_from(mainTableView, 0); // Put the mainTable at the start of outAssets. + + size_t currentAssetsOffset = mainTableView.size(); + + // For the map + std::map offsetToId; + + // Fourth loop to fill copy all the built data to outAssets + for(size_t sectionIndex = 0; sectionIndex < numberOfAssetSections; sectionIndex++) { + std::string sectionBuildId = sectionIds[sectionIndex]; + collection.get_infos_for_section(sectionBuildId, [&outAssetsView, ¤tAssetsOffset, &offsetToId](BuildInfo &info) { + outAssetsView.copy_from(info.out, currentAssetsOffset); + offsetToId[currentAssetsOffset] = info.get_build_id(); + currentAssetsOffset += info.out.size(); + }); + // Make sure the alignment for each section is at a 16-byte boundary. + currentAssetsOffset = DataHelper::align16(currentAssetsOffset); + } + + // Write the output file to the destination. + FileHelper::write_binary_file(outAssets, dstPath, true); + DebugHelper::info("Wrote assets to ", dstPath); + + // Generate the include/asset_enums.h file + generate_asset_enums_header_file(collection, sectionIds); + + if(GlobalSettings::get_value("/debug/write-assets-map", false)) { + std::stringstream ss; + + for(auto &entry : offsetToId) { + ss << std::uppercase << std::hex << std::setw(8) << std::setfill('0'); + ss << entry.first << ": " << entry.second << std::endl; + } + + fs::path mapDstPath = dstPath; + mapDstPath.replace_extension(".map.txt"); + FileHelper::write_text_file(ss.str(), mapDstPath, true); + } +} + +void AssetBuilder::build(const fs::path &srcPath, const fs::path &dstPath) { + DebugHelper::error("(AssetBuilder::build) Not implemented. Yell at the dev to get off his lazy butt."); + + /* + //settings.pathToAssets /= GlobalSettings::get_value("dkr_version", "us_1.0") + "/"; // Make sure the input file is a JSON file. DebugHelper::assert_(StringHelper::ends_with(srcPath, ".json"), "(DkrAssetBuilder::DkrAssetBuilder) Input file is not a JSON file! Input file = \"", srcPath, "\""); - JsonFile *jsonFile; + auto tryGetJsonFile = JsonHelper::get_file(srcPath); // Get the file, and throw an error if it doesn't exist. - DebugHelper::assert_(JsonHelper::get().get_file(srcPath, &jsonFile), "(DkrAssetBuilder::DkrAssetBuilder) Could not find input file \"", srcPath, "\""); + DebugHelper::assert_(tryGetJsonFile.has_value(), "(DkrAssetBuilder::DkrAssetBuilder) Could not find input file \"", srcPath, "\""); + + JsonFile &jsonFile = tryGetJsonFile.value(); fs::path localDirectory = FileHelper::get_directory(srcPath); - BuildInfo info(jsonFile, dstPath, localDirectory); + BuildInfo info(&jsonFile, dstPath, localDirectory); // Make sure the json file has the "type" key. - DebugHelper::assert_(jsonFile->has("/type"), "(DkrAssetBuilder::DkrAssetBuilder) Input JSON file does not have a \"type\"! Input file = \"", srcPath, "\""); + DebugHelper::assert_(jsonFile.has("/type"), "(DkrAssetBuilder::DkrAssetBuilder) Input JSON file does not have a \"type\"! Input file = \"", srcPath, "\""); - std::string type = jsonFile->get_string("/type"); + std::string type = jsonFile.get_string("/type"); // Check to make sure the builderMap has the given type. if(builderMap.find(type) == builderMap.end()) { @@ -86,8 +400,6 @@ DkrAssetBuilder::DkrAssetBuilder(DkrAssetsSettings &settings, const fs::path &sr } // Call the class constructor of a type. - builderMap[type](settings, info); -} - -DkrAssetBuilder::~DkrAssetBuilder() { + builderMap[type](info); + */ } diff --git a/tools/dkr_assets_tool_src/builder/builder.h b/tools/dkr_assets_tool_src/builder/builder.h index 851510c1..567cb508 100644 --- a/tools/dkr_assets_tool_src/builder/builder.h +++ b/tools/dkr_assets_tool_src/builder/builder.h @@ -1,14 +1,10 @@ #pragma once -#include -#include "misc/settings.hpp" +#include "helpers/fileHelper.h" -// Converts a JSON file into raw asset data the game can read. -class DkrAssetBuilder { -public: - DkrAssetBuilder(DkrAssetsSettings &settings, const fs::path &srcPath, const fs::path &dstPath); - ~DkrAssetBuilder(); -private: - - -}; \ No newline at end of file +namespace DkrAssetsTool { +namespace AssetBuilder { + void build_all(const fs::path &dstPath); // build ALL assets + void build(const fs::path &srcPath, const fs::path &dstPath); // build single asset +} +} diff --git a/tools/dkr_assets_tool_src/builder/stats.cpp b/tools/dkr_assets_tool_src/builder/stats.cpp new file mode 100644 index 00000000..3df3497b --- /dev/null +++ b/tools/dkr_assets_tool_src/builder/stats.cpp @@ -0,0 +1 @@ +#include "stats.h" \ No newline at end of file diff --git a/tools/dkr_assets_tool_src/builder/stats.h b/tools/dkr_assets_tool_src/builder/stats.h new file mode 100644 index 00000000..68f9c835 --- /dev/null +++ b/tools/dkr_assets_tool_src/builder/stats.h @@ -0,0 +1,17 @@ +#pragma once + +#include +#include + +namespace DkrAssetsTool { + +class BuildInfo; + +class BuildStats { + public: + + private: + std::unordered_map _numberOfFilesInSection; +}; + +} \ No newline at end of file diff --git a/tools/dkr_assets_tool_src/extract/assetTable.cpp b/tools/dkr_assets_tool_src/extract/assetTable.cpp index 2858805a..49d876ca 100644 --- a/tools/dkr_assets_tool_src/extract/assetTable.cpp +++ b/tools/dkr_assets_tool_src/extract/assetTable.cpp @@ -1,8 +1,10 @@ #include "assetTable.h" -AssetTable::AssetTable(DkrExtractROM *rom, uint32_t offset, DkrAssetTableType type){ - _rom = rom; - _romOffset = offset; +#include "helpers/dataHelper.h" + +using namespace DkrAssetsTool; + +AssetTable::AssetTable(BytesView view, DkrAssetTableType type) : _view(view) { switch(type) { case DkrAssetTableType::FixedTable: _parse_fixed_table(); @@ -25,6 +27,9 @@ AssetTable::AssetTable(DkrExtractROM *rom, uint32_t offset, DkrAssetTableType ty case DkrAssetTableType::AudioTable: _parse_audio_table(); break; + default: + // Not used. + break; } } @@ -33,10 +38,14 @@ AssetTable::~AssetTable() { } -size_t AssetTable::size() { +size_t AssetTable::number_of_entries() { return _entries.size(); } +size_t AssetTable::total_size() { + return _totalSize; +} + int32_t AssetTable::get_entry_offset(size_t entryIndex) { if(entryIndex >= _entries.size()) { DebugHelper::error("(AssetTable::get_entry_offset) Entry out of bounds! ", entryIndex); @@ -54,25 +63,27 @@ int32_t AssetTable::get_entry_size(size_t entryIndex) { // TODO: Reduce duplicate code. void AssetTable::_parse_fixed_table() { - uint32_t offset = _romOffset; - int numEntries = _rom->get_s32(offset); + uint32_t offset = 0; + int numEntries = _view.get_s32_be(0); offset += 4; for(int i = 0; i < numEntries; i++) { - int32_t entryValue = _rom->get_s32(offset); - int32_t entrySize = _rom->get_s32(offset + 4) - entryValue; + int32_t entryValue = _view.get_s32_be(offset); + int32_t entrySize = _view.get_s32_be(offset + 4) - entryValue; _entries.push_back({entryValue, entrySize}); offset += 4; } + _totalSize = DataHelper::align16(offset); } void AssetTable::_parse_variable_table() { - uint32_t offset = _romOffset; + uint32_t offset = 0; while(true) { - int32_t entryValue = (_rom->get_s32(offset)); - int32_t nextEntryValue = (_rom->get_s32(offset + 4)); + int32_t entryValue = (_view.get_s32_be(offset)); + int32_t nextEntryValue = (_view.get_s32_be(offset + 4)); if(entryValue == -1 || nextEntryValue == -1) { + _totalSize = DataHelper::align16(offset); return; } int32_t entrySize = nextEntryValue - entryValue; @@ -84,15 +95,17 @@ void AssetTable::_parse_variable_table() { offset += 4; } + } // Similar to _parse_variable_table, but it starts at index 1. (The 0th index tells how many text entries are in each language) void AssetTable::_parse_menutext_table() { - uint32_t offset = _romOffset + 4; + uint32_t offset = 4; while(true) { - int32_t entryValue = (_rom->get_s32(offset)); - int32_t nextEntryValue = (_rom->get_s32(offset + 4)); + int32_t entryValue = (_view.get_s32_be(offset)); + int32_t nextEntryValue = (_view.get_s32_be(offset + 4)); if(entryValue == -1 || nextEntryValue == -1) { + _totalSize = DataHelper::align16(offset); return; } int32_t entrySize = nextEntryValue - entryValue; @@ -110,11 +123,12 @@ void AssetTable::_parse_menutext_table() { // Similar to _parse_variable_table, but some entries might have the highest bit set to indicate that it is dialog instead of a textbox. // So we want to disregard the negative value check. void AssetTable::_parse_gametext_table() { - uint32_t offset = _romOffset; + uint32_t offset = 0; while(true) { - int32_t entryValue = (_rom->get_s32(offset)); - int32_t nextEntryValue = (_rom->get_s32(offset + 4)); + int32_t entryValue = (_view.get_s32_be(offset)); + int32_t nextEntryValue = (_view.get_s32_be(offset + 4)); if(entryValue == -1 || nextEntryValue == -1) { + _totalSize = DataHelper::align16(offset); return; } int32_t entrySize = (nextEntryValue & 0x7FFFFFFF) - (entryValue & 0x7FFFFFFF); @@ -127,12 +141,13 @@ void AssetTable::_parse_gametext_table() { // Similar to _parse_variable_table, but ttghosts are 8 bytes per entry. We only care about the offsets though. void AssetTable::_parse_ttghost_table() { - uint32_t offset = _romOffset; + uint32_t offset = 0; while(true) { - int32_t entryValue = (_rom->get_s32(offset + 4)); - int32_t nextEntryValue = (_rom->get_s32(offset + 12)); + int32_t entryValue = (_view.get_s32_be(offset + 4)); + int32_t nextEntryValue = (_view.get_s32_be(offset + 12)); if(entryValue == -1 || nextEntryValue == -1) { + _totalSize = DataHelper::align16(offset); return; } int32_t entrySize = nextEntryValue - entryValue; @@ -149,11 +164,12 @@ void AssetTable::_parse_ttghost_table() { // Similar to _parse_variable_table, but each entry must be multiplied by 4. void AssetTable::_parse_misc_table() { - uint32_t offset = _romOffset; + uint32_t offset = 0; while(true) { - int32_t entryValue = (_rom->get_s32(offset)); - int32_t nextEntryValue = (_rom->get_s32(offset + 4)); + int32_t entryValue = (_view.get_s32_be(offset)); + int32_t nextEntryValue = (_view.get_s32_be(offset + 4)); if(entryValue == -1 || nextEntryValue == -1) { + _totalSize = DataHelper::align16(offset); return; } int32_t entrySize = nextEntryValue - entryValue; @@ -173,20 +189,20 @@ void AssetTable::_parse_misc_table() { // Similar to _parse_variable_table, but the table itself doesn't start at index 0, so I have to manually add it. void AssetTable::_parse_audio_table() { - uint32_t offset = _romOffset; + uint32_t offset = 0; - int32_t firstEntrySize = _rom->get_s32(offset); + int32_t firstEntrySize = _view.get_s32_be(offset); _entries.push_back({0, firstEntrySize}); while(true) { - int32_t entryValue = (_rom->get_s32(offset)); - int32_t nextEntryValue = (_rom->get_s32(offset + 4)); + int32_t entryValue = (_view.get_s32_be(offset)); + int32_t nextEntryValue = (_view.get_s32_be(offset + 4)); if(entryValue == -1 || nextEntryValue == -1) { + _totalSize = DataHelper::align16(offset); return; } int32_t entrySize = nextEntryValue - entryValue; - if(entryValue < 0) { DebugHelper::error("(AssetTable::_parse_audio_table) Invalid table entry ", DebugHelper::to_hex(entryValue), " at rom offset ", DebugHelper::to_hex(offset)); } @@ -203,6 +219,7 @@ std::unordered_map tableTypeMap = { {"TTGhost", DkrAssetTableType::TTGhostTable}, {"Miscellaneous", DkrAssetTableType::MiscTable}, {"Audio", DkrAssetTableType::AudioTable}, + {"ObjectAnimationIdsTable", DkrAssetTableType::ObjectAnimationIdsTable}, }; DkrAssetTableType AssetTable::table_type_from_section_type(const std::string §ionType) { diff --git a/tools/dkr_assets_tool_src/extract/assetTable.h b/tools/dkr_assets_tool_src/extract/assetTable.h index e0fbebb9..f77bff1c 100644 --- a/tools/dkr_assets_tool_src/extract/assetTable.h +++ b/tools/dkr_assets_tool_src/extract/assetTable.h @@ -3,8 +3,10 @@ #include #include +#include "libs/bytes_view.hpp" #include "helpers/debugHelper.h" -#include "rom.h" + +namespace DkrAssetsTool { enum DkrAssetTableType { FixedTable, // Starts with the length @@ -14,19 +16,32 @@ enum DkrAssetTableType { TTGhostTable, MiscTable, AudioTable, + + // Special kind of table. Where each entry describes how many animations an object model has. + ObjectAnimationIdsTable, }; struct DkrTableEntryInfo { - int32_t offset; - int32_t length; + union { + int32_t offset; + int32_t objectModelId; // Which object model this entry belongs to. (Only used for ObjectAnimationsTable) + }; + + union { + int32_t length; + int16_t count; // Number of animations for the objectModelId. (Only used for ObjectAnimationsTable) + }; + + DkrTableEntryInfo(int32_t off, int32_t len) : offset(off), length(len) {} }; class AssetTable { public: - AssetTable(DkrExtractROM *rom, uint32_t offset, DkrAssetTableType type = DkrAssetTableType::VariableTable); + AssetTable(BytesView view, DkrAssetTableType type = DkrAssetTableType::VariableTable); ~AssetTable(); - size_t size(); + size_t number_of_entries(); + size_t total_size(); int32_t get_entry_offset(size_t entryIndex); int32_t get_entry_size(size_t entryIndex); @@ -42,8 +57,11 @@ private: void _parse_misc_table(); void _parse_audio_table(); - DkrExtractROM *_rom; - uint32_t _romOffset; + BytesView _view; std::vector _entries; + + size_t _totalSize = 0; }; + +} diff --git a/tools/dkr_assets_tool_src/extract/config.cpp b/tools/dkr_assets_tool_src/extract/config.cpp index 39756043..ea71dd54 100644 --- a/tools/dkr_assets_tool_src/extract/config.cpp +++ b/tools/dkr_assets_tool_src/extract/config.cpp @@ -1,281 +1,132 @@ #include "config.h" -#define INVALID_CONFIG_STR "" -#define INVALID_CONFIG_INT -1 +#include "misc/globalSettings.h" +#include "helpers/c/cContext.h" -DkrExtractConfig::DkrExtractConfig(std::string filepath){ - _filepath = filepath; - _isValid = _load_config(); +using namespace DkrAssetsTool; + +AssetExtractConfig::AssetExtractConfig() { + fs::path configPath = GlobalSettings::get_decomp_path("extract_config", "tools/dkr_assets_tool_extract.json"); + + _configJson = JsonHelper::get_file(configPath); + + DebugHelper::assert_(_configJson.has_value(), + "(AssetExtractConfig::AssetExtractConfig) Could not find or parse dkr_assets_tool_extract.json"); + + const JsonFile &jsonFile = get_config_json(); + + // Doing this for performance reasons. Turns the array of files into a hashmap with the sha1 property being the key. + // Multiple files will have the same sha1 hash (duplicate textures mostly), so that is why I'm using std::vector as the map's value. + _sha1HashToFileIndex = jsonFile.create_map_of_indices_from_property_value("/files", "sha1"); } -DkrExtractConfig::~DkrExtractConfig() { -} - -bool DkrExtractConfig::is_valid() { - return _isValid; -} - -std::string DkrExtractConfig::get_dkr_version() { - if(!_isValid) { - return INVALID_CONFIG_STR; - } - return _configJson->get_string("/subfolder"); +AssetExtractConfig::~AssetExtractConfig() { } -std::string DkrExtractConfig::get_name() { - if(!_isValid) { - return INVALID_CONFIG_STR; - } - return _configJson->get_string("/config-name"); +const JsonFile &AssetExtractConfig::get_config_json() const { + return _configJson.value(); } -std::string DkrExtractConfig::get_md5() { - if(!_isValid) { - return INVALID_CONFIG_STR; - } - return _configJson->get_string("/checksum-md5"); +const BytesView &AssetExtractConfig::get_rom_assets_view() const { + DebugHelper::assert_(_romAssetsView.has_value(), + "(AssetExtractConfig::get_rom_assets_view) ROM file has not been loaded yet!"); + return _romAssetsView.value(); } -int DkrExtractConfig::get_revision() { - if(!_isValid) { - return INVALID_CONFIG_INT; +bool AssetExtractConfig::is_input_file_valid(fs::path baseromPath) const { + const JsonFile &configJson = get_config_json(); + + std::string fileSha1 = FileHelper::get_sha1_of_file(baseromPath); + + std::optional tryFindEntryFromSha1 = configJson.get_index_of_object_that_has_property("/inputs-supported", "sha1", fileSha1); + + if(!tryFindEntryFromSha1.has_value()) { + return false; // File was not in the "inputs-supported" array. } - return _configJson->get_int("/revision"); -} - -bool DkrExtractConfig::_load_config() { - if(!JsonHelper::get().get_file(_filepath, &_configJson)) { - DebugHelper::warn("Could not load config: ", _filepath); - return false; + + size_t entryIndex = tryFindEntryFromSha1.value(); + + std::string dkrVersion = GlobalSettings::get_dkr_version(); + std::string fileDkrVersion = configJson.get_string_lowercase("/inputs-supported/" + std::to_string(entryIndex) + "/dkr_version"); + + if(dkrVersion != fileDkrVersion) { + return false; // DKR version of file was not correct. } + return true; } -void DkrExtractConfig::parse() { - DebugHelper::DebugTimer timer; - _parse_code_sections(); - _parse_asset_sections(); - DebugHelper::info_verbose("Took ", timer.elapsed(), " to parse config file"); +void AssetExtractConfig::load_input_file(fs::path baseromPath) { + const JsonFile &configJson = get_config_json(); + + std::string fileSha1 = FileHelper::get_sha1_of_file(baseromPath); + std::optional tryFindEntryFromSha1 = configJson.get_index_of_object_that_has_property("/inputs-supported", "sha1", fileSha1); + DebugHelper::assert_(tryFindEntryFromSha1.has_value(), + "(AssetExtractConfig::load_input_file) Trying to load an invalid ROM file!"); + size_t entryIndex = tryFindEntryFromSha1.value(); + std::string entryPtr = "/inputs-supported/" + std::to_string(entryIndex); + + _rom = FileHelper::read_binary_file(baseromPath); + + size_t assetsStart = configJson.get_int(entryPtr + "/assets"); + size_t assetsEnd = configJson.get_int(entryPtr + "/assets_end"); + + _romAssetsView = BytesView(_rom, assetsStart, assetsEnd - assetsStart); +} + +size_t AssetExtractConfig::number_of_sections() const { + return get_config_json().length_of_array("/sections"); } -std::string DkrExtractConfig::get_build_id_of_section(int sectionIndex) { - return assetSections[sectionIndex].buildId; +std::optional AssetExtractConfig::get_section_table_index(std::string buildId) const { + const JsonFile &configJson = get_config_json(); + return configJson.get_index_of_object_that_has_property("/sections", "for", buildId); } +std::vector AssetExtractConfig::get_file_indices_from_sha1(std::string sha1Hash) const { + if(_sha1HashToFileIndex.find(sha1Hash) == _sha1HashToFileIndex.end()) { + return {} ; // No files entries found. + } + return _sha1HashToFileIndex.at(sha1Hash); +} -// Use AssetsHelper::get_build_id_of_index() instead. /* -std::string DkrExtractConfig::get_build_id_of_file_from_section(std::string sectionBuildId, int fileIndex) { - // Make sure the build ID is valid. - DebugHelper::assert(_sectionIdToIndex.find(sectionBuildId) != _sectionIdToIndex.end(), - "(DkrExtractConfig::get_build_id_of_file_from_section) Section Build ID \"", sectionBuildId, "\" was not defined."); - - DkrExtractAssetSection &assetSection = assetSections[_sectionIdToIndex[sectionBuildId]]; - DkrExtractAssetSectionFile *file; - - if(fileIndex >= 0) { - file = assetSection.get_asset_section_file(fileIndex); - } else { - file = assetSection.get_single_file(); - } - - if(file != nullptr) { - return file->buildId; - } - - // file is null, so get a generic id. - if(fileIndex >= 0) { - return sectionBuildId + "_" + std::to_string(fileIndex); - } else { - return sectionBuildId; // Single files just use the build id of the section. +std::optional AssetExtractConfig::get_file_index_from_sha1(std::string sha1Hash, size_t foundSoFar) const { + if(_sha1HashToFileIndex.find(sha1Hash) == _sha1HashToFileIndex.end()) { + return std::nullopt; // File not found in "files" array. } + size_t numberOfFilesForHash = _sha1HashToFileIndex.at(sha1Hash).size(); + DebugHelper::assert_(foundSoFar < numberOfFilesForHash, + "(AssetExtractConfig::get_file_index_from_sha1) foundSoFar out of bounds! ", + "foundSoFar = ", foundSoFar, ", numberOfFilesForHash = ", numberOfFilesForHash, "; hash is \"", sha1Hash, "\""); + return _sha1HashToFileIndex.at(sha1Hash).at(foundSoFar); } */ -// Returns the build id of the section that the table belongs to. Throws an error if it doesn't exist. -std::string DkrExtractConfig::get_build_id_of_section_from_table_id(std::string tableBuildId) { - // Make sure the build ID is valid. - DebugHelper::assert(_sectionIdToIndex.find(tableBuildId) != _sectionIdToIndex.end(), - "(DkrExtractConfig::get_build_id_of_section_from_table_id) Table Build ID \"", tableBuildId, "\" was not defined."); +std::string AssetExtractConfig::get_object_entry_from_behavior(std::string objBehavior) const { + DebugHelper::assert_(_objBehaviorToEntry.find(objBehavior) != _objBehaviorToEntry.end(), + "(AssetExtractConfig::get_object_entry_from_behavior) ", objBehavior, + " was not in the _objBehaviorToEntry map!"); - int tableIndex = _sectionIdToIndex[tableBuildId]; - - for(size_t i = 0; i < assetSections.size(); i++) { - if(assetSections[i].table == tableIndex) { - return assetSections[i].buildId; - } - } - - DebugHelper::error("(DkrExtractConfig::get_build_id_of_section_from_table_id) Could not find a section that uses the table \"", - tableBuildId, "\""); - - return std::string(); + return _objBehaviorToEntry.at(objBehavior); } -std::string DkrExtractConfig::get_folder_path_to_section(std::string sectionBuildId) { - // Make sure the build ID is valid. - DebugHelper::assert(_sectionIdToIndex.find(sectionBuildId) != _sectionIdToIndex.end(), - "(DkrExtractConfig::get_build_id_of_file_from_section) Section Build ID \"", sectionBuildId, "\" was not defined."); +void AssetExtractConfig::init_obj_beh_to_entry_map(CContext &cContext) { + const JsonFile &configJson = get_config_json(); + CEnum *objBehaviors = cContext.get_enum("ObjectBehaviours"); - DkrExtractAssetSection &assetSection = assetSections[_sectionIdToIndex[sectionBuildId]]; - return assetSection.folder; -} - -std::string DkrExtractConfig::get_path_to_file(std::string sectionBuildId, int fileIndex) { - // Make sure the build ID is valid. - DebugHelper::assert(_sectionIdToIndex.find(sectionBuildId) != _sectionIdToIndex.end(), - "(DkrExtractConfig::get_build_id_of_file_from_section) Section Build ID \"", sectionBuildId, "\" was not defined."); + std::vector defaultObjEntriesOrder; + configJson.get_array("/misc/default-object-entries-order", defaultObjEntriesOrder); - DkrExtractAssetSection &assetSection = assetSections[_sectionIdToIndex[sectionBuildId]]; - DkrExtractAssetSectionFile *file; - - if(fileIndex >= 0) { - file = assetSection.get_asset_section_file(fileIndex); - } else { - file = assetSection.get_single_file(); - } - - DebugHelper::assert(file != nullptr, "(std::string get_path_to_file) File ", fileIndex, " was not specified."); - - return assetSection.folder / file->folder / file->filename; -} - -// May return nullptr -DkrExtractAssetSectionFile *DkrExtractAssetSection::get_asset_section_file(int index) { - for(DkrExtractAssetSectionFile &file : files) { - if(file.index == index) { - return &file; - } - } - return nullptr; -} - -// May return nullptr -DkrExtractAssetSectionFile *DkrExtractAssetSection::get_single_file() { - DebugHelper::assert(files.size() < 2, "(DkrExtractAssetSection::get_single_file) Section \"", type, "\" has more than one file!"); - - if(files.empty()) { - return nullptr; - } - - return &files[0]; -} - -void DkrExtractConfig::get_default_object_entries_order_array(std::vector &out) { - size_t len = _configJson->length_of_array("/assets/misc/default-object-entries-order"); - for(size_t i = 0; i < len; i++) { - out.push_back(_configJson->get_string("/assets/misc/default-object-entries-order/" + std::to_string(i))); + for(int i = 0; i < 128; i++) { + std::string symbol; + DebugHelper::assert_(objBehaviors->get_symbol_of_value(i, symbol), + "(generate_obj_behavior_to_entry_json_file) Could not get a symbol for the value ", i, " in the ObjectBehaviors enum."); + + CStruct *entryStruct = cContext.get_struct(defaultObjEntriesOrder[i]); + DebugHelper::assert_(entryStruct != nullptr, + "(generate_obj_behavior_to_entry_json_file) Could not find struct \"", defaultObjEntriesOrder[i], "\""); + + _objBehaviorToEntry[symbol] = defaultObjEntriesOrder[i]; } } - -void DkrExtractConfig::_parse_code_sections() { - int numOfCodeSections = _configJson->length_of_array("/code/sections"); - for(int i = 0; i < numOfCodeSections; i++) { - DkrExtractCodeSection codeSection; - codeSection.type = _configJson->get_string("/code/sections/" + std::to_string(i) + "/type"); - codeSection.folder = _configJson->get_string("/code/sections/" + std::to_string(i) + "/folder"); - FileHelper::format_folder_string(codeSection.folder); - DebugHelper::info_verbose("code section: ", codeSection.type, ", ", codeSection.folder); - - int numOfCodeFilesInSection = _configJson->length_of_array("/code/sections/" + std::to_string(i) + "/files"); - for(int j = 0; j < numOfCodeFilesInSection; j++) { - DkrExtractCodeSectionFile codeFile; - codeFile.filename = _configJson->get_string("/code/sections/" + std::to_string(i) + "/files/" + std::to_string(j) + "/filename"); - std::string lengthAsHex = _configJson->get_string("/code/sections/" + std::to_string(i) + "/files/" + std::to_string(j) + "/length"); - codeFile.length = std::stoi(lengthAsHex, 0, 16); - DebugHelper::info_verbose(" code file: ", codeFile.filename, ", ", DebugHelper::to_hex(codeFile.length)); - codeSection.files.push_back(codeFile); - } - - codeSections.push_back(codeSection); - } -} - -void DkrExtractConfig::_parse_asset_sections() { - int numOfAssetSections = _configJson->length_of_array("/assets/sections"); - for(int i = 0; i < numOfAssetSections; i++) { - DkrExtractAssetSection assetSection; - - assetSection.buildId = _configJson->get_string("/assets/sections/" + std::to_string(i) + "/build-id"); - assetSection.type = _configJson->get_string("/assets/sections/" + std::to_string(i) + "/type"); - assetSection.folder = _configJson->get_path("/assets/sections/" + std::to_string(i) + "/folder"); - assetSection.table = _configJson->get_int("/assets/sections/" + std::to_string(i) + "/table"); - - assetSection.isDeferred = _configJson->get_bool("/assets/sections/" + std::to_string(i) + "/defer", false); - - if(assetSection.isDeferred) { - std::string deferInfoPtr = "/assets/sections/" + std::to_string(i) + "/defer-info"; - assetSection.deferInfo.fromSection = _configJson->get_string(deferInfoPtr + "/from-section"); - assetSection.deferInfo.idPostfix = _configJson->get_string(deferInfoPtr + "/id-postfix"); - assetSection.deferInfo.outputPath = _configJson->get_path(deferInfoPtr + "/output-path"); - } - - // Defaults to group 0 if not specified. - assetSection.group = _configJson->get_int("/assets/sections/" + std::to_string(i) + "/group", 0); - - assetSection.filesDefaultFolder = _configJson->get_path("/assets/sections/" + std::to_string(i) + "/files-default-folder"); - assetSection.defaultBuildIdPrefix = _configJson->get_string("/assets/sections/" + std::to_string(i) + "/default-build-id-prefix"); - - bool isTexture = (assetSection.type == "Texture"); - bool isTable = (assetSection.type == "Table"); - bool isFonts = (assetSection.type == "Fonts"); - bool isMenuText = (assetSection.type == "MenuText"); - bool isMisc = (assetSection.type == "Miscellaneous"); - - if(isTexture) { - assetSection.specific.textures.flipTexturesByDefault = _configJson->get_bool( "/assets/sections/" + std::to_string(i) + "/flip-textures-by-default"); - } else if(isTable) { - assetSection.specific.tableData.forSection = _configJson->get_string( "/assets/sections/" + std::to_string(i) + "/for"); - } else if(isFonts) { - _configJson->get_array( "/assets/sections/" + std::to_string(i) + "/font-names", assetSection.specific.fonts.fontNames); - } else if(isMenuText) { - _configJson->get_array( "/assets/sections/" + std::to_string(i) + "/language-order", assetSection.specific.menuText.languageOrder); - _configJson->get_array( "/assets/sections/" + std::to_string(i) + "/menu-text-build-ids", assetSection.specific.menuText.menuTextBuildIds); - } - - DebugHelper::info_verbose("asset section: ", assetSection.buildId, ",", - assetSection.type, ",", - assetSection.folder, ",", - assetSection.table, ",", - assetSection.filesDefaultFolder, ",", - assetSection.defaultBuildIdPrefix); - - if(_configJson->has("/assets/sections/" + std::to_string(i) + "/files")) { - int numOfAssetFilesInSection = _configJson->length_of_array("/assets/sections/" + std::to_string(i) + "/files"); - for(int j = 0; j < numOfAssetFilesInSection; j++) { - - std::string filePtr = "/assets/sections/" + std::to_string(i) + "/files/" + std::to_string(j); - - DkrExtractAssetSectionFile assetFile; - assetFile.section = &assetSection; - assetFile.index = _configJson->get_int(filePtr + "/index", -1); - assetFile.filename = _configJson->get_string(filePtr + "/filename", ""); - assetFile.buildId = _configJson->get_string(filePtr + "/build-id", ""); - assetFile.folder = _configJson->get_path(filePtr + "/folder", ""); - - if(isTexture) { - assetFile.specific.texture.flipTex = _configJson->get_bool(filePtr + "/flip-tex", assetSection.specific.textures.flipTexturesByDefault); - } else if(isMenuText) { - assetFile.specific.menuText.language = _configJson->get_string("/assets/sections/" + std::to_string(i) + "/language-order/" + std::to_string(j)); - } else if(isMisc) { - // Set to "Binary" by default if not specified. - assetFile.specific.misc.miscType = _configJson->get_string(filePtr + "/misc-type", "Binary"); - } - - DebugHelper::info_verbose(" asset file: ", assetFile.index, ",", assetFile.filename, ",", assetFile.buildId, ",", assetFile.folder); - assetSection.files.push_back(assetFile); - } - } - - assetSections.push_back(assetSection); - } - _populate_sectionIdToIndex_map(); -} - -void DkrExtractConfig::_populate_sectionIdToIndex_map() { - for(size_t i = 0; i < assetSections.size(); i++) { - DkrExtractAssetSection &assetSection = assetSections[i]; - _sectionIdToIndex[assetSection.buildId] = i; - } -} - diff --git a/tools/dkr_assets_tool_src/extract/config.h b/tools/dkr_assets_tool_src/extract/config.h index 8f23800d..6a6ee592 100644 --- a/tools/dkr_assets_tool_src/extract/config.h +++ b/tools/dkr_assets_tool_src/extract/config.h @@ -1,153 +1,58 @@ #pragma once -#include -#include -#include +#include -#include "helpers/jsonHelper.h" -#include "helpers/debugHelper.h" #include "helpers/fileHelper.h" +#include "helpers/jsonHelper.h" +#include "libs/bytes_view.hpp" +#include "helpers/c/cContext.h" +namespace DkrAssetsTool { -/*******************************************************/ - -struct DkrExtractCodeSectionFile { - std::string filename; - uint32_t length; -}; - -struct DkrExtractCodeSection { - std::string type; - fs::path folder; // directory to extract to - std::vector files; -}; - -/*******************************************************/ - -struct DkrExtractAssetSectionFileMenuText { - std::string language; -}; - -struct DkrExtractAssetSectionFileTexture { - bool flipTex = false; // Should the texture be flipped vertically? (No by default) -}; - -struct DkrExtractAssetSectionFileMisc { - std::string miscType; // Defaults to "Binary" -}; - -// TODO: Refactor this into a union. -struct DkrExtractAssetSectionFileSpecific { // section specific info - DkrExtractAssetSectionFileTexture texture; - DkrExtractAssetSectionFileMenuText menuText; - DkrExtractAssetSectionFileMisc misc; -}; - -struct DkrExtractAssetSection; - -struct DkrExtractAssetSectionFile { - // Pointer to the section this belong to. Wish this was a reference instead, but it ended up being a big hassle. - struct DkrExtractAssetSection *section = nullptr; - int index; - std::string buildId; // Id for the file. - std::string filename; - fs::path folder; // directory to extract to - DkrExtractAssetSectionFileSpecific specific; -}; - -/************************/ - -struct DkrExtractTexturesSection { - bool flipTexturesByDefault; -}; - -struct DkrExtractTableSection { - std::string forSection; -}; - -struct DkrExtractFontsSection { - std::vector fontNames; -}; - -struct DkrExtractMenuTextSection { - // Set in extractor.c - size_t numberOfTextEntries; // Number of entries per each language. - // Set in config.c - std::vector languageOrder; - std::vector menuTextBuildIds; -}; - -// TODO: Refactor this into a union. -struct DkrExtractAssetSectionSpecific { // section specific info - DkrExtractTexturesSection textures; - DkrExtractTableSection tableData; - DkrExtractFontsSection fonts; - DkrExtractMenuTextSection menuText; -}; - -struct DeferInfo { - std::string fromSection; - std::string idPostfix; - std::string outputPath; -}; - -struct DkrExtractAssetSection { - std::string buildId; // Id for the section. - std::string type; - fs::path folder; // directory to extract to - int table; - int group; // Extraction group. (Need to delay some groups to make sure things are in the correct order). - std::string filesDefaultFolder; - std::string defaultBuildIdPrefix; - DkrExtractAssetSectionSpecific specific; - std::vector files; - bool isDeferred; - DeferInfo deferInfo; - - // May return null - DkrExtractAssetSectionFile *get_asset_section_file(int index); - // May return null - DkrExtractAssetSectionFile *get_single_file(); -}; - -/*******************************************************/ - -class DkrExtractConfig { +class AssetExtractConfig { public: - DkrExtractConfig(std::string filepath); - ~DkrExtractConfig(); + AssetExtractConfig(); + ~AssetExtractConfig(); - std::string get_dkr_version(); - std::string get_name(); - std::string get_md5(); - int get_revision(); - bool is_valid(); - void parse(); + const JsonFile &get_config_json() const; + const BytesView &get_rom_assets_view() const; - std::vector codeSections; - std::vector assetSections; + bool is_input_file_valid(fs::path baseromPath) const; + void load_input_file(fs::path baseromPath); - std::string get_build_id_of_section(int sectionIndex); + size_t number_of_sections() const; - // Use AssetsHelper::get_build_id_of_index() instead. - //std::string get_build_id_of_file_from_section(std::string sectionBuildId, int fileIndex=-1); + template + T get(std::string ptr, T defaultValue) const { + const JsonFile& configJson = get_config_json(); + try { + return std::any_cast(configJson.get_any(ptr)); + } catch (std::bad_any_cast &err) { + } + return defaultValue; + } - std::string get_folder_path_to_section(std::string sectionBuildId); - std::string get_path_to_file(std::string sectionBuildId, int fileIndex=-1); + // Returns the index into `/sections` array of the table associated with this build id. + // Returns std::nullopt if no table was found. + std::optional get_section_table_index(std::string buildId) const; - // Retrives the build id of the section that the table represents. - std::string get_build_id_of_section_from_table_id(std::string tableBuildId); + // Returns the indices to the files given a sha1 hash. Multiple files may contain the same hash. + std::vector get_file_indices_from_sha1(std::string sha1Hash) const; + + std::string get_object_entry_from_behavior(std::string objBehavior) const; + + // initalizes _objBehaviorToEntry + void init_obj_beh_to_entry_map(CContext &cContext); - void get_default_object_entries_order_array(std::vector &out); private: - JsonFile *_configJson; - bool _isValid; - fs::path _filepath; - bool _load_config(); + std::optional> _configJson; - void _parse_code_sections(); - void _parse_asset_sections(); + std::vector _rom; + std::optional _romAssetsView; + + std::unordered_map> _sha1HashToFileIndex; + std::unordered_map _objBehaviorToEntry; - std::unordered_map _sectionIdToIndex; - void _populate_sectionIdToIndex_map(); }; + +} diff --git a/tools/dkr_assets_tool_src/extract/extractInfo.cpp b/tools/dkr_assets_tool_src/extract/extractInfo.cpp index 994c2a5a..f51ff122 100644 --- a/tools/dkr_assets_tool_src/extract/extractInfo.cpp +++ b/tools/dkr_assets_tool_src/extract/extractInfo.cpp @@ -1,6 +1,18 @@ #include "extractInfo.h" + +#include #include +#include "misc/globalSettings.h" + +#include "stats.h" + +using namespace DkrAssetsTool; + +/*****************************************************/ + +std::unordered_map> _extractions; + void DeferredExtractions::add_extraction(std::string key, ExtractInfo newExtract) { if(_extractions.find(key) == _extractions.end()) { _extractions[key] = std::vector(); @@ -11,127 +23,141 @@ void DeferredExtractions::add_extraction(std::string key, ExtractInfo newExtract ExtractInfo &DeferredExtractions::get_extraction(std::string key, size_t index) { DebugHelper::assert(_extractions.find(key) != _extractions.end(), "(DeferredExtractions::get_extraction) \"", key, "\" not in map."); - DebugHelper::assert(index < _extractions[key].size(), + DebugHelper::assert(index < _extractions[key].size(), "(DeferredExtractions::get_extraction) index ", index, " for key \"", key, "\" is out of range."); return _extractions[key][index]; } -/*****************************************************/ - -ExtractInfo::ExtractInfo(std::string &type, fs::path filename, fs::path folder, DkrExtractROM *rom, DkrExtractConfig *config, CContext *ctx, uint32_t dataOffset, size_t dataLength, size_t fileIndex) -: rom(rom), config(config), c_context(ctx), _type(type), _filename(filename), _folder(folder), _dataOffset(dataOffset), _dataLength(dataLength), _fileIndex(fileIndex), _isAsset(false) -{ - _check_params(); +ExtractInfo &DeferredExtractions::get_extraction(std::string key, std::string buildId) { + DebugHelper::assert(_extractions.find(key) != _extractions.end(), + "(DeferredExtractions::get_extraction) \"", key, "\" not in map."); + + auto it = std::find_if(_extractions[key].begin(), _extractions[key].end(), + [&buildId](const ExtractInfo& info) { + return info.get_build_id() == buildId; + } + ); + + DebugHelper::assert_(it != _extractions[key].end(), + "(DeferredExtractions::get_extraction) Could not find build id ", buildId, " in deferred extractions"); + + return _extractions[key][it->get_file_index()]; } -ExtractInfo::ExtractInfo(std::string &type, fs::path filename, fs::path folder, DkrExtractROM *rom, DkrExtractConfig *config, CContext *ctx, uint32_t dataOffset, size_t dataLength, size_t fileIndex, DkrExtractAssetSection *assetSection) -: assetSection(assetSection), rom(rom), config(config), c_context(ctx), _type(type), _filename(filename), _folder(folder), _dataOffset(dataOffset), _dataLength(dataLength), _fileIndex(fileIndex), _isAsset(true) +/*****************************************************/ + +ExtractInfo::ExtractInfo(std::string &type, std::string buildId, fs::path filename, fs::path folder, BytesView view, AssetExtractConfig &config, std::string sectionPtr, CContext &ctx, size_t fileIndex, ExtractStats &stats) +: _type(type), _buildId(buildId), _filename(filename), _folder(folder), _view(view), _sectionPtr(sectionPtr), _config(config), _cContext(ctx), _stats(stats), _fileIndex(fileIndex) { - if(_filename.empty()) { - DebugHelper::error("No filename was set for the type \"", _type, "\" in the folder \"", folder, "\""); - } - _check_params(); + DebugHelper::assert_(!_filename.empty(), + "(ExtractInfo::ExtractInfo) No filename was set for the type \"", _type, "\" in the folder ", folder); + DebugHelper::assert_(!_buildId.empty(), + "(ExtractInfo::ExtractInfo) No build id was set for the filename ", _filename); + + //DebugHelper::info(_filename, " was created!"); } ExtractInfo::~ExtractInfo(){ - + //DebugHelper::warn(_filename, " is being deleted!"); +} + +void ExtractInfo::replace_info(std::string &type, fs::path filename, fs::path folder, BytesView view, std::string sectionPtr, size_t fileIndex) { + _type = type; + _filename = filename; + _folder = folder; + _view = view; + _sectionPtr = sectionPtr; + _fileIndex = fileIndex; } void ExtractInfo::set_tag(const std::string &key, const std::any value) { _tags[key] = value; } -/* -void ExtractInfo::set_tag_as_array(const std::string &key, size_t numElements) { - _tags[key] = std::vector(numElements); -} - -void ExtractInfo::add_elem_to_tag_array(const std::string &key, ExtractInfoTagValue elem, int32_t index) { - std::vector &arr = std::get>(_tags[key]); - if(index < 0) { - arr.push_back(elem); - return; - } - arr[index] = elem; -} -*/ - -bool ExtractInfo::is_asset() { - return _isAsset; -} - -std::string ExtractInfo::get_type() { +std::string ExtractInfo::get_type() const { return _type; } -fs::path ExtractInfo::get_folder() { +std::string ExtractInfo::get_build_id() const { + return _buildId; +} + +fs::path ExtractInfo::get_folder() const { return _folder; } -fs::path ExtractInfo::get_filename(const char *extension) { +fs::path ExtractInfo::get_filename(std::string extension) const { fs::path out = _filename; - if(extension[0] != '\0') { + if(!extension.empty()) { out.replace_extension(extension); } return out; } -uint32_t ExtractInfo::get_data_offset() { - return _dataOffset; +CContext &ExtractInfo::get_c_context() const { + return _cContext.value(); } -size_t ExtractInfo::get_data_size() { - return _dataLength; +const AssetExtractConfig &ExtractInfo::get_config() const { + return _config.value(); } -size_t ExtractInfo::get_file_index() { +ExtractStats &ExtractInfo::get_stats() const { + return _stats.value(); +} + +size_t ExtractInfo::get_file_index() const{ return _fileIndex; } -fs::path ExtractInfo::get_out_filepath(const char *extension) { - fs::path out = _folder / _filename; - if(assetSection != nullptr) { - out = assetSection->folder / out; - } - if(extension[0] != '\0') { +fs::path ExtractInfo::get_out_filepath(std::string extension) const { + fs::path out = get_out_folder() / _filename; + if(!extension.empty()) { out.replace_extension(extension); } return out; } -fs::path ExtractInfo::get_out_folder() { - fs::path out = _folder; - if(assetSection != nullptr) { - out = assetSection->folder / out; - } - return out; +fs::path ExtractInfo::get_out_folder() const { + return _folder; } -void ExtractInfo::get_data_from_rom(std::vector &out) { - rom->get_data(_dataOffset, _dataLength, out); +const BytesView &ExtractInfo::get_view() const { + return _view; } -void ExtractInfo::write_rom_data_to_file(fs::path finalFilepath, uint32_t offset, int32_t length) { - if(length < 0) { - length = (int32_t)_dataLength; - if(length < 1) { - DebugHelper::info_verbose("Auto-set length to ", _dataLength); - } +size_t ExtractInfo::get_data_size() const { + return _view.size(); +} + +// TODO: Remove this in favor of just getting the byte-view +void ExtractInfo::get_data_from_rom(std::vector &out, size_t offset, size_t length) { + if(length == (size_t)-1) { + length = _view.size(); } - if(length < 1) { - DebugHelper::error("(ExtractInfo::write_rom_data_to_file) Invalid length of ", length, " for path ", finalFilepath); + out = std::vector(_view.data() + offset, _view.data() + offset + length); +} + +WritableJsonFile &ExtractInfo::get_json_file() { + _make_sure_json_file_is_defined(); + return _jsonFile.value(); +} + +void ExtractInfo::write_json_file() { + _make_sure_json_file_is_defined(); + _jsonFile.value().save(); +} + +void ExtractInfo::write_raw_data_file() { + fs::path outPath = GlobalSettings::get_decomp_path_to_vanilla_assets() / get_out_filepath(".bin"); + FileHelper::write_binary_file(_view, outPath, true); +} + +void ExtractInfo::_make_sure_json_file_is_defined() { + if(_jsonFile.has_value()) { + return; } - if((size_t)(offset + length) > _dataLength) { - DebugHelper::error("(ExtractInfo::write_rom_data_to_file) Out of bounds! (offset + length) was larger than dataLength for path ", finalFilepath); - } - - rom->write_rom_section_to_binary_file(finalFilepath, _dataOffset + offset, length); -} - -void ExtractInfo::_check_params() { - if(_type == "GameText") { - _tags["dialog"] = (_dataOffset & 0x80000000) != 0; - _dataOffset &= 0x7FFFFFFF; - } + fs::path outPath = GlobalSettings::get_decomp_path_to_vanilla_assets() / get_out_filepath(".json"); + _jsonFile = WritableJsonFile(outPath); } diff --git a/tools/dkr_assets_tool_src/extract/extractInfo.h b/tools/dkr_assets_tool_src/extract/extractInfo.h index fa1309d2..cb54f1c2 100644 --- a/tools/dkr_assets_tool_src/extract/extractInfo.h +++ b/tools/dkr_assets_tool_src/extract/extractInfo.h @@ -4,6 +4,7 @@ #include #include #include +#include #include "helpers/fileHelper.h" #include "helpers/debugHelper.h" @@ -12,83 +13,87 @@ #include "helpers/c/cContext.h" +namespace DkrAssetsTool { + class ExtractInfo; +class ExtractStats; -class DeferredExtractions { -public: - static DeferredExtractions& get() { - static DeferredExtractions instance; - return instance; - } - +namespace DeferredExtractions { void add_extraction(std::string key, ExtractInfo newExtract); ExtractInfo &get_extraction(std::string key, size_t index); -private: - std::unordered_map> _extractions; -}; + ExtractInfo &get_extraction(std::string key, std::string buildId); +} class ExtractInfo { public: - // Code file info - ExtractInfo(std::string &type, fs::path filename, fs::path folder, DkrExtractROM *rom, DkrExtractConfig *config, CContext *ctx, - uint32_t dataOffset, size_t dataLength, size_t fileIndex); - // Asset file info - ExtractInfo(std::string &type, fs::path filename, fs::path folder, DkrExtractROM *rom, DkrExtractConfig *config, CContext *ctx, - uint32_t dataOffset, size_t dataLength, size_t fileIndex, DkrExtractAssetSection *assetSection); + ExtractInfo(std::string &type, std::string buildId, fs::path filename, fs::path folder, BytesView view, + AssetExtractConfig &config, std::string sectionPtr, CContext &ctx, size_t fileIndex, ExtractStats &stats); ~ExtractInfo(); + void replace_info(std::string &type, fs::path filename, fs::path folder, BytesView view, std::string sectionPtr, size_t fileIndex); + void set_tag(const std::string &key, const std::any elem); - //void set_tag_as_array(const std::string &key, size_t numElements=1); - //void add_elem_to_tag_array(const std::string &key, const ExtractInfoTagValue elem, int32_t index=-1); template T get_tag(const std::string &key, T defaultValue) { if(_tags.find(key) == _tags.end()) { return defaultValue; } - - return std::any_cast(_tags[key]); + try { + return std::any_cast(_tags[key]); + } catch(std::bad_any_cast &err) { + return defaultValue; + } } - // There may or may not be a pointer to a DkrExtractAssetSection. Code sections will not have it for obvious reasons. - // TODO: I think I'm just being lazy here. Probably needs to be refactored. - DkrExtractAssetSection *assetSection = nullptr; + std::string get_type() const; + std::string get_build_id() const; + fs::path get_folder() const; + fs::path get_filename(std::string extension="") const; + fs::path get_out_filepath(std::string extension="") const; + fs::path get_out_folder() const; - DkrExtractROM *rom; - DkrExtractConfig *config; + const BytesView &get_view() const; + size_t get_data_size() const; - CContext *c_context; // C Code context. (For loading enums & structs) + CContext &get_c_context() const; + const AssetExtractConfig &get_config() const; + ExtractStats &get_stats() const; - bool is_asset(); + size_t get_file_index() const; - std::string get_type(); - fs::path get_folder(); - fs::path get_filename(const char *extension = "\0"); - fs::path get_out_filepath(const char *extension = "\0"); - fs::path get_out_folder(); + void get_data_from_rom(std::vector &out, size_t offset=0, size_t length=-1); - uint32_t get_data_offset(); - size_t get_data_size(); + WritableJsonFile &get_json_file(); + void write_json_file(); + void write_raw_data_file(); - size_t get_file_index(); - - void get_data_from_rom(std::vector &out); - - void write_rom_data_to_file(fs::path finalFilepath, uint32_t offset=0, int32_t length=-1); + template + T get_from_config_section(std::string property, T defaultValue) const { + if(!_config.has_value()) { + return defaultValue; + } + AssetExtractConfig &config = _config.value(); + return config.get(_sectionPtr + property, defaultValue); + } private: - std::string _type; + std::string _buildId; fs::path _filename; fs::path _folder; - uint32_t _dataOffset; - size_t _dataLength; + BytesView _view; + std::string _sectionPtr; + std::optional _jsonFile = std::nullopt; + std::optional> _config = std::nullopt; + std::optional> _cContext = std::nullopt; + std::optional> _stats = std::nullopt; size_t _fileIndex; - bool _isAsset; - std::unordered_map _tags; - void _check_params(); + void _make_sure_json_file_is_defined(); }; + +} diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractAudio.cpp b/tools/dkr_assets_tool_src/extract/extractTypes/extractAudio.cpp index d3090bd0..60e22790 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractAudio.cpp +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractAudio.cpp @@ -2,27 +2,21 @@ #include "helpers/jsonHelper.h" -ExtractAudio::ExtractAudio(DkrAssetsSettings &settings, ExtractInfo &info) : _settings(settings), _info(info) { - fs::path _outFilepath = _settings.pathToAssets / _info.get_out_filepath(".json"); - DebugHelper::info_custom("Extracting Audio", YELLOW_TEXT, _outFilepath); +using namespace DkrAssetsTool; + +void ExtractAudio::extract(ExtractInfo &info) { + DebugHelper::info_custom("Extracting Audio", YELLOW_TEXT, info.get_out_filepath(".json")); - WritableJsonFile jsonFile(_outFilepath); + WritableJsonFile &jsonFile = info.get_json_file(); jsonFile.set_string("/type", "Audio"); - fs::path _outRawFilepath = _settings.pathToAssets / _info.get_out_filepath(".bin"); - - if(_info.get_data_size() == 0) { // File 12 is empty for some reason. ¯\_(ツ)_/¯ + if(info.get_data_size() == 0) { // File 12 is empty for some reason. ¯\_(ツ)_/¯ jsonFile.set_null("/raw"); } else { - jsonFile.set_path("/raw", _info.get_filename(".bin")); - _info.write_rom_data_to_file(_outRawFilepath); + jsonFile.set_path("/raw", info.get_filename(".bin")); + info.write_raw_data_file(); } - - jsonFile.save(); - -} - -ExtractAudio::~ExtractAudio() { + info.write_json_file(); } diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractAudio.h b/tools/dkr_assets_tool_src/extract/extractTypes/extractAudio.h index 88d16027..edc54166 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractAudio.h +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractAudio.h @@ -1,13 +1,9 @@ #pragma once #include "extract/extractInfo.h" -#include "misc/settings.hpp" -class ExtractAudio { -public: - ExtractAudio(DkrAssetsSettings &settings, ExtractInfo &info); - ~ExtractAudio(); -private: - DkrAssetsSettings &_settings; - ExtractInfo &_info; -}; +namespace DkrAssetsTool { +namespace ExtractAudio { + void extract(ExtractInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractBinary.cpp b/tools/dkr_assets_tool_src/extract/extractTypes/extractBinary.cpp index b9a797b9..819834dc 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractBinary.cpp +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractBinary.cpp @@ -1,31 +1,16 @@ #include "extractBinary.h" +#include "helpers/debugHelper.h" +#include "helpers/jsonHelper.h" -ExtractBinary::ExtractBinary(DkrAssetsSettings &settings, ExtractInfo &info) : _settings(settings), _info(info) { - if(_info.is_asset()) { - _extract_as_asset(); - } else { - _extract_as_code(); - } -} -ExtractBinary::~ExtractBinary() { -} +using namespace DkrAssetsTool; -void ExtractBinary::_extract_as_asset() { - fs::path _outRawFilepath = _settings.pathToAssets / _info.get_out_filepath(".bin"); - fs::path _outFilepath = _settings.pathToAssets / _info.get_out_filepath(".json"); - DebugHelper::info_custom("Extracting Asset Binary", YELLOW_TEXT, _outFilepath); +void ExtractBinary::extract(ExtractInfo &info) { + DebugHelper::info_custom("Extracting Asset Binary", YELLOW_TEXT, info.get_out_filepath(".json")); - WritableJsonFile jsonFile(_outFilepath); - jsonFile.set_path("/raw", _info.get_filename(".bin")); + WritableJsonFile &jsonFile = info.get_json_file(); + jsonFile.set_path("/raw", info.get_filename(".bin")); jsonFile.set_string("/type", "Binary"); - jsonFile.save(); - - _info.write_rom_data_to_file(_outRawFilepath); -} - -void ExtractBinary::_extract_as_code() { - fs::path _outFilepath = _settings.pathToRepo / _info.get_out_filepath(".bin"); - DebugHelper::info_custom("Extracting Code Binary", YELLOW_TEXT, _outFilepath); - _info.write_rom_data_to_file(_outFilepath); -} + info.write_json_file(); + info.write_raw_data_file(); +} \ No newline at end of file diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractBinary.h b/tools/dkr_assets_tool_src/extract/extractTypes/extractBinary.h index 4bac8e92..eb412476 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractBinary.h +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractBinary.h @@ -1,21 +1,9 @@ #pragma once -#include #include "extract/extractInfo.h" -#include "misc/settings.hpp" -#include "helpers/debugHelper.h" -#include "helpers/fileHelper.h" -#include "helpers/jsonHelper.h" - -class ExtractBinary { -public: - ExtractBinary(DkrAssetsSettings &settings, ExtractInfo &info); - ~ExtractBinary(); -private: - DkrAssetsSettings &_settings; - ExtractInfo &_info; - - void _extract_as_asset(); - void _extract_as_code(); -}; +namespace DkrAssetsTool { +namespace ExtractBinary { + void extract(ExtractInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractFonts.cpp b/tools/dkr_assets_tool_src/extract/extractTypes/extractFonts.cpp index ef987427..ec1aab16 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractFonts.cpp +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractFonts.cpp @@ -5,31 +5,45 @@ #include "fileTypes/fonts.hpp" -ExtractFonts::ExtractFonts(DkrAssetsSettings &settings, ExtractInfo &info) : _settings(settings), _info(info) { - fs::path _outFilepath = _settings.pathToAssets / _info.get_out_filepath(".json"); - DebugHelper::info_custom("Extracting Font", YELLOW_TEXT, _outFilepath); +#include "misc/globalSettings.h" + +#include "extract/stats.h" + +using namespace DkrAssetsTool; + +void ExtractFonts::extract(ExtractInfo &info) { + DebugHelper::info_custom("Extracting Font", YELLOW_TEXT, info.get_out_filepath(".json")); - WritableJsonFile jsonFile(_outFilepath); + ExtractStats &stats = info.get_stats(); // Note: not const here, since we are setting tags for GameText to read later. + + WritableJsonFile &jsonFile = info.get_json_file(); jsonFile.set_string("/type", "Fonts"); std::vector rawBytes; - _info.get_data_from_rom(rawBytes); + info.get_data_from_rom(rawBytes); FontData *fontsData = reinterpret_cast(&rawBytes[0]); + stats.set_tag("FONT_COUNT", (int)fontsData->numberOfFonts); + for(int i = 0; i < (int)fontsData->numberOfFonts; i++) { FontFile &font = fontsData->fonts[i]; std::string fontName(font.name); - std::string fontBuildId = info.assetSection->buildId + "_" + fontName; + std::string fontBuildId = info.get_from_config_section("/build-id", "ASSET_FONTS") + "_" + fontName; + StringHelper::make_uppercase(fontBuildId); + + std::string fontTag = "FONT_" + std::to_string(i); + stats.set_tag(fontTag, fontBuildId); // Associate FONT_N with the build id of this font. Used for Game Text. + StringHelper::make_uppercase(fontBuildId); fs::path fontLocalPath = FONTS_SUBDIRECTORY / (fontName + ".meta.json"); - fs::path _outFontFilepath = _settings.pathToAssets / _info.get_out_folder() / fontLocalPath; + fs::path outFontFilepath = GlobalSettings::get_decomp_path_to_vanilla_assets() / info.get_out_folder() / fontLocalPath; jsonFile.set_string("/fonts-order/" + std::to_string(i), fontBuildId); jsonFile.set_string("/fonts/" + fontBuildId, fontLocalPath); - WritableJsonFile fontJsonFont(_outFontFilepath); + WritableJsonFile fontJsonFont(outFontFilepath); fontJsonFont.set_string("/name", fontName); fontJsonFont.set_int("/fixed-width", font.fixedWidth); @@ -46,7 +60,7 @@ ExtractFonts::ExtractFonts(DkrAssetsSettings &settings, ExtractInfo &info) : _se fontJsonFont.set_null("/textures/" + std::to_string(j) + ""); continue; } - std::string texBuildId = AssetsHelper::get_build_id_of_index(_settings, "ASSET_TEXTURES_2D", font.textureIndices[j]); + std::string texBuildId = stats.get_build_id_from_file_index("ASSET_TEXTURES_2D", font.textureIndices[j]); fontJsonFont.set_string("/textures/" + std::to_string(j) + "", texBuildId); } @@ -79,8 +93,5 @@ ExtractFonts::ExtractFonts(DkrAssetsSettings &settings, ExtractInfo &info) : _se fontJsonFont.save(); } - jsonFile.save(); -} - -ExtractFonts::~ExtractFonts() { + info.write_json_file(); } diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractFonts.h b/tools/dkr_assets_tool_src/extract/extractTypes/extractFonts.h index 2a2b5043..c0e20dcc 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractFonts.h +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractFonts.h @@ -1,18 +1,9 @@ #pragma once -#include #include "extract/extractInfo.h" -#include "misc/settings.hpp" -#include "helpers/debugHelper.h" -#include "helpers/fileHelper.h" -#include "helpers/jsonHelper.h" - -class ExtractFonts { -public: - ExtractFonts(DkrAssetsSettings &settings, ExtractInfo &info); - ~ExtractFonts(); -private: - DkrAssetsSettings &_settings; - ExtractInfo &_info; -}; +namespace DkrAssetsTool { +namespace ExtractFonts { + void extract(ExtractInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractGameText.cpp b/tools/dkr_assets_tool_src/extract/extractTypes/extractGameText.cpp index 0062a01e..7340a29f 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractGameText.cpp +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractGameText.cpp @@ -6,39 +6,26 @@ #include "helpers/fileHelper.h" #include "helpers/assetsHelper.h" -ExtractGameText::ExtractGameText(DkrAssetsSettings &settings, ExtractInfo &info) : _settings(settings), _info(info) { - _outFilepath = _settings.pathToAssets / _info.get_out_filepath(".json"); - DebugHelper::info_custom("Extracting Game Text", YELLOW_TEXT, _outFilepath); +#include "extract/stats.h" +#include "text/dkrText.h" + +using namespace DkrAssetsTool; + +// TODO: Actually extract the dialog into the json instead of it being raw binary. +void extract_dialog(ExtractInfo &info, WritableJsonFile &jsonFile) { + jsonFile.set_path("/raw", info.get_filename(".bin")); + jsonFile.set_string("/type", "GameText"); + jsonFile.set_string("/text-type", "Dialog"); + + info.write_raw_data_file(); +} + +void extract_textbox(ExtractInfo &info, WritableJsonFile &jsonFile) { + const ExtractStats &stats = info.get_stats(); std::vector rawBytes; - _info.get_data_from_rom(rawBytes); + info.get_data_from_rom(rawBytes); - bool isDialog = _info.get_tag("dialog", false); - - WritableJsonFile jsonFile(_outFilepath); - - jsonFile.set_string("/text-type", isDialog ? "Dialog" : "Textbox"); - jsonFile.set_string("/type", "GameText"); - - if(isDialog) { - _extract_dialog(jsonFile, rawBytes); - } else { - _extract_textbox(jsonFile, rawBytes); - } - - jsonFile.save(); -} - -ExtractGameText::~ExtractGameText() { -} - -void ExtractGameText::_extract_dialog(WritableJsonFile &jsonFile, std::vector &rawBytes) { - fs::path _outRawFilepath = _settings.pathToAssets / _info.get_out_filepath(".bin"); - jsonFile.set_path("/raw", _info.get_filename(".bin")); - FileHelper::write_binary_file(rawBytes, _outRawFilepath, true); -} - -void ExtractGameText::_extract_textbox(WritableJsonFile &jsonFile, std::vector &rawBytes) { int currentPage = 0; int commandCount = 0; std::string topPtr = "/pages"; @@ -68,9 +55,9 @@ void ExtractGameText::_extract_textbox(WritableJsonFile &jsonFile, std::vector(&rawBytes[offset]); - JsonFile *fontsFile = AssetsHelper::get_asset_json(_settings, "ASSET_FONTS"); - std::string fontBuildId = fontsFile->get_string("/fonts-order/" + std::to_string(fontCmd->fontId)); - DebugHelper::assert(!fontBuildId.empty(), "(ExtractGameText::_extract_textbox) Invalid font id: ", fontCmd->fontId); + // Fonts should be extracted before GameText, so FONT_N should be a valid tag and return the build id for that font. + std::string fontBuildId = stats.get_tag("FONT_" + std::to_string(fontCmd->fontId), ""); + DebugHelper::assert(!fontBuildId.empty(), "(ExtractGameText::extract_textbox) Invalid font index: ", fontCmd->fontId); jsonFile.set_string(ptr + "/command", TEXTBOX_COMMANDS[command]); jsonFile.set_string(ptr + "/value", fontBuildId); offset += sizeof(SetFontCommand); @@ -148,17 +135,31 @@ void ExtractGameText::_extract_textbox(WritableJsonFile &jsonFile, std::vector(&rawBytes[--offset]); + DKRText text(rawBytes, --offset); jsonFile.set_string(ptr + "/command", "Text"); - jsonFile.set_string(ptr + "/value", text); - while(rawBytes[offset] != 0) { - offset++; - } - offset++; + jsonFile.set_string(ptr + "/value", text.get_text()); + offset += text.bytes_size() + 1; break; } } } } - +void ExtractGameText::extract(ExtractInfo &info) { + DebugHelper::info_custom("Extracting Game Text", YELLOW_TEXT, info.get_out_filepath(".json")); + + bool isDialog = info.get_tag("isDialog", false); + + WritableJsonFile &jsonFile = info.get_json_file(); + + jsonFile.set_string("/text-type", isDialog ? "Dialog" : "Textbox"); + jsonFile.set_string("/type", "GameText"); + + if(isDialog) { + extract_dialog(info, jsonFile); + } else { + extract_textbox(info, jsonFile); + } + + info.write_json_file(); +} diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractGameText.h b/tools/dkr_assets_tool_src/extract/extractTypes/extractGameText.h index 622f0c71..68e1c471 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractGameText.h +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractGameText.h @@ -1,17 +1,9 @@ #pragma once #include "extract/extractInfo.h" -#include "misc/settings.hpp" -class ExtractGameText { -public: - ExtractGameText(DkrAssetsSettings &settings, ExtractInfo &info); - ~ExtractGameText(); -private: - DkrAssetsSettings &_settings; - ExtractInfo &_info; - fs::path _outFilepath; - - void _extract_dialog(WritableJsonFile &jsonFile, std::vector &rawBytes); - void _extract_textbox(WritableJsonFile &jsonFile, std::vector &rawBytes); -}; +namespace DkrAssetsTool { +namespace ExtractGameText { + void extract(ExtractInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractJpFonts.cpp b/tools/dkr_assets_tool_src/extract/extractTypes/extractJpFonts.cpp new file mode 100644 index 00000000..e283fb9e --- /dev/null +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractJpFonts.cpp @@ -0,0 +1,219 @@ +#include "extractJpFonts.h" + +#include "helpers/assetsHelper.h" +#include "helpers/stringHelper.h" +#include "helpers/imageHelper.h" + +#include "misc/globalSettings.h" + +#include "libs/bytes_view.hpp" + +#include "text/dkrText.h" + +#include "fileTypes/jpFonts.hpp" +#include "fileTypes/texture.hpp" + +#include "extract/stats.h" + +using namespace DkrAssetsTool; + +void extract_v77_beta_font(ExtractInfo &info, WritableJsonFile &jsonFile, BytesView &jpFontsTableView) { + // Only one beta font. Includes a lot of kanji in it. Image is 4-bit 192x732. No palette as far as I know if it is CI4. + + BytesView jpFontsDataView = info.get_view(); + + fs::path outFontFilepath = GlobalSettings::get_decomp_path_to_vanilla_assets() / info.get_out_folder() / "jp_fonts/beta_jp_font.meta.json"; + jsonFile.set_path("/fonts/ASSET_JPFONTS_BETAFONT", "jp_fonts/beta_jp_font.meta.json"); + jsonFile.set_string("/fonts-order/0", "ASSET_JPFONTS_BETAFONT"); + + WritableJsonFile fontJsonFont(outFontFilepath); + + const BetaJpFontHeader *header = jpFontsTableView.data_cast(); + + fontJsonFont.set_int("/header/unk0", header->unk0); + fontJsonFont.set_int("/header/x", header->x); + fontJsonFont.set_int("/header/y", header->y); + fontJsonFont.set_int("/header/charWidth", header->charWidth); + fontJsonFont.set_int("/header/height", header->height); + fontJsonFont.set_int("/header/unk5", header->unk5); + fontJsonFont.set_int("/header/unk8", header->unk8); + fontJsonFont.set_int("/header/unkA", header->unkA); + + size_t numberOfBytes = jpFontsDataView.size(); + + size_t imgWidth = header->imgWidth; + size_t imgHeight = (numberOfBytes * 2) / imgWidth; // Should be 732 + + // The beta jp font image data only uses 0 or 1, so I'm interpreting 0 as black and 1 as white. + // With that in mind, I'm using this loop to convert the input data an I4 image. + for(size_t i = 0; i < numberOfBytes; i++) { + switch(jpFontsDataView[i]) { + case 0x01: + jpFontsDataView[i] = 0x0F; + break; + case 0x10: + jpFontsDataView[i] = 0xF0; + break; + case 0x11: + jpFontsDataView[i] = 0xFF; + break; + default: + // Do nothing + break; + } + } + + N64Image betaJPFontImg(imgWidth, imgHeight, "I4"); + + // Copy input data to the image. + betaJPFontImg.write_from(jpFontsDataView.data(), numberOfBytes); + + fs::path outImgPath = outFontFilepath.replace_extension(".png"); + + // Image is stored upside-down, so gotta flip it vertically. + betaJPFontImg.flip_vertically(); + + // Save beta font image. + betaJPFontImg.save(outImgPath); + + std::string filename = outImgPath.filename().generic_string(); + + fontJsonFont.set_string("/name", "BetaJpFont"); + fontJsonFont.set_string("/image/filename", filename); + fontJsonFont.set_string("/image/format", "I4"); + + fontJsonFont.save(); +} + +void extract_v79_jp_fonts(ExtractInfo &info, WritableJsonFile &jsonFile, BytesView &jpFontsTableView) { + BytesView jpFontsDataView = info.get_view(); + + size_t numberOfFonts = jpFontsTableView.size() / sizeof(JpFontHeader); + + fs::path outFontsFolder = GlobalSettings::get_decomp_path_to_vanilla_assets() / info.get_out_folder() / "jp_fonts"; + + const std::vector &DKRJP_FONT_CHARACTERS = DKRText::get_dkrjp_characters(); + + for(size_t i = 0; i < numberOfFonts; i++) { + const JpFontHeader *header = jpFontsTableView.data_cast(i * sizeof(JpFontHeader)); + + std::string buildId = "ASSET_JPFONTS_" + std::to_string(i); + std::string fontName = "jp_font_" + std::to_string(i); + std::string filename = fontName + ".meta.json"; + fs::path outFontFilepath = outFontsFolder / filename; + + jsonFile.set_path("/fonts/" + buildId, "jp_fonts/" + filename); + jsonFile.set_string("/fonts-order/" + std::to_string(i), buildId); + + WritableJsonFile fontJsonFont(outFontFilepath); + + fontJsonFont.set_int("/header/unk0", header->unk0); + fontJsonFont.set_int("/header/cellWidth", header->cellWidth); + fontJsonFont.set_int("/header/cellHeight", header->cellHeight); + fontJsonFont.set_int("/header/charWidth", header->charWidth); + fontJsonFont.set_int("/header/height", header->height); + fontJsonFont.set_int("/header/unk5", header->unk5); + fontJsonFont.set_int("/header/unk6", header->unk6); + fontJsonFont.set_int("/header/unk7", header->unk7); + + size_t offsetToData = header->offset; + size_t numberOfBytesPerCharacter = header->bytesPerCharacter; + + size_t imgWidth = header->cellWidth * 16; + size_t imgHeight = header->cellHeight * 16; + + const JpFontChar *firstChar = jpFontsDataView.data_cast(offsetToData); + + std::string colorImgFormat = TEXTURE_FORMAT_INT_TO_STRING[firstChar->firstImageFormat]; + std::string alphaImgFormat = TEXTURE_FORMAT_INT_TO_STRING[firstChar->secondImageFormat]; + + N64Image colorImg(imgWidth, imgHeight, colorImgFormat); + N64Image alphaImg(imgWidth, imgHeight, alphaImgFormat); + + bool hasAlphaImage = (firstChar->offsetToSecondImg != -1); + + fontJsonFont.set_string("/image/format", colorImgFormat); + + if(hasAlphaImage) { + fontJsonFont.set_string("/image-alpha/format", alphaImgFormat); + } + + for(size_t charIndex = 0; charIndex < 256; charIndex++) { + std::string charPointer = "/characters/"; + + std::string jpChar = DKRJP_FONT_CHARACTERS[charIndex]; + + if(jpChar.empty()) { + jpChar = ""; + } else if(jpChar == "/") { + jpChar = "~1"; // Frontslash + } + + charPointer += jpChar; + + const JpFontChar *charHeader = jpFontsDataView.data_cast(offsetToData); + + fontJsonFont.set_int(charPointer + "/spacing", charHeader->spacing); + + // TODO: Calculate these automatically. + fontJsonFont.set_int(charPointer + "/left", charHeader->left); + fontJsonFont.set_int(charPointer + "/top", charHeader->top); + fontJsonFont.set_int(charPointer + "/right", charHeader->right); + fontJsonFont.set_int(charPointer + "/bottom", charHeader->bottom); + + uint8_t *colorData = jpFontsDataView.data_cast(offsetToData + charHeader->offsetToFirstImg); + + int x = (charIndex % 16) * header->cellWidth; + int y = (charIndex / 16) * header->cellHeight; + + colorImg.write_data_to_region(colorData, header->cellWidth, { x, y, x + header->cellWidth, y + header->cellHeight } ); + + if(hasAlphaImage) { + uint8_t *alphaData = jpFontsDataView.data_cast(offsetToData + charHeader->offsetToSecondImg); + + alphaImg.write_data_to_region(alphaData, header->cellWidth, { x, y, x + header->cellWidth, y + header->cellHeight } ); + } + + + + offsetToData += numberOfBytesPerCharacter; + } + + fontJsonFont.set_string("/name", fontName); + + colorImg.interlace(); + colorImg.save(outFontsFolder / (fontName + ".png")); + fontJsonFont.set_string("/image/filename", fontName + ".png"); + fontJsonFont.set_string("/image/format", colorImgFormat); + if(hasAlphaImage) { + alphaImg.interlace(); + alphaImg.save(outFontsFolder / (fontName + "_alpha.png")); + fontJsonFont.set_string("/image-alpha/filename", fontName + "_alpha.png"); + fontJsonFont.set_string("/image-alpha/format", alphaImgFormat); + } + + fontJsonFont.save(); + } +} + +void ExtractJPFonts::extract(ExtractInfo &info) { + DebugHelper::info_custom("Extracting Japanese Fonts", YELLOW_TEXT, info.get_out_filepath(".json")); + + ExtractInfo &jpFontsTableInfo = DeferredExtractions::get_extraction("ASSET_JAPANESE_FONTS_TABLE", 0); + BytesView jpFontsTableView = jpFontsTableInfo.get_view(); + + WritableJsonFile &jsonFile = info.get_json_file(); + jsonFile.set_string("/type", "JPFonts"); + + // Note: The format is different in v79/v80. So gotta check if this is the beta version of the JP font. + bool isBetaJpFont = StringHelper::ends_with(GlobalSettings::get_dkr_version(), "v77"); + + if(isBetaJpFont) { + extract_v77_beta_font(info, jsonFile, jpFontsTableView); + } else { + // v79/v80, TODO + extract_v79_jp_fonts(info, jsonFile, jpFontsTableView); + } + + info.write_json_file(); +} diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractJpFonts.h b/tools/dkr_assets_tool_src/extract/extractTypes/extractJpFonts.h new file mode 100644 index 00000000..4e025f23 --- /dev/null +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractJpFonts.h @@ -0,0 +1,9 @@ +#pragma once + +#include "extract/extractInfo.h" + +namespace DkrAssetsTool { +namespace ExtractJPFonts { + void extract(ExtractInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractLevelHeader.cpp b/tools/dkr_assets_tool_src/extract/extractTypes/extractLevelHeader.cpp index 727e3cbe..6575734e 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractLevelHeader.cpp +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractLevelHeader.cpp @@ -9,35 +9,123 @@ #include "helpers/stringHelper.h" #include "helpers/c/cContext.h" -ExtractLevelHeader::ExtractLevelHeader(DkrAssetsSettings &settings, ExtractInfo &info) : _settings(settings), _info(info) { - fs::path _outFilepath = _settings.pathToAssets / _info.get_out_filepath(".json"); - DebugHelper::info_custom("Extracting Level Header", YELLOW_TEXT, _outFilepath); +#include "fileTypes/levelHeader.hpp" + +#include "extract/stats.h" + +#include "text/dkrText.h" + +using namespace DkrAssetsTool; + +void extract_weather(WritableJsonFile &jsonFile, std::string ptr, LevelHeader_Weather &weather) { + jsonFile.set_int(ptr + "/enable", weather.enable); + jsonFile.set_int(ptr + "/type", weather.type); + jsonFile.set_int(ptr + "/intensity", weather.intensity); + jsonFile.set_int(ptr + "/opacity", weather.opacity); + jsonFile.set_int(ptr + "/velocity/x", weather.velocity[0]); + jsonFile.set_int(ptr + "/velocity/y", weather.velocity[1]); + jsonFile.set_int(ptr + "/velocity/z", weather.velocity[2]); +} + +void extract_ai_levels(WritableJsonFile &jsonFile, std::string ptr, LevelHeader_AiLevels &aiLevels) { + jsonFile.set_int(ptr + "/base", aiLevels.baseAiLevel); + jsonFile.set_int(ptr + "/silver-coins", aiLevels.silverCoinsAiLevel); + jsonFile.set_int(ptr + "/completed", aiLevels.completedAiLevel); + jsonFile.set_int(ptr + "/tracks-mode", aiLevels.tracksModeAiLevel); + jsonFile.set_int(ptr + "/trophy-race", aiLevels.trophyRaceAiLevel); +} + +void extract_fog(WritableJsonFile &jsonFile, std::string ptr, LevelHeader_Fog &fogInfo) { + jsonFile.set_int(ptr + "/near", fogInfo.near); + jsonFile.set_int(ptr + "/far", fogInfo.far); + jsonFile.set_int(ptr + "/colour/red", fogInfo.colour[0]); + jsonFile.set_int(ptr + "/colour/green", fogInfo.colour[1]); + jsonFile.set_int(ptr + "/colour/blue", fogInfo.colour[2]); +} + +void extract_name(ExtractInfo &info, WritableJsonFile &jsonFile, std::string ptr) { + ExtractInfo &levelNameExtract = DeferredExtractions::get_extraction("ASSET_LEVEL_NAMES", info.get_file_index()); + + // TODO: Use BytesView instead of std::vector + std::vector rawBytes; + levelNameExtract.get_data_from_rom(rawBytes); + + CEnum *languages = info.get_c_context().get_enum("Language"); + + size_t numLanguages = languages->get_member_count(); + + size_t curOffset = 0; + + for(size_t i = 0; i < numLanguages; i++) { + std::string lang; + DebugHelper::assert(languages->get_symbol_of_value(i, lang), + "(extract_name) Index ", i, " is out of range."); + + // TODO: If a language (other than English) uses the same name as English, then don't bother exporting it. + + // Get the current language name. + // curOffset = StringHelper::get_ascii_from_data(rawBytes, curOffset, levelNameInLang); + DKRText levelNameText(rawBytes, curOffset); + curOffset += levelNameText.bytes_size() + 1; // +1 because the null-terminator was not included. + + jsonFile.set_string(ptr + "/" + lang, levelNameText.get_text()); + } +} + +template +void extract_enum_bitfield(ExtractInfo &info, WritableJsonFile &jsonFile, std::string ptr, std::string enumName, T value) { + size_t numBits = sizeof(T) * 8; + + CContext &cContext = info.get_c_context(); + + size_t count = 0; + for(size_t i = 0; i < numBits; i++) { + size_t bitFlag = 1 << i; + if((value & bitFlag) == 0) { // Make sure the bit is set. + continue; + } + + std::string enumSymbol = cContext.get_symbol_of_enum_int(enumName, i); + + jsonFile.set_string(ptr + "/" + std::to_string(count), enumSymbol); + + count++; + } +} + +void ExtractLevelHeader::extract(ExtractInfo &info) { + DebugHelper::info_custom("Extracting Level Header", YELLOW_TEXT, info.get_out_filepath(".json")); + + const ExtractStats &stats = info.get_stats(); std::vector rawBytes; - _info.get_data_from_rom(rawBytes); + info.get_data_from_rom(rawBytes); LevelHeader *header = reinterpret_cast(&rawBytes[0]); - WritableJsonFile jsonFile(_outFilepath); + CContext &cContext = info.get_c_context(); + + WritableJsonFile &jsonFile = info.get_json_file(); jsonFile.set_string("/type", "LevelHeader"); // Name - _extract_name(jsonFile, "/name"); + extract_name(info, jsonFile, "/name"); // World ID - std::string worldId = _info.c_context->get_symbol_of_enum_int("World", header->world); + std::string worldId = cContext.get_symbol_of_enum_int("World", header->world); jsonFile.set_string("/world", worldId); // Course Height jsonFile.set_float("/course-height", header->courseHeight); // Track ID - std::string levelModelId = AssetsHelper::get_build_id_of_index(_settings, "ASSET_LEVEL_MODELS", header->geometry); + std::string levelModelId = stats.get_build_id_from_file_index("ASSET_LEVEL_MODELS", header->geometry); jsonFile.set_string("/model", levelModelId); // Object Maps - std::string collectablesMap = AssetsHelper::get_build_id_of_index(_settings, "ASSET_LEVEL_OBJECT_MAPS", header->collectablesObjMap); - std::string objMap2 = AssetsHelper::get_build_id_of_index(_settings, "ASSET_LEVEL_OBJECT_MAPS", header->objectMap2); + std::string collectablesMap = stats.get_build_id_from_file_index("ASSET_LEVEL_OBJECT_MAPS", header->collectablesObjMap); + std::string objMap2 = stats.get_build_id_from_file_index("ASSET_LEVEL_OBJECT_MAPS", header->objectMap2); + jsonFile.set_string("/map-collectables", collectablesMap); jsonFile.set_string("/map-2", objMap2); @@ -49,12 +137,12 @@ ExtractLevelHeader::ExtractLevelHeader(DkrAssetsSettings &settings, ExtractInfo // Pulsing light data be_int32_t pulsatingLightsOffset = header->pulseLightData; if(pulsatingLightsOffset != -1) { - std::string pulseId = AssetsHelper::get_build_id_of_index(_settings, "ASSET_MISC", pulsatingLightsOffset); + std::string pulseId = stats.get_build_id_from_file_index("ASSET_MISC", pulsatingLightsOffset); jsonFile.set_string("/pulsating-lights", pulseId); } // Race Type - std::string raceTypeId = _info.c_context->get_symbol_of_enum_int("RaceType", header->raceType); + std::string raceTypeId = cContext.get_symbol_of_enum_int("RaceType", header->raceType); jsonFile.set_string("/race-type", raceTypeId); // Audio related @@ -67,30 +155,29 @@ ExtractLevelHeader::ExtractLevelHeader(DkrAssetsSettings &settings, ExtractInfo continue; } - std::string miscAssetId = AssetsHelper::get_build_id_of_index(_settings, - "ASSET_MISC", header->miscAssets[i]); + std::string miscAssetId = stats.get_build_id_from_file_index("ASSET_MISC", header->miscAssets[i]); jsonFile.set_string("/misc-assets/" + std::to_string(i), miscAssetId); } // Vehicle info - std::string defaultVehicle = _info.c_context->get_symbol_of_enum_int("Vehicle", header->vehicle); + std::string defaultVehicle = cContext.get_symbol_of_enum_int("Vehicle", header->vehicle); jsonFile.set_string("/default-vehicle", defaultVehicle); - _extract_enum_bitfield(jsonFile, "/avaliable-vehicles", "Vehicle", header->avaliableVehicles); + extract_enum_bitfield(info, jsonFile, "/avaliable-vehicles", "Vehicle", header->avaliableVehicles); // AI levels - _extract_ai_levels(jsonFile, "/ai-levels/adv1", header->adv1AiLevels); - _extract_ai_levels(jsonFile, "/ai-levels/adv2", header->adv2AiLevels); + extract_ai_levels(jsonFile, "/ai-levels/adv1", header->adv1AiLevels); + extract_ai_levels(jsonFile, "/ai-levels/adv2", header->adv2AiLevels); // Weather - _extract_weather(jsonFile, "/weather", header->weather); + extract_weather(jsonFile, "/weather", header->weather); // Fog - _extract_fog(jsonFile, "/fog", header->fog); + extract_fog(jsonFile, "/fog", header->fog); // Background related stuff if(header->skybox >= 0) { - std::string skyboxObjId = AssetsHelper::get_build_id_of_index(_settings, "ASSET_OBJECTS", header->skybox); + std::string skyboxObjId = stats.get_build_id_from_file_index("ASSET_OBJECTS", header->skybox); jsonFile.set_string("/background/skybox/id", skyboxObjId); } if(header->specialSky != 0) { @@ -178,89 +265,12 @@ ExtractLevelHeader::ExtractLevelHeader(DkrAssetsSettings &settings, ExtractInfo jsonFile.set_int("/unknown/unkB5", header->unkB5); jsonFile.set_int("/unknown/unkB6", header->unkB6); jsonFile.set_int("/unknown/unkB7", header->unkB7); - std::string bossRaceID = _info.c_context->get_symbol_of_enum_int("BossSetupTypes", header->bossRaceID); + std::string bossRaceID = cContext.get_symbol_of_enum_int("BossSetupTypes", header->bossRaceID); jsonFile.set_string("/boss-race-id", bossRaceID); jsonFile.set_int("/unknown/unkB9", header->unkB9); jsonFile.set_int("/unknown/unkBC", header->unkBC); jsonFile.set_int("/unknown/unkBD", header->unkBD); jsonFile.set_int("/unknown/unkC4", header->unkC4); - - jsonFile.save(); + info.write_json_file(); } - -ExtractLevelHeader::~ExtractLevelHeader() { -} - -void ExtractLevelHeader::_extract_weather(WritableJsonFile &jsonFile, std::string ptr, LevelHeader_Weather &weather) { - jsonFile.set_int(ptr + "/enable", weather.enable); - jsonFile.set_int(ptr + "/type", weather.type); - jsonFile.set_int(ptr + "/intensity", weather.intensity); - jsonFile.set_int(ptr + "/opacity", weather.opacity); - jsonFile.set_int(ptr + "/velocity/x", weather.velocity[0]); - jsonFile.set_int(ptr + "/velocity/y", weather.velocity[1]); - jsonFile.set_int(ptr + "/velocity/z", weather.velocity[2]); -} - -void ExtractLevelHeader::_extract_ai_levels(WritableJsonFile &jsonFile, std::string ptr, LevelHeader_AiLevels &aiLevels) { - jsonFile.set_int(ptr + "/base", aiLevels.baseAiLevel); - jsonFile.set_int(ptr + "/silver-coins", aiLevels.silverCoinsAiLevel); - jsonFile.set_int(ptr + "/completed", aiLevels.completedAiLevel); - jsonFile.set_int(ptr + "/tracks-mode", aiLevels.tracksModeAiLevel); - jsonFile.set_int(ptr + "/trophy-race", aiLevels.trophyRaceAiLevel); -} - -void ExtractLevelHeader::_extract_fog(WritableJsonFile &jsonFile, std::string ptr, LevelHeader_Fog &fogInfo) { - jsonFile.set_int(ptr + "/near", fogInfo.near); - jsonFile.set_int(ptr + "/far", fogInfo.far); - jsonFile.set_int(ptr + "/colour/red", fogInfo.colour[0]); - jsonFile.set_int(ptr + "/colour/green", fogInfo.colour[1]); - jsonFile.set_int(ptr + "/colour/blue", fogInfo.colour[2]); -} - -void ExtractLevelHeader::_extract_name(WritableJsonFile &jsonFile, std::string ptr) { - ExtractInfo &levelNameExtract = DeferredExtractions::get().get_extraction("ASSET_LEVEL_NAMES", _info.get_file_index()); - - std::vector rawBytes; - levelNameExtract.get_data_from_rom(rawBytes); - - CEnum *languages = _info.c_context->get_enum("Language"); - - size_t numLanguages = languages->get_member_count(); - - size_t curOffset = 0; - - for(size_t i = 0; i < numLanguages; i++) { - std::string lang, levelNameInLang; - DebugHelper::assert(languages->get_symbol_of_value(i, lang), - "(ExtractLevelHeader::_extract_name) Index ", i, " is out of range."); - - // TODO: If a language (other than English) uses the same name as English, then don't bother exporting it. - - // Get the current language name. - curOffset = StringHelper::get_ascii_from_data(rawBytes, curOffset, levelNameInLang); - - jsonFile.set_string(ptr + "/" + lang, levelNameInLang); - } -} - -template -void ExtractLevelHeader::_extract_enum_bitfield(WritableJsonFile &jsonFile, std::string ptr, std::string enumName, T value) { - size_t numBits = sizeof(T) * 8; - - size_t count = 0; - for(size_t i = 0; i < numBits; i++) { - size_t bitFlag = 1 << i; - if((value & bitFlag) == 0) { // Make sure the bit is set. - continue; - } - - std::string enumSymbol = _info.c_context->get_symbol_of_enum_int(enumName, i); - - jsonFile.set_string(ptr + "/" + std::to_string(count), enumSymbol); - - count++; - } -} - - diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractLevelHeader.h b/tools/dkr_assets_tool_src/extract/extractTypes/extractLevelHeader.h index 693ebe21..ba978adf 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractLevelHeader.h +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractLevelHeader.h @@ -1,23 +1,9 @@ #pragma once #include "extract/extractInfo.h" -#include "misc/settings.hpp" -#include "fileTypes/levelHeader.hpp" - -class ExtractLevelHeader { -public: - ExtractLevelHeader(DkrAssetsSettings &settings, ExtractInfo &info); - ~ExtractLevelHeader(); -private: - DkrAssetsSettings &_settings; - ExtractInfo &_info; - - void _extract_weather(WritableJsonFile &jsonFile, std::string ptr, LevelHeader_Weather &weather); - void _extract_ai_levels(WritableJsonFile &jsonFile, std::string ptr, LevelHeader_AiLevels &aiLevels); - void _extract_fog(WritableJsonFile &jsonFile, std::string ptr, LevelHeader_Fog &fogInfo); - void _extract_name(WritableJsonFile &jsonFile, std::string ptr); - - template - void _extract_enum_bitfield(WritableJsonFile &jsonFile, std::string ptr, std::string enumName, T value); -}; +namespace DkrAssetsTool { +namespace ExtractLevelHeader { + void extract(ExtractInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractLevelModel.cpp b/tools/dkr_assets_tool_src/extract/extractTypes/extractLevelModel.cpp index ff04df0a..ac842fae 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractLevelModel.cpp +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractLevelModel.cpp @@ -1,29 +1,17 @@ #include "extractLevelModel.h" -#include -#include - #include "helpers/debugHelper.h" #include "helpers/jsonHelper.h" -#include "helpers/stringHelper.h" -#include "helpers/c/cContext.h" -ExtractLevelModel::ExtractLevelModel(DkrAssetsSettings &settings, ExtractInfo &info) : _settings(settings), _info(info) { - fs::path _outFilepath = _settings.pathToAssets / _info.get_out_filepath(".json"); - DebugHelper::info_custom("Extracting Level Model", YELLOW_TEXT, _outFilepath); +using namespace DkrAssetsTool; + +void ExtractLevelModel::extract(ExtractInfo &info) { + DebugHelper::info_custom("Extracting Level Model", YELLOW_TEXT, info.get_out_filepath(".json")); - std::vector rawBytes; - _info.get_data_from_rom(rawBytes); - - WritableJsonFile jsonFile(_outFilepath); + WritableJsonFile &jsonFile = info.get_json_file(); jsonFile.set_string("/type", "LevelModel"); + jsonFile.set_path("/raw", info.get_filename(".bin")); - std::string _outRawFilepath = _settings.pathToAssets / _info.get_out_filepath(".bin"); - jsonFile.set_path("/raw", _info.get_filename(".bin")); - _info.write_rom_data_to_file(_outRawFilepath); - - jsonFile.save(); -} - -ExtractLevelModel::~ExtractLevelModel() { + info.write_json_file(); + info.write_raw_data_file(); } diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractLevelModel.h b/tools/dkr_assets_tool_src/extract/extractTypes/extractLevelModel.h index d7e98729..7d911db9 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractLevelModel.h +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractLevelModel.h @@ -1,13 +1,9 @@ #pragma once #include "extract/extractInfo.h" -#include "misc/settings.hpp" -class ExtractLevelModel { -public: - ExtractLevelModel(DkrAssetsSettings &settings, ExtractInfo &info); - ~ExtractLevelModel(); -private: - DkrAssetsSettings &_settings; - ExtractInfo &_info; -}; +namespace DkrAssetsTool { +namespace ExtractLevelModel { + void extract(ExtractInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractLevelName.cpp b/tools/dkr_assets_tool_src/extract/extractTypes/extractLevelName.cpp index 30d817aa..57a5ccab 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractLevelName.cpp +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractLevelName.cpp @@ -8,17 +8,18 @@ #include "helpers/stringHelper.h" #include "helpers/c/cContext.h" -ExtractLevelName::ExtractLevelName(DkrAssetsSettings &settings, ExtractInfo &info) : _settings(settings), _info(info) { - fs::path _outFilepath = _settings.pathToAssets / _info.get_out_filepath(".json"); - DebugHelper::info_custom("Extracting Level Name", YELLOW_TEXT, _outFilepath); +using namespace DkrAssetsTool; + +void ExtractLevelName::extract(ExtractInfo &info) { + DebugHelper::info_custom("Extracting Level Name", YELLOW_TEXT, info.get_out_filepath(".json")); std::vector rawBytes; - _info.get_data_from_rom(rawBytes); + info.get_data_from_rom(rawBytes); - WritableJsonFile jsonFile(_outFilepath); + WritableJsonFile &jsonFile = info.get_json_file(); jsonFile.set_string("/type", "LevelName"); - CEnum *languages = _info.c_context->get_enum("Language"); + CEnum *languages = info.get_c_context().get_enum("Language"); size_t numLanguages = languages->get_member_count(); @@ -27,7 +28,7 @@ ExtractLevelName::ExtractLevelName(DkrAssetsSettings &settings, ExtractInfo &inf for(size_t i = 0; i < numLanguages; i++) { std::string lang, levelNameInLang; DebugHelper::assert(languages->get_symbol_of_value(i, lang), - "(ExtractLevelName::ExtractLevelName) Index ", i, " is out of range."); + "(ExtractLevelName::extract) Index ", i, " is out of range."); // Get the current language name. curOffset = StringHelper::get_ascii_from_data(rawBytes, curOffset, levelNameInLang); @@ -35,8 +36,5 @@ ExtractLevelName::ExtractLevelName(DkrAssetsSettings &settings, ExtractInfo &inf jsonFile.set_string("/languages/" + lang, levelNameInLang); } - jsonFile.save(); -} - -ExtractLevelName::~ExtractLevelName() { + info.write_json_file(); } diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractLevelName.h b/tools/dkr_assets_tool_src/extract/extractTypes/extractLevelName.h index 515e1623..0f9fd5a0 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractLevelName.h +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractLevelName.h @@ -1,13 +1,9 @@ #pragma once #include "extract/extractInfo.h" -#include "misc/settings.hpp" -class ExtractLevelName { -public: - ExtractLevelName(DkrAssetsSettings &settings, ExtractInfo &info); - ~ExtractLevelName(); -private: - DkrAssetsSettings &_settings; - ExtractInfo &_info; -}; +namespace DkrAssetsTool { +namespace ExtractLevelName { + void extract(ExtractInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractLevelObjectTranslationTable.cpp b/tools/dkr_assets_tool_src/extract/extractTypes/extractLevelObjectTranslationTable.cpp index 1feec218..8d064ff2 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractLevelObjectTranslationTable.cpp +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractLevelObjectTranslationTable.cpp @@ -9,20 +9,25 @@ #include "helpers/fileHelper.h" #include "helpers/assetsHelper.h" -ExtractLOTT::ExtractLOTT(DkrAssetsSettings &settings, ExtractInfo &info) : _settings(settings), _info(info) { - fs::path _outFilepath = _settings.pathToAssets / _info.get_out_filepath(".json"); - DebugHelper::info_custom("Extracting Level Object Translation Table", YELLOW_TEXT, _outFilepath); +#include "extract/stats.h" + +using namespace DkrAssetsTool; + +void ExtractLOTT::extract(ExtractInfo &info) { + DebugHelper::info_custom("Extracting Level Object Translation Table", YELLOW_TEXT, info.get_out_filepath(".json")); - WritableJsonFile jsonFile(_outFilepath); + const ExtractStats &stats = info.get_stats(); + + WritableJsonFile &jsonFile = info.get_json_file(); jsonFile.set_string("/type", "LevelObjectTranslationTable"); std::vector rawBytes; - _info.get_data_from_rom(rawBytes); + info.get_data_from_rom(rawBytes); // Make sure the table bytes are formatted correctly. DebugHelper::assert( (rawBytes.size() / sizeof(LOTT_ENTRY)) == LOTT_SIZE, - "(ExtractLOTT::ExtractLOTT) LevelObjectTranslationTable data has an invalid size", + "(ExtractLOTT::extract) LevelObjectTranslationTable data has an invalid size", ". Raw binary size = ", rawBytes.size(), ", Entry size = ", sizeof(LOTT_ENTRY), ", Table size = ", LOTT_SIZE @@ -43,12 +48,9 @@ ExtractLOTT::ExtractLOTT(DkrAssetsSettings &settings, ExtractInfo &info) : _sett jsonFile.set_null("/table/" + std::to_string(i)); continue; } - std::string objectBuildId = AssetsHelper::get_build_id_of_index(_settings, "ASSET_OBJECTS", entry); + std::string objectBuildId = stats.get_build_id_from_file_index("ASSET_OBJECTS", entry); jsonFile.set_string("/table/" + std::to_string(i), objectBuildId); } - jsonFile.save(); -} - -ExtractLOTT::~ExtractLOTT() { + info.write_json_file(); } diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractLevelObjectTranslationTable.h b/tools/dkr_assets_tool_src/extract/extractTypes/extractLevelObjectTranslationTable.h index 5040575b..b2a7402c 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractLevelObjectTranslationTable.h +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractLevelObjectTranslationTable.h @@ -1,13 +1,9 @@ #pragma once #include "extract/extractInfo.h" -#include "misc/settings.hpp" -class ExtractLOTT { -public: - ExtractLOTT(DkrAssetsSettings &settings, ExtractInfo &info); - ~ExtractLOTT(); -private: - DkrAssetsSettings &_settings; - ExtractInfo &_info; -}; +namespace DkrAssetsTool { +namespace ExtractLOTT { + void extract(ExtractInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractMenuText.cpp b/tools/dkr_assets_tool_src/extract/extractTypes/extractMenuText.cpp index a4f4a798..ea68784c 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractMenuText.cpp +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractMenuText.cpp @@ -4,47 +4,59 @@ #include "helpers/jsonHelper.h" -ExtractMenuText::ExtractMenuText(DkrAssetsSettings &settings, ExtractInfo &info) : _settings(settings), _info(info) { - fs::path _outFilepath = _settings.pathToAssets / _info.get_out_filepath(".json"); - DebugHelper::info_custom("Extracting Menu Text", YELLOW_TEXT, _outFilepath); +#include "text/dkrText.h" + +#include "extract/stats.h" + +using namespace DkrAssetsTool; + +void ExtractMenuText::extract(ExtractInfo &info) { + DebugHelper::info_custom("Extracting Menu Text", YELLOW_TEXT, info.get_out_filepath(".json")); + // TODO: Use BytesView instead of vector! std::vector rawBytes; - _info.get_data_from_rom(rawBytes); + info.get_data_from_rom(rawBytes); - DkrExtractMenuTextSection &menuTextConfig = _info.assetSection->specific.menuText; - std::string language = _info.get_tag("language", ""); + ExtractStats &stats = info.get_stats(); + const AssetExtractConfig &config = info.get_config(); + size_t fileIndex = info.get_file_index(); - DebugHelper::assert(!language.empty(), "(ExtractMenuText::ExtractMenuText) Language not set for ", _outFilepath); + std::string language = config.get("/file-type-attributes/MenuText/language-order/" + std::to_string(fileIndex), ""); - WritableJsonFile jsonFile(_outFilepath); + DebugHelper::assert(!language.empty(), + "(ExtractMenuText::extract) Language not set for ", info.get_out_filepath(".json")); + + WritableJsonFile &jsonFile = info.get_json_file(); jsonFile.set_string("/language", language); jsonFile.set_string("/type", "MenuText"); std::string sectionsPtr = "/sections"; - //std::string orderPtr = "/order"; + + const JsonFile &configJson = config.get_config_json(); + std::vector menuTextBuildIds; + configJson.get_array("/file-type-attributes/MenuText/menu-text-build-ids", menuTextBuildIds); + + size_t numberOfTextEntries = stats.get_tag("menuTextCount", 0); + size_t numberOfRecordedEntries = menuTextBuildIds.size(); be_uint32_t *offsets = reinterpret_cast(&rawBytes[0]); - for(size_t i = 0; i < menuTextConfig.numberOfTextEntries; i++) { + for(size_t i = 0; i < numberOfTextEntries; i++) { be_uint32_t offsetToText = offsets[i]; if(offsetToText == 0xFFFFFFFF) { - //jsonFile.set_null(orderPtr + "/" + std::to_string(i)); continue; } - char *text = reinterpret_cast(&rawBytes[offsetToText]); + DKRText text(rawBytes, offsetToText); - std::string textBuildId = menuTextConfig.menuTextBuildIds[i]; - - //jsonFile.set_string(orderPtr + "/" + std::to_string(i), textBuildId); - jsonFile.set_string(sectionsPtr + "/" + textBuildId, text); + if(i < numberOfRecordedEntries) { + jsonFile.set_string(sectionsPtr + "/" + menuTextBuildIds[i], text.get_text()); + } else { + jsonFile.set_string(sectionsPtr + "/ASSET_MENU_TEXT_UNKNOWN_" + std::to_string(i), text.get_text()); + } } - jsonFile.save(); + info.write_json_file(); } - -ExtractMenuText::~ExtractMenuText() { -} - diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractMenuText.h b/tools/dkr_assets_tool_src/extract/extractTypes/extractMenuText.h index 9ce3cec8..1a9d5db1 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractMenuText.h +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractMenuText.h @@ -1,13 +1,9 @@ #pragma once #include "extract/extractInfo.h" -#include "misc/settings.hpp" -class ExtractMenuText { -public: - ExtractMenuText(DkrAssetsSettings &settings, ExtractInfo &info); - ~ExtractMenuText(); -private: - DkrAssetsSettings &_settings; - ExtractInfo &_info; -}; +namespace DkrAssetsTool { +namespace ExtractMenuText { + void extract(ExtractInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractMisc.cpp b/tools/dkr_assets_tool_src/extract/extractTypes/extractMisc.cpp index 0cccbaa1..6c5eee17 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractMisc.cpp +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractMisc.cpp @@ -11,68 +11,43 @@ #include #include -#define MISC_ARGS WritableJsonFile &jsonFile, std::vector &rawBytes -#define MISC_LAMDA(func) [this](MISC_ARGS) { func(jsonFile, rawBytes); } +#define MISC_ARGS ExtractInfo &info +#define MISC_LAMDA(func) [](MISC_ARGS) { func(info); } + +using namespace DkrAssetsTool; typedef void (*MiscFuncPtr)(MISC_ARGS); -ExtractMisc::ExtractMisc(DkrAssetsSettings &settings, ExtractInfo &info) : _settings(settings), _info(info) { - fs::path _outFilepath = _settings.pathToAssets / _info.get_out_filepath(".json"); - DebugHelper::info_custom("Extracting Miscellaneous", YELLOW_TEXT, _outFilepath); - - _miscType = _info.get_tag("miscType", "Binary"); - - WritableJsonFile jsonFile(_outFilepath); - jsonFile.set_string("/type", "Miscellaneous"); - jsonFile.set_string("/misc-type", _miscType); - +void extract_binary(ExtractInfo &info) { + WritableJsonFile &jsonFile = info.get_json_file(); + jsonFile.set_string("/raw", info.get_filename(".bin")); + info.write_raw_data_file(); +} + +void extract_racer_stat(ExtractInfo &info) { + WritableJsonFile &jsonFile = info.get_json_file(); std::vector rawBytes; - _info.get_data_from_rom(rawBytes); + info.get_data_from_rom(rawBytes); - const std::unordered_map> miscFunctions = { - { "Binary", MISC_LAMDA(_extract_binary) }, - { "RacerStat", MISC_LAMDA(_extract_racer_stat) }, - { "RacerAcceleration", MISC_LAMDA(_extract_racer_acceleration) }, - { "TrackIds", MISC_LAMDA(_extract_track_ids) }, - { "MagicCodes", MISC_LAMDA(_extract_magic_codes) }, - { "TitleScreenDemos", MISC_LAMDA(_extract_title_screen_demos) }, - }; - - // Make sure the misc type has a function to extract it. - DebugHelper::assert(miscFunctions.find(_miscType) != miscFunctions.end(), - "(ExtractMisc::ExtractMisc) Misc type \"", _miscType, " has extract function associated with it."); - - // Call the specific _extract_* function based on misc type. - miscFunctions.at(_miscType)(jsonFile, rawBytes); - - jsonFile.save(); -} - -ExtractMisc::~ExtractMisc() { -} - -void ExtractMisc::_extract_binary(WritableJsonFile &jsonFile, std::vector &rawBytes) { - fs::path _outRawFilepath = _settings.pathToAssets / _info.get_out_filepath(".bin"); - jsonFile.set_string("/raw", _info.get_filename(".bin")); - FileHelper::write_binary_file(rawBytes, _outRawFilepath, true); -} - -void ExtractMisc::_extract_racer_stat(WritableJsonFile &jsonFile, std::vector &rawBytes) { const int racerStatFloatRound = 2; // Round float to 2 decimal places. be_float *values = reinterpret_cast(&rawBytes[0]); - CEnum *characters = _info.c_context->get_enum("Character"); + CEnum *characters = info.get_c_context().get_enum("Character"); size_t numberOfFloats = rawBytes.size() / 4; for(size_t i = 0; i < numberOfFloats; i++) { std::string charId; DebugHelper::assert(characters->get_symbol_of_value(i, charId), - "(ExtractMisc::_extract_racer_stat) Enum \"Character\" does not have the index: ", i); + "(extract_racer_stat) Enum \"Character\" does not have the index: ", i); jsonFile.set_float("/values/" + charId, values[i], racerStatFloatRound); } } -void ExtractMisc::_extract_racer_acceleration(WritableJsonFile &jsonFile, std::vector &rawBytes) { +void extract_racer_acceleration(ExtractInfo &info) { + WritableJsonFile &jsonFile = info.get_json_file(); + std::vector rawBytes; + info.get_data_from_rom(rawBytes); + const int racerAccelFloatRound = 2; // Round float to 2 decimal places. be_float *floats = reinterpret_cast(&rawBytes[0]); @@ -88,7 +63,11 @@ void ExtractMisc::_extract_racer_acceleration(WritableJsonFile &jsonFile, std::v } } -void ExtractMisc::_extract_track_ids(WritableJsonFile &jsonFile, std::vector &rawBytes) { +void extract_track_ids(ExtractInfo &info) { + WritableJsonFile &jsonFile = info.get_json_file(); + std::vector rawBytes; + info.get_data_from_rom(rawBytes); + size_t endPoint = rawBytes.size(); // Get last non-zero value as the real end point. (Avoid padding) @@ -104,18 +83,17 @@ void ExtractMisc::_extract_track_ids(WritableJsonFile &jsonFile, std::vector &rawBytes) { - MiscHelper::process_cheats_encryption(rawBytes); // Decrypt the cheats data. +void extract_magic_codes(ExtractInfo &info) { + WritableJsonFile &jsonFile = info.get_json_file(); + std::vector rawBytes; + info.get_data_from_rom(rawBytes); - if(_settings.debugExtractKeepUncompressed) { - fs::path unencryptedCheatsPath = _settings.pathToAssets / "debug/cheats" / _info.get_filename(".bin"); - FileHelper::write_binary_file(rawBytes, unencryptedCheatsPath, true); - } + MiscHelper::process_cheats_encryption(rawBytes); // Decrypt the cheats data. be_int16_t *cheatsTable = reinterpret_cast(&rawBytes[0]); @@ -137,7 +115,11 @@ void ExtractMisc::_extract_magic_codes(WritableJsonFile &jsonFile, std::vector &rawBytes) { +void extract_title_screen_demos(ExtractInfo &info) { + WritableJsonFile &jsonFile = info.get_json_file(); + std::vector rawBytes; + info.get_data_from_rom(rawBytes); + TitleScreenDemos *demos = reinterpret_cast(&rawBytes[0]); size_t numberOfDemos = rawBytes.size() / 3; @@ -149,7 +131,7 @@ void ExtractMisc::_extract_title_screen_demos(WritableJsonFile &jsonFile, std::v std::string ptr = "/entries/" + std::to_string(i); - std::string levelBuildId = AssetsHelper::get_build_id_of_index(_settings, "ASSET_LEVEL_HEADERS", demos[i].levelId); + std::string levelBuildId = AssetsHelper::get_build_id_of_index("ASSET_LEVEL_HEADERS", demos[i].levelId); jsonFile.set_string(ptr + "/level", levelBuildId); @@ -163,3 +145,31 @@ void ExtractMisc::_extract_title_screen_demos(WritableJsonFile &jsonFile, std::v } } } + +void ExtractMisc::extract(ExtractInfo &info) { + DebugHelper::info_custom("Extracting Miscellaneous", YELLOW_TEXT, info.get_out_filepath(".json")); + + std::string miscType = info.get_tag("miscType", "Binary"); + + WritableJsonFile &jsonFile = info.get_json_file(); + jsonFile.set_string("/type", "Miscellaneous"); + jsonFile.set_string("/misc-type", miscType); + + const std::unordered_map> miscFunctions = { + { "Binary", MISC_LAMDA(extract_binary) }, + { "RacerStat", MISC_LAMDA(extract_racer_stat) }, + { "RacerAcceleration", MISC_LAMDA(extract_racer_acceleration) }, + { "TrackIds", MISC_LAMDA(extract_track_ids) }, + { "MagicCodes", MISC_LAMDA(extract_magic_codes) }, + { "TitleScreenDemos", MISC_LAMDA(extract_title_screen_demos) }, + }; + + // Make sure the misc type has a function to extract it. + DebugHelper::assert(miscFunctions.find(miscType) != miscFunctions.end(), + "(ExtractMisc::ExtractMisc) Misc type \"", miscType, " has extract function associated with it."); + + // Call the specific _extract_* function based on misc type. + miscFunctions.at(miscType)(info); + + info.write_json_file(); +} diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractMisc.h b/tools/dkr_assets_tool_src/extract/extractTypes/extractMisc.h index 6577a711..b6876415 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractMisc.h +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractMisc.h @@ -1,22 +1,9 @@ #pragma once #include "extract/extractInfo.h" -#include "misc/settings.hpp" -class ExtractMisc { -public: - ExtractMisc(DkrAssetsSettings &settings, ExtractInfo &info); - ~ExtractMisc(); -private: - DkrAssetsSettings &_settings; - ExtractInfo &_info; - - void _extract_binary(WritableJsonFile &jsonFile, std::vector &rawBytes); - void _extract_racer_stat(WritableJsonFile &jsonFile, std::vector &rawBytes); - void _extract_racer_acceleration(WritableJsonFile &jsonFile, std::vector &rawBytes); - void _extract_track_ids(WritableJsonFile &jsonFile, std::vector &rawBytes); - void _extract_magic_codes(WritableJsonFile &jsonFile, std::vector &rawBytes); - void _extract_title_screen_demos(WritableJsonFile &jsonFile, std::vector &rawBytes); - - std::string _miscType; -}; +namespace DkrAssetsTool { +namespace ExtractMisc { + void extract(ExtractInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractObjectAnimation.cpp b/tools/dkr_assets_tool_src/extract/extractTypes/extractObjectAnimation.cpp index 214667fa..030ed721 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractObjectAnimation.cpp +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractObjectAnimation.cpp @@ -1,20 +1,37 @@ #include "extractObjectAnimation.h" +#include "helpers/assetsHelper.h" #include "helpers/jsonHelper.h" -ExtractObjectAnimation::ExtractObjectAnimation(DkrAssetsSettings &settings, ExtractInfo &info) : _settings(settings), _info(info) { - fs::path _outRawFilepath = _settings.pathToAssets / _info.get_out_filepath(".bin"); - fs::path _outFilepath = _settings.pathToAssets / _info.get_out_filepath(".json"); - DebugHelper::info_custom("Extracting Object Animation", YELLOW_TEXT, _outFilepath); +using namespace DkrAssetsTool; + +void ExtractObjectAnimation::extract(ExtractInfo &info) { + DebugHelper::info_custom("Extracting Object Animation", YELLOW_TEXT, info.get_out_filepath(".json")); - WritableJsonFile jsonFile(_outFilepath); - jsonFile.set_path("/raw", _info.get_filename(".bin")); + WritableJsonFile &jsonFile = info.get_json_file(); + jsonFile.set_path("/raw", info.get_filename(".bin")); jsonFile.set_string("/type", "ObjectAnimation"); - jsonFile.save(); + ExtractInfo &objectAnimationIds = DeferredExtractions::get_extraction("ASSET_ANIMATION_IDS", 0); - _info.write_rom_data_to_file(_outRawFilepath); -} - -ExtractObjectAnimation::~ExtractObjectAnimation() { + const BytesView &idsView = objectAnimationIds.get_view(); + size_t fileIndex = info.get_file_index(); + + size_t modelIndex = 0; + while(modelIndex < (idsView.size() / 2) - 1) { + int16_t value = idsView.get_s16_be(modelIndex*2); + int16_t nextValue = idsView.get_s16_be(modelIndex*2 + 2); + if((fileIndex >= value) && (fileIndex < nextValue)) { + // Found the correct modelIndex. + break; + } + modelIndex++; + } + + std::string forModel = AssetsHelper::get_build_id_of_index("ASSET_OBJECT_MODELS", modelIndex); + + jsonFile.set_string("/for-model", forModel); + + info.write_json_file(); + info.write_raw_data_file(); } diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractObjectAnimation.h b/tools/dkr_assets_tool_src/extract/extractTypes/extractObjectAnimation.h index c8341650..de778025 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractObjectAnimation.h +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractObjectAnimation.h @@ -1,13 +1,9 @@ #pragma once #include "extract/extractInfo.h" -#include "misc/settings.hpp" -class ExtractObjectAnimation { -public: - ExtractObjectAnimation(DkrAssetsSettings &settings, ExtractInfo &info); - ~ExtractObjectAnimation(); -private: - DkrAssetsSettings &_settings; - ExtractInfo &_info; -}; +namespace DkrAssetsTool { +namespace ExtractObjectAnimation { + void extract(ExtractInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractObjectHeader.cpp b/tools/dkr_assets_tool_src/extract/extractTypes/extractObjectHeader.cpp index ab127533..2049eaa3 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractObjectHeader.cpp +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractObjectHeader.cpp @@ -6,23 +6,55 @@ #include "fileTypes/objectHeader.hpp" +#include "extract/stats.h" + #include -ExtractObjectHeader::ExtractObjectHeader(DkrAssetsSettings &settings, ExtractInfo &info) : _settings(settings), _info(info) { - fs::path _outFilepath = _settings.pathToAssets / _info.get_out_filepath(".json"); +using namespace DkrAssetsTool; + +void flags_to_string(WritableJsonFile &jsonFile, be_uint16_t flags) { + if(flags == 0) { + return; + } - DebugHelper::info_custom("Extracting Object", YELLOW_TEXT, _outFilepath); + size_t numberOfBits = sizeof(be_uint16_t) * 8; + int count = 0; + + for(size_t i = 0; i < numberOfBits; i++) { + int flag = 1 << i; + + if(!(flag & flags)) { + continue; + } + + std::string ptr = "/flags/" + std::to_string(count); + + if(OBJECT_HEADER_FLAGS.has_value(flag)) { + jsonFile.set_string(ptr, OBJECT_HEADER_FLAGS.get_key(flag)); + } else { + jsonFile.set_string(ptr, "FLAG_" + StringHelper::to_hex(flag, 4)); + } + + count++; + } +} + +void ExtractObjectHeader::extract(ExtractInfo &info) { + DebugHelper::info_custom("Extracting Object", YELLOW_TEXT, info.get_out_filepath(".json")); + + const ExtractStats &stats = info.get_stats(); + + // TODO: Use ByteView instead of this! std::vector rawBytes; - _info.get_data_from_rom(rawBytes); + info.get_data_from_rom(rawBytes); ObjectHeader *objectHeader = reinterpret_cast(&rawBytes[0]); - //DebugHelper::info(objectHeader->internalName); - WritableJsonFile jsonFile(_outFilepath); + WritableJsonFile &jsonFile = info.get_json_file(); jsonFile.set_string("/type", "ObjectHeader"); - CEnum *objBehaviors = _info.c_context->get_enum("ObjectBehaviours"); + CEnum *objBehaviors = info.get_c_context().get_enum("ObjectBehaviours"); int behaviorId = objectHeader->behaviorId; @@ -38,11 +70,11 @@ ExtractObjectHeader::ExtractObjectHeader(DkrAssetsSettings &settings, ExtractInf // Model Type std::string modelTypeName = "ObjectModelType"; - std::string modelType = _info.c_context->get_symbol_of_enum_int(modelTypeName, objectHeader->modelType); + std::string modelType = info.get_c_context().get_symbol_of_enum_int(modelTypeName, objectHeader->modelType); jsonFile.set_string("/model-type", modelType); // Flags - _flags_to_string(jsonFile, objectHeader->flags); + flags_to_string(jsonFile, objectHeader->flags); // Internal Name jsonFile.set_string("/internal-name", objectHeader->internalName); @@ -107,13 +139,13 @@ ExtractObjectHeader::ExtractObjectHeader(DkrAssetsSettings &settings, ExtractInf std::string modelBuildId; switch(objectHeader->modelType) { case OBJECT_MODEL_TYPE_3D_MODEL: - modelBuildId = AssetsHelper::get_build_id_of_index(_settings, "ASSET_OBJECT_MODELS", modelIds[i]); + modelBuildId = stats.get_build_id_from_file_index("ASSET_OBJECT_MODELS", modelIds[i]); break; case OBJECT_MODEL_TYPE_MISC: - modelBuildId = AssetsHelper::get_build_id_of_index(_settings, "ASSET_TEXTURES_2D", modelIds[i]); + modelBuildId = stats.get_build_id_from_file_index("ASSET_TEXTURES_2D", modelIds[i]); break; default: - modelBuildId = AssetsHelper::get_build_id_of_index(_settings, "ASSET_SPRITES", modelIds[i]); + modelBuildId = stats.get_build_id_from_file_index("ASSET_SPRITES", modelIds[i]); break; } jsonFile.set_string("/models/" + std::to_string(i), modelBuildId); @@ -154,37 +186,5 @@ ExtractObjectHeader::ExtractObjectHeader(DkrAssetsSettings &settings, ExtractInf jsonFile.set_int("/junk-data/"+std::to_string(i), rawBytes[offsetToJunkBytes + i]); } - jsonFile.save(); + info.write_json_file(); } - -ExtractObjectHeader::~ExtractObjectHeader() { - -} - -void ExtractObjectHeader::_flags_to_string(WritableJsonFile &jsonFile, be_uint16_t flags) { - if(flags == 0) { - return; - } - - size_t numberOfBits = sizeof(be_uint16_t) * 8; - - int count = 0; - - for(size_t i = 0; i < numberOfBits; i++) { - int flag = 1 << i; - - if(!(flag & flags)) { - continue; - } - - std::string ptr = "/flags/" + std::to_string(count); - - if(OBJECT_HEADER_FLAGS.has_value(flag)) { - jsonFile.set_string(ptr, OBJECT_HEADER_FLAGS.get_key(flag)); - } else { - jsonFile.set_string(ptr, "FLAG_" + StringHelper::to_hex(flag, 4)); - } - - count++; - } -} \ No newline at end of file diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractObjectHeader.h b/tools/dkr_assets_tool_src/extract/extractTypes/extractObjectHeader.h index 93d141bb..67cbdf58 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractObjectHeader.h +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractObjectHeader.h @@ -1,18 +1,9 @@ #pragma once -#include #include "extract/extractInfo.h" -#include "misc/settings.hpp" -#include "fileTypes/types.hpp" - -class ExtractObjectHeader { -public: - ExtractObjectHeader(DkrAssetsSettings &settings, ExtractInfo &info); - ~ExtractObjectHeader(); -private: - DkrAssetsSettings &_settings; - ExtractInfo &_info; - - void _flags_to_string(WritableJsonFile &jsonFile, be_uint16_t flags); -}; \ No newline at end of file +namespace DkrAssetsTool { +namespace ExtractObjectHeader { + void extract(ExtractInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractObjectMap.cpp b/tools/dkr_assets_tool_src/extract/extractTypes/extractObjectMap.cpp index e2128d51..ced79968 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractObjectMap.cpp +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractObjectMap.cpp @@ -3,24 +3,53 @@ #include "fileTypes/levelObjectMap.hpp" #include "helpers/gzipHelper.h" -#include "helpers/assetsHelper.h" +#include "helpers/jsonHelper.h" #include "helpers/stringHelper.h" +#include "misc/globalSettings.h" + #include "helpers/c/cStructGltfHelper.h" -ExtractObjectMap::ExtractObjectMap(DkrAssetsSettings &settings, ExtractInfo &info) : _settings(settings), _info(info) { - fs::path _outFilepath = _settings.pathToAssets / _info.get_out_filepath(".json"); - DebugHelper::info_custom("Extracting Level Object Map", YELLOW_TEXT, _outFilepath); +#include "extract/stats.h" + +using namespace DkrAssetsTool; + +void get_obj_position(WriteableGltfFile &gltfFile, uint8_t *bytes, CStruct *entryCommon, int nodeIndex, const std::string &entryStructName) { + CStructEntry *memberX = entryCommon->get_entry(2); + CStructEntry *memberY = entryCommon->get_entry(3); + CStructEntry *memberZ = entryCommon->get_entry(4); - JsonFile *transTable = AssetsHelper::get_asset_json(_settings, "ASSET_LEVEL_OBJECT_TRANSLATION_TABLE"); - JsonFile *objBehaviorToEntryTable = AssetsHelper::get_meta_file(_settings, "objects/obj_beh_to_entry.meta.json"); + DebugHelper::assert_(memberX != nullptr, "(ExtractObjectMap::get_obj_position) Could not find \"x\" in struct: ", entryStructName); + DebugHelper::assert_(memberY != nullptr, "(ExtractObjectMap::get_obj_position) Could not find \"y\" in struct: ", entryStructName); + DebugHelper::assert_(memberZ != nullptr, "(ExtractObjectMap::get_obj_position) Could not find \"z\" in struct: ", entryStructName); - WritableJsonFile jsonFile(_outFilepath); + int16_t xPos = memberX->get_integer_from_data(bytes); + int16_t yPos = memberY->get_integer_from_data(bytes); + int16_t zPos = memberZ->get_integer_from_data(bytes); + + // Scale position based on user input. + double scaledX = xPos;//_settings.adjust_to_model_scale(xPos); + double scaledY = yPos;//_settings.adjust_to_model_scale(yPos); + double scaledZ = zPos;//_settings.adjust_to_model_scale(zPos); + + gltfFile.set_node_position(nodeIndex, scaledX, scaledY, scaledZ); +} + + +void ExtractObjectMap::extract(ExtractInfo &info) { + DebugHelper::info_custom("Extracting Level Object Map", YELLOW_TEXT, info.get_out_filepath(".json")); + + const ExtractStats &stats = info.get_stats(); + const AssetExtractConfig &config = info.get_config(); + + const JsonFile &transTable = stats.get_json("ASSET_LEVEL_OBJECT_TRANSLATION_TABLE"); + + WritableJsonFile &jsonFile = info.get_json_file(); jsonFile.set_string("/type", "LevelObjectMap"); // Get the compressed data from the ROM. std::vector compressedData; - _info.get_data_from_rom(compressedData); + info.get_data_from_rom(compressedData); if(compressedData.empty()) { jsonFile.set_null("/objects"); @@ -28,8 +57,8 @@ ExtractObjectMap::ExtractObjectMap(DkrAssetsSettings &settings, ExtractInfo &inf return; } - fs::path localGltfPath = _info.get_filename(".gltf"); - fs::path gltfFilepath = _settings.pathToAssets / _info.get_out_filepath(".gltf"); + fs::path localGltfPath = info.get_filename(".gltf"); + fs::path gltfFilepath = GlobalSettings::get_decomp_path_to_vanilla_assets() / info.get_out_filepath(".gltf"); WriteableGltfFile gltfFile("objects"); @@ -38,12 +67,13 @@ ExtractObjectMap::ExtractObjectMap(DkrAssetsSettings &settings, ExtractInfo &inf // Decompress it std::vector rawBytes = GzipHelper::decompress_gzip(compressedData); + /* if(_settings.debugExtractKeepUncompressed) { // Have the uncompressed binary in a seperate directory in the assets folder. - fs::path outUncompressedPath = _settings.pathToAssets / "debug/objectMaps" / _info.get_filename(".bin"); + fs::path outUncompressedPath = GlobalSettings::get_decomp_path_to_vanilla_assets() / "debug/objectMaps" / info.get_filename(".bin"); FileHelper::write_binary_file(rawBytes, outUncompressedPath, true); } - + */ //DebugHelper::info(rawBytes.size()); // Now we can read it. @@ -53,46 +83,40 @@ ExtractObjectMap::ExtractObjectMap(DkrAssetsSettings &settings, ExtractInfo &inf size_t end = mapData->header.fileSize + sizeof(LevelObjectMapHeader); uint8_t *bytes = &mapData->entriesData[0]; - DebugHelper::assert_(offset == 16, "(ExtractObjectMap::ExtractObjectMap) Invalid size for LevelObjectMapHeader: ", offset); + DebugHelper::assert_(offset == 16, "(ExtractObjectMap::extract) Invalid size for LevelObjectMapHeader: ", offset); int currentObjectIndex = 0; while(offset < end) { int id = bytes[0] | ((bytes[1] >> 7) << 8); size_t numBytes = (bytes[1] & 0x7F); - DebugHelper::assert_(numBytes >= 8, "(ExtractObjectMap::ExtractObjectMap) Invalid number of bytes for object! offset = ", DebugHelper::to_hex(offset)); + DebugHelper::assert_(numBytes >= 8, "(ExtractObjectMap::extract) Invalid number of bytes for object! offset = ", DebugHelper::to_hex(offset)); - std::string objectBuildId = transTable->get_string("/table/" + std::to_string(id)); + std::string objectBuildId = transTable.get_string("/table/" + std::to_string(id)); std::string objectIndex = "/objects/" + std::to_string(currentObjectIndex); //jsonFile.set_string(objectIndex + "/id", objectBuildId); // Get the object behavior for this object. - JsonFile *objJson = AssetsHelper::get_asset_json(_settings, "ASSET_OBJECTS", objectBuildId); + const JsonFile &objJson = stats.get_json("ASSET_OBJECTS", objectBuildId); - std::string objInternalName = objJson->get_string("/internal-name", "NoName"); - std::string objBehavior = objJson->get_string("/behavior"); + std::string objInternalName = objJson.get_string("/internal-name", "NoName"); + std::string objBehavior = objJson.get_string("/behavior"); DebugHelper::assert_( !objBehavior.empty(), - "(ExtractObjectMap::ExtractObjectMap) Object \"", objectBuildId, "\" does not specify a behavior!" + "(ExtractObjectMap::extract) Object \"", objectBuildId, "\" does not specify a behavior!" ); - std::string entryStructName = objBehaviorToEntryTable->get_string("/" + objBehavior); - DebugHelper::assert_( - !entryStructName.empty(), - "(ExtractObjectMap::ExtractObjectMap) The behavior \"", objBehavior, "\" does not specify an entry struct!" - ); + std::string entryStructName = config.get_object_entry_from_behavior(objBehavior); - //DebugHelper::info(objectBuildId, "/", objBehavior, "/", entryStructName); - - CStruct *entryStruct = _info.c_context->get_struct(entryStructName); + CStruct *entryStruct = info.get_c_context().get_struct(entryStructName); size_t entryStructByteSize = entryStruct->get_byte_size(); DebugHelper::assert_( entryStructByteSize == numBytes, - "(ExtractObjectMap::ExtractObjectMap) The struct \"", entryStructName, "\" is the incorrect byte size! Is ", + "(ExtractObjectMap::extract) The struct \"", entryStructName, "\" is the incorrect byte size! Is ", DebugHelper::to_hex(entryStructByteSize), " bytes, when it should be ", DebugHelper::to_hex(numBytes), " bytes." ); @@ -103,19 +127,19 @@ ExtractObjectMap::ExtractObjectMap(DkrAssetsSettings &settings, ExtractInfo &inf // Check assumption by seeing if the first entry is a LevelObjectEntryCommon if(entryStruct->get_entry(0)->type == "LevelObjectEntryCommon") { // Assumption was wrong, so fix it! - entryCommon = _info.c_context->get_struct("LevelObjectEntryCommon"); + entryCommon = info.get_c_context().get_struct("LevelObjectEntryCommon"); } int gltfObjNode = gltfFile.new_node(objInternalName); gltfFile.set_node_extra(gltfObjNode, "id", objectBuildId); - _get_obj_position(gltfFile, bytes, entryCommon, gltfObjNode, entryStructName); + get_obj_position(gltfFile, bytes, entryCommon, gltfObjNode, entryStructName); if(entryCommon != entryStruct) { for(size_t i = 0; i < entryStruct->entry_count(); i++) { CStructEntry *structMember = entryStruct->get_entry(i); - CStructGltfHelper::put_struct_entry_into_gltf_node_extra(_settings, structMember, gltfFile, gltfObjNode, bytes); + CStructGltfHelper::put_struct_entry_into_gltf_node_extra(structMember, gltfFile, gltfObjNode, bytes); } } @@ -124,32 +148,7 @@ ExtractObjectMap::ExtractObjectMap(DkrAssetsSettings &settings, ExtractInfo &inf offset += numBytes; } - gltfFile.save(gltfFilepath); - DebugHelper::assert_(FileHelper::path_exists(gltfFilepath), "(ExtractObjectMap::ExtractObjectMap) gltfPath ", gltfFilepath, " did not save!"); + DebugHelper::assert_(FileHelper::path_exists(gltfFilepath), "(ExtractObjectMap::extract) gltfPath ", gltfFilepath, " did not save!"); jsonFile.save(); } - -ExtractObjectMap::~ExtractObjectMap() { -} - -void ExtractObjectMap::_get_obj_position(WriteableGltfFile &gltfFile, uint8_t *bytes, CStruct *entryCommon, int nodeIndex, const std::string &entryStructName) { - CStructEntry *memberX = entryCommon->get_entry(2); - CStructEntry *memberY = entryCommon->get_entry(3); - CStructEntry *memberZ = entryCommon->get_entry(4); - - DebugHelper::assert_(memberX != nullptr, "(ExtractObjectMap::_get_obj_position) Could not find \"x\" in struct: ", entryStructName); - DebugHelper::assert_(memberY != nullptr, "(ExtractObjectMap::_get_obj_position) Could not find \"y\" in struct: ", entryStructName); - DebugHelper::assert_(memberZ != nullptr, "(ExtractObjectMap::_get_obj_position) Could not find \"z\" in struct: ", entryStructName); - - int16_t xPos = memberX->get_integer_from_data(bytes); - int16_t yPos = memberY->get_integer_from_data(bytes); - int16_t zPos = memberZ->get_integer_from_data(bytes); - - // Scale position based on user input. - double scaledX = _settings.adjust_to_model_scale(xPos); - double scaledY = _settings.adjust_to_model_scale(yPos); - double scaledZ = _settings.adjust_to_model_scale(zPos); - - gltfFile.set_node_position(nodeIndex, scaledX, scaledY, scaledZ); -} diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractObjectMap.h b/tools/dkr_assets_tool_src/extract/extractTypes/extractObjectMap.h index 9adbf7da..17da7307 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractObjectMap.h +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractObjectMap.h @@ -1,22 +1,9 @@ #pragma once -#include #include "extract/extractInfo.h" -#include "misc/settings.hpp" -#include "helpers/debugHelper.h" -#include "helpers/fileHelper.h" -#include "helpers/jsonHelper.h" -#include "helpers/gltf/gltfHelper.h" -#include "helpers/c/cStructHelper.h" - -class ExtractObjectMap { -public: - ExtractObjectMap(DkrAssetsSettings &settings, ExtractInfo &info); - ~ExtractObjectMap(); -private: - DkrAssetsSettings &_settings; - ExtractInfo &_info; - - void _get_obj_position(WriteableGltfFile &gltfFile, uint8_t *bytes, CStruct *entryCommon, int nodeIndex, const std::string &entryStructName); -}; +namespace DkrAssetsTool { +namespace ExtractObjectMap { + void extract(ExtractInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractObjectModel.cpp b/tools/dkr_assets_tool_src/extract/extractTypes/extractObjectModel.cpp index e58beece..0b479625 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractObjectModel.cpp +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractObjectModel.cpp @@ -2,19 +2,15 @@ #include "helpers/jsonHelper.h" -ExtractObjectModel::ExtractObjectModel(DkrAssetsSettings &settings, ExtractInfo &info) : _settings(settings), _info(info) { - fs::path _outRawFilepath = _settings.pathToAssets / _info.get_out_filepath(".bin"); - fs::path _outFilepath = _settings.pathToAssets / _info.get_out_filepath(".json"); - DebugHelper::info_custom("Extracting Object Model", YELLOW_TEXT, _outFilepath); +using namespace DkrAssetsTool; + +void ExtractObjectModel::extract(ExtractInfo &info) { + DebugHelper::info_custom("Extracting Object Model", YELLOW_TEXT, info.get_out_filepath(".json")); - WritableJsonFile jsonFile(_outFilepath); - jsonFile.set_path("/raw", _info.get_filename(".bin")); + WritableJsonFile &jsonFile = info.get_json_file(); + jsonFile.set_path("/raw", info.get_filename(".bin")); jsonFile.set_string("/type", "ObjectModel"); - jsonFile.save(); - - _info.write_rom_data_to_file(_outRawFilepath); -} - -ExtractObjectModel::~ExtractObjectModel() { + info.write_json_file(); + info.write_raw_data_file(); } diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractObjectModel.h b/tools/dkr_assets_tool_src/extract/extractTypes/extractObjectModel.h index 37634132..09d07af1 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractObjectModel.h +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractObjectModel.h @@ -1,13 +1,9 @@ #pragma once #include "extract/extractInfo.h" -#include "misc/settings.hpp" -class ExtractObjectModel { -public: - ExtractObjectModel(DkrAssetsSettings &settings, ExtractInfo &info); - ~ExtractObjectModel(); -private: - DkrAssetsSettings &_settings; - ExtractInfo &_info; -}; +namespace DkrAssetsTool { +namespace ExtractObjectModel { + void extract(ExtractInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractParticle.cpp b/tools/dkr_assets_tool_src/extract/extractTypes/extractParticle.cpp index 3314413b..10721937 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractParticle.cpp +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractParticle.cpp @@ -2,19 +2,15 @@ #include "helpers/jsonHelper.h" -ExtractParticle::ExtractParticle(DkrAssetsSettings &settings, ExtractInfo &info) : _settings(settings), _info(info) { - fs::path _outRawFilepath = _settings.pathToAssets / _info.get_out_filepath(".bin"); - fs::path _outFilepath = _settings.pathToAssets / _info.get_out_filepath(".json"); - DebugHelper::info_custom("Extracting Particle", YELLOW_TEXT, _outFilepath); +using namespace DkrAssetsTool; + +void ExtractParticle::extract(ExtractInfo &info) { + DebugHelper::info_custom("Extracting Particle", YELLOW_TEXT, info.get_out_filepath(".json")); - WritableJsonFile jsonFile(_outFilepath); - jsonFile.set_path("/raw", _info.get_filename(".bin")); + WritableJsonFile &jsonFile = info.get_json_file(); + jsonFile.set_path("/raw", info.get_filename(".bin")); jsonFile.set_string("/type", "Particle"); - jsonFile.save(); - - _info.write_rom_data_to_file(_outRawFilepath); -} - -ExtractParticle::~ExtractParticle() { + info.write_json_file(); + info.write_raw_data_file(); } diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractParticle.h b/tools/dkr_assets_tool_src/extract/extractTypes/extractParticle.h index 3123116a..ad257bab 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractParticle.h +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractParticle.h @@ -1,13 +1,9 @@ #pragma once #include "extract/extractInfo.h" -#include "misc/settings.hpp" -class ExtractParticle { -public: - ExtractParticle(DkrAssetsSettings &settings, ExtractInfo &info); - ~ExtractParticle(); -private: - DkrAssetsSettings &_settings; - ExtractInfo &_info; -}; +namespace DkrAssetsTool { +namespace ExtractParticle { + void extract(ExtractInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractParticleBehavior.cpp b/tools/dkr_assets_tool_src/extract/extractTypes/extractParticleBehavior.cpp index 506ad92a..02c53016 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractParticleBehavior.cpp +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractParticleBehavior.cpp @@ -2,19 +2,15 @@ #include "helpers/jsonHelper.h" -ExtractParticleBehavior::ExtractParticleBehavior(DkrAssetsSettings &settings, ExtractInfo &info) : _settings(settings), _info(info) { - fs::path _outRawFilepath = _settings.pathToAssets / _info.get_out_filepath(".bin"); - fs::path _outFilepath = _settings.pathToAssets / _info.get_out_filepath(".json"); - DebugHelper::info_custom("Extracting Particle Behavior", YELLOW_TEXT, _outFilepath); +using namespace DkrAssetsTool; + +void ExtractParticleBehavior::extract(ExtractInfo &info) { + DebugHelper::info_custom("Extracting Particle Behavior", YELLOW_TEXT, info.get_out_filepath(".json")); - WritableJsonFile jsonFile(_outFilepath); - jsonFile.set_path("/raw", _info.get_filename(".bin")); + WritableJsonFile &jsonFile = info.get_json_file(); + jsonFile.set_path("/raw", info.get_filename(".bin")); jsonFile.set_string("/type", "ParticleBehavior"); - jsonFile.save(); - - _info.write_rom_data_to_file(_outRawFilepath); -} - -ExtractParticleBehavior::~ExtractParticleBehavior() { + info.write_json_file(); + info.write_raw_data_file(); } diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractParticleBehavior.h b/tools/dkr_assets_tool_src/extract/extractTypes/extractParticleBehavior.h index 1c1fd98b..2cb9bccc 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractParticleBehavior.h +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractParticleBehavior.h @@ -1,13 +1,9 @@ #pragma once #include "extract/extractInfo.h" -#include "misc/settings.hpp" -class ExtractParticleBehavior { -public: - ExtractParticleBehavior(DkrAssetsSettings &settings, ExtractInfo &info); - ~ExtractParticleBehavior(); -private: - DkrAssetsSettings &_settings; - ExtractInfo &_info; -}; +namespace DkrAssetsTool { +namespace ExtractParticleBehavior { + void extract(ExtractInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractSprite.cpp b/tools/dkr_assets_tool_src/extract/extractTypes/extractSprite.cpp index 050647ef..7ad78385 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractSprite.cpp +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractSprite.cpp @@ -1,22 +1,29 @@ #include "extractSprite.h" +#include +#include + #include "fileTypes/sprite.hpp" #include "helpers/jsonHelper.h" #include "helpers/assetsHelper.h" -ExtractSprite::ExtractSprite(DkrAssetsSettings &settings, ExtractInfo &info) : _settings(settings), _info(info) { - fs::path _outFilepath = _settings.pathToAssets / _info.get_out_filepath(".json"); - DebugHelper::info_custom("Extracting Sprite", YELLOW_TEXT, _outFilepath); +#include "extract/stats.h" + +using namespace DkrAssetsTool; + +void ExtractSprite::extract(ExtractInfo &info) { + DebugHelper::info_custom("Extracting Sprite", YELLOW_TEXT, info.get_out_filepath(".json")); - WritableJsonFile jsonFile(_outFilepath); + WritableJsonFile &jsonFile = info.get_json_file(); std::vector rawBytes; - _info.get_data_from_rom(rawBytes); + info.get_data_from_rom(rawBytes); SpriteHeader *spriteHeader = reinterpret_cast(&rawBytes[0]); - std::string texBuildId = AssetsHelper::get_build_id_of_index(_settings, "ASSET_TEXTURES_2D", spriteHeader->startTextureIndex); + + std::string texBuildId = info.get_stats().get_build_id_from_file_index("ASSET_TEXTURES_2D", spriteHeader->startTextureIndex); jsonFile.set_string("/type", "Sprite"); jsonFile.set_string("/start-texture", texBuildId); @@ -32,8 +39,5 @@ ExtractSprite::ExtractSprite(DkrAssetsSettings &settings, ExtractInfo &info) : _ jsonFile.set_int(frameTexCountPtr + "/" + std::to_string(i), data[i + 1] - data[i]); } - jsonFile.save(); -} - -ExtractSprite::~ExtractSprite() { + info.write_json_file(); } diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractSprite.h b/tools/dkr_assets_tool_src/extract/extractTypes/extractSprite.h index a251b607..848fc84d 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractSprite.h +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractSprite.h @@ -1,13 +1,9 @@ #pragma once #include "extract/extractInfo.h" -#include "misc/settings.hpp" -class ExtractSprite { -public: - ExtractSprite(DkrAssetsSettings &settings, ExtractInfo &info); - ~ExtractSprite(); -private: - DkrAssetsSettings &_settings; - ExtractInfo &_info; -}; +namespace DkrAssetsTool { +namespace ExtractSprite { + void extract(ExtractInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractTTGhost.cpp b/tools/dkr_assets_tool_src/extract/extractTypes/extractTTGhost.cpp index cc3aca05..9fd979e1 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractTTGhost.cpp +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractTTGhost.cpp @@ -6,21 +6,26 @@ #include "helpers/fileHelper.h" #include "helpers/assetsHelper.h" -ExtractTTGhost::ExtractTTGhost(DkrAssetsSettings &settings, ExtractInfo &info) : _settings(settings), _info(info) { - fs::path _outFilepath = _settings.pathToAssets / _info.get_out_filepath(".json"); - DebugHelper::info_custom("Extracting TTGhost", YELLOW_TEXT, _outFilepath); +#include "extract/stats.h" + +using namespace DkrAssetsTool; + +void ExtractTTGhost::extract(ExtractInfo &info) { + DebugHelper::info_custom("Extracting TTGhost", YELLOW_TEXT, info.get_out_filepath(".json")); + + const ExtractStats &stats = info.get_stats(); std::vector rawBytes; - _info.get_data_from_rom(rawBytes); + info.get_data_from_rom(rawBytes); GhostHeader *ghostHeader = reinterpret_cast(&rawBytes[0]); - WritableJsonFile jsonFile(_outFilepath); + WritableJsonFile &jsonFile = info.get_json_file(); jsonFile.set_string("/type", "TTGhost"); - std::string levelBuildId = AssetsHelper::get_build_id_of_index(_settings, "ASSET_LEVEL_HEADERS", ghostHeader->levelId); + std::string levelBuildId = stats.get_build_id_from_file_index("ASSET_LEVEL_HEADERS", ghostHeader->levelId); - std::string vehicle = _info.c_context->get_symbol_of_enum_int("Vehicle", ghostHeader->vehicleId); + std::string vehicle = info.get_c_context().get_symbol_of_enum_int("Vehicle", ghostHeader->vehicleId); jsonFile.set_string("/header/level", levelBuildId); jsonFile.set_string("/header/vehicle", vehicle); @@ -46,8 +51,5 @@ ExtractTTGhost::ExtractTTGhost(DkrAssetsSettings &settings, ExtractInfo &info) : jsonFile.set_int(ptr + "/ry", ghostNodes[i].yRotation); } - jsonFile.save(); -} - -ExtractTTGhost::~ExtractTTGhost() { + info.write_json_file(); } diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractTTGhost.h b/tools/dkr_assets_tool_src/extract/extractTypes/extractTTGhost.h index 3a12f6e2..ae4eec4d 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractTTGhost.h +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractTTGhost.h @@ -1,13 +1,9 @@ #pragma once #include "extract/extractInfo.h" -#include "misc/settings.hpp" -class ExtractTTGhost { -public: - ExtractTTGhost(DkrAssetsSettings &settings, ExtractInfo &info); - ~ExtractTTGhost(); -private: - DkrAssetsSettings &_settings; - ExtractInfo &_info; -}; +namespace DkrAssetsTool { +namespace ExtractTTGhost { + void extract(ExtractInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractTexture.cpp b/tools/dkr_assets_tool_src/extract/extractTypes/extractTexture.cpp index 4bc7dc8d..b1cb92e3 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractTexture.cpp +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractTexture.cpp @@ -7,67 +7,104 @@ #include "fileTypes/texture.hpp" -ExtractTexture::ExtractTexture(DkrAssetsSettings &settings, ExtractInfo &info) : _settings(settings), _info(info) { - fs::path _outFilepath = _settings.pathToAssets / _info.get_out_filepath(".json"); - DebugHelper::info_custom("Extracting Texture", YELLOW_TEXT, _outFilepath); +#include "misc/globalSettings.h" + +using namespace DkrAssetsTool; + +// TODO: Refactor this to not use raw pointers. +std::vector generate_texture_images(std::vector &texData, size_t numImages, bool shouldFlipTexture) { + std::vector images; + images.reserve(numImages); - _shouldFlipTexture = _info.get_tag("flipTex", _info.assetSection->specific.textures.flipTexturesByDefault); + int curOffset = 0; + for(size_t i = 0; i < numImages; i++) { + TextureHeader *texHeader = reinterpret_cast(&texData[curOffset]); + std::string format = TEXTURE_FORMAT_INT_TO_STRING[texHeader->format & 0xF]; + + images.emplace_back(texHeader->width, texHeader->height, format, true); + + uint8_t *texImage = &texData[curOffset] + sizeof(TextureHeader); + + size_t calcSize = ImageHelper::image_size(texHeader->width, texHeader->height, format); + + images[i].write_from(texImage, calcSize); + + // deinterlace the texture to make the .png image less jumbled up. + if(texHeader->flags & 0x400) { + images[i].interlace(); + } + + // Need to flip most 3d textures for convience. + if(shouldFlipTexture) { + images[i].flip_vertically(); + } + + curOffset += texHeader->textureSize; // Move onto next texture. + } + return images; +} + + +void ExtractTexture::extract(ExtractInfo &info) { + DebugHelper::info_custom("Extracting Texture", YELLOW_TEXT, info.get_out_filepath(".json")); + + bool flipTextureByDefault = info.get_from_config_section("/flip-textures-by-default", false); + bool shouldFlipTexture = info.get_tag("flipTex", flipTextureByDefault); + + // TODO: Refactor this to use BytesView instead of a vector! std::vector texHeaderBytes; std::vector texData; - info.rom->get_data(info.get_data_offset(), sizeof(TextureHeader), texHeaderBytes); + info.get_data_from_rom(texHeaderBytes, 0, sizeof(TextureHeader)); TextureHeader *texHeader = reinterpret_cast(&texHeaderBytes[0]); size_t numImages = texHeader->numOfTextures; - bool isCompressed = (texHeader->isCompressed); + bool isCompressed = texHeader->isCompressed; if(isCompressed) { - // Get compressed data. (sets texData) - info.rom->get_data(info.get_data_offset() + sizeof(TextureHeader), info.get_data_size() - sizeof(TextureHeader), texData); - // Decompress it. + info.get_data_from_rom(texData, sizeof(TextureHeader)); texData = GzipHelper::decompress_gzip(texData); } else { - // Get data directly, since it isn't compressed. (sets texData) - info.rom->get_data(info.get_data_offset(), info.get_data_size(), texData); + info.get_data_from_rom(texData); } - if(_settings.debugExtractKeepUncompressed) { - // Have the uncompressed binary in a seperate directory in the assets folder. - fs::path outUncompressedPath = _settings.pathToAssets / "debug/textures" / _info.get_filename(".bin"); + if(GlobalSettings::get_value("/debug/keep-uncompressed", false)) { + fs::path outUncompressedPath = GlobalSettings::get_decomp_path_to_vanilla_assets() / "debug/textures" / info.get_filename(".bin"); FileHelper::write_binary_file(texData, outUncompressedPath, true); } - N64Image **images = _generate_texture_images(texData, numImages); + std::vector images = generate_texture_images(texData, numImages, shouldFlipTexture); size_t renderMode = (texHeader->format >> 4) & 0xF; - DebugHelper::assert(renderMode < TEXTURE_RENDER_MODES.size(), "(ExtractTexture::ExtractTexture) Invalid rendermode value: ", renderMode); + DebugHelper::assert(renderMode < TEXTURE_RENDER_MODES.size(), + "(ExtractTexture::extract) Invalid rendermode value: ", renderMode); - WritableJsonFile jsonFile(_outFilepath); + WritableJsonFile &jsonFile = info.get_json_file(); - fs::path outFolder = _settings.pathToAssets / _info.get_out_folder(); + fs::path outFolder = GlobalSettings::get_decomp_path_to_vanilla_assets() / info.get_out_folder(); if(numImages == 1) { - fs::path imgPath = _info.get_filename(".png"); + fs::path imgPath = info.get_filename(".png"); jsonFile.set_path("/images/0", imgPath); - images[0]->save(outFolder / imgPath); - DebugHelper::assert(FileHelper::path_exists(outFolder / imgPath), "Image did not save!!!!"); + images[0].save(outFolder / imgPath); + DebugHelper::assert_(FileHelper::path_exists(outFolder / imgPath), "(ExtractTexture::extract) Image ", imgPath, " did not save!"); } else { - std::string outImgFilename = _info.get_filename(); + std::string outImgFilename = info.get_filename(); for(size_t i = 0; i < numImages; i++) { fs::path imgPath(outImgFilename + "_" + std::to_string(i) + ".png"); jsonFile.set_path("/images/" + std::to_string(i), imgPath); - images[i]->save(outFolder / imgPath); - DebugHelper::assert(FileHelper::path_exists(outFolder / imgPath), "Image did not save!!!!"); + images[i].save(outFolder / imgPath); + DebugHelper::assert_(FileHelper::path_exists(outFolder / imgPath), "(ExtractTexture::extract) Image ", imgPath, " did not save!"); } } jsonFile.set_string("/type", "Texture"); - jsonFile.set_string("/format", images[0]->get_format()); + jsonFile.set_string("/format", images[0].get_format()); jsonFile.set_string("/render-mode", TEXTURE_RENDER_MODES[renderMode]); - jsonFile.set_bool_if_true("/flipped-image", _shouldFlipTexture); + jsonFile.set_bool_if_true("/flipped-image", shouldFlipTexture); jsonFile.set_bool_if_true("/compressed", isCompressed); if(numImages > 1) { @@ -89,43 +126,5 @@ ExtractTexture::ExtractTexture(DkrAssetsSettings &settings, ExtractInfo &info) : jsonFile.set_bool_if_true("/write-size", texHeader->textureSize != 0); - jsonFile.save(); - - // Cleanup - delete images; -} - -ExtractTexture::~ExtractTexture() { -} - -N64Image **ExtractTexture::_generate_texture_images(std::vector &texData, size_t numImages) { - N64Image **images = new N64Image*[numImages]; - - int curOffset = 0; - for(size_t i = 0; i < numImages; i++) { - TextureHeader *texHeader = reinterpret_cast(&texData[curOffset]); - std::string format = TEXTURE_FORMAT_INT_TO_STRING[texHeader->format & 0xF]; - - images[i] = new N64Image(texHeader->width, texHeader->height, format, true); - - uint8_t *texImage = &texData[curOffset] + sizeof(TextureHeader); - - size_t calcSize = ImageHelper::image_size(texHeader->width, texHeader->height, format); - - images[i]->write_from(texImage, calcSize); - - // deinterlace the texture to make the .png image less jumbled up. - if(texHeader->flags & 0x400) { - images[i]->interlace(); - } - - // Need to flip most 3d textures for convience. - if(_shouldFlipTexture) { - images[i]->flip_vertically(); - } - - curOffset += texHeader->textureSize; // Move onto next texture. - } - - return images; + info.write_json_file(); } diff --git a/tools/dkr_assets_tool_src/extract/extractTypes/extractTexture.h b/tools/dkr_assets_tool_src/extract/extractTypes/extractTexture.h index 79bf6b35..60bf257f 100644 --- a/tools/dkr_assets_tool_src/extract/extractTypes/extractTexture.h +++ b/tools/dkr_assets_tool_src/extract/extractTypes/extractTexture.h @@ -1,19 +1,9 @@ #pragma once -#include #include "extract/extractInfo.h" -#include "misc/settings.hpp" -#include "helpers/imageHelper.h" - -class ExtractTexture { -public: - ExtractTexture(DkrAssetsSettings &settings, ExtractInfo &info); - ~ExtractTexture(); -private: - DkrAssetsSettings &_settings; - ExtractInfo &_info; - bool _shouldFlipTexture = false; - - N64Image **_generate_texture_images(std::vector &texData, size_t numImages); -}; +namespace DkrAssetsTool { +namespace ExtractTexture { + void extract(ExtractInfo &info); +} +} diff --git a/tools/dkr_assets_tool_src/extract/extractor.cpp b/tools/dkr_assets_tool_src/extract/extractor.cpp index a58ca347..7d3ad784 100644 --- a/tools/dkr_assets_tool_src/extract/extractor.cpp +++ b/tools/dkr_assets_tool_src/extract/extractor.cpp @@ -1,21 +1,32 @@ #include "extractor.h" #include +#include +#include +#include #include "helpers/stringHelper.h" +#include "helpers/dataHelper.h" #include "helpers/jsonHelper.h" #include "misc/constants.hpp" +#include "misc/globalSettings.h" #include "helpers/c/cStructHelper.h" #include "helpers/c/cEnumsHelper.h" +#include "helpers/c/cHeader.h" #include "libs/ThreadPool.h" +#include "assetTable.h" +#include "config.h" +#include "stats.h" + // Extract types #include "extractTypes/extractAudio.h" #include "extractTypes/extractBinary.h" #include "extractTypes/extractTexture.h" #include "extractTypes/extractFonts.h" +#include "extractTypes/extractJpFonts.h" #include "extractTypes/extractGameText.h" #include "extractTypes/extractLevelName.h" #include "extractTypes/extractLevelModel.h" @@ -32,480 +43,473 @@ #include "extractTypes/extractTTGhost.h" #include "extractTypes/extractMisc.h" -/************************ Hope this part doesn't cause too much cringe. **************************/ +using namespace DkrAssetsTool; -#define EXTRACTOR_ARGS DkrAssetsSettings &settings, ExtractInfo &info -#define EXTRACTOR_LAMDA(classConstructorCode) [](EXTRACTOR_ARGS) { classConstructorCode(settings, info); } +/*************************************************************************************************/ +#define EXTRACTOR_ARGS ExtractInfo &info +#define EXTRACTOR_LAMDA(extractFunction) [](EXTRACTOR_ARGS) { extractFunction(info); } typedef std::function ExtractorFunction; -// Put type with the extract class here! -std::unordered_map extractorMap = { - { "Binary", EXTRACTOR_LAMDA(ExtractBinary) }, - { "Fonts", EXTRACTOR_LAMDA(ExtractFonts) }, - { "LevelObjectTranslationTable", EXTRACTOR_LAMDA(ExtractLOTT) }, - { "Texture", EXTRACTOR_LAMDA(ExtractTexture) }, - { "LevelObjectMap", EXTRACTOR_LAMDA(ExtractObjectMap) }, - { "LevelModel", EXTRACTOR_LAMDA(ExtractLevelModel) }, - { "LevelHeader", EXTRACTOR_LAMDA(ExtractLevelHeader) }, - { "ObjectHeader", EXTRACTOR_LAMDA(ExtractObjectHeader) }, - { "ObjectModel", EXTRACTOR_LAMDA(ExtractObjectModel) }, - { "ObjectAnimation", EXTRACTOR_LAMDA(ExtractObjectAnimation) }, - { "TTGhost", EXTRACTOR_LAMDA(ExtractTTGhost) }, - { "GameText", EXTRACTOR_LAMDA(ExtractGameText) }, - { "MenuText", EXTRACTOR_LAMDA(ExtractMenuText) }, - { "Miscellaneous", EXTRACTOR_LAMDA(ExtractMisc) }, - { "Sprite", EXTRACTOR_LAMDA(ExtractSprite) }, - { "Audio", EXTRACTOR_LAMDA(ExtractAudio) }, - { "Particle", EXTRACTOR_LAMDA(ExtractParticle) }, - { "ParticleBehavior", EXTRACTOR_LAMDA(ExtractParticleBehavior) }, +std::unordered_map EXTRACTOR_MAP = { + { "Binary", EXTRACTOR_LAMDA(ExtractBinary::extract) }, + { "Fonts", EXTRACTOR_LAMDA(ExtractFonts::extract) }, + { "JPFonts", EXTRACTOR_LAMDA(ExtractJPFonts::extract) }, + { "LevelObjectTranslationTable", EXTRACTOR_LAMDA(ExtractLOTT::extract) }, + { "Texture", EXTRACTOR_LAMDA(ExtractTexture::extract) }, + { "LevelObjectMap", EXTRACTOR_LAMDA(ExtractObjectMap::extract) }, + { "LevelModel", EXTRACTOR_LAMDA(ExtractLevelModel::extract) }, + { "LevelHeader", EXTRACTOR_LAMDA(ExtractLevelHeader::extract) }, + { "ObjectHeader", EXTRACTOR_LAMDA(ExtractObjectHeader::extract) }, + { "ObjectModel", EXTRACTOR_LAMDA(ExtractObjectModel::extract) }, + { "ObjectAnimation", EXTRACTOR_LAMDA(ExtractObjectAnimation::extract) }, + { "TTGhost", EXTRACTOR_LAMDA(ExtractTTGhost::extract) }, + { "GameText", EXTRACTOR_LAMDA(ExtractGameText::extract) }, + { "MenuText", EXTRACTOR_LAMDA(ExtractMenuText::extract) }, + { "Miscellaneous", EXTRACTOR_LAMDA(ExtractMisc::extract) }, + { "Sprite", EXTRACTOR_LAMDA(ExtractSprite::extract) }, + { "Audio", EXTRACTOR_LAMDA(ExtractAudio::extract) }, + { "Particle", EXTRACTOR_LAMDA(ExtractParticle::extract) }, + { "ParticleBehavior", EXTRACTOR_LAMDA(ExtractParticleBehavior::extract) }, +}; + +std::unordered_map VERSION_TO_NUMBER = { + { "v77", 77 }, + { "us.v77", 77 }, + { "pal.v77", 77 }, + { "v79", 79 }, + { "jpn.v79", 79 }, + { "v80", 80 }, + { "us.v80", 80 }, + { "pal.v80", 80 }, }; /*************************************************************************************************/ -DkrExtract::DkrExtract(DkrAssetsSettings &settings) : _settings(settings) { - fs::path pathToVanillaAssets = _settings.pathToAssets / ".vanilla/"; - _settings.pathToAssets = pathToVanillaAssets / (settings.dkrVersion + "/"); +void generate_section_json_file(const AssetExtractConfig &config, const ExtractStats &stats, int sectionIndex, fs::path filepath) { + std::string configSectionPtr = "/sections/" + std::to_string(sectionIndex); - // First find config - DebugHelper::info_verbose("Finding config..."); - _find_config(); - if(_config == nullptr) { - DebugHelper::error("Could not find a config file for DKR version: ", _settings.dkrVersion); + std::string type = config.get(configSectionPtr + "/default-type", "Binary"); + std::string folder = config.get(configSectionPtr + "/folder", ""); + std::string sectionBuildId = config.get(configSectionPtr + "/build-id", ""); + + WritableJsonFile jsonFile(filepath); + jsonFile.set_string("/type", type); + jsonFile.set_string("/folder", folder); + + if(type == "MenuText") { + // Copy menu-text-build-ids from the config to the section json. + const JsonFile &configJson = config.get_config_json(); + std::vector menuTextBuildIds; + configJson.get_array("/file-type-attributes/MenuText/menu-text-build-ids", menuTextBuildIds); + int numberOfMenuTextEntries = stats.get_tag("menuTextCount", 0); + menuTextBuildIds.resize(numberOfMenuTextEntries); // Removes the added entries from v79 if this happens to be v77. + jsonFile.set_array("/menu-text-build-ids", menuTextBuildIds); } - // Then find a valid rom. - DebugHelper::info_verbose("Finding ROM..."); - _find_rom(_settings.pathToBaseroms, true); - if(_rom == nullptr) { - // If no rom was found in the baseroms directory, then try the root directory (non-recursively). - _find_rom(_settings.pathToRepo, false); - } + auto tryGetSectionFilesFromStats = stats.get_section_info(sectionBuildId); - if(_rom == nullptr) { - DebugHelper::error("Could not find a valid ROM file for DKR version: ", _settings.dkrVersion); - } - - DebugHelper::info_verbose("Parsing config..."); - // Parse the config. (Wanted to make sure there was a ROM before parsing the config) - _config->parse(); - - // Preload structs & enums into context. - _preload_c_context(); - - DebugHelper::info_verbose("Extracting..."); - // Finally, run the extraction! - _extract(); -} - -DkrExtract::~DkrExtract() { - if(_config != nullptr) { - delete _config; - } - if(_rom != nullptr) { - delete _rom; - } -} - -void DkrExtract::_find_config() { - std::vector configFiles = FileHelper::get_files_from_directory_with_extension(_settings.pathToConfigs, ".config.json", false); - DebugHelper::info_verbose("Number of configs: ", configFiles.size()); - for(size_t i = 0; i < configFiles.size(); i++) { - _config = new DkrExtractConfig(configFiles[i]); - if(_config->get_dkr_version() == _settings.dkrVersion) { - DebugHelper::info("Using config file: ", configFiles[i]); - return; + if(tryGetSectionFilesFromStats.has_value()) { + const std::vector §ionFilesInfo = tryGetSectionFilesFromStats.value(); + + size_t numberOfFiles = sectionFilesInfo.size(); + + if(numberOfFiles == 1) { + jsonFile.set_string("/filename", sectionFilesInfo[0].localPath); + } else { + for(size_t i = 0; i < numberOfFiles; i++) { + const ExtractStatInfo &info = sectionFilesInfo[i]; + + jsonFile.set_string("/files/order/" + std::to_string(i), info.buildId); + jsonFile.set_string("/files/sections/" + info.buildId + "/filename", info.localPath); + } } - delete _config; } - _config = nullptr; // Could not find the config. + + jsonFile.save(); } -void DkrExtract::_find_rom(const std::string &directory, bool recursive) { - std::vector romFiles = FileHelper::get_files_from_directory(directory, recursive); - for(size_t i = 0; i < romFiles.size(); i++) { - _rom = new DkrExtractROM(romFiles[i]); - if(_rom->is_valid() && _config->get_md5() == _rom->get_calculated_md5()) { - DebugHelper::info("Using ROM file: ", romFiles[i]); - return; +void generate_main_json_file(const AssetExtractConfig &config, const ExtractStats &stats) { + fs::path outFilename = GlobalSettings::get_decomp_path_to_vanilla_assets() / "assets.meta.json"; + WritableJsonFile jsonFile(outFilename); + + jsonFile.set_int("/@dkrat-version/release", DKRAT_VERSION_RELEASE); + jsonFile.set_int("/@dkrat-version/major", DKRAT_VERSION_MAJOR); + jsonFile.set_int("/@dkrat-version/minor", DKRAT_VERSION_MINOR); + jsonFile.set_string("/@dkr-version", GlobalSettings::get_dkr_version()); + + size_t numberOfSections = config.number_of_sections(); + + DebugHelper::info("numberOfSections = ", numberOfSections); + + for(size_t i = 0; i < numberOfSections; i++) { + std::string configSectionPtr = "/sections/" + std::to_string(i); + std::string sectionBuildId = config.get(configSectionPtr + "/build-id", ""); + std::string sectionType = config.get(configSectionPtr + "/default-type", "Binary"); + + jsonFile.set_string("/assets/order/" + std::to_string(i), sectionBuildId); + + std::string outSectionPtr = "/assets/sections/" + sectionBuildId; + jsonFile.set_string(outSectionPtr + "/type", sectionType); + if(sectionType == "Table") { + std::string forId = config.get(configSectionPtr + "/for", ""); + jsonFile.set_string(outSectionPtr + "/for", forId); + } else if (sectionType == "ObjectAnimationIdsTable") { + jsonFile.set_string(outSectionPtr + "/for", "ASSET_OBJECT_ANIMATIONS"); + bool isDeferred = config.get(configSectionPtr + "/defer", false); + jsonFile.set_bool(outSectionPtr + "/deferred", isDeferred); + } else if (sectionType == "Empty") { + // Do nothing. + } else { + std::string filename = sectionBuildId; + bool isDeferred = config.get(configSectionPtr + "/defer", false); + if(isDeferred) { + // Copy info from config to the main json. + std::string fromSection = config.get(configSectionPtr + "/defer-info/from-section", ""); + std::string idPostfix = config.get(configSectionPtr + "/defer-info/id-postfix", "_UNK"); + std::string outputPath = config.get(configSectionPtr + "/defer-info/output-path", "."); + jsonFile.set_bool(outSectionPtr + "/deferred", true); + jsonFile.set_string(outSectionPtr + "/defer-info/from-section", fromSection); + jsonFile.set_string(outSectionPtr + "/defer-info/id-postfix", idPostfix); + jsonFile.set_string(outSectionPtr + "/defer-info/output-path", outputPath); + } else { + StringHelper::make_lowercase(filename); + filename += ".meta.json"; + jsonFile.set_string(outSectionPtr + "/filename", filename); + generate_section_json_file(config, stats, i, GlobalSettings::get_decomp_path_to_vanilla_assets() / filename); + } } - delete _rom; } - _rom = nullptr; // Could not find a rom. + + jsonFile.save(); } -void DkrExtract::_extract() { - DebugHelper::DebugTimer timer; - uint32_t romOffset = 0; - DebugHelper::info_verbose("Getting code sections..."); - _get_code_extractions(romOffset); - DebugHelper::info_verbose("Getting asset sections..."); - _get_asset_extractions(romOffset); - DebugHelper::info_verbose("Creating main json file..."); - _generate_main_json_file(); - DebugHelper::info_verbose("Creating obj-behavior-to-entry json file..."); - _generate_obj_behavior_to_entry_json_file(); - DebugHelper::info_verbose("Took ", timer.elapsed(), " to initialize extract info."); +/*************************************************************************************************/ + +fs::path get_valid_baserom(const AssetExtractConfig &config) { + std::vector baseromFiles = FileHelper::get_files_from_directory(GlobalSettings::get_decomp_path("baseroms_subpath", "baseroms/")); + for(fs::path &filepath : baseromFiles) { + if(config.is_input_file_valid(filepath)) { + return filepath; + } + } - DebugHelper::DebugTimer timer2; + DebugHelper::error("No valid ROM file found for the DKR version \"", GlobalSettings::get_dkr_version(), "\""); + return ""; +} + +size_t figure_out_correct_config_entry_index(std::vector &fileEntryIndices, const AssetExtractConfig &config, std::string sectionPtr, size_t dkrVersionNumber, + std::vector foundIndices) { + std::string filesPtr = "/files"; + std::string sectionBuildId = config.get(sectionPtr + "/build-id", ""); + + while(true) { + bool redoLoop = false; + for(size_t i = 0; i < fileEntryIndices.size(); i++) { + std::string filePtr = filesPtr + "/" + std::to_string(fileEntryIndices[i]); + std::string fileDkrVersion = config.get(filePtr + "/version", "v77"); // Either v77 (default), v79, or v80 + size_t fileVersionNumber = VERSION_TO_NUMBER[fileDkrVersion]; + std::string filename = config.get(filePtr + "/filename", ""); + + bool erase = false; + + if(fileVersionNumber > dkrVersionNumber) { + // Don't use this file if it is from a future version of DKR. + erase = true; + } else if(DataHelper::vector_has(foundIndices, fileEntryIndices[i])) { + // Don't use this file if it has been used before. + erase = true; + } else { + std::string fileType = config.get(filePtr + "/type", "Binary"); + std::string sectionType = config.get(sectionPtr + "/default-type", "Binary"); + + if(fileType != sectionType) { + // Don't use the file if it doesn't match the section's type + erase = true; + } else if(fileType == "Texture") { + // This part is necessary, because TEX2D and TEX3D assets use the same "Texture" type. + std::string fileBuildId = config.get(filePtr + "/build-id", ""); + if(sectionBuildId == "ASSET_TEXTURES_2D" && StringHelper::has(fileBuildId, "TEX3D")) { + // Don't include TEX3D textures in the TEX2D section. + erase = true; + } else if(sectionBuildId == "ASSET_TEXTURES_3D" && StringHelper::has(fileBuildId, "TEX2D")) { + // Don't include TEX2D textures in the TEX3D section. + erase = true; + } + } + } + + if(erase) { + fileEntryIndices.erase(fileEntryIndices.begin() + i); + redoLoop = true; // Go through the array again just to be sure. + i--; + } + } + + if(!redoLoop) { + break; + } + } + + DebugHelper::assert_(fileEntryIndices.size() > 0, + "(figure_out_correct_config_entry_index) Uh, oh. Got rid of all the entries for ", sectionBuildId); + + return fileEntryIndices[0]; +} + +/*************************************************************************************************/ + +void AssetExtractor::extract_all() { + std::string dkrVersion = GlobalSettings::get_dkr_version(); + size_t dkrVersionNumber = VERSION_TO_NUMBER[dkrVersion]; + + // Load up the config file. (Done automatically in the constructor using GlobalSettings) + AssetExtractConfig config; + + // Setup stats so that extractions can get certain information. (Mainly for file-index to build-id conversions) + ExtractStats stats; + + // Get the appropriate rom, given the DKR version. + fs::path baseromPath = get_valid_baserom(config); + + // Load the data from the rom. + config.load_input_file(baseromPath); + + size_t numberOfSections = config.number_of_sections(); + + // Load c context with necessary enums and structs + CContext cContext; + fs::path includeFolder = GlobalSettings::get_decomp_path("include_subpath", "include/"); + CEnumsHelper::load_enums_from_file(cContext, includeFolder / "enums.h"); + CEnumsHelper::load_enums_from_file(cContext, includeFolder / "object_behaviors.h"); + CStructHelper::load_structs_from_file(cContext, includeFolder / "level_object_entries.h"); + + config.init_obj_beh_to_entry_map(cContext); + + const BytesView &assetsView = config.get_rom_assets_view(); + + AssetTable mainTable(assetsView, DkrAssetTableType::FixedTable); + + DebugHelper::assert_(mainTable.number_of_entries() == numberOfSections, + "(AssetExtractor::extract_all) The number of asset sections in the config does not match the rom!"); + + size_t mainTableBytesSize = mainTable.total_size(); + + std::vector sectionViews(numberOfSections); + + // First pass to get the views for all sections. + for(size_t i = 0; i < numberOfSections; i++) { + sectionViews[i] = assetsView.get_sub_view(mainTable.get_entry_offset(i) + mainTableBytesSize, mainTable.get_entry_size(i)); + } + + std::map> extractions; + + // Second pass to get the extractions. + for(size_t i = 0; i < numberOfSections; i++) { + std::string sectionPtr = "/sections/" + std::to_string(i); + std::string sectionType = config.get(sectionPtr + "/default-type", "Binary"); // Section is treated as raw binary unless you specify a type. + + if(sectionType == "Empty" || sectionType == "Table") { + continue; // ignore empty and table sections for now. + } + + std::string sectionBuildId = config.get(sectionPtr + "/build-id", ""); + std::string sectionFolder = config.get(sectionPtr + "/folder", ""); + bool sectionIsDeferred = config.get(sectionPtr + "/defer", false); + int groupNumber = config.get(sectionPtr + "/group", 0); // Defaults to group 0. Smaller group numbers get extracted first. + + DebugHelper::assert_(!sectionBuildId.empty(), + "(AssetExtractor::extract_all) Section ", i, " does NOT have a build id!"); + + // Check if this asset section has an associated table section. + std::optional tableIndex = config.get_section_table_index(sectionBuildId); + + if(!tableIndex.has_value()) { + // No table, so the section is a single extraction. + std::string sectionSha1 = DataHelper::make_sha1_hash_of_bytes(sectionViews[i]); + + std::vector fileIndices = config.get_file_indices_from_sha1(sectionSha1); + + DebugHelper::assert_(fileIndices.size() >= 1, + "(AssetExtractor::extract_all) Could not find a file for section ", sectionBuildId, ", sha1 = ", sectionSha1); + + std::string filePtr = "/files/" + std::to_string(fileIndices[0]); + std::string filename = config.get(filePtr + "/filename", ""); + std::string folder = config.get(filePtr + "/folder", ""); + std::string type = config.get(filePtr + "/type", ""); + + std::string localPath = filename + ".json"; + + if(!folder.empty()) { + localPath = folder + "/" + localPath; + } + + if(!sectionFolder.empty()) { + folder = sectionFolder + "/" + folder; + } + + if(type.empty()) { + type = sectionType; + } + + if(extractions.find(groupNumber) == extractions.end()) { + extractions[groupNumber] = std::vector(); + extractions[groupNumber].reserve(8192); // Arbitrary allocation amount, trying to prevent many reallocations. Size is about ~2.5 MB per group. + } + + if(sectionIsDeferred) { + DeferredExtractions::add_extraction(sectionBuildId, + ExtractInfo(type, sectionBuildId, filename, folder, sectionViews[i], config, sectionPtr, cContext, 0, stats)); + } else if(type != "NoExtract") { + extractions[groupNumber].emplace_back(type, sectionBuildId, filename, folder, + sectionViews[i], config, sectionPtr, cContext, 0, stats); + } + + fs::path outputJsonPath = (GlobalSettings::get_decomp_path_to_vanilla_assets() / folder) / (filename + ".json"); + + // Add info to stats + stats.add_info(sectionBuildId, { sectionBuildId, outputJsonPath, localPath }); + + continue; + } + + // Has a table, so multiple files need to be extracted. + std::string tableSectionPtr = "/sections/" + std::to_string(tableIndex.value()); + std::string tableBuildId = config.get(tableSectionPtr + "/build-id", ""); + //DebugHelper::info(sectionBuildId, " table is ", tableBuildId); + DkrAssetTableType tableType = AssetTable::table_type_from_section_type(sectionType); + AssetTable sectionTable(sectionViews[tableIndex.value()], tableType); + size_t numberOfEntriesInTable = sectionTable.number_of_entries(); + std::vector foundIndices; + + if(sectionBuildId == "ASSET_MENU_TEXT") { + stats.set_tag("menuTextCount", sectionViews[tableIndex.value()].get_s32_be(0)); + } + + for(size_t entryIndex = 0; entryIndex < numberOfEntriesInTable; entryIndex++) { + size_t entryOffset = sectionTable.get_entry_offset(entryIndex) & 0x7FFFFFFF; // GameText uses highest bit to determine if dialog or textbox. + size_t entrySize = sectionTable.get_entry_size(entryIndex); + + BytesView fileView = sectionViews[i].get_sub_view(entryOffset, entrySize); + std::string fileViewSha1 = DataHelper::make_sha1_hash_of_bytes(fileView); + + std::vector fileEntryIndices = config.get_file_indices_from_sha1(fileViewSha1); + + DebugHelper::assert_(fileEntryIndices.size() > 0, + "(AssetExtractor::extract_all) Could not find a file for entry ", entryIndex, " for section ", sectionBuildId, "; The hash was ", fileViewSha1); + + size_t fileEntryIndexValue; + + if(fileEntryIndices.size() == 1) { + fileEntryIndexValue = fileEntryIndices[0]; + } else { + //DebugHelper::info("Finding file entry for index ", entryIndex, " for section ", sectionBuildId, "; The hash was ", fileViewSha1); + // fileEntryIndices.size() is greater than 1, gotta pick the correct file. + fileEntryIndexValue = figure_out_correct_config_entry_index(fileEntryIndices, config, sectionPtr, dkrVersionNumber, foundIndices); + } + + foundIndices.emplace_back(fileEntryIndexValue); + + std::string filePtr = "/files/" + std::to_string(fileEntryIndexValue); + std::string filename = config.get(filePtr + "/filename", ""); + std::string fileBuildId = config.get(filePtr + "/build-id", ""); + std::string folder = config.get(filePtr + "/folder", ""); + std::string type = config.get(filePtr + "/type", ""); + + std::string localPath = filename + ".json"; + + if(!folder.empty()) { + localPath = folder + "/" + localPath; + } + + if(!sectionFolder.empty()) { + folder = sectionFolder + "/" + folder; + } + + if(sectionIsDeferred) { + DeferredExtractions::add_extraction(sectionBuildId, + ExtractInfo(type, fileBuildId, filename, folder, fileView, config, sectionPtr, cContext, entryIndex, stats)); + } else { + extractions[groupNumber].emplace_back(type, fileBuildId, filename, folder, + fileView, config, sectionPtr, cContext, entryIndex, stats); + if(type == "GameText") { + bool isDialog = sectionTable.get_entry_offset(entryIndex) & 0x80000000; + extractions[groupNumber].back().set_tag("isDialog", std::any(isDialog)); + } + + } + + fs::path outputJsonPath = (GlobalSettings::get_decomp_path_to_vanilla_assets() / folder) / (filename + ".json"); + + // Add info to stats + stats.add_info(sectionBuildId, { fileBuildId, outputJsonPath, localPath }); + } + } + + generate_main_json_file(config, stats); + + size_t threadCount = GlobalSettings::get_max_thread_count(); + bool multithreaded = threadCount != 1; + DebugHelper::info_verbose("Using ", threadCount, " thread", (multithreaded ? "s" : "")); + + // Run the extraction! // extractions should be sorted by the group number. for (auto &pair : extractions) { std::vector &extracts = pair.second; bool errorOccured = false; - std::exception_ptr ex; - { - ThreadPool pool(_settings.threadCount); + if(multithreaded) { + // Multi-threaded version (better for performance) + std::exception_ptr ex; + { + ThreadPool pool(threadCount); + for(ExtractInfo &info : extracts) { + std::string type = info.get_type(); + // Check to make sure the builderMap has the given type. + if(EXTRACTOR_MAP.find(type) == EXTRACTOR_MAP.end()) { + DebugHelper::warn("The input type \"", type, "\" is currently not implemented. Extracting as a raw binary file instead."); + EXTRACTOR_MAP["Binary"]((ExtractInfo &)info); + continue; + } + pool.enqueue([type, &info = info, &errorOccured = errorOccured, &ex = ex] { + if(errorOccured) { + return; + } + // Call the class constructor of a type. + try { + EXTRACTOR_MAP[type]((ExtractInfo &)info); + } catch (...) { + errorOccured = true; + ex = std::current_exception(); + } + }); + if(errorOccured) { + break; + } + } + } + // ThreadPool's destructor will join the threads. + if(errorOccured) { + std::rethrow_exception(ex); + } + } else { + // Single-threaded version (better for debugging) for(ExtractInfo &info : extracts) { std::string type = info.get_type(); // Check to make sure the builderMap has the given type. - if(extractorMap.find(type) == extractorMap.end()) { - // For now this is a warning, but maybe make it an error instead? - DebugHelper::warn("The input type \"", type, "\" is currently not implemented."); + if(EXTRACTOR_MAP.find(type) == EXTRACTOR_MAP.end()) { + DebugHelper::warn("The input type \"", type, "\" is currently not implemented. Extracting as a raw binary file instead."); + EXTRACTOR_MAP["Binary"]((ExtractInfo &)info); continue; } - pool.enqueue([this, type, &info = info, &errorOccured = errorOccured, &ex = ex] { - if(errorOccured) { - return; - } - // Call the class constructor of a type. - try { - extractorMap[type](_settings, (ExtractInfo &)info); - } catch (...) { - errorOccured = true; - ex = std::current_exception(); - } - }); - if(errorOccured) { - break; - } + EXTRACTOR_MAP[type]((ExtractInfo &)info); } } - if(errorOccured) { - std::rethrow_exception(ex); - } - - // ThreadPool's destructor will join the threads. - } - DebugHelper::info_verbose("Took ", timer.elapsed(), " to extract all assets."); -} - -// Group defaults to 0 if not specified. -void DkrExtract::_add_new_extraction(ExtractInfo &newExtract, int group) { - // Make sure the group exists in the map - if(extractions.find(group) == extractions.end()) { - extractions[group] = std::vector(); // New group - } - extractions[group].push_back(newExtract); -} - -void DkrExtract::_get_code_extractions(uint32_t &romOffset) { - for(DkrExtractCodeSection &codeSection : _config->codeSections) { - for(DkrExtractCodeSectionFile &codeFile : codeSection.files) { - if(codeSection.type == "NoExtract") { - DebugHelper::info_verbose(DebugHelper::to_hex(romOffset), ",", codeSection.type, ",\"", codeFile.filename, "\",", DebugHelper::to_hex(codeFile.length)); - romOffset += codeFile.length; - continue; - } - ExtractInfo newExtract(codeSection.type, codeFile.filename, codeSection.folder, _rom, _config, &_c_context, romOffset, codeFile.length, 0); - _add_new_extraction(newExtract); - DebugHelper::info_verbose(DebugHelper::to_hex(romOffset), ",", codeSection.type, ",\"", codeFile.filename, "\",\"", codeSection.folder, "\",", DebugHelper::to_hex(codeFile.length)); - romOffset += codeFile.length; - } } } -// Note: sectionFile could be null. -void DkrExtract::_get_asset_section_file_info(DkrExtractAssetSection *assetSection, DkrExtractAssetSectionFile *sectionFile, size_t fileNum, uint32_t romOffset, size_t length) { - std::string filename = ""; - std::string buildId = ""; - std::string folder = ""; - if(sectionFile != nullptr) { - filename = sectionFile->filename; - buildId = sectionFile->buildId; - folder = sectionFile->folder; - } - if(buildId.empty()) { - buildId = assetSection->buildId + "_" + std::to_string(fileNum); - } - if(filename.empty()) { - filename = buildId; - StringHelper::make_lowercase(filename); - } - if(folder.empty()) { - folder = assetSection->filesDefaultFolder; - } - - ExtractInfo newExtract(assetSection->type, filename, folder, _rom, _config, &_c_context, romOffset, length, fileNum, assetSection); - - if(assetSection->type == "Texture") { - newExtract.set_tag("flipTex", (sectionFile != nullptr) ? sectionFile->specific.texture.flipTex : assetSection->specific.textures.flipTexturesByDefault); - } else if(assetSection->type == "MenuText") { - newExtract.set_tag("language", sectionFile->specific.menuText.language); - } else if(assetSection->type == "Miscellaneous") { - // miscType set to "Binary" if the file was not specified. - newExtract.set_tag("miscType", (sectionFile != nullptr) ? sectionFile->specific.misc.miscType : "Binary"); - } - - if(assetSection->isDeferred) { - // This will be extracted as a part of another file. - DeferredExtractions::get().add_extraction(assetSection->buildId, newExtract); - return; - } - - _add_new_extraction(newExtract, assetSection->group); -} +/*************************************************************************************************/ -void DkrExtract::_get_asset_files_from_table(DkrExtractAssetSection *assetSection, int sectionOffset, int tableSectionOffset) { - DebugHelper::info_verbose("Section offset = ", DebugHelper::to_hex(sectionOffset)); - - // Get the table type from a section type name. - DkrAssetTableType tableType = AssetTable::table_type_from_section_type(assetSection->type); - - AssetTable assetSectionTable(_rom, tableSectionOffset, tableType); - - if(tableType == DkrAssetTableType::MenuTextTable) { - // First entry determines the number of text entries for each language. - assetSection->specific.menuText.numberOfTextEntries = _rom->get_s32(tableSectionOffset); - } - - size_t numFilesInSection = assetSectionTable.size(); - - for(size_t fileIndex = 0; fileIndex < numFilesInSection; fileIndex++) { - uint32_t offset = sectionOffset + assetSectionTable.get_entry_offset(fileIndex); - uint32_t fileLength = assetSectionTable.get_entry_size(fileIndex); - _get_asset_section_file_info(assetSection, assetSection->get_asset_section_file(fileIndex), fileIndex, offset, fileLength); - } - - _generate_section_json_file(assetSection, &assetSectionTable); -} - -void DkrExtract::_get_single_asset_info(DkrExtractAssetSection *assetSection, uint32_t romOffset, size_t length) { - DkrExtractAssetSectionFile *sectionFile = assetSection->get_single_file(); - - std::string filename = ""; - std::string buildId = ""; - std::string folder = ""; - if(sectionFile != nullptr) { - filename = sectionFile->filename; - buildId = sectionFile->buildId; - folder = sectionFile->folder; - } - if(buildId.empty()) { - buildId = assetSection->buildId; - } - if(filename.empty()) { - filename = buildId; - StringHelper::make_lowercase(filename); - } - if(folder.empty()) { - folder = assetSection->filesDefaultFolder; - } - - ExtractInfo newExtract(assetSection->type, filename, folder, _rom, _config, &_c_context, romOffset, length, 0, assetSection); - - if(assetSection->isDeferred) { - // This will be extracted as a part of another file. - DeferredExtractions::get().add_extraction(assetSection->buildId, newExtract); - return; - } - - _add_new_extraction(newExtract, assetSection->group); -} - -void DkrExtract::_get_asset_extractions(uint32_t &romOffset) { - AssetTable mainAssetsTable(_rom, romOffset, DkrAssetTableType::FixedTable); - - size_t numAssetSections = mainAssetsTable.size(); - - // Assets start past the main table. - romOffset += (numAssetSections + 2) * 4; - - DebugHelper::assert_(_config->assetSections.size() == numAssetSections, - "(DkrExtract::_get_asset_extractions) Number of assets in config does not match the ROM! Num assets in config: ", - _config->assetSections.size(), ", in ROM: ", numAssetSections); - - for(size_t sectionIndex = 0; sectionIndex < numAssetSections; sectionIndex++) { - DkrExtractAssetSection *assetSection = &_config->assetSections[sectionIndex]; - - if(assetSection->type == "Empty") { - // Don't bother extracting empty sections. - continue; - } - - int sectionOffset = romOffset + mainAssetsTable.get_entry_offset(sectionIndex); - - if(assetSection->table != -1) { - int tableSectionOffset = romOffset + mainAssetsTable.get_entry_offset(assetSection->table); - _get_asset_files_from_table(assetSection, sectionOffset, tableSectionOffset); - continue; - } - - if(assetSection->type == "Table") { - continue; - } - - size_t sectionLength = mainAssetsTable.get_entry_offset(sectionIndex + 1) - mainAssetsTable.get_entry_offset(sectionIndex); - _get_single_asset_info(assetSection, sectionOffset, sectionLength); - _generate_section_json_file(assetSection); - } -} - -// sectionTable is nullptr when the asset section doesn't have a table (Is a single file) -void DkrExtract::_generate_section_json_file(DkrExtractAssetSection *assetSection, AssetTable *sectionTable) { - if(assetSection->isDeferred) { - return; - } - - std::string buildIdAsFilename = assetSection->buildId; - StringHelper::make_lowercase(buildIdAsFilename); - fs::path outFilename = _settings.pathToAssets / (buildIdAsFilename + ".meta.json"); - - WritableJsonFile jsonFile(outFilename); - - jsonFile.set_string("/folder", assetSection->folder); - jsonFile.set_string("/type", assetSection->type); - - if(assetSection->type == "MenuText") { - std::string orderPtr = "/menu-text-build-ids"; - size_t numIds = assetSection->specific.menuText.menuTextBuildIds.size(); - for(size_t i = 0; i < numIds; i++) { - jsonFile.set_string(orderPtr + "/" + std::to_string(i), assetSection->specific.menuText.menuTextBuildIds[i]); - } - } - - if(sectionTable == nullptr) { - // This section does not have a table. - DkrExtractAssetSectionFile *sectionFile = assetSection->get_single_file(); - if(sectionFile == nullptr) { - jsonFile.set_string("/filename", buildIdAsFilename + ".json"); - } else { - jsonFile.set_string("/filename", sectionFile->filename + ".json"); - } - jsonFile.save(); - return; - } - - // This section has a table. - jsonFile.set_string("/table", _config->get_build_id_of_section(assetSection->table)); - - std::string orderPtr = "/files/order/"; - std::string sectionsPtr = "/files/sections/"; - - for(size_t i = 0; i < sectionTable->size(); i++) { - DkrExtractAssetSectionFile *sectionFile = assetSection->get_asset_section_file(i); - std::string fileBuildId; - fs::path fileFilepath; - if(sectionFile == nullptr) { - fileBuildId = assetSection->buildId + "_" + std::to_string(i); - std::string temp = fileBuildId + ".json"; - StringHelper::make_lowercase(temp); - fileFilepath = temp; - if(!assetSection->filesDefaultFolder.empty()) { - fileFilepath = assetSection->filesDefaultFolder / fileFilepath; - } - } else { - fileBuildId = sectionFile->buildId; - fileFilepath = sectionFile->filename + ".json"; - if(!sectionFile->folder.empty()) { - fileFilepath = sectionFile->folder / fileFilepath; - } else if(!assetSection->filesDefaultFolder.empty()) { - fileFilepath = assetSection->filesDefaultFolder / fileFilepath; - } - } - - jsonFile.set_string(orderPtr + std::to_string(i), fileBuildId); - jsonFile.set_string(sectionsPtr + fileBuildId + "/filename", fileFilepath); - } - - jsonFile.save(); -} - -// Creates the "assets.meta.json" file -void DkrExtract::_generate_main_json_file() { - fs::path outFilename = _settings.pathToAssets / "assets.meta.json"; - WritableJsonFile jsonFile(outFilename); - - jsonFile.set_int("/@revision", DKRAT_REVISION_MAJOR); - jsonFile.set_int("/@revision-minor", DKRAT_REVISION_MINOR); - jsonFile.set_string("/@version", _settings.dkrVersion); - - for(size_t i = 0; i < _config->assetSections.size(); i++) { - DkrExtractAssetSection *assetSection = &_config->assetSections[i]; - - jsonFile.set_string("/assets/order/" + std::to_string(i), assetSection->buildId); - std::string sectionStr = "/assets/sections/" + assetSection->buildId; - - if(assetSection->type == "Table") { - std::string forId = _config->get_build_id_of_section_from_table_id(assetSection->buildId); - jsonFile.set_string(sectionStr + "/for", forId); - } else if (assetSection->type == "Empty") { - // Do nothing. - } else { - std::string filename = assetSection->buildId; - if(assetSection->isDeferred) { - jsonFile.set_bool(sectionStr + "/deferred", true); - jsonFile.set_string(sectionStr + "/defer-info/from-section", assetSection->deferInfo.fromSection); - jsonFile.set_string(sectionStr + "/defer-info/id-postfix", assetSection->deferInfo.idPostfix); - jsonFile.set_string(sectionStr + "/defer-info/output-path", assetSection->deferInfo.outputPath); - } else { - StringHelper::make_lowercase(filename); - filename += ".meta.json"; - jsonFile.set_string(sectionStr + "/filename", filename); - } - } - jsonFile.set_string(sectionStr + "/type", assetSection->type); - } - - jsonFile.save(); -} - -void DkrExtract::_generate_obj_behavior_to_entry_json_file() { - fs::path outFilename = _settings.pathToAssets / "objects/obj_beh_to_entry.meta.json"; - WritableJsonFile jsonFile(outFilename); - - CEnum *objBehaviors = _c_context.get_enum("ObjectBehaviours"); - - std::vector defaultObjEntriesOrder; - _config->get_default_object_entries_order_array(defaultObjEntriesOrder); - - for(int i = 0; i < 128; i++) { - std::string symbol; - DebugHelper::assert_(objBehaviors->get_symbol_of_value(i, symbol), - "(DkrExtract::_generate_obj_behavior_to_entry_json_file) Could not get a symbol for the value ", i, " in the ObjectBehaviors enum."); - - - CStruct *entryStruct = _c_context.get_struct(defaultObjEntriesOrder[i]); - DebugHelper::assert_(entryStruct != nullptr, - "(DkrExtract::_generate_obj_behavior_to_entry_json_file) Could not find struct \"", defaultObjEntriesOrder[i], "\""); - - jsonFile.set_string("/" + symbol, defaultObjEntriesOrder[i]); - } - - jsonFile.save(); -} - -// Preload structs & enums into context. -void DkrExtract::_preload_c_context() { - fs::path includeFolder = _settings.pathToRepo / "include/"; - - // Load all structs from these files. - fs::path structPaths[] = { - includeFolder / "level_object_entries.h", - }; - - for(fs::path &structPath : structPaths) { - CStructHelper::load_structs_from_file(&_c_context, structPath); - } - - // Load all enums from these files. - fs::path enumPaths[] = { - includeFolder / "enums.h", - includeFolder / "object_behaviors.h", - }; - - for(fs::path &enumPath : enumPaths) { - CEnumsHelper::load_enums_from_file(&_c_context, enumPath); - } - +void AssetExtractor::extract(const fs::path &srcPath, const fs::path &dstPath) { + DebugHelper::error("TODO: Single file extract is currently not implemented."); } diff --git a/tools/dkr_assets_tool_src/extract/extractor.h b/tools/dkr_assets_tool_src/extract/extractor.h index 32ccec1f..40a47cba 100644 --- a/tools/dkr_assets_tool_src/extract/extractor.h +++ b/tools/dkr_assets_tool_src/extract/extractor.h @@ -1,61 +1,10 @@ #pragma once -#include -#include -#include - -#include "misc/settings.hpp" - #include "helpers/fileHelper.h" -#include "helpers/debugHelper.h" -#include "config.h" -#include "rom.h" -#include "extractInfo.h" -#include "assetTable.h" - -#include "helpers/c/cContext.h" - - -class DkrExtract { -public: - DkrExtract(DkrAssetsSettings &settings); - ~DkrExtract(); - -private: - DkrExtractConfig *_config = nullptr; - DkrExtractROM *_rom = nullptr; - DkrAssetsSettings &_settings; - - // The int is the group number, need to extract different sections first before others. - // (Example being extracting the LevelObjectTranslationTable before any LevelObjectMaps) - // This NEEDS to be a std::map, not a std::unordered_map. - std::map> extractions; - - void _find_config(); - void _find_rom(const std::string &directory, bool recursive); - - void _extract(); - - void _add_new_extraction(ExtractInfo &info, int group=0); - - void _get_code_extractions(uint32_t &romOffset); - void _get_asset_extractions(uint32_t &romOffset); - - void _get_asset_files_from_table(DkrExtractAssetSection *assetSection, int sectionOffset, int tableSectionOffset); - - void _get_single_asset_info(DkrExtractAssetSection *assetSection, uint32_t romOffset, size_t length); - - void _get_asset_section_file_info(DkrExtractAssetSection *assetSection, DkrExtractAssetSectionFile *sectionFile, - size_t fileNum, uint32_t romOffset, size_t length); - - void _generate_section_json_file(DkrExtractAssetSection *assetSection, AssetTable *sectionTable = nullptr); - - void _generate_main_json_file(); - - void _generate_obj_behavior_to_entry_json_file(); - - void _preload_c_context(); - - CContext _c_context; -}; +namespace DkrAssetsTool { +namespace AssetExtractor { + void extract_all(); // extract ALL assets + void extract(const fs::path &srcPath, const fs::path &dstPath); // extract single asset +} +} diff --git a/tools/dkr_assets_tool_src/extract/rom.cpp b/tools/dkr_assets_tool_src/extract/rom.cpp index a6f0295d..f4364432 100644 --- a/tools/dkr_assets_tool_src/extract/rom.cpp +++ b/tools/dkr_assets_tool_src/extract/rom.cpp @@ -3,6 +3,8 @@ #include "libs/md5.hpp" #include "rom.h" +using namespace DkrAssetsTool; + DkrExtractROM::DkrExtractROM(fs::path filepath) { _filepath = filepath; _bytes = FileHelper::read_binary_file(filepath); diff --git a/tools/dkr_assets_tool_src/extract/rom.h b/tools/dkr_assets_tool_src/extract/rom.h index 14ec24b8..de6ceea7 100644 --- a/tools/dkr_assets_tool_src/extract/rom.h +++ b/tools/dkr_assets_tool_src/extract/rom.h @@ -6,6 +6,8 @@ #include "helpers/debugHelper.h" #include "helpers/imageHelper.h" +namespace DkrAssetsTool { + class DkrExtractROM { public: @@ -40,3 +42,4 @@ private: void _get_fixed_table(uint32_t offset, std::vector &outTable); void _get_variable_table(uint32_t offset, std::vector &outTable); }; +} diff --git a/tools/dkr_assets_tool_src/extract/stats.cpp b/tools/dkr_assets_tool_src/extract/stats.cpp new file mode 100644 index 00000000..2fe8b389 --- /dev/null +++ b/tools/dkr_assets_tool_src/extract/stats.cpp @@ -0,0 +1,131 @@ +#include "stats.h" + +#include + +#include "helpers/debugHelper.h" +#include "helpers/dataHelper.h" + +using namespace DkrAssetsTool; + +void ExtractStats::add_info(std::string sectionBuildId, ExtractStatInfo newInfo) { + if(_sectionInfos.find(sectionBuildId) == _sectionInfos.end()) { + _sectionInfos[sectionBuildId] = {}; // new empty vector. + if(sectionBuildId == "ASSET_TEXTURES_2D") { + _sectionInfos[sectionBuildId].reserve(1000); + } + else if(sectionBuildId == "ASSET_TEXTURES_3D") { + _sectionInfos[sectionBuildId].reserve(1500); + } + } + + _sectionInfos[sectionBuildId].emplace_back(newInfo); +} + +void ExtractStats::replace_info(std::string sectionBuildId, std::string buildId, fs::path newOutFilepath) { + DebugHelper::assert_(_sectionInfos.find(sectionBuildId) != _sectionInfos.end(), + "(ExtractStats::replace_info) Could not find section id ", sectionBuildId); + + auto it = std::find_if(_sectionInfos[sectionBuildId].begin(), _sectionInfos[sectionBuildId].end(), + [&buildId](const ExtractStatInfo& statInfo) { + return statInfo.buildId == buildId; + } + ); + + DebugHelper::assert_(it != _sectionInfos[sectionBuildId].end(), + "(ExtractStats::replace_info) Could not find build id ", buildId, " in section ", sectionBuildId); + + // New info to replace + it->outFilepath = newOutFilepath; +} + +std::optional ExtractStats::try_get_file_index_of_build_id(std::string sectionBuildId, std::string fileBuildId) const { + if(_sectionInfos.find(sectionBuildId) == _sectionInfos.end()) { + return std::nullopt; + } + + for(size_t i = 0; i < _sectionInfos.at(sectionBuildId).size(); i++) { + if(_sectionInfos.at(sectionBuildId).at(i).buildId == fileBuildId) { + return i; + } + } + + return std::nullopt; +} + +std::optional ExtractStats::try_get_build_id_from_file_index(std::string sectionBuildId, size_t fileIndex) const { + if(_sectionInfos.find(sectionBuildId) == _sectionInfos.end()) { + return std::nullopt; + } + if(fileIndex >= _sectionInfos.at(sectionBuildId).size()) { + return std::nullopt; + } + return _sectionInfos.at(sectionBuildId).at(fileIndex).buildId; +} + +std::optional ExtractStats::try_get_output_filepath_from_file_index(std::string sectionBuildId, size_t fileIndex) const { + if(_sectionInfos.find(sectionBuildId) == _sectionInfos.end()) { + return std::nullopt; + } + if(fileIndex >= _sectionInfos.at(sectionBuildId).size()) { + return std::nullopt; + } + return _sectionInfos.at(sectionBuildId).at(fileIndex).outFilepath; +} + +std::optional>> ExtractStats::get_section_info(std::string sectionBuildId) const { + if(_sectionInfos.find(sectionBuildId) == _sectionInfos.end()) { + return std::nullopt; + } + return _sectionInfos.at(sectionBuildId); +} + +size_t ExtractStats::get_file_index_of_build_id(std::string section, std::string fileBuildId) const { + std::optional tryGetFileIndex = try_get_file_index_of_build_id(section, fileBuildId); + + DebugHelper::assert_(tryGetFileIndex.has_value(), + "(ExtractStats::get_file_index_of_build_id) Could not get the index from section \"", section, "\" with build-id ", fileBuildId); + + return tryGetFileIndex.value(); +} + +std::string ExtractStats::get_build_id_from_file_index(std::string section, size_t fileIndex) const { + std::optional tryGetBuildId = try_get_build_id_from_file_index(section, fileIndex); + + DebugHelper::assert_(tryGetBuildId.has_value(), + "(ExtractStats::get_build_id_from_file_index) Could not get a build id from section \"", section, "\" at index ", fileIndex); + + return tryGetBuildId.value(); +} + +fs::path ExtractStats::get_output_filepath_from_file_index(std::string section, size_t fileIndex) const { + std::optional tryGetOutPath = try_get_output_filepath_from_file_index(section, fileIndex); + + DebugHelper::assert_(tryGetOutPath.has_value(), + "(ExtractStats::get_build_id_from_file_index) Could not get a output path from section \"", section, "\" at index ", fileIndex); + + return tryGetOutPath.value(); +} + +const JsonFile &ExtractStats::get_json(std::string section, size_t fileIndex) const { + fs::path jsonPath = get_output_filepath_from_file_index(section, fileIndex); + auto tryGetJson = JsonHelper::get_file(jsonPath); + + DebugHelper::assert_(tryGetJson.has_value(), + "(ExtractStats::get_json) Could not get json file ", jsonPath); + + return tryGetJson.value(); +} + +const JsonFile &ExtractStats::get_json(std::string section, std::string fileBuildId) const { + return get_json(section, get_file_index_of_build_id(section, fileBuildId)); +} + +void ExtractStats::print_section_counts() const { + for (auto section : _sectionInfos) { + DebugHelper::info(section.first, ": ", section.second.size()); + } +} + +void ExtractStats::set_tag(const std::string &key, const std::any value) { + _tags[key] = value; +} diff --git a/tools/dkr_assets_tool_src/extract/stats.h b/tools/dkr_assets_tool_src/extract/stats.h new file mode 100644 index 00000000..80f50e7c --- /dev/null +++ b/tools/dkr_assets_tool_src/extract/stats.h @@ -0,0 +1,64 @@ +#pragma once + +#include +#include +#include +#include +#include + +#include "helpers/fileHelper.h" +#include "helpers/jsonHelper.h" + +namespace DkrAssetsTool { + +typedef struct ExtractStatInfo { + std::string buildId; + fs::path outFilepath; + fs::path localPath; +} ExtractStatInfo; + +// TODO: This needs a better name. +class ExtractStats { +public: + void add_info(std::string sectionBuildId, ExtractStatInfo newInfo); + + void replace_info(std::string sectionBuildId, std::string buildId, fs::path newOutFilepath); + + // Returns std::nullopt if not in the map + std::optional try_get_file_index_of_build_id(std::string sectionBuildId, std::string fileBuildId) const; + std::optional try_get_build_id_from_file_index(std::string sectionBuildId, size_t fileIndex) const; + std::optional try_get_output_filepath_from_file_index(std::string sectionBuildId, size_t fileIndex) const; + + // Returns std::nullopt if sectionBuildId is not in the map + std::optional>> get_section_info(std::string sectionBuildId) const; + + // These will throw an error if not in the map + size_t get_file_index_of_build_id(std::string sectionBuildId, std::string fileBuildId) const; + std::string get_build_id_from_file_index(std::string sectionBuildId, size_t fileIndex=0) const; + fs::path get_output_filepath_from_file_index(std::string sectionBuildId, size_t fileIndex=0) const; + const JsonFile &get_json(std::string sectionBuildId, size_t fileIndex=0) const; + const JsonFile &get_json(std::string sectionBuildId, std::string fileBuildId) const; + + void print_section_counts() const; + + // Tags are for setting/getting generic info between different types. + void set_tag(const std::string &key, const std::any elem); + + template + T get_tag(const std::string &key, T defaultValue) const { + if(_tags.find(key) == _tags.end()) { + return defaultValue; + } + try { + return std::any_cast(_tags.at(key)); + } catch(std::bad_any_cast &err) { + return defaultValue; + } + } + +private: + std::unordered_map> _sectionInfos; + std::unordered_map _tags; +}; + +} \ No newline at end of file diff --git a/tools/dkr_assets_tool_src/fileTypes/batch.hpp b/tools/dkr_assets_tool_src/fileTypes/batch.hpp new file mode 100644 index 00000000..f94ae402 --- /dev/null +++ b/tools/dkr_assets_tool_src/fileTypes/batch.hpp @@ -0,0 +1,70 @@ +#pragma once + +#include "types.hpp" + +#include +#include +#include + +const std::vector RENDER_FLAGS = { + "FLAG_ANTI_ALIASING", + "FLAG_Z_COMPARE", + "FLAG_SEMI_TRANSPARENT", + "FLAG_FOG_ACTIVE", + "FLAG_CUTOUT", + "FLAG_COLOUR_INDEX", + "FLAG_CLAMP_X", + "FLAG_CLAMP_Y", + "FLAG_Z_UPDATE", + "FLAG_PRESERVE_COVERAGE", + "FLAG_LINE_SWAP", + "FLAG_DECAL", + "FLAG_12", + "FLAG_WATER", + "FLAG_FORCE_NO_SHADOWS", + "FLAG_ENVMAP", + "FLAG_TEXTURE_ANIM", + "FLAG_17", + "FLAG_PULSATING_LIGHTS", + "FLAG_19", + "FLAG_20", + "FLAG_21", + "FLAG_22", + "FLAG_23", + "FLAG_24", + "FLAG_25", + "FLAG_26", + "FLAG_VTX_ALPHA", + "FLAG_28", + "FLAG_29", + "FLAG_30", + "FLAG_31" +}; + + +/* Size: 12 bytes */ +struct DkrBatch { + uint8_t textureIndex; // 0xFF = No texture + int8_t unk1; // Local vertex count. Is zero if flag 0x400000 is set, or flags == 0x100. + be_int16_t verticesOffset; + be_int16_t trianglesOffset; + uint8_t lightSource; // 0xFF = vertex colors, otherwise use dynamic lighting normals (Objects only) + uint8_t unk7; // Texture offset? Always zero in rom? + be_uint32_t flags; // render flags + + std::string to_string() { + std::stringstream ss; + + ss << std::hex; + ss << "{ tex:" << (int)textureIndex; + ss << ", unk1: " << (int)unk1; + ss << ", verts: " << (int)verticesOffset; + ss << ", tris: " << (int)trianglesOffset; + ss << ", light: " << ((lightSource == 0xFF) ? "vertex colors" : "normals"); + ss << ", unk7: " << (int)unk7; + ss << ", flags: " << flags; + ss << " }"; + + return ss.str(); + } +}; diff --git a/tools/dkr_assets_tool_src/fileTypes/jpFonts.hpp b/tools/dkr_assets_tool_src/fileTypes/jpFonts.hpp new file mode 100644 index 00000000..5a91a3d1 --- /dev/null +++ b/tools/dkr_assets_tool_src/fileTypes/jpFonts.hpp @@ -0,0 +1,47 @@ +#pragma once + +#include + +#include "types.hpp" + +// 0x10 bytes +struct BetaJpFontHeader { + uint8_t unk0; // 0x06 + uint8_t x; // 0x0C + uint8_t y; // 0x0C + uint8_t charWidth; // 0x0C + uint8_t height; // 0x0C + uint8_t unk5; // 0x0C + be_uint16_t imgWidth; // 0x00C0 (192) + be_uint16_t unk8; // 0x000C + be_uint16_t unkA; // 0x0480 + be_uint32_t unkC; // 0x00000000 +}; + +// 0x10 bytes +struct JpFontHeader { + uint8_t unk0; + uint8_t cellWidth; + uint8_t cellHeight; + uint8_t charWidth; + uint8_t height; + uint8_t unk5; + uint8_t unk6; + uint8_t unk7; + be_uint32_t offset; // Offset in the file + be_uint32_t bytesPerCharacter; // Number of bytes per character for this font. +}; + +// 0x10 bytes for the header, followed by image data. +struct JpFontChar { + be_int32_t offsetToFirstImg; // Always 0x10 + be_int32_t offsetToSecondImg; // Offset to second image. (-1 if no second image) + uint8_t firstImageFormat; // For decoding use `TEXTURE_FORMAT_INT_TO_STRING` in fileTypes/texture.hpp + uint8_t secondImageFormat; + uint8_t left; + uint8_t top; + uint8_t right; + uint8_t bottom; + uint8_t spacing; + uint8_t pad; +}; diff --git a/tools/dkr_assets_tool_src/fileTypes/objectModel.hpp b/tools/dkr_assets_tool_src/fileTypes/objectModel.hpp new file mode 100644 index 00000000..4fc146e4 --- /dev/null +++ b/tools/dkr_assets_tool_src/fileTypes/objectModel.hpp @@ -0,0 +1,66 @@ +#pragma once + +#include "types.hpp" + +typedef struct ObjectModelCollisionSphere { + be_int16_t vertexIndex; // Position of the sphere (stored in vertices) + be_int16_t radiusScale; // Radius = ((radiusScale / 64) * objectHeaderScale) * 50.0 +} ObjectModelCollisionSphere; + +typedef struct ObjectModel { + /* 0x00 */ be_int32_t textures; // TextureInfo offset + /* 0x04 */ be_int32_t vertices; // Vertices offset + /* 0x08 */ be_int32_t triangles; // Triangles offset + /* 0x0C */ be_int32_t reservedC; // Reserved for in-game only. + /* 0x10 */ be_int32_t reserved10; // Reserved for in-game only. + /* 0x14 */ be_int32_t attachPoints; // (Vehicle parts, Egg) Indices positions (stored in vertices). + /* 0x18 */ be_int16_t numberOfAttachPoints; + /* 0x1A */ be_int16_t unk1A; + /* 0x1C */ be_int32_t collisionSpheres; // Used in func_80016748. Data is a pair of s16 values. + /* 0x20 */ be_int16_t collisionSpheresSize; // Should be an even number. + /* 0x22 */ be_int16_t numberOfTextures; + /* 0x24 */ be_int16_t numberOfVertices; + /* 0x26 */ be_int16_t numberOfTriangles; + /* 0x28 */ be_int16_t numberOfBatches; + /* 0x2A */ uint8_t unk2A; + /* 0x2B */ uint8_t unk2B; + /* 0x2C */ be_int32_t fileSize; // Size of the model file (including the header) + /* 0x30 */ be_int16_t reservedReferences; // Reserved for in-game only. + /* 0x32 */ be_int16_t reserved32; // Reserved for in-game only. + /* 0x34 */ uint8_t unk34; + /* 0x34 */ uint8_t unk35; + /* 0x34 */ uint8_t unk36; + /* 0x34 */ uint8_t unk37; + /* 0x38 */ be_int32_t batches; + /* 0x3C */ float unk3C; + /* 0x40 */ be_int32_t reserved40; // Reserved for in-game only. + /* 0x44 */ be_int32_t reservedAnimations; // Reserved for in-game only. + /* 0x48 */ be_int16_t reservedNumberOfAnimations; // Reserved for in-game only. + /* 0x4A */ be_int16_t numberOfAnimatedVertices; // Number of animated vertices + /* 0x4C */ be_int32_t animatedVertexIndices; // Animated vertices list. + /* 0x50 */ be_int16_t unk50; // Update rate maybe? Only checked if greater than 0. + /* 0x52 */ be_int16_t reserved52; // Reserved for in-game only. + /* 0x54 */ be_int32_t unused54; // Not used? +} ObjectModel; + +// First keyframe uses s16 values to offset vertices. +typedef struct ObjectModelAnimationKeyframeVertexS16 { + be_int16_t offsetX; + be_int16_t offsetY; + be_int16_t offsetZ; +} ObjectModelAnimationKeyframeVertexS16; + +// Following keyframes use s8 values to offset vertices. +typedef struct ObjectModelAnimationKeyframeVertexS8 { + int8_t offsetX; + int8_t offsetY; + int8_t offsetZ; +} ObjectModelAnimationKeyframeVertexS8; + +typedef struct ObjectModelAnimationKeyframeHeader { + uint8_t unk0[12]; // Every keyframe has a 12-byte header. (unknown what these bytes do) +} ObjectModelAnimationKeyframeHeader; + +typedef struct ObjectModelAnimationHeader { + be_int32_t keyframeCount; +} ObjectModelAnimationHeader; \ No newline at end of file diff --git a/tools/dkr_assets_tool_src/fileTypes/textureInfo.hpp b/tools/dkr_assets_tool_src/fileTypes/textureInfo.hpp new file mode 100644 index 00000000..a2e6b335 --- /dev/null +++ b/tools/dkr_assets_tool_src/fileTypes/textureInfo.hpp @@ -0,0 +1,33 @@ +#pragma once + +#include +#include +#include "types.hpp" + +struct DkrTextureInfo { + /* 0x00 */ be_int32_t id; + /* 0x04 */ uint8_t width; + /* 0x05 */ uint8_t height; + /* 0x06 */ uint8_t format; // upper 4 bits = render mode/textype, lower 4 bits = texture format. + /* 0x07 */ uint8_t surfaceType; // enum SurfaceType for levels, not sure what this does for object models. + + std::string to_string() { + std::stringstream ss; + + ss << std::hex; + ss << "{ tex:" << (int)id; + ss << ", width: " << (int)width; + ss << ", height: " << (int)height; + ss << ", format: " << (int)format; + ss << ", byte7: " << (int)surfaceType; + ss << " }"; + + return ss.str(); + } + + bool operator==(const DkrTextureInfo& other) { + return (id == other.id) && (width == other.width) && (height == other.height) && + (format == other.format) && (surfaceType == other.surfaceType); + } + +}; diff --git a/tools/dkr_assets_tool_src/helpers/asmHeader.cpp b/tools/dkr_assets_tool_src/helpers/asmHeader.cpp index 8cfd7490..ca6f3fb9 100644 --- a/tools/dkr_assets_tool_src/helpers/asmHeader.cpp +++ b/tools/dkr_assets_tool_src/helpers/asmHeader.cpp @@ -1,5 +1,7 @@ #include "asmHeader.h" +using namespace DkrAssetsTool; + #include "helpers/fileHelper.h" WritableAsmInclude::WritableAsmInclude() { diff --git a/tools/dkr_assets_tool_src/helpers/asmHeader.h b/tools/dkr_assets_tool_src/helpers/asmHeader.h index 82da9520..4f1af815 100644 --- a/tools/dkr_assets_tool_src/helpers/asmHeader.h +++ b/tools/dkr_assets_tool_src/helpers/asmHeader.h @@ -4,6 +4,8 @@ #include "helpers/fileHelper.h" +namespace DkrAssetsTool { + // Write-Only C Header generator class class WritableAsmInclude { public: @@ -30,3 +32,4 @@ public: private: std::stringstream _out; }; +} diff --git a/tools/dkr_assets_tool_src/helpers/assetsHelper.cpp b/tools/dkr_assets_tool_src/helpers/assetsHelper.cpp index 0bb148c6..3ad988d4 100644 --- a/tools/dkr_assets_tool_src/helpers/assetsHelper.cpp +++ b/tools/dkr_assets_tool_src/helpers/assetsHelper.cpp @@ -1,167 +1,186 @@ #include "assetsHelper.h" - -#include "helpers/fileHelper.h" +#include +#include #include "helpers/debugHelper.h" +#include "helpers/fileHelper.h" +#include "misc/globalSettings.h" -DeferredAssetInfo::DeferredAssetInfo(std::string type, std::string fromSection, std::string idPostfix, std::string outputPath) : - type(type), fromSection(fromSection), idPostfix(idPostfix), outputPath(outputPath) { - DebugHelper::assert(!type.empty(), "(DeferredAssetInfo::DeferredAssetInfo) Type not specified!"); +using namespace DkrAssetsTool; + +DeferredAssetInfo::DeferredAssetInfo(DeferredAssetMode mode, std::string type, std::string fromSection, std::string idPostfix, std::string outputPath) : + mode(mode), type(type), fromSection(fromSection), idPostfix(idPostfix), outputPath(outputPath) { + DebugHelper::assert_(!type.empty(), "(DeferredAssetInfo::DeferredAssetInfo) Type not specified!"); } +std::reference_wrapper _get_section_json(fs::path pathToAssets, const std::string& assetSectionId); +fs::path _get_path_to_assets_folder(); + // Note: filepath is local to assets. -JsonFile *AssetsHelper::get_meta_file(DkrAssetsSettings &settings, fs::path filepath) { - JsonFile *out; - - DebugHelper::assert(JsonHelper::get().get_file(settings.pathToAssets / filepath, &out), +std::reference_wrapper AssetsHelper::get_meta_file(fs::path filepath) { + fs::path pathToAssets = _get_path_to_assets_folder(); + + auto tryGetAssetFile = JsonHelper::get_file(pathToAssets / filepath); + DebugHelper::assert_(tryGetAssetFile.has_value(), "(AssetsHelper::get_meta_file) Could not find json file in assets folder: ", filepath); - - return out; + + return tryGetAssetFile.value(); } -JsonFile *AssetsHelper::get_main_json(DkrAssetsSettings &settings) { - return get_main_json(settings.pathToAssets); +std::reference_wrapper AssetsHelper::get_main_json() { + fs::path pathToAssets = _get_path_to_assets_folder(); + return get_main_json(pathToAssets); } -JsonFile *AssetsHelper::get_main_json(fs::path pathToAssets) { +std::reference_wrapper AssetsHelper::get_main_json(fs::path pathToAssets) { fs::path mainAssetsFilepath = pathToAssets / "assets.meta.json"; - - JsonFile *mainJson; + + auto tryGetMainAssetsJson = JsonHelper::get_file(mainAssetsFilepath); // Load assets.meta.json, and throw error if it couldn't be found. - DebugHelper::assert(JsonHelper::get().get_file(mainAssetsFilepath, &mainJson), + DebugHelper::assert_(tryGetMainAssetsJson.has_value(), "(AssetsHelper::_get_section_json) Could not find assets.meta.json. Path was ", mainAssetsFilepath); - - return mainJson; + + return tryGetMainAssetsJson.value(); } -JsonFile *AssetsHelper::get_asset_section_json(DkrAssetsSettings &settings, const std::string assetSectionId) { - return _get_section_json(settings.pathToAssets, assetSectionId); +std::reference_wrapper AssetsHelper::get_asset_section_json(const std::string assetSectionId) { + fs::path pathToAssets = _get_path_to_assets_folder(); + return _get_section_json(pathToAssets, assetSectionId); } -size_t AssetsHelper::get_asset_section_count(DkrAssetsSettings &settings, const std::string assetSectionId) { - JsonFile *assetSection = get_asset_section_json(settings, assetSectionId); - - if(assetSection == nullptr) { - return 0; - } - - return assetSection->length_of_array("/files/order"); +size_t AssetsHelper::get_asset_section_count(const std::string assetSectionId) { + JsonFile& assetSection = get_asset_section_json(assetSectionId); + return assetSection.length_of_array("/files/order"); } // Returns the asset JSON file from a section ID & build ID. -JsonFile *AssetsHelper::get_asset_json(DkrAssetsSettings &settings, const std::string assetSectionId, std::string buildId) { - JsonFile *out = nullptr; - - JsonFile *sectionJson = _get_section_json(settings.pathToAssets, assetSectionId); - - DebugHelper::assert(sectionJson != nullptr, - "(AssetsHelper::get_build_id_of_index) _get_section_json returned null for ", assetSectionId); - - fs::path filename; - - if(buildId.empty()) { - DebugHelper::assert(sectionJson->has("/filename"), - "(AssetsHelper::get_asset_json) [/filename] was not found in the section \"", assetSectionId, "\""); - filename = sectionJson->get_string("/filename"); - } else { - std::string fileSectionPtr = "/files/sections/" + buildId; - - // Make sure the section build id exists in the section json file. - DebugHelper::assert(sectionJson->has(fileSectionPtr), - "(AssetsHelper::get_asset_json) Section \"", buildId, "\" was not found in the section \"", assetSectionId, "\""); +std::reference_wrapper AssetsHelper::get_asset_json(const std::string assetSectionId, std::string buildId) { + fs::path filepath = get_path_to_asset(assetSectionId, buildId); - filename = sectionJson->get_string(fileSectionPtr + "/filename"); - } - - - fs::path localFolder = sectionJson->get_path("/folder"); - FileHelper::format_folder_string(localFolder); // Make sure localFolder string is valid. - fs::path filepath = settings.pathToAssets / localFolder / filename; - // Load the file JSON, and throw error if it couldn't be found. - DebugHelper::assert(JsonHelper::get().get_file(filepath, &out), + auto tryGetAssetFile = JsonHelper::get_file(filepath); + DebugHelper::assert_(tryGetAssetFile.has_value(), "(AssetsHelper::get_asset_json) Could not find file json. Path was ", filepath); - - return out; + + return tryGetAssetFile.value(); } // Returns the index to an asset from a section. -int AssetsHelper::get_asset_index(DkrAssetsSettings &settings, const std::string assetSectionId, std::string &buildId) { - JsonFile *sectionJson = _get_section_json(settings.pathToAssets, assetSectionId); - int index = sectionJson->get_index_of_elem_in_array("/files/order", buildId); - +int AssetsHelper::get_asset_index(const std::string assetSectionId, std::string& buildId) { + fs::path pathToAssets = _get_path_to_assets_folder(); + + JsonFile& sectionJson = _get_section_json(pathToAssets, assetSectionId); + int index = sectionJson.get_index_of_elem_in_array("/files/order", buildId); + // Throws an error if the element was not found. - DebugHelper::assert(index >= 0, + DebugHelper::assert_(index >= 0, "(AssetsHelper::get_asset_index) Could not find \"", buildId, "\" in the order defined in the section \"", assetSectionId, "\""); - + return index; } -std::string AssetsHelper::get_section_path(DkrAssetsSettings &settings, const std::string &assetSectionId) { - JsonFile *sectionJson = _get_section_json(settings.pathToAssets, assetSectionId); - - DebugHelper::assert(sectionJson != nullptr, - "(AssetsHelper::get_section_path) _get_section_json returned null for ", assetSectionId); - - return sectionJson->get_path("/folder"); +bool AssetsHelper::section_contains_build_id(const std::string assetSectionId, std::string& buildId) { + fs::path pathToAssets = _get_path_to_assets_folder(); + JsonFile& sectionJson = _get_section_json(pathToAssets, assetSectionId); + int index = sectionJson.get_index_of_elem_in_array("/files/order", buildId); + return index >= 0; } -std::string AssetsHelper::get_build_id_of_index(DkrAssetsSettings &settings, const std::string &assetSectionId, int index) { - JsonFile *sectionJson = _get_section_json(settings.pathToAssets, assetSectionId); - - DebugHelper::assert(sectionJson != nullptr, - "(AssetsHelper::get_build_id_of_index) _get_section_json returned null for ", assetSectionId); - - return sectionJson->get_elem_from_array("/files/order", index); +fs::path AssetsHelper::get_path_to_asset(const std::string assetSectionId, std::string& buildId) { + fs::path pathToAssets = _get_path_to_assets_folder(); + + JsonFile& sectionJson = _get_section_json(pathToAssets, assetSectionId); + + fs::path filename; + + if (buildId.empty()) { + DebugHelper::assert_(sectionJson.has("/filename"), + "(AssetsHelper::get_path_to_asset) [/filename] was not found in the section \"", assetSectionId, "\""); + filename = sectionJson.get_string("/filename"); + } else { + std::string fileSectionPtr = "/files/sections/" + buildId; + + // Make sure the section build id exists in the section json file. + DebugHelper::assert_(sectionJson.has(fileSectionPtr), + "(AssetsHelper::get_path_to_asset) Section \"", buildId, "\" was not found in the section \"", assetSectionId, "\""); + + filename = sectionJson.get_string(fileSectionPtr + "/filename"); + } + + + fs::path localFolder = sectionJson.get_path("/folder"); + FileHelper::format_folder_string(localFolder); // Make sure localFolder string is valid. + return pathToAssets / localFolder / filename; } -DeferredAssetInfo AssetsHelper::get_deferred_asset_info(DkrAssetsSettings &settings, const std::string assetSectionId) { - JsonFile *mainJson = get_main_json(settings); - +std::string AssetsHelper::get_section_path(const std::string& assetSectionId) { + fs::path pathToAssets = _get_path_to_assets_folder(); + JsonFile& sectionJson = _get_section_json(pathToAssets, assetSectionId); + + return sectionJson.get_path("/folder").generic_string(); +} + +std::string AssetsHelper::get_build_id_of_index(const std::string& assetSectionId, int index) { + fs::path pathToAssets = _get_path_to_assets_folder(); + JsonFile& sectionJson = _get_section_json(pathToAssets, assetSectionId); + + return sectionJson.get_elem_from_array("/files/order", index); +} + +std::unordered_map stringToDeferredMode = { + { "1-to-1", DeferredAssetMode::ONE_TO_ONE }, + { "many-to-1", DeferredAssetMode::MANY_TO_ONE }, + { "build-only", DeferredAssetMode::BUILD_ONLY } +}; + +DeferredAssetInfo AssetsHelper::get_deferred_asset_info(const std::string assetSectionId) { + JsonFile& mainJson = get_main_json(); + std::string sectionJsonPtr = "/assets/sections/" + assetSectionId; - - DebugHelper::assert(mainJson->get_bool(sectionJsonPtr + "/deferred"), + + DebugHelper::assert_(mainJson.get_bool(sectionJsonPtr + "/deferred"), "(AssetsHelper::get_deferred_asset_info) ", assetSectionId, " is not deferred!"); - + std::string deferInfoPtr = sectionJsonPtr + "/defer-info"; - + return DeferredAssetInfo( - mainJson->get_string(sectionJsonPtr + "/type"), - mainJson->get_string(deferInfoPtr + "/from-section"), - mainJson->get_string(deferInfoPtr + "/id-postfix"), - mainJson->get_string(deferInfoPtr + "/output-path") + stringToDeferredMode[mainJson.get_string(deferInfoPtr + "/defer-mode")], + mainJson.get_string(sectionJsonPtr + "/type"), + mainJson.get_string(deferInfoPtr + "/from-section"), + mainJson.get_string(deferInfoPtr + "/id-postfix"), + mainJson.get_string(deferInfoPtr + "/output-path") ); } -JsonFile *AssetsHelper::_get_section_json(fs::path pathToAssets, const std::string &assetSectionId) { - JsonFile *out = nullptr; - - JsonFile *mainJson = get_main_json(pathToAssets); - +std::reference_wrapper _get_section_json(fs::path pathToAssets, const std::string& assetSectionId) { + JsonFile& mainJson = AssetsHelper::get_main_json(pathToAssets); + std::string sectionJsonPtr = "/assets/sections/" + assetSectionId; - + // Make sure the section build id exists in assets.meta.json - DebugHelper::assert(mainJson->has(sectionJsonPtr), + DebugHelper::assert_(mainJson.has(sectionJsonPtr), "(AssetsHelper::_get_section_json) Section \"", assetSectionId, "\" was not found in assets.meta.json"); - - bool isDeferred = mainJson->get_bool(sectionJsonPtr + "/deferred", false); - - if(isDeferred) { - //DebugHelper::warn("Section \"", assetSectionId, "\" is deferred. Returning null pointer!"); - return nullptr; - } - - fs::path filename = mainJson->get_string(sectionJsonPtr + "/filename"); - - if(filename.empty()) { - //DebugHelper::warn("Section \"", assetSectionId, "\" has no filename. Returning null pointer!"); - return nullptr; - } - + + fs::path filename = mainJson.get_string(sectionJsonPtr + "/filename"); + + DebugHelper::assert_(!filename.empty(), "Section \"", assetSectionId, "\" has no filename."); + fs::path sectionFilepath = pathToAssets / filename; - + + auto tryGetSectionJson = JsonHelper::get_file(sectionFilepath); + // Load the section JSON, and throw error if it couldn't be found. - DebugHelper::assert(JsonHelper::get().get_file(sectionFilepath, &out), + DebugHelper::assert_(tryGetSectionJson.has_value(), "(AssetsHelper::_get_section_json) Could not find section json. Path was ", sectionFilepath); - - return out; + + return tryGetSectionJson.value(); } + +fs::path _get_path_to_assets_folder() { + fs::path outputAssets = GlobalSettings::get_decomp_path_to_output_assets(); + + if(FileHelper::path_exists(outputAssets)) { + return outputAssets; + } + + return GlobalSettings::get_decomp_path_to_vanilla_assets(); +} \ No newline at end of file diff --git a/tools/dkr_assets_tool_src/helpers/assetsHelper.h b/tools/dkr_assets_tool_src/helpers/assetsHelper.h index 66344099..54ee43c4 100644 --- a/tools/dkr_assets_tool_src/helpers/assetsHelper.h +++ b/tools/dkr_assets_tool_src/helpers/assetsHelper.h @@ -1,42 +1,42 @@ #pragma once +#include #include #include "helpers/jsonHelper.h" -#include "misc/settings.hpp" + +namespace DkrAssetsTool { + +enum DeferredAssetMode { + ONE_TO_ONE, // Strict one deferred asset to a regular one. (Level names) + MANY_TO_ONE, // Many deferred assets to a regular one. (Object animations) + BUILD_ONLY // Run on build, but ignore source file. (Object animation ids) +}; struct DeferredAssetInfo { + DeferredAssetMode mode; std::string type; std::string fromSection; std::string idPostfix; std::string outputPath; - DeferredAssetInfo(std::string type, std::string fromSection, - std::string idPostfix, std::string outputPath); + DeferredAssetInfo(DeferredAssetMode mode, std::string type, + std::string fromSection, std::string idPostfix, std::string outputPath); }; -/** - * Singleton class that deals with getting asset JSON files for building. - */ -class AssetsHelper { -public: - static AssetsHelper& get() { - static AssetsHelper instance; - return instance; - } - - static JsonFile *get_meta_file(DkrAssetsSettings &settings, fs::path filepath); - static JsonFile *get_main_json(DkrAssetsSettings &settings); - static JsonFile *get_main_json(fs::path pathToAssets); - static JsonFile *get_asset_section_json(DkrAssetsSettings &settings, const std::string assetSectionId); - static size_t get_asset_section_count(DkrAssetsSettings &settings, const std::string assetSectionId); - static JsonFile *get_asset_json(DkrAssetsSettings &settings, const std::string assetSectionId, std::string buildId=""); - static int get_asset_index(DkrAssetsSettings &settings, const std::string assetSectionId, std::string &buildId); - static std::string get_section_path(DkrAssetsSettings &settings, const std::string &assetSectionId); - static std::string get_build_id_of_index(DkrAssetsSettings &settings, const std::string &assetSectionId, int index); - - - static DeferredAssetInfo get_deferred_asset_info(DkrAssetsSettings &settings, const std::string assetSectionId); -private: - static JsonFile *_get_section_json(fs::path pathToAssets, const std::string &assetSectionId); -}; +namespace AssetsHelper { + std::reference_wrapper get_meta_file(fs::path filepath); + std::reference_wrapper get_main_json(); + std::reference_wrapper get_main_json(fs::path pathToAssets); + std::reference_wrapper get_asset_section_json(const std::string assetSectionId); + size_t get_asset_section_count(const std::string assetSectionId); + std::reference_wrapper get_asset_json(const std::string assetSectionId, std::string buildId = ""); + int get_asset_index(const std::string assetSectionId, std::string& buildId); + bool section_contains_build_id(const std::string assetSectionId, std::string& buildId); + fs::path get_path_to_asset(const std::string assetSectionId, std::string& buildId); + std::string get_section_path(const std::string& assetSectionId); + std::string get_build_id_of_index(const std::string& assetSectionId, int index); + + DeferredAssetInfo get_deferred_asset_info(const std::string assetSectionId); +} +} diff --git a/tools/dkr_assets_tool_src/helpers/c/cContext.cpp b/tools/dkr_assets_tool_src/helpers/c/cContext.cpp index e61f2607..cf02ec42 100644 --- a/tools/dkr_assets_tool_src/helpers/c/cContext.cpp +++ b/tools/dkr_assets_tool_src/helpers/c/cContext.cpp @@ -1,5 +1,7 @@ #include "cContext.h" +using namespace DkrAssetsTool; + #include "helpers/debugHelper.h" #include "helpers/c/cStructHelper.h" @@ -12,107 +14,153 @@ CContext::~CContext() { } void CContext::register_struct(CStruct *structRef) { - DebugHelper::assert(structRef != nullptr, "(CContext::register_struct) Trying to register a null pointer!"); + if(structRef == nullptr) { + return; + } std::string structName = structRef->get_name(); if(structName.empty()) { return; } - //DebugHelper::info("Registering struct \"", structName, "\""); - DebugHelper::assert(_structsByName.find(structName) == _structsByName.end(), + + DebugHelper::assert_(_structsByName.find(structName) == _structsByName.end(), "(CContext::register_struct) struct \"", structName, "\" has already been defined!"); + _mutex.lock(); _structsByName[structName] = structRef; + _mutex.unlock(); } void CContext::deregister_struct(std::string &structName) { if(structName.empty()) { return; } + _mutex.lock(); // Make sure the key actually exists in the map. if(_structsByName.find(structName) == _structsByName.end()) { + _mutex.unlock(); return; } _structsByName.erase(structName); + _mutex.unlock(); } CStruct *CContext::get_struct(const std::string &structName) { - DebugHelper::assert(_structsByName.find(structName) != _structsByName.end(), - "(CContext::get_struct) struct \"", structName, "\" is not defined!"); - return _structsByName[structName]; + _mutex.lock(); + if(_structsByName.find(structName) == _structsByName.end()) { + _mutex.unlock(); + return nullptr; + } + CStruct *out = _structsByName.at(structName); + _mutex.unlock(); + return out; } // Returns 0 if element was not found. size_t CContext::get_size_of_element(const std::string &elementName) { + _mutex.lock(); // First search to see if the element is a struct if(_structsByName.find(elementName) != _structsByName.end()) { + _mutex.unlock(); CStruct *structElem = get_struct(elementName); return structElem->get_byte_size(); } // Then search to see if the element is an enum. if(_enumsByName.find(elementName) != _enumsByName.end()) { + _mutex.unlock(); return 4; // Enums should be integers, which are 4 bytes. } // Lastly, check to see if the element is just a basic type. if(CTypes::is_standard_type(elementName)) { + _mutex.unlock(); return CTypes::get_size_of_type(elementName); } + _mutex.unlock(); return 0; // Could not find element. } void CContext::clear_structs() { + _mutex.lock(); _structsByName.clear(); + _mutex.unlock(); } void CContext::register_enum(CEnum *enumRef) { - DebugHelper::assert(enumRef != nullptr, "(CContext::register_enum) Trying to register a null pointer!"); + if(enumRef == nullptr) { + return; + } std::string enumName = enumRef->get_name(); if(enumName.empty()) { return; } //DebugHelper::info("Registering enum \"", enumName, "\""); - DebugHelper::assert(_enumsByName.find(enumName) == _enumsByName.end(), + DebugHelper::assert_(_enumsByName.find(enumName) == _enumsByName.end(), "(CContext::register_enum) struct \"", enumName, "\" has already been defined!"); + + _mutex.lock(); _enumsByName[enumName] = enumRef; _add_enum_values(enumRef); + _mutex.unlock(); + } void CContext::deregister_enum(std::string &enumName) { if(enumName.empty()) { return; } + + _mutex.lock(); // Make sure the key actually exists in the map. if(_enumsByName.find(enumName) == _enumsByName.end()) { + _mutex.unlock(); return; } _enumsByName.erase(enumName); + _mutex.unlock(); + } CEnum *CContext::get_enum(const std::string &enumName) { - DebugHelper::assert(_enumsByName.find(enumName) != _enumsByName.end(), - "(CContext::get_enum) enum \"", enumName, "\" is not defined!"); - return _enumsByName[enumName]; + _mutex.lock(); + if(_enumsByName.find(enumName) == _enumsByName.end()) { + _mutex.unlock(); + return nullptr; + } + CEnum *out = _enumsByName.at(enumName); + _mutex.unlock(); + return out; } void CContext::clear_enums() { + _mutex.lock(); _enumsByName.clear(); _enumValues.clear(); + _mutex.unlock(); } // Currently just gets loaded enum values. int CContext::get_int_value_of_symbol(const std::string &symbolName) { + _mutex.lock(); if(_enumValues.find(symbolName) != _enumValues.end()) { - return _enumValues[symbolName]; + int out = _enumValues.at(symbolName); + _mutex.unlock(); + return out; } + _mutex.unlock(); + DebugHelper::error("(CContext::get_int_value_of_symbol) Could not evaluate the symbol \"", symbolName, "\""); return 0; } std::string CContext::get_symbol_of_enum_int(std::string enumName, int index) { + CEnum *e = get_enum(enumName); - DebugHelper::assert(e != nullptr, "(CContext::get_symbol_of_enum_int) Enum \"", enumName, "\" does not exist!"); + DebugHelper::assert_(e != nullptr, + "(CContext::get_symbol_of_enum_int) Enum \"", enumName, "\" does not exist!"); std::string out; - DebugHelper::assert( - e->get_symbol_of_value(index, out), + _mutex.lock(); + bool success = e->get_symbol_of_value(index, out); + _mutex.unlock(); + DebugHelper::assert_(success, "(CContext::get_symbol_of_enum_int) Enum \"", enumName, "\" does not have the index value of ", index ); return out; diff --git a/tools/dkr_assets_tool_src/helpers/c/cContext.h b/tools/dkr_assets_tool_src/helpers/c/cContext.h index a768f1d8..ce515cc0 100644 --- a/tools/dkr_assets_tool_src/helpers/c/cContext.h +++ b/tools/dkr_assets_tool_src/helpers/c/cContext.h @@ -4,10 +4,13 @@ #include #include +#include #include "helpers/c/cStructHelper.h" #include "helpers/c/cEnumsHelper.h" +namespace DkrAssetsTool { + class CContext { public: CContext(); @@ -35,6 +38,9 @@ private: std::unordered_map _structsByName; std::unordered_map _enumsByName; std::unordered_map _enumValues; + std::mutex _mutex; void _add_enum_values(CEnum *enumRef); -}; \ No newline at end of file +}; + +} diff --git a/tools/dkr_assets_tool_src/helpers/c/cEnumsHelper.cpp b/tools/dkr_assets_tool_src/helpers/c/cEnumsHelper.cpp index 34401267..acf7c513 100644 --- a/tools/dkr_assets_tool_src/helpers/c/cEnumsHelper.cpp +++ b/tools/dkr_assets_tool_src/helpers/c/cEnumsHelper.cpp @@ -7,11 +7,14 @@ #include "helpers/regexHelper.h" #include "helpers/debugHelper.h" #include "helpers/stringHelper.h" +#include "helpers/dataHelper.h" #include "libs/calculator.hpp" #include "cContext.h" +using namespace DkrAssetsTool; + const std::string C_ENUM_DEFINITION = R"((typedef)?\s*(enum)\s*([A-Za-z_][A-Za-z_0-9]*)?\s*\{([^}]*)\}\s*([A-Za-z_][A-Za-z_0-9]*)?\s*;)"; const std::string C_ENUM_MEMBER = R"(\s*([A-Za-z_][A-Za-z0-9_]*)\s*((?:(?:=)\s*([^,]*))|(?:\,)|(?:$)))"; const std::string C_ENUM_SYMBOL = R"(\b([A-Za-z_][A-Za-z0-9_]*)\b)"; @@ -28,7 +31,7 @@ void CEnum::_evaluate_enum_symbols(std::string &enumValue) { int value; if(!get_value_of_member(symbol, value)) { // If the value is not a part of this enum, then go check to see if the context has it. - value = _context->get_int_value_of_symbol(symbol); + value = _context.get_int_value_of_symbol(symbol); } std::string valueAsString = std::to_string(value); enumValue = enumValue.replace(offset, symbol.length(), valueAsString); @@ -57,10 +60,10 @@ int CEnum::_parse_enum_value(std::string &enumValue) { return _evaluate_enum(enumValue); } -CEnum::CEnum(CContext *context) : _context(context) { +CEnum::CEnum(CContext &context) : _context(context) { } -CEnum::CEnum(CContext *context, const std::string &rawCode) : _context(context) { +CEnum::CEnum(CContext &context, const std::string &rawCode) : _context(context) { RegexMatch *enumDefMatch = RegexHelper::get_first_match(rawCode, C_ENUM_DEFINITION); DebugHelper::assert(enumDefMatch != nullptr, "rawCode \"", rawCode, "\" is not valid."); @@ -105,14 +108,22 @@ CEnum::CEnum(CContext *context, const std::string &rawCode) : _context(context) nextValue++; } - _context->register_enum(this); + _context.register_enum(this); } CEnum::~CEnum() { - _context->deregister_enum(_name); + _context.deregister_enum(_name); } -std::string CEnum::get_name() { +// The namespace is needed here for g++ to resolve the function correctly. +namespace DkrAssetsTool { + std::ostream& operator<<(std::ostream& os, const CEnum& cEnum) { + os << cEnum.to_string(); + return os; + } +} + +std::string CEnum::get_name() const { return _name; } @@ -139,10 +150,60 @@ bool CEnum::get_symbol_of_value(int value, std::string &outSymbol) { return true; } -size_t CEnum::get_member_count() { +size_t CEnum::get_member_count() const { return _members.size(); } +bool CEnum::is_simple() const { + size_t index = 0; + for(auto &val : _values) { + if(val.first != index || val.second.size() != 1) { + return false; + } + index++; + } + return true; +} + +std::string CEnum::to_string() const { + std::stringstream ss; + + const char *indent = " "; + + int checkVal = 0; + + ss << "typedef enum " << _name << " { " << std::endl; + + // Iterate over the map + for(auto &pair : _values) { + bool lastEntry = pair == *std::prev(_values.end()); + int value = pair.first; + const std::vector &symbols = pair.second; + // Iterate over the keys for that value + for(size_t i = 0; i < symbols.size(); i++) { + if(i > 0) { + ss << "," << std::endl; + } + ss << indent << symbols[i]; + if(value != checkVal) { + checkVal = value; + ss << " = " << checkVal; + } + checkVal++; + } + + if(!lastEntry) { + ss << ","; + } + + ss << std::endl; + } + + ss << "} " << _name << ";" << std::endl; + + return ss.str(); +} + std::unordered_map::iterator CEnum::get_start_iterator() { return _members.begin(); } @@ -159,6 +220,13 @@ WriteableCEnum::WriteableCEnum(std::string name) : _name(name), _currentValue(0) WriteableCEnum::~WriteableCEnum() { } +namespace DkrAssetsTool { + std::ostream& operator<<(std::ostream& os, const WriteableCEnum& cEnum) { + os << cEnum.to_string(); + return os; + } +} + void WriteableCEnum::add_symbol(std::string symbol) { _members[_currentValue] = symbol; _currentValue++; @@ -169,7 +237,7 @@ void WriteableCEnum::add_symbol(std::string symbol, int newValue) { add_symbol(symbol); } -std::string WriteableCEnum::to_string() { +std::string WriteableCEnum::to_string() const { std::stringstream ss; const char *indent = " "; @@ -201,8 +269,7 @@ std::string WriteableCEnum::to_string() { const std::string LOOKFOR_C_ENUM_REGEX = R"(\s*(typedef)?\s*(enum)\s*([A-Za-z_][A-Za-z0-9_]*)\s*\{[^}]*\}\s*([A-Za-z_][A-Za-z0-9_]*)?\s*;)"; -// TODO: Implement these! -void CEnumsHelper::get_enums_from_code(CContext *context, const std::string &code, std::vector &out) { +void CEnumsHelper::get_enums_from_code(CContext &context, const std::string &code, std::vector &out) { std::vector matches; RegexHelper::get_matches(code, LOOKFOR_C_ENUM_REGEX, matches); @@ -214,7 +281,13 @@ void CEnumsHelper::get_enums_from_code(CContext *context, const std::string &cod } } -void CEnumsHelper::load_enums_from_file(CContext *context, fs::path filepath) { +std::vector _loadedFiles; + +void CEnumsHelper::load_enums_from_file(CContext &context, fs::path filepath) { + if(DataHelper::vector_has(_loadedFiles, filepath)) { + return; // Already loaded. Don't do it again! + } + _loadedFiles.emplace_back(filepath); std::vector dummy; // Not actually used. std::string cFileCode = FileHelper::read_text_file(filepath); get_enums_from_code(context, cFileCode, dummy); diff --git a/tools/dkr_assets_tool_src/helpers/c/cEnumsHelper.h b/tools/dkr_assets_tool_src/helpers/c/cEnumsHelper.h index a702570f..26a459d9 100644 --- a/tools/dkr_assets_tool_src/helpers/c/cEnumsHelper.h +++ b/tools/dkr_assets_tool_src/helpers/c/cEnumsHelper.h @@ -4,18 +4,23 @@ #include #include +#include #include #include +namespace DkrAssetsTool { + class CContext; class CEnum { public: - CEnum(CContext *context); // Empty enum - CEnum(CContext *context, const std::string &rawCode); // Parse from a enum string. + CEnum(CContext &context); // Empty enum + CEnum(CContext &context, const std::string &rawCode); // Parse from a enum string. ~CEnum(); - std::string get_name(); + friend std::ostream& operator<<(std::ostream& os, const CEnum& cEnum); + + std::string get_name() const; // Used in CContext. void copy_members_to_map(std::unordered_map &inputMap); @@ -25,17 +30,21 @@ public: bool get_symbol_of_value(int value, std::string &outSymbol); - size_t get_member_count(); + size_t get_member_count() const; + + // "simple" here just means an enum that starts at 0 and increases by 1 for each value. + bool is_simple() const; + std::string to_string() const; std::unordered_map::iterator get_start_iterator(); std::unordered_map::iterator get_end_iterator(); private: - CContext *_context; + CContext &_context; std::unordered_map _members; // Multiple keys may have the same value, that is the reason for the vector here. - std::unordered_map> _values; + std::map> _values; std::string _name; std::string _typedefName; @@ -52,22 +61,20 @@ public: WriteableCEnum(std::string name); ~WriteableCEnum(); + friend std::ostream& operator<<(std::ostream& os, const WriteableCEnum& cEnum); + void add_symbol(std::string symbol); void add_symbol(std::string symbol, int newValue); - std::string to_string(); + std::string to_string() const; private: std::string _name; int _currentValue; std::map _members; // Note: Inverted from CEnum version. }; -/** - * Class that deals with reading / creating C enums. - */ -class CEnumsHelper { -public: - static void get_enums_from_code(CContext *context, const std::string &code, std::vector &out); - static void load_enums_from_file(CContext *context, fs::path filepath); -private: -}; +namespace CEnumsHelper { + void get_enums_from_code(CContext &context, const std::string &code, std::vector &out); + void load_enums_from_file(CContext &context, fs::path filepath); +} +} diff --git a/tools/dkr_assets_tool_src/helpers/c/cHeader.cpp b/tools/dkr_assets_tool_src/helpers/c/cHeader.cpp index eac57804..77193d63 100644 --- a/tools/dkr_assets_tool_src/helpers/c/cHeader.cpp +++ b/tools/dkr_assets_tool_src/helpers/c/cHeader.cpp @@ -1,5 +1,7 @@ #include "cHeader.h" +using namespace DkrAssetsTool; + #include "helpers/fileHelper.h" WritableCHeader::WritableCHeader() { @@ -28,6 +30,10 @@ void WritableCHeader::write_raw_text_line(std::string text) { _out << text << std::endl; } +void WritableCHeader::write_enum(const WriteableCEnum &enumValue) { + _out << enumValue << std::endl; +} + void WritableCHeader::save(fs::path filepath) { std::string headerText = _out.str(); FileHelper::write_text_file_if_changed(headerText, filepath, true); diff --git a/tools/dkr_assets_tool_src/helpers/c/cHeader.h b/tools/dkr_assets_tool_src/helpers/c/cHeader.h index 14a5744f..5499d792 100644 --- a/tools/dkr_assets_tool_src/helpers/c/cHeader.h +++ b/tools/dkr_assets_tool_src/helpers/c/cHeader.h @@ -6,6 +6,8 @@ #include "helpers/c/cEnumsHelper.h" // Write-Only C Header generator class +namespace DkrAssetsTool { + class WritableCHeader { public: WritableCHeader(); @@ -18,10 +20,13 @@ public: void write_raw_text(std::string text); void write_raw_text_line(std::string text); - void write_enum(CEnum *enumValue); + void write_enum(const WriteableCEnum &enumValue); + // TODO: write_struct ? void save(fs::path filepath); private: std::stringstream _out; }; + +} diff --git a/tools/dkr_assets_tool_src/helpers/c/cStructGltfHelper.cpp b/tools/dkr_assets_tool_src/helpers/c/cStructGltfHelper.cpp index a0ade11a..6257e1e5 100644 --- a/tools/dkr_assets_tool_src/helpers/c/cStructGltfHelper.cpp +++ b/tools/dkr_assets_tool_src/helpers/c/cStructGltfHelper.cpp @@ -4,8 +4,12 @@ #include "helpers/c/cContext.h" #include "helpers/c/cTypes.h" +#include "misc/globalSettings.h" + #include // for std::round +using namespace DkrAssetsTool; + enum StructHintType { NO_HINT, ENUM, // An enum from include/enums.h @@ -31,8 +35,8 @@ std::unordered_map hintTypes = { // Assumption: structMember has the "Enum" hint. std::string get_hint_enum_value(CStructEntry *structMember, int value) { std::string enumName = structMember->get_hint_value("Enum"); - CContext *context = structMember->get_context(); - CEnum *hintEnum = context->get_enum(enumName); + CContext &context = structMember->get_context(); + CEnum *hintEnum = context.get_enum(enumName); std::string enumValue; DebugHelper::assert_(hintEnum->get_symbol_of_value(value, enumValue), @@ -46,8 +50,8 @@ std::string get_hint_enum_value(CStructEntry *structMember, int value) { // Assumption: structMember has the "Enum" hint. int get_value_from_hint_enum(CStructEntry *structMember, std::string &enumValue) { std::string enumName = structMember->get_hint_value("Enum"); - CContext *context = structMember->get_context(); - CEnum *hintEnum = context->get_enum(enumName); + CContext &context = structMember->get_context(); + CEnum *hintEnum = context.get_enum(enumName); int value; DebugHelper::assert_(hintEnum->get_value_of_member(enumValue, value), @@ -59,20 +63,20 @@ int get_value_from_hint_enum(CStructEntry *structMember, std::string &enumValue) // AssetId -std::string get_hint_asset_build_id(DkrAssetsSettings &settings, CStructEntry *structMember, int value) { +std::string get_hint_asset_build_id(CStructEntry *structMember, int value) { std::string assetSectionId = structMember->get_hint_value("AssetId"); - if(value == -1 || (value >= AssetsHelper::get_asset_section_count(settings, assetSectionId))) { + if(value == -1 || (value >= AssetsHelper::get_asset_section_count(assetSectionId))) { return ""; } - return AssetsHelper::get_build_id_of_index(settings, assetSectionId, value); + return AssetsHelper::get_build_id_of_index(assetSectionId, value); } -int get_value_from_hint_asset_build_id(DkrAssetsSettings &settings, CStructEntry *structMember, std::string &buildId) { +int get_value_from_hint_asset_build_id(CStructEntry *structMember, std::string &buildId) { if(buildId.empty()) { return -1; } std::string assetSectionId = structMember->get_hint_value("AssetId"); - return AssetsHelper::get_asset_index(settings, assetSectionId, buildId); + return AssetsHelper::get_asset_index(assetSectionId, buildId); } // Angle @@ -124,20 +128,20 @@ int get_value_from_hint_scale(CStructEntry *structMember, double scale) { // Object -std::string get_hint_object(DkrAssetsSettings &settings, CStructEntry *structMember, int objectIndex) { +std::string get_hint_object(CStructEntry *structMember, int objectIndex) { if(objectIndex < 0) { return ""; } - JsonFile *transTable = AssetsHelper::get_asset_json(settings, "ASSET_LEVEL_OBJECT_TRANSLATION_TABLE"); - return transTable->get_string("/table/" + std::to_string(objectIndex)); + JsonFile &transTable = AssetsHelper::get_asset_json("ASSET_LEVEL_OBJECT_TRANSLATION_TABLE"); + return transTable.get_string("/table/" + std::to_string(objectIndex)); } -int get_value_from_hint_object(DkrAssetsSettings &settings, CStructEntry *structMember, std::string &buildId) { +int get_value_from_hint_object(CStructEntry *structMember, std::string &buildId) { if(buildId.empty()) { return -1; } - JsonFile *transTable = AssetsHelper::get_asset_json(settings, "ASSET_LEVEL_OBJECT_TRANSLATION_TABLE"); - return transTable->get_index_of_elem_in_array("/table", buildId); + JsonFile &transTable = AssetsHelper::get_asset_json("ASSET_LEVEL_OBJECT_TRANSLATION_TABLE"); + return transTable.get_index_of_elem_in_array("/table", buildId); } // Time @@ -145,7 +149,7 @@ int get_value_from_hint_object(DkrAssetsSettings &settings, CStructEntry *struct double get_hint_time(CStructEntry *structMember, int value) { std::string roundToPlacesStr = structMember->get_hint_value("RoundToPlaces", ""); // Defaults to no rounding. - double timeSeconds = (double)value / DKR_FPS; + double timeSeconds = (double)value / GlobalSettings::get_value("max_tickrate", 60.0); if(!roundToPlacesStr.empty()) { double roundToPlaces = std::stod(roundToPlacesStr); @@ -161,12 +165,12 @@ double get_hint_time(CStructEntry *structMember, int value) { } int get_value_from_hint_time(CStructEntry *structMember, double timeSeconds) { - return (int)std::round(timeSeconds * DKR_FPS); + return (int)std::round(timeSeconds * GlobalSettings::get_value("max_tickrate", 60.0)); } /***************************************************************************************/ -void CStructGltfHelper::put_struct_entry_into_gltf_node_extra(DkrAssetsSettings &settings, CStructEntry *structMember, WriteableGltfFile &gltfFile, int gltfNode, uint8_t *bytes) { +void CStructGltfHelper::put_struct_entry_into_gltf_node_extra(CStructEntry *structMember, WriteableGltfFile &gltfFile, int gltfNode, uint8_t *bytes) { CStructEntry::InternalType internalType = structMember->get_internal_type(); StructHintType hintType = StructHintType::NO_HINT; if(structMember->has_hint()) { @@ -188,7 +192,7 @@ void CStructGltfHelper::put_struct_entry_into_gltf_node_extra(DkrAssetsSettings } case StructHintType::ASSET_ID: { - std::string buildId = get_hint_asset_build_id(settings, structMember, value); + std::string buildId = get_hint_asset_build_id(structMember, value); if(!buildId.empty()) { gltfFile.set_node_extra(gltfNode, structMember->name, buildId); } @@ -208,7 +212,7 @@ void CStructGltfHelper::put_struct_entry_into_gltf_node_extra(DkrAssetsSettings } case StructHintType::OBJECT: { - std::string buildId = get_hint_object(settings, structMember, value); + std::string buildId = get_hint_object(structMember, value); if(!buildId.empty()) { gltfFile.set_node_extra(gltfNode, structMember->name, buildId); } @@ -247,7 +251,7 @@ void CStructGltfHelper::put_struct_entry_into_gltf_node_extra(DkrAssetsSettings } case StructHintType::ASSET_ID: { - std::string buildId = get_hint_asset_build_id(settings, structMember, value); + std::string buildId = get_hint_asset_build_id(structMember, value); if(!buildId.empty()) { arrayOfValues.push_back(tinygltf::Value(buildId)); } else { @@ -269,7 +273,7 @@ void CStructGltfHelper::put_struct_entry_into_gltf_node_extra(DkrAssetsSettings } case StructHintType::OBJECT: { - std::string buildId = get_hint_object(settings, structMember, value); + std::string buildId = get_hint_object(structMember, value); if(!buildId.empty()) { arrayOfValues.push_back(tinygltf::Value(buildId)); } else { @@ -302,7 +306,7 @@ void CStructGltfHelper::put_struct_entry_into_gltf_node_extra(DkrAssetsSettings } } -void CStructGltfHelper::put_gltf_node_extra_into_struct_entry(DkrAssetsSettings &settings, CStructEntry *structMember, GltfFileNode *objNode, uint8_t *bytes) { +void CStructGltfHelper::put_gltf_node_extra_into_struct_entry(CStructEntry *structMember, GltfFileNode *objNode, uint8_t *bytes) { CStructEntry::InternalType internalType = structMember->get_internal_type(); StructHintType hintType = StructHintType::NO_HINT; @@ -330,7 +334,7 @@ void CStructGltfHelper::put_gltf_node_extra_into_struct_entry(DkrAssetsSettings if(buildId.empty()) { value = -1; } else { - value = get_value_from_hint_asset_build_id(settings, structMember, buildId); + value = get_value_from_hint_asset_build_id(structMember, buildId); } break; } @@ -352,7 +356,7 @@ void CStructGltfHelper::put_gltf_node_extra_into_struct_entry(DkrAssetsSettings if(buildId.empty()) { value = -1; } else { - value = get_value_from_hint_object(settings, structMember, buildId); + value = get_value_from_hint_object(structMember, buildId); } break; } @@ -389,7 +393,7 @@ void CStructGltfHelper::put_gltf_node_extra_into_struct_entry(DkrAssetsSettings if(val.Type() == 0) { // Check if null values.push_back(-1); } else { - values.push_back(get_value_from_hint_asset_build_id(settings, structMember, val.Get())); + values.push_back(get_value_from_hint_asset_build_id(structMember, val.Get())); } break; case StructHintType::ANGLE: @@ -402,7 +406,7 @@ void CStructGltfHelper::put_gltf_node_extra_into_struct_entry(DkrAssetsSettings if(val.Type() == 0) { // Check if null values.push_back(-1); } else { - values.push_back(get_value_from_hint_object(settings, structMember, val.Get())); + values.push_back(get_value_from_hint_object(structMember, val.Get())); } break; case StructHintType::TIME: diff --git a/tools/dkr_assets_tool_src/helpers/c/cStructGltfHelper.h b/tools/dkr_assets_tool_src/helpers/c/cStructGltfHelper.h index a2fee981..43a68330 100644 --- a/tools/dkr_assets_tool_src/helpers/c/cStructGltfHelper.h +++ b/tools/dkr_assets_tool_src/helpers/c/cStructGltfHelper.h @@ -1,15 +1,16 @@ #include "helpers/c/cStructHelper.h" #include "helpers/gltf/gltfHelper.h" -#include "misc/settings.hpp" // Class that helps with interacting with both cStructs and Gltf files -class CStructGltfHelper { -public: +namespace DkrAssetsTool { +namespace CStructGltfHelper { + // struct entry -> gltf node extra - static void put_struct_entry_into_gltf_node_extra(DkrAssetsSettings &settings, CStructEntry *structMember, WriteableGltfFile &gltfFile, + void put_struct_entry_into_gltf_node_extra(CStructEntry *structMember, WriteableGltfFile &gltfFile, int gltfNode, uint8_t *bytes); // gltf node extra -> struct entry - static void put_gltf_node_extra_into_struct_entry(DkrAssetsSettings &settings, CStructEntry *structMember, GltfFileNode *objNode, uint8_t *bytes); -}; + void put_gltf_node_extra_into_struct_entry(CStructEntry *structMember, GltfFileNode *objNode, uint8_t *bytes); +} +} \ No newline at end of file diff --git a/tools/dkr_assets_tool_src/helpers/c/cStructHelper.cpp b/tools/dkr_assets_tool_src/helpers/c/cStructHelper.cpp index 50a071a7..593a9bcf 100644 --- a/tools/dkr_assets_tool_src/helpers/c/cStructHelper.cpp +++ b/tools/dkr_assets_tool_src/helpers/c/cStructHelper.cpp @@ -1,8 +1,11 @@ #include "cStructHelper.h" +using namespace DkrAssetsTool; + #include #include +#include "helpers/dataHelper.h" #include "helpers/debugHelper.h" #include "helpers/regexHelper.h" #include "helpers/stringHelper.h" @@ -11,7 +14,7 @@ #include "cContext.h" #include "cTypes.h" -CStructEntry::CStructEntry(CContext *context, CStruct *parent, std::string &type, std::string &pointer, std::string &name, +CStructEntry::CStructEntry(CContext &context, CStruct *parent, std::string &type, std::string &pointer, std::string &name, std::string &arrayBrackets, std::string hint) : type(type), pointer(pointer), name(name), arrayBrackets(arrayBrackets), _context(context), _parent(parent) { // Make sure the strings have no whitespace. Makes processing easier. @@ -189,7 +192,7 @@ size_t CStructEntry::get_byte_size() { outSize = CTypes::get_size_of_type(type); if(outSize == 0) { // Not a trivial type, try to get it from global context. - outSize = _context->get_size_of_element(type); + outSize = _context.get_size_of_element(type); } } @@ -321,16 +324,16 @@ void CStructEntry::_calc_array_multiplier() { } } -CContext *CStructEntry::get_context() { +CContext &CStructEntry::get_context() { return _context; } -CStruct::CStruct(CContext *context) : _context(context) { +CStruct::CStruct(CContext &context) : _context(context) { } CStruct::~CStruct() { // Should be fine to call even if the struct is already not registered. - _context->deregister_struct(_name); + _context.deregister_struct(_name); for(CStructEntry *entry : _entries) { delete entry; @@ -475,7 +478,7 @@ int get_next_member(const std::string &structCode, int offsetInCode, CStructMemb return out.end; } -CStruct::CStruct(CContext *context, const std::string &rawCode) : _context(context) { +CStruct::CStruct(CContext &context, const std::string &rawCode) : _context(context) { RegexMatch *structDefMatch = RegexHelper::get_first_match(rawCode, C_STRUCT_DEFINITION); DebugHelper::assert(structDefMatch != nullptr, "rawCode \"", rawCode, "\" is not valid."); @@ -561,7 +564,7 @@ CStruct::CStruct(CContext *context, const std::string &rawCode) : _context(conte } _calc_trivialness(); - _context->register_struct(this); + _context.register_struct(this); } std::string CStruct::get_name() { @@ -648,7 +651,7 @@ void CStruct::_calc_trivialness() { const std::string LOOKFOR_C_STRUCT_REGEX = R"(\s*(typedef)?\s*(struct|union)\s*([A-Za-z_][A-Za-z0-9_]*)\s*\{)"; -void CStructHelper::get_structs_from_code(CContext *context, const std::string &code, std::vector &out) { +void CStructHelper::get_structs_from_code(CContext &context, const std::string &code, std::vector &out) { size_t codeLength = code.length(); size_t curPos = 0; RegexMatch *currentMatch = RegexHelper::get_first_match(code, LOOKFOR_C_STRUCT_REGEX, curPos); @@ -676,7 +679,13 @@ void CStructHelper::get_structs_from_code(CContext *context, const std::string & } -void CStructHelper::load_structs_from_file(CContext *context, fs::path filepath) { +std::vector _loadedStructFiles; + +void CStructHelper::load_structs_from_file(CContext &context, fs::path filepath) { + if(DataHelper::vector_has(_loadedStructFiles, filepath)) { + return; // Already loaded. Don't do it again! + } + _loadedStructFiles.emplace_back(filepath); std::vector dummy; // Not actually used. std::string cFileCode = FileHelper::read_text_file(filepath); get_structs_from_code(context, cFileCode, dummy); diff --git a/tools/dkr_assets_tool_src/helpers/c/cStructHelper.h b/tools/dkr_assets_tool_src/helpers/c/cStructHelper.h index cff47405..bfb36aa4 100644 --- a/tools/dkr_assets_tool_src/helpers/c/cStructHelper.h +++ b/tools/dkr_assets_tool_src/helpers/c/cStructHelper.h @@ -7,6 +7,8 @@ #include #include +namespace DkrAssetsTool { + class CContext; class CStruct; @@ -38,7 +40,7 @@ struct CStructEntry { CStruct *innerStruct = nullptr; // Only used in struct/union type. - CStructEntry(CContext *context, CStruct *parent, std::string &type, std::string &pointer, std::string &name, + CStructEntry(CContext &context, CStruct *parent, std::string &type, std::string &pointer, std::string &name, std::string &arrayBrackets, std::string hint); bool is_pointer_to_type(); bool is_array(); @@ -82,13 +84,13 @@ struct CStructEntry { int get_offset(); void set_offset(int newOffset); // Note: Should only be called by the parent cstruct. - CContext *get_context(); + CContext &get_context(); private: // The hint map is specifically used for Object Maps. std::unordered_map _hintMap; void _generate_hint_map(std::string &hint); - CContext *_context; + CContext &_context; CStruct *_parent; InternalType _internalType = InternalType::NOT_SET; int _offset = -1; // Is only calculated if get_offset is called. @@ -104,8 +106,8 @@ private: // Class that represents a structure in a C file. class CStruct { public: - CStruct(CContext *context); // Empty struct - CStruct(CContext *context, const std::string &rawCode); // Parse from a struct string. + CStruct(CContext &context); // Empty struct + CStruct(CContext &context, const std::string &rawCode); // Parse from a struct string. ~CStruct(); std::string get_name(); @@ -123,7 +125,7 @@ public: void calculate_offsets(int currentOffset = 0); private: - CContext *_context; + CContext &_context; std::vector _entries; std::string _name = ""; @@ -136,12 +138,8 @@ private: void _calc_trivialness(); }; -/** - * Class that deals with reading / creating C structs. - */ -class CStructHelper { -public: - //static void get_struct_from_c_file(const std::string &filepath, const std::string &structName, CStruct &out); - static void get_structs_from_code(CContext *context, const std::string &code, std::vector &out); - static void load_structs_from_file(CContext *context, fs::path filepath); -}; +namespace CStructHelper { + void get_structs_from_code(CContext &context, const std::string &code, std::vector &out); + void load_structs_from_file(CContext &context, fs::path filepath); +} +} diff --git a/tools/dkr_assets_tool_src/helpers/c/cTypes.cpp b/tools/dkr_assets_tool_src/helpers/c/cTypes.cpp index ef73e02f..188dffb3 100644 --- a/tools/dkr_assets_tool_src/helpers/c/cTypes.cpp +++ b/tools/dkr_assets_tool_src/helpers/c/cTypes.cpp @@ -1,5 +1,7 @@ #include "cTypes.h" +using namespace DkrAssetsTool; + #include #include #include "helpers/debugHelper.h" diff --git a/tools/dkr_assets_tool_src/helpers/c/cTypes.h b/tools/dkr_assets_tool_src/helpers/c/cTypes.h index e280268a..0967d54f 100644 --- a/tools/dkr_assets_tool_src/helpers/c/cTypes.h +++ b/tools/dkr_assets_tool_src/helpers/c/cTypes.h @@ -3,6 +3,8 @@ #include #include +namespace DkrAssetsTool { + // Class that represents standard c types. class CTypes { public: @@ -24,4 +26,6 @@ public: static int64_t clamp_int(const std::string &typeName, int64_t value); -}; \ No newline at end of file +}; + +} \ No newline at end of file diff --git a/tools/dkr_assets_tool_src/helpers/dataHelper.cpp b/tools/dkr_assets_tool_src/helpers/dataHelper.cpp index e3ba7326..14d428e0 100644 --- a/tools/dkr_assets_tool_src/helpers/dataHelper.cpp +++ b/tools/dkr_assets_tool_src/helpers/dataHelper.cpp @@ -1,4 +1,8 @@ #include "dataHelper.h" +#include "libs/sha1.hpp" +#include + +using namespace DkrAssetsTool; #define ALIGN_N(val, N) ((val + (N - 1)) & (~(N - 1))) @@ -23,3 +27,29 @@ bool DataHelper::is_power_of_two(uint32_t value) { } return (value & (value - 1)) == 0; } + +// As far as I know, this is needed to convert a std::vector into a std::istream +class VectorStreamBuf : public std::streambuf { +public: + VectorStreamBuf(const std::vector& vec) { + char* begin = reinterpret_cast(const_cast(vec.data())); + this->setg(begin, begin, begin + vec.size()); + } +}; + +std::string make_sha1_hash_of_bytes(const std::vector& bytes) { + VectorStreamBuf buf(bytes); + std::istream stream(&buf); // Need an std::istream for the sha1 library. + SHA1 sha1; + sha1.update(stream); + return sha1.final(); +} + +std::string DataHelper::make_sha1_hash_of_bytes(BytesView bytes) { + BytesViewStreamBuf buf(bytes); + std::istream stream(&buf); // Need an std::istream for the sha1 library. + SHA1 sha1; + sha1.update(stream); + return sha1.final(); +} + diff --git a/tools/dkr_assets_tool_src/helpers/dataHelper.h b/tools/dkr_assets_tool_src/helpers/dataHelper.h index 681fb300..7828c96d 100644 --- a/tools/dkr_assets_tool_src/helpers/dataHelper.h +++ b/tools/dkr_assets_tool_src/helpers/dataHelper.h @@ -5,31 +5,29 @@ #include #include -/** - * Singleton class that has useful functions for helping with data. - */ -class DataHelper { -public: - // Probably not needed? - static DataHelper& get() { - static DataHelper instance; - return instance; - } +#include "libs/bytes_view.hpp" + +namespace DkrAssetsTool { + +namespace DataHelper { // ALigns length to 16-bytes. - static size_t align16(size_t length); + size_t align16(size_t length); // ALigns length to 8-bytes. - static size_t align8(size_t length); + size_t align8(size_t length); // ALigns length to 4-bytes. - static size_t align4(size_t length); + size_t align4(size_t length); - static bool is_power_of_two(uint32_t value); + bool is_power_of_two(uint32_t value); + + std::string make_sha1_hash_of_bytes(const std::vector& bytes); + std::string make_sha1_hash_of_bytes(BytesView bytes); // Returns -1 if element was not found. template - static int vector_index_of(const std::vector &vec, T element) { + int vector_index_of(const std::vector &vec, T element) { auto it = std::find(vec.begin(), vec.end(), element); // Iterator for the element. if(it == vec.end()) { @@ -43,7 +41,7 @@ public: // Returns -1 if element was not found. template - static bool vector_has(const std::vector &vec, T element) { + bool vector_has(const std::vector &vec, T element) { auto it = std::find(vec.begin(), vec.end(), element); // Iterator for the element. if(it == vec.end()) { @@ -54,4 +52,6 @@ public: // Element was found, get index into the array. return true; } -}; +} + +} \ No newline at end of file diff --git a/tools/dkr_assets_tool_src/helpers/debugHelper.cpp b/tools/dkr_assets_tool_src/helpers/debugHelper.cpp index 3eff8d8b..45b57ad8 100644 --- a/tools/dkr_assets_tool_src/helpers/debugHelper.cpp +++ b/tools/dkr_assets_tool_src/helpers/debugHelper.cpp @@ -1,5 +1,7 @@ #include "debugHelper.h" +using namespace DkrAssetsTool; + void DebugHelper::set_verbose(bool isVerbose) { _verbose = isVerbose; } diff --git a/tools/dkr_assets_tool_src/helpers/debugHelper.h b/tools/dkr_assets_tool_src/helpers/debugHelper.h index 6bee3b0c..1aace80b 100644 --- a/tools/dkr_assets_tool_src/helpers/debugHelper.h +++ b/tools/dkr_assets_tool_src/helpers/debugHelper.h @@ -18,7 +18,7 @@ #define RESET_TEXT "\033[0m" - +namespace DkrAssetsTool { /** * Singleton class that deals with info / logging / errors @@ -127,7 +127,7 @@ public: return ss.str(); } - static std::string bytes_to_hex_string(uint8_t *data, uint32_t dataLength) { + static std::string bytes_to_hex_string(const uint8_t *data, uint32_t dataLength) { std::stringstream ss; ss << std::hex << std::setfill('0'); for(uint32_t i = 0; i < dataLength; ++i) @@ -150,3 +150,4 @@ private: bool _assertsEnabled = false; int timerChannel = 0; }; +} diff --git a/tools/dkr_assets_tool_src/helpers/fileHelper.cpp b/tools/dkr_assets_tool_src/helpers/fileHelper.cpp index db48de15..3b769f6f 100644 --- a/tools/dkr_assets_tool_src/helpers/fileHelper.cpp +++ b/tools/dkr_assets_tool_src/helpers/fileHelper.cpp @@ -4,11 +4,17 @@ #include #include #include +#include +#include #include "helpers/debugHelper.h" +#include "libs/sha1.hpp" + +using namespace DkrAssetsTool; + std::vector FileHelper::read_binary_file(const fs::path &filename) { - DebugHelper::assert(path_exists(filename), "(FileHelper::read_binary_file) Path ", filename, " does not exist!"); + DebugHelper::assert_(path_exists(filename), "(FileHelper::read_binary_file) Path ", filename, " does not exist!"); std::ifstream is; is.open(filename.c_str(), std::ios::binary); is.seekg(0, std::ios::end); @@ -21,7 +27,7 @@ std::vector FileHelper::read_binary_file(const fs::path &filename) { } std::string FileHelper::read_text_file(const fs::path &filename, size_t maxSize) { - DebugHelper::assert(path_exists(filename), "(FileHelper::read_text_file) Path ", filename, " does not exist!"); + DebugHelper::assert_(path_exists(filename), "(FileHelper::read_text_file) Path ", filename, " does not exist!"); std::ifstream t(filename); t.seekg(0, std::ios::end); size_t size = std::min((size_t)t.tellg(), maxSize); @@ -31,6 +37,32 @@ std::string FileHelper::read_text_file(const fs::path &filename, size_t maxSize) return buffer; } +std::vector FileHelper::read_bytes_from_file(const std::filesystem::path& filename, size_t offset, size_t numberOfBytes) { + std::vector buffer(numberOfBytes); + std::ifstream file(filename, std::ios::binary); + + DebugHelper::assert_(file.is_open(), "Could not open file ", filename); + + file.seekg(offset); + file.read(reinterpret_cast(buffer.data()), numberOfBytes); + + // Adjust the buffer size in case we read less than the requested number of bytes + buffer.resize(file.gcount()); + return buffer; +} + +std::string FileHelper::read_ascii_from_binary_file(const fs::path& filename, size_t offset, size_t length) { + std::ifstream file(filename, std::ios::binary); + DebugHelper::assert_(file.is_open(), "Could not open file ", filename); + file.seekg(offset, std::ios::beg); + + std::vector buffer(length); + file.read(buffer.data(), length); + + file.close(); + return std::string(buffer.begin(), buffer.end()); +} + void FileHelper::write_text_file(const std::string &text, const fs::path &filepath, bool ensurePathExists) { if(ensurePathExists) { write_folder_if_it_does_not_exist(filepath); @@ -79,13 +111,13 @@ void FileHelper::write_empty_file(const fs::path &filepath, bool ensurePathExist } void FileHelper::write_binary_file(std::vector &data, const fs::path &filepath, bool ensurePathExists) { + if (data.size() == 0) { + write_empty_file(filepath, ensurePathExists); + return; + } write_binary_file((const char*)&data[0], data.size(), filepath, ensurePathExists); } -void FileHelper::write_binary_file(uint8_t *data, size_t dataSize, const fs::path &filepath, bool ensurePathExists) { - write_binary_file((const char*)data, dataSize, filepath, ensurePathExists); -} - void FileHelper::write_binary_file(const char *data, size_t dataSize, const fs::path &filepath, bool ensurePathExists) { if(ensurePathExists) { write_folder_if_it_does_not_exist(filepath); @@ -95,6 +127,15 @@ void FileHelper::write_binary_file(const char *data, size_t dataSize, const fs:: wf.close(); } +void FileHelper::write_binary_file(const uint8_t* data, size_t dataSize, const fs::path& filepath, bool ensurePathExists) { + // The const char cast is needed to prevent this function from calling itself lol. + write_binary_file((const char*)data, dataSize, filepath, ensurePathExists); +} + +void FileHelper::write_binary_file(const BytesView& data, const fs::path& filepath, bool ensurePathExists) { + write_binary_file((const char*)data.data(), data.size(), filepath, ensurePathExists); +} + bool FileHelper::path_exists(const fs::path &path) { return fs::exists(path); } @@ -119,6 +160,24 @@ bool FileHelper::is_zip_file(const fs::path &path) { return false; } +// mutex to help prevent possible data-races. +std::mutex _sha1CacheMutex; +std::unordered_map _fileSha1Cache; + +std::string FileHelper::get_sha1_of_file(const fs::path& path) { + _sha1CacheMutex.lock(); + if(_fileSha1Cache.find(path) != _fileSha1Cache.end()) { + _sha1CacheMutex.unlock(); + // Found in cache. + return _fileSha1Cache[path]; + } + // Not in cache, so must calculate the result. + SHA1 sha1; + _fileSha1Cache[path] = sha1.from_file(path.generic_string()); + _sha1CacheMutex.unlock(); + return _fileSha1Cache[path]; +} + std::vector FileHelper::get_files_from_directory(const fs::path &dirPath, bool recursive) { std::vector out; try { @@ -141,12 +200,34 @@ std::vector FileHelper::get_files_from_directory(const fs::path &dirPa return out; } +std::vector FileHelper::get_files_from_directory_that_start_with(const fs::path& dirPath, std::string prefix, bool recursive) { + std::vector out; + try { + if (recursive) { + for (const auto& file : fs::recursive_directory_iterator(dirPath)) { + if (StringHelper::starts_with(file.path().filename().generic_string(), prefix)) { + out.push_back(file); + } + } + } else { + for (const auto& file : fs::directory_iterator(dirPath)) { + if (StringHelper::starts_with(file.path().generic_string(), prefix)) { + out.push_back(file); + } + } + } + } catch (fs::filesystem_error const&) { + DebugHelper::error("Could not find the directory ", dirPath); + } + return out; +} + std::vector FileHelper::get_files_from_directory_with_extension(const fs::path &dirPath, std::string extension, bool recursive) { std::vector out; try { if(recursive) { for (const auto &file : fs::recursive_directory_iterator(dirPath)) { - if(StringHelper::ends_with(file.path(), extension)) { + if(file.path().extension() == extension) { if(!file.is_directory()) { out.push_back(file); } @@ -154,7 +235,7 @@ std::vector FileHelper::get_files_from_directory_with_extension(const } } else { for (const auto &file : fs::directory_iterator(dirPath)) { - if(StringHelper::ends_with(file.path(), extension)) { + if(file.path().extension() == extension) { if(!file.is_directory()) { out.push_back(file); } @@ -172,7 +253,7 @@ std::vector FileHelper::get_files_from_directory_excluding_extension(c try { if(recursive) { for (const auto &file : fs::recursive_directory_iterator(dirPath)) { - if(!StringHelper::ends_with(file.path(), extension)) { + if(file.path().extension() != extension) { if(!file.is_directory()) { out.push_back(file); } @@ -180,7 +261,7 @@ std::vector FileHelper::get_files_from_directory_excluding_extension(c } } else { for (const auto &file : fs::directory_iterator(dirPath)) { - if(!StringHelper::ends_with(file.path(), extension)) { + if(file.path().extension() != extension) { if(!file.is_directory()) { out.push_back(file); } @@ -209,12 +290,57 @@ std::vector FileHelper::get_folders_from_directory(const fs::path &dir } } } - } catch(fs::filesystem_error const&) { - DebugHelper::error("Could not find the directory ", dirPath); + } catch(fs::filesystem_error const& e) { + DebugHelper::error(e.what()); } return out; } + +size_t count_files_with_extension(const fs::path& dirPath, std::string extension, bool recursive) { + if (extension[0] != '.') + extension = "." + extension; + + size_t count = 0; + + try { + if (!fs::exists(dirPath) || !fs::is_directory(dirPath)) { + DebugHelper::error("Could not find the directory ", dirPath); + return 0; + } + + if(recursive) { + for (const auto& entry : fs::recursive_directory_iterator(dirPath)) { + if (entry.is_regular_file() && entry.path().extension() == extension) { + ++count; + } + } + } else { + for (const auto& entry : fs::directory_iterator(dirPath)) { + if (entry.is_regular_file() && entry.path().extension() == extension) { + ++count; + } + } + } + } catch (const fs::filesystem_error& e) { + DebugHelper::error(e.what()); + } + + return count; +} + +bool FileHelper::does_folder_contain_paths(const fs::path& dirPath, const std::vector& paths) { + for (auto& subPath : paths) { + if (!path_exists(dirPath / subPath)) { + // At-least one path does not exist. + return false; + } + } + + // All paths exist + return true; +} + void FileHelper::append_files_from_directory(const fs::path &dirPath, std::vector &out, bool recursive) { try { if(recursive) { @@ -265,7 +391,7 @@ void FileHelper::append_files_from_directory_with_extension(const fs::path &dirP try { if(recursive) { for (const auto &file : fs::recursive_directory_iterator(dirPath)) { - if(StringHelper::ends_with(file.path(), extension)) { + if(file.path().extension() == extension) { if(!file.is_directory()) { out.push_back(file); } @@ -273,7 +399,7 @@ void FileHelper::append_files_from_directory_with_extension(const fs::path &dirP } } else { for (const auto &file : fs::directory_iterator(dirPath)) { - if(StringHelper::ends_with(file.path(), extension)) { + if(file.path().extension() == extension) { if(!file.is_directory()) { out.push_back(file); } @@ -301,6 +427,24 @@ bool FileHelper::does_filename_equal(const fs::path &path, std::string filename, } } +// Returns the full path, whether filepath is relative or absolute. Returns std::nullopt if the file does not exist. +std::optional FileHelper::determine_full_filepath(fs::path filepath, fs::path localDirectory) { + if(filepath.is_absolute() && path_exists(filepath)) { + return filepath; + } else if(filepath.is_relative() && path_exists(localDirectory / filepath)) { + return localDirectory / filepath; + } + // Last ditch effort and see if the file exists in the localDirectory itself, ignoring whatever path it had before. + if(path_exists(localDirectory / filepath.filename())) { + return localDirectory / filepath.filename(); + } + return std::nullopt; +} + +fs::path FileHelper::get_working_directory() { + return fs::current_path(); +} + fs::path FileHelper::get_directory(const fs::path &path) { return path.parent_path(); } @@ -331,7 +475,7 @@ void FileHelper::copy(const fs::path &oldPath, const fs::path &newPath, bool rec } void FileHelper::format_folder_string(fs::path &folderPath) { - if((!folderPath.empty()) && !StringHelper::ends_with(folderPath, "/")) { + if((!folderPath.empty()) && !StringHelper::ends_with(folderPath.generic_string(), "/")) { folderPath += "/"; } } @@ -373,7 +517,15 @@ std::string FileHelper::get_last_modified_timestamp(const fs::path &path) { std::time_t t = std::chrono::system_clock::to_time_t(sctp); std::string out(21, '\0'); - strftime(&out[0], out.size(), "%FT%TZ", gmtime(&t)); + + struct tm tmStruct; +#ifdef _WIN32 // Windows + gmtime_s(&tmStruct, &t); +#else // Linux + gmtime_r(&t, &tmStruct); +#endif + + strftime(&out[0], out.size(), "%FT%TZ", &tmStruct); out.pop_back(); // Removes the null terminator from the string. return out; @@ -385,3 +537,61 @@ void FileHelper::insert_timestamps_from_directory(const fs::path &dirPath, std:: timestamps[filepath] = get_last_modified_timestamp(filepath); } } + +bool FileHelper::are_files_the_same(const fs::path& file1, const fs::path& file2) { + std::optional noReason = std::nullopt; + return FileHelper::are_files_the_same(file1, file2, noReason); +} + +bool FileHelper::are_files_the_same(const fs::path& file1, const fs::path& file2, std::optional &outNotTrueReason) { + std::stringstream ss; + + // Check if both files exist + if (!fs::exists(file1)) { + if (outNotTrueReason.has_value()) { + ss << file1 << " does not exist!"; + outNotTrueReason.value() = ss.str(); + } + return false; + } + if (!fs::exists(file2)) { + if (outNotTrueReason.has_value()) { + ss << file2 << " does not exist!"; + outNotTrueReason.value() = ss.str(); + } + return false; + } + + // Check if file sizes are the same + if (fs::file_size(file1) != fs::file_size(file2)) { + if (outNotTrueReason.has_value()) { + ss << "Files are not the same size!"; + ss << std::hex; + ss << " sizeof(" << file1 << ") = 0x" << fs::file_size(file1); + ss << ", sizeof(" << file2 << ") = 0x" << fs::file_size(file2); + ss << std::dec; + outNotTrueReason.value() = ss.str(); + } + return false; + } + + // Open files for reading in binary mode + std::ifstream f1(file1, std::ios::binary); + std::ifstream f2(file2, std::ios::binary); + + // Compare contents byte by byte + char ch1, ch2; + size_t byteOffset = 0; + while (f1.get(ch1) && f2.get(ch2)) { + if (ch1 != ch2) { + if (outNotTrueReason.has_value()) { + ss << "File bytes do not match! At byte offset "; + ss << std::hex << "0x" << byteOffset << std::dec; + outNotTrueReason.value() = ss.str(); + } + return false; + } + byteOffset++; + } + return true; +} diff --git a/tools/dkr_assets_tool_src/helpers/fileHelper.h b/tools/dkr_assets_tool_src/helpers/fileHelper.h index 66654099..d3078d1e 100644 --- a/tools/dkr_assets_tool_src/helpers/fileHelper.h +++ b/tools/dkr_assets_tool_src/helpers/fileHelper.h @@ -5,13 +5,18 @@ #include #include #include +#include #include "stringHelper.h" #include "debugHelper.h" +#include "libs/bytes_view.hpp" + #include namespace fs = std::filesystem; +namespace DkrAssetsTool { + // Using path as a key doesn't seem to work on raspberry pi OS? struct PathHash { std::size_t operator()(const std::filesystem::path& p) const { @@ -19,56 +24,72 @@ struct PathHash { } }; -class FileHelper { -public: - static std::vector read_binary_file(const fs::path &filename); - static std::string read_text_file(const fs::path &filepath, size_t maxSize=SIZE_MAX); - - static void write_text_file(const std::string &text, const fs::path &filepath, bool ensurePathExists=false); +namespace FileHelper { + std::vector read_binary_file(const fs::path& filename); + std::string read_text_file(const fs::path& filepath, size_t maxSize = SIZE_MAX); + + std::vector read_bytes_from_file(const fs::path& filename, size_t offset, size_t numberOfBytes); + std::string read_ascii_from_binary_file(const fs::path& filename, size_t offset, size_t length); + + void write_text_file(const std::string& text, const fs::path& filepath, bool ensurePathExists = false); // Only writes if the contents of the file have been changed. - static void write_text_file_if_changed(const std::string &text, const fs::path &filepath, bool ensurePathExists=false); + void write_text_file_if_changed(const std::string& text, const fs::path& filepath, bool ensurePathExists = false); + + void write_folder_if_it_does_not_exist(const fs::path& path); + + void write_empty_file(const fs::path& filepath, bool ensurePathExists = false); + void write_binary_file(std::vector& data, const fs::path& filepath, bool ensurePathExists = false); + void write_binary_file(const char* data, size_t dataSize, const fs::path& filepath, bool ensurePathExists = false); + void write_binary_file(const uint8_t* data, size_t dataSize, const fs::path& filepath, bool ensurePathExists = false); + void write_binary_file(const BytesView& data, const fs::path& filepath, bool ensurePathExists = false); + + bool path_exists(const fs::path& path); + bool is_zip_file(const fs::path& path); + + std::string get_sha1_of_file(const fs::path& path); + + std::vector get_files_from_directory(const fs::path& dirPath, bool recursive = true); + std::vector get_files_from_directory_that_start_with(const fs::path& dirPath, std::string prefix, bool recursive = true); + std::vector get_files_from_directory_with_extension(const fs::path& dirPath, std::string extension, bool recursive = true); + std::vector get_files_from_directory_excluding_extension(const fs::path& dirPath, std::string extension, bool recursive = true); + std::vector get_folders_from_directory(const fs::path& dirPath, bool recursive = true); - static void write_folder_if_it_does_not_exist(const fs::path &path); + size_t count_files_with_extension(const fs::path& dirPath, std::string extension, bool recursive = true); + + bool does_folder_contain_paths(const fs::path& dirPath, const std::vector& paths); + + void append_files_from_directory(const fs::path& dirPath, std::vector& out, bool recursive = true); + void append_files_from_directory_relative(const fs::path& dirPath, std::vector& out, bool recursive = true); + void append_files_from_directory_with_extension(const fs::path& dirPath, std::string extension, std::vector& out, bool recursive = true); + + fs::path get_filename_from_path(const fs::path& path, bool exclude_extension = false); + + bool does_filename_equal(const fs::path& path, std::string filename, bool exclude_extension = false); - static void write_empty_file(const fs::path &filepath, bool ensurePathExists=false); - static void write_binary_file(std::vector &data, const fs::path &filepath, bool ensurePathExists=false); - static void write_binary_file(uint8_t *data, size_t dataSize, const fs::path &filepath, bool ensurePathExists=false); - static void write_binary_file(const char *data, size_t dataSize, const fs::path &filepath, bool ensurePathExists=false); - - static bool path_exists(const fs::path &path); - static bool is_zip_file(const fs::path &path); - - static std::vector get_files_from_directory(const fs::path &dirPath, bool recursive=true); - static std::vector get_files_from_directory_with_extension(const fs::path &dirPath, std::string extension, bool recursive=true); - static std::vector get_files_from_directory_excluding_extension(const fs::path &dirPath, std::string extension, bool recursive=true); - static std::vector get_folders_from_directory(const fs::path &dirPath, bool recursive=true); - - static void append_files_from_directory(const fs::path &dirPath, std::vector &out, bool recursive=true); - static void append_files_from_directory_relative(const fs::path &dirPath, std::vector &out, bool recursive=true); - static void append_files_from_directory_with_extension(const fs::path &dirPath, std::string extension, std::vector &out, bool recursive=true); - - static fs::path get_filename_from_path(const fs::path &path, bool exclude_extension = false); - - static bool does_filename_equal(const fs::path &path, std::string filename, bool exclude_extension = false); - - static fs::path get_directory(const fs::path &path); - - static void delete_directory(const fs::path &path); - static void delete_file(const fs::path &path); - - static void rename(const fs::path &oldPath, const fs::path &newPath); - static void copy(const fs::path &oldPath, const fs::path &newPath, bool recursive = false); - - static void format_folder_string(fs::path &folderPath); - - static size_t align16(size_t size); - - static void byteswap(std::vector &bytes); + // Returns the full path, whether filepath is relative or absolute. Returns std::nullopt if the file does not exist. + std::optional determine_full_filepath(fs::path filepath, fs::path localDirectory); + + fs::path get_working_directory(); + fs::path get_directory(const fs::path& path); + + void delete_directory(const fs::path& path); + void delete_file(const fs::path& path); + + void rename(const fs::path& oldPath, const fs::path& newPath); + void copy(const fs::path& oldPath, const fs::path& newPath, bool recursive = false); + + void format_folder_string(fs::path& folderPath); + + size_t align16(size_t size); + + void byteswap(std::vector& bytes); // Converts between big and little endian - static void endianswap(std::vector &bytes); - - static std::string get_last_modified_timestamp(const fs::path &path); - static void insert_timestamps_from_directory(const fs::path &dirPath, std::unordered_map ×tamps); -private: - -}; + void endianswap(std::vector& bytes); + + std::string get_last_modified_timestamp(const fs::path& path); + void insert_timestamps_from_directory(const fs::path& dirPath, std::unordered_map& timestamps); + + bool are_files_the_same(const fs::path& file1, const fs::path& file2); + bool are_files_the_same(const fs::path& file1, const fs::path& file2, std::optional& outNotTrueReason); +} +} \ No newline at end of file diff --git a/tools/dkr_assets_tool_src/helpers/gltf/gltfDkrTriangle.cpp b/tools/dkr_assets_tool_src/helpers/gltf/gltfDkrTriangle.cpp index 919a695f..b1f3b1e5 100644 --- a/tools/dkr_assets_tool_src/helpers/gltf/gltfDkrTriangle.cpp +++ b/tools/dkr_assets_tool_src/helpers/gltf/gltfDkrTriangle.cpp @@ -1,5 +1,7 @@ #include "gltfDkrTriangle.h" +using namespace DkrAssetsTool; + #include GltfDkrTriangle::GltfDkrTriangle(DkrTriangle &tri) { diff --git a/tools/dkr_assets_tool_src/helpers/gltf/gltfDkrTriangle.h b/tools/dkr_assets_tool_src/helpers/gltf/gltfDkrTriangle.h index 4b3a5645..9b098230 100644 --- a/tools/dkr_assets_tool_src/helpers/gltf/gltfDkrTriangle.h +++ b/tools/dkr_assets_tool_src/helpers/gltf/gltfDkrTriangle.h @@ -2,6 +2,8 @@ #include "fileTypes/triangle.hpp" +namespace DkrAssetsTool { + class GltfDkrTriangle { public: uint16_t vi0, vi1, vi2; @@ -19,4 +21,6 @@ public: uint16_t get_maximum_index(); static size_t get_size(); -}; \ No newline at end of file +}; + +} diff --git a/tools/dkr_assets_tool_src/helpers/gltf/gltfDkrVertex.cpp b/tools/dkr_assets_tool_src/helpers/gltf/gltfDkrVertex.cpp index 641fd5bb..6929d9eb 100644 --- a/tools/dkr_assets_tool_src/helpers/gltf/gltfDkrVertex.cpp +++ b/tools/dkr_assets_tool_src/helpers/gltf/gltfDkrVertex.cpp @@ -1,5 +1,7 @@ #include "gltfDkrVertex.h" +using namespace DkrAssetsTool; + GltfDkrVertex::GltfDkrVertex(DkrVertex *vertex, DkrTexCoords *uv, int texWidth, int texHeight){ x = (float)vertex->x * MODEL_SCALE_GLTF; y = (float)vertex->y * MODEL_SCALE_GLTF; diff --git a/tools/dkr_assets_tool_src/helpers/gltf/gltfDkrVertex.h b/tools/dkr_assets_tool_src/helpers/gltf/gltfDkrVertex.h index 6eaba641..96d6b05b 100644 --- a/tools/dkr_assets_tool_src/helpers/gltf/gltfDkrVertex.h +++ b/tools/dkr_assets_tool_src/helpers/gltf/gltfDkrVertex.h @@ -3,6 +3,8 @@ #include "fileTypes/vertex.hpp" #include "fileTypes/texCoords.hpp" +namespace DkrAssetsTool { + // TODO: Move this into a singleton class. #define MODEL_SCALE_GLTF (1.0f / 1000.0f) #define MODEL_SCALE_GLTF_INVERSE (1.0f / MODEL_SCALE_GLTF) @@ -36,4 +38,6 @@ public: static size_t get_uv_size(); static size_t get_size(); -}; \ No newline at end of file +}; + +} \ No newline at end of file diff --git a/tools/dkr_assets_tool_src/helpers/gltf/gltfHelper.cpp b/tools/dkr_assets_tool_src/helpers/gltf/gltfHelper.cpp index 0999f633..555a958a 100644 --- a/tools/dkr_assets_tool_src/helpers/gltf/gltfHelper.cpp +++ b/tools/dkr_assets_tool_src/helpers/gltf/gltfHelper.cpp @@ -1,5 +1,7 @@ #include "gltfHelper.h" +using namespace DkrAssetsTool; + // Defines for the tinygltf library. #define TINYGLTF_IMPLEMENTATION #define TINYGLTF_USE_CPP14 diff --git a/tools/dkr_assets_tool_src/helpers/gltf/gltfHelper.h b/tools/dkr_assets_tool_src/helpers/gltf/gltfHelper.h index 7b213855..a1d73357 100644 --- a/tools/dkr_assets_tool_src/helpers/gltf/gltfHelper.h +++ b/tools/dkr_assets_tool_src/helpers/gltf/gltfHelper.h @@ -5,6 +5,8 @@ #include #include "libs/tiny_gltf.h" +namespace DkrAssetsTool { + class GltfFile; // Represents a node in the gltf file. @@ -97,3 +99,5 @@ class GltfHelper { public: }; + +} \ No newline at end of file diff --git a/tools/dkr_assets_tool_src/helpers/gltf/gltfPrimitive.cpp b/tools/dkr_assets_tool_src/helpers/gltf/gltfPrimitive.cpp index 12108bef..1a1f30c2 100644 --- a/tools/dkr_assets_tool_src/helpers/gltf/gltfPrimitive.cpp +++ b/tools/dkr_assets_tool_src/helpers/gltf/gltfPrimitive.cpp @@ -1,5 +1,7 @@ #include "gltfPrimitive.h" +using namespace DkrAssetsTool; + GltfPrimitive::GltfPrimitive(DkrVertex *vertices, DkrTriangle *triangles, size_t numTris, TextureHeader *texture, int materialIndex) { int texW = 0; int texH = 0; diff --git a/tools/dkr_assets_tool_src/helpers/gltf/gltfPrimitive.h b/tools/dkr_assets_tool_src/helpers/gltf/gltfPrimitive.h index a1446292..a85cbc2b 100644 --- a/tools/dkr_assets_tool_src/helpers/gltf/gltfPrimitive.h +++ b/tools/dkr_assets_tool_src/helpers/gltf/gltfPrimitive.h @@ -1,11 +1,13 @@ #pragma once + #include #include "gltfDkrVertex.h" #include "gltfDkrTriangle.h" #include "fileTypes/texture.hpp" +namespace DkrAssetsTool { class GltfPrimitive { public: @@ -18,3 +20,5 @@ private: int _get_or_set_index(DkrVertex *vertex, DkrTexCoords *uv, int texWidth, int texHeight); }; + +} \ No newline at end of file diff --git a/tools/dkr_assets_tool_src/helpers/gzipHelper.cpp b/tools/dkr_assets_tool_src/helpers/gzipHelper.cpp index bdad1619..54ff1058 100644 --- a/tools/dkr_assets_tool_src/helpers/gzipHelper.cpp +++ b/tools/dkr_assets_tool_src/helpers/gzipHelper.cpp @@ -1,13 +1,16 @@ #include "gzipHelper.h" +using namespace DkrAssetsTool; + #include "libs/gzip/DKRCompression.h" -// Compression shouldn't be thread safe, but testing suggests that the mutex isn't necessary? -//#include -//std::mutex gzipMutex; +#include + +// The old version of gzip is not thread-safe, so need to lock it using a mutex. +std::mutex gzipMutex; std::vector GzipHelper::decompress_gzip(std::vector &compressedData) { - //gzipMutex.lock(); + gzipMutex.lock(); // Needed padding to prevent errors with decompressing. if(compressedData[compressedData.size() - 1] != 0) { @@ -18,15 +21,15 @@ std::vector GzipHelper::decompress_gzip(std::vector &compresse } DKRCompression compression; std::vector out = compression.decompressBuffer(compressedData); - //gzipMutex.unlock(); + gzipMutex.unlock(); return out; } std::vector GzipHelper::compress_gzip(std::vector &uncompressedData) { - //gzipMutex.lock(); + gzipMutex.lock(); DKRCompression compression; std::vector out = compression.compressBuffer(uncompressedData); - //gzipMutex.unlock(); + gzipMutex.unlock(); return out; } diff --git a/tools/dkr_assets_tool_src/helpers/gzipHelper.h b/tools/dkr_assets_tool_src/helpers/gzipHelper.h index 6c3e54e4..f43e74ff 100644 --- a/tools/dkr_assets_tool_src/helpers/gzipHelper.h +++ b/tools/dkr_assets_tool_src/helpers/gzipHelper.h @@ -3,13 +3,12 @@ #include #include -/** - * Singleton class that deals with compressing / decompressing asset data using gzip. - */ -class GzipHelper { -public: - static std::vector decompress_gzip(std::vector &compressedData); +namespace DkrAssetsTool { +namespace GzipHelper { + + std::vector decompress_gzip(std::vector &compressedData); // Note: uncompressedData will become garbled (Don't use it after this function!). - static std::vector compress_gzip(std::vector &uncompressedData); + std::vector compress_gzip(std::vector &uncompressedData); }; +} \ No newline at end of file diff --git a/tools/dkr_assets_tool_src/helpers/imageHelper.cpp b/tools/dkr_assets_tool_src/helpers/imageHelper.cpp index b5e05989..7c9d4413 100644 --- a/tools/dkr_assets_tool_src/helpers/imageHelper.cpp +++ b/tools/dkr_assets_tool_src/helpers/imageHelper.cpp @@ -1,6 +1,9 @@ #include "imageHelper.h" +using namespace DkrAssetsTool; + #include // for memcpy +#include #include #include "fileHelper.h" @@ -9,7 +12,7 @@ #include "libs/stb_image.h" #include "helpers/dataHelper.h" -N64Image::N64Image(fs::path filepath, std::string &format, bool alignData) : _format(format) { +N64Image::N64Image(fs::path filepath, std::string format, bool alignData) : _format(format) { bool isColourImage = (format == "RGBA16") || (format == "RGBA32") || (format == "CI4") || (format == "CI8"); DebugHelper::assert(StringHelper::ends_with(filepath, ".png"), @@ -46,7 +49,7 @@ N64Image::N64Image(fs::path filepath, std::string &format, bool alignData) : _fo } -N64Image::N64Image(int width, int height, std::string &format, bool alignData) : _width(width), _height(height), _format(format) { +N64Image::N64Image(int width, int height, std::string format, bool alignData) : _width(width), _height(height), _format(format) { int size = width * height; switch(ImageHelper::bytes_in_format(_format)) { case 0: // 4-bit format @@ -70,7 +73,7 @@ N64Image::N64Image(int width, int height, std::string &format, bool alignData) : N64Image::~N64Image() { } -void N64Image::write_from(uint8_t *inData, size_t dataLength) { +void N64Image::write_from(const uint8_t *inData, size_t dataLength) { memcpy(&_data[0], inData, dataLength); } @@ -78,35 +81,94 @@ void N64Image::copy_to(uint8_t *out) { memcpy(out, &_data[0], size()); } +void N64Image::_prep_region_copy(size_t &srcWidth, size_t &bytesToCopyPerLine, size_t &imgWidthInBytes, size_t &xOffsetInBytes, N64Image::Region ®ion) { + // Make sure the region doesn't extend beyond the image. + region.x0 = std::clamp(region.x0, 0, _width); + region.x1 = std::clamp(region.x1, 0, _width); + region.y0 = std::clamp(region.y0, 0, _height); + region.y1 = std::clamp(region.y1, 0, _height); + + int regionWidth = region.x1 - region.x0; + int regionHeight = region.y1 - region.y0; + + if(regionWidth <= 0 || regionHeight <= 0) { + return; + } + + size_t bitDepth = get_bit_depth(); + size_t bytesPerPixel = bitDepth / 8; + xOffsetInBytes = region.x0; + imgWidthInBytes = _width; + bytesToCopyPerLine = regionWidth; + + if(bitDepth == 4) { + srcWidth /= 2; + bytesToCopyPerLine /= 2; + xOffsetInBytes /= 2; + imgWidthInBytes /= 2; + } else { + srcWidth *= bytesPerPixel; + bytesToCopyPerLine *= bytesPerPixel; + xOffsetInBytes *= bytesPerPixel; + imgWidthInBytes *= bytesPerPixel; + } +} + +// in format is assumed to be the same as this image. +void N64Image::write_data_to_region(const uint8_t *in, size_t inWidth, N64Image::Region region) { + size_t bytesToCopyPerLine, imgWidthInBytes, xOffsetInBytes; + _prep_region_copy(inWidth, bytesToCopyPerLine, imgWidthInBytes, xOffsetInBytes, region); + + int regionHeight = region.y1 - region.y0; + for(int line = 0; line < regionHeight; line++) { + const uint8_t *src = in + (line * inWidth); + uint8_t *dst = _data.data() + ((region.y0 + line) * imgWidthInBytes) + xOffsetInBytes; + memcpy(dst, src, bytesToCopyPerLine); + } +} + +// out format is assumed to be the same as this image. +void N64Image::copy_data_from_region(uint8_t *out, size_t outWidth, N64Image::Region region) { + size_t bytesToCopyPerLine, imgWidthInBytes, xOffsetInBytes; + _prep_region_copy(outWidth, bytesToCopyPerLine, imgWidthInBytes, xOffsetInBytes, region); + + int regionHeight = region.y1 - region.y0; + for(int line = 0; line < regionHeight; line++) { + uint8_t *dst = out + (line * outWidth); + const uint8_t *src = _data.data() + ((region.y0 + line) * imgWidthInBytes) + xOffsetInBytes; + memcpy(dst, src, bytesToCopyPerLine); + } +} + void N64Image::interlace() { int bitDepth = get_bit_depth(); + int bytesPerPixel = bitDepth / 8; int bufferSize = (bitDepth == 32) ? 8 : 4; + int bytesPerRow = _width; uint8_t* temp = new uint8_t[bufferSize]; - int numPixels; if(bitDepth == 4) { - numPixels = ((_width * _height) / 2); + bytesPerRow /= 2; } else { - numPixels = (_width * _height * (bitDepth / 8)); + bytesPerRow *= bytesPerPixel; } int stride = bufferSize * 2; + int swapsPerRow = bytesPerRow / stride; - int size = numPixels / stride; - - for(int i = 0; i < size; i++) { - int row; - if(bitDepth == 4) { - row = (i * stride) / _width * 2; - } else { - row = (i * stride) / _width / (bitDepth / 8); - } - if(row % 2 == 0) continue; - for(int j = 0; j < bufferSize; j++) { - temp[j] = _data[i * stride + j]; - _data[i * stride + j] = _data[(i * stride + j + bufferSize)]; - _data[(i * stride + j + bufferSize)] = temp[j]; + // Only want to do the swaps on odd-number lines. + for(int row = 1; row < _height; row+=2) { + int offset = row * bytesPerRow; + + for(int swap = 0; swap < swapsPerRow; swap++) { + for(int j = 0; j < bufferSize; j++) { + temp[j] = _data[offset + j]; + _data[offset + j] = _data[(offset + j + bufferSize)]; + _data[(offset + j + bufferSize)] = temp[j]; + } + + offset += stride; } } @@ -359,7 +421,14 @@ size_t ImageHelper::image_size(int width, int height, std::string &format) { size_t ImageHelper::image_size(fs::path filepath, std::string &format) { int width, height, channels; - int gotInfo = stbi_info(filepath.c_str(), &width, &height, &channels); - DebugHelper::assert(gotInfo, filepath, " could not be loaded!"); + int gotInfo = stbi_info(filepath.generic_string().c_str(), &width, &height, &channels); + DebugHelper::assert_(gotInfo, "(ImageHelper::image_size) ", filepath, " could not be loaded!"); return image_size(width, height, format); } + +void ImageHelper::get_width_and_height(fs::path filepath, int &outWidth, int &outHeight) { + int channels; + int gotInfo = stbi_info(filepath.generic_string().c_str(), &outWidth, &outHeight, &channels); + DebugHelper::assert_(gotInfo, "(ImageHelper::get_width_and_height) ", filepath, " could not be loaded!"); +} + diff --git a/tools/dkr_assets_tool_src/helpers/imageHelper.h b/tools/dkr_assets_tool_src/helpers/imageHelper.h index 3e917e43..56df5caf 100644 --- a/tools/dkr_assets_tool_src/helpers/imageHelper.h +++ b/tools/dkr_assets_tool_src/helpers/imageHelper.h @@ -7,14 +7,24 @@ #include #include +namespace DkrAssetsTool { class N64Image { public: - N64Image(fs::path filepath, std::string &format, bool alignData=false); // Load image from filepath (Currently only .png is supported) - N64Image(int width, int height, std::string &format, bool alignData=false); // Create new image + // TODO: Move to MathHelper? + struct Region { + int x0, y0, x1, y1; + }; + + N64Image(fs::path filepath, std::string format, bool alignData=false); // Load image from filepath (Currently only .png is supported) + N64Image(int width=0, int height=0, std::string format="I4", bool alignData=false); // Create new image ~N64Image(); - void write_from(uint8_t *inData, size_t dataLength); + void write_from(const uint8_t *inData, size_t dataLength); void copy_to(uint8_t *out); + + // src format is assumed to be the same as this one. + void write_data_to_region(const uint8_t *in, size_t inWidth, N64Image::Region region); + void copy_data_from_region(uint8_t *out, size_t outWidth, N64Image::Region region); void interlace(); void flip_vertically(); @@ -26,6 +36,7 @@ public: int get_height(); int get_bit_depth(); + // TODO: Refactor to use something other than raw pointers. uint8_t *get_img_as_rgba32(); // Note: pointer must be freed by caller! uint8_t *get_img_as_ia16(); // Note: pointer must be freed by caller! @@ -36,21 +47,18 @@ private: std::string _format; std::vector _data; + + void _prep_region_copy(size_t &srcWidth, size_t &bytesToCopyPerLine, size_t &imgWidthInBytes, size_t &xOffsetInBytes, N64Image::Region ®ion); }; /** - * Singleton class that deals with N64 image formats and with saving/loading images. + * Deals with N64 image formats and with saving/loading images. */ -class ImageHelper { -public: - static ImageHelper& get() { - static ImageHelper instance; - return instance; - } - - static N64Image load_image(fs::path filepath, std::string format="RGBA16"); - static int bytes_in_format(std::string &format); - static size_t image_size(int width, int height, std::string &format); - static size_t image_size(fs::path filepath, std::string &format); // Get byte-size of .png image - -}; +namespace ImageHelper { + N64Image load_image(fs::path filepath, std::string format="RGBA16"); + int bytes_in_format(std::string &format); + size_t image_size(int width, int height, std::string &format); + size_t image_size(fs::path filepath, std::string &format); // Get byte-size of .png image + void get_width_and_height(fs::path filepath, int &outWidth, int &outHeight); // Get width and height of a .png image +} +} diff --git a/tools/dkr_assets_tool_src/helpers/jsonHelper.cpp b/tools/dkr_assets_tool_src/helpers/jsonHelper.cpp index 26675e17..fd32658b 100644 --- a/tools/dkr_assets_tool_src/helpers/jsonHelper.cpp +++ b/tools/dkr_assets_tool_src/helpers/jsonHelper.cpp @@ -1,15 +1,18 @@ #include "jsonHelper.h" +using namespace DkrAssetsTool; + #include #include #include +#include #include "helpers/fileHelper.h" #include "helpers/dataHelper.h" #include "helpers/debugHelper.h" #include "helpers/stringHelper.h" -#include "misc/settings.hpp" +#include "misc/globalSettings.h" // TODO: Support RapidJSON #include "libs/json.hpp" // nlohmann JSON library. (https://github.com/nlohmann/json) @@ -18,55 +21,60 @@ using json = nlohmann::json; +namespace DkrAssetsTool { namespace JSON_HELPER_DETAILS { class JsonFileData { public: JsonFileData(std::string filepath) { std::ifstream f(filepath); - data = json::parse(f); + try { + data = json::parse(f); + } catch (std::exception &e) { + DebugHelper::error("Failed to parse json file \"", filepath, "\"\n", e.what()); + } } JsonFileData() { } json data; }; } +} /*******************************************************************************************************/ JsonFile::JsonFile(std::string filepath) : _filepath(filepath) { - _data = new JSON_HELPER_DETAILS::JsonFileData(filepath); + _data = std::make_unique(filepath); } JsonFile::~JsonFile() { - delete _data; } -std::string JsonFile::get_string(const std::string &ptr, const std::string &defaultValue) { +std::string JsonFile::get_string(const std::string &ptr, const std::string &defaultValue) const { const json::json_pointer jsonPtr(ptr); // Working with JSON pointers is a LOT faster than normal basic_json return _data->data.value(jsonPtr, defaultValue); } // Returns the string as lowercase, used when case shouldn't matter. -std::string JsonFile::get_string_lowercase(const std::string &ptr, const std::string &defaultValue) { +std::string JsonFile::get_string_lowercase(const std::string &ptr, const std::string &defaultValue) const { std::string out = get_string(ptr, defaultValue); StringHelper::make_lowercase(out); return out; } // Returns the string as uppercase, mainly used for texture formats (RGBA16, IA8, etc.) -std::string JsonFile::get_string_uppercase(const std::string &ptr, const std::string &defaultValue) { +std::string JsonFile::get_string_uppercase(const std::string &ptr, const std::string &defaultValue) const { std::string out = get_string(ptr, defaultValue); StringHelper::make_uppercase(out); return out; } -fs::path JsonFile::get_path(const std::string &ptr, const std::string &defaultValue) { +fs::path JsonFile::get_path(const std::string &ptr, const std::string &defaultValue) const { fs::path out = get_string(ptr, defaultValue); FileHelper::format_folder_string(out); // Make sure the returning string is in valid form. return out; } -void JsonFile::copy_string_to(const std::string &ptr, char *output, size_t maxLengthForOutput, const std::string &defaultValue) { +void JsonFile::copy_string_to(const std::string &ptr, char *output, size_t maxLengthForOutput, const std::string &defaultValue) const { if(maxLengthForOutput < 1) { return; } @@ -87,23 +95,41 @@ void JsonFile::copy_string_to(const std::string &ptr, char *output, size_t maxLe outStr.copy(output, length); } -int JsonFile::get_int(const std::string &ptr, const int &defaultValue) { +int JsonFile::get_int(const std::string &ptr, const int &defaultValue) const { const json::json_pointer jsonPtr(ptr); return _data->data.value(jsonPtr, defaultValue); } -bool JsonFile::get_bool(const std::string &ptr, const bool &defaultValue) { +bool JsonFile::get_bool(const std::string &ptr, const bool &defaultValue) const { const json::json_pointer jsonPtr(ptr); return _data->data.value(jsonPtr, defaultValue); } -double JsonFile::get_float(const std::string &ptr, const double &defaultValue) { +double JsonFile::get_float(const std::string &ptr, const double &defaultValue) const { const json::json_pointer jsonPtr(ptr); return _data->data.value(jsonPtr, defaultValue); } +std::any JsonFile::get_any(const std::string& ptr) const { + const json::json_pointer jsonPtr(ptr); + + switch (_data->data[jsonPtr].type()) { + case json::value_t::boolean: + return std::any(_data->data.value(jsonPtr, false)); + case json::value_t::number_float: + return std::any(_data->data.value(jsonPtr, 0.0)); + case json::value_t::number_integer: + case json::value_t::number_unsigned: + return std::any(_data->data.value(jsonPtr, 0)); + case json::value_t::string: + return std::any(_data->data.value(jsonPtr, "")); + default: + return std::any(); + } +} + template -void JsonFile::get_array(const std::string &ptr, std::vector &arr) { +void JsonFile::get_array(const std::string &ptr, std::vector &arr) const { const json::json_pointer jsonPtr(ptr); json arrayJson = _data->data[jsonPtr]; if(!arrayJson.is_array()) { @@ -116,14 +142,14 @@ void JsonFile::get_array(const std::string &ptr, std::vector &arr) { } } -template void JsonFile::get_array(const std::string &ptr, std::vector &arr); -template void JsonFile::get_array(const std::string &ptr, std::vector &arr); -template void JsonFile::get_array(const std::string &ptr, std::vector &arr); +template void JsonFile::get_array(const std::string &ptr, std::vector &arr) const; +template void JsonFile::get_array(const std::string &ptr, std::vector &arr) const; +template void JsonFile::get_array(const std::string &ptr, std::vector &arr) const; // Returns the index of the element, or -1 if it doesn't exist. template -int JsonFile::get_index_of_elem_in_array(const std::string &ptr, T elem) { +int JsonFile::get_index_of_elem_in_array(const std::string &ptr, T elem) const { const json::json_pointer jsonPtr(ptr); json arrayJson = _data->data[jsonPtr]; if(!arrayJson.is_array()) { @@ -140,12 +166,12 @@ int JsonFile::get_index_of_elem_in_array(const std::string &ptr, T elem) { return std::distance(arrayJson.cbegin(), it); } -template int JsonFile::get_index_of_elem_in_array(const std::string &ptr, std::string elem); -template int JsonFile::get_index_of_elem_in_array(const std::string &ptr, int elem); -template int JsonFile::get_index_of_elem_in_array(const std::string &ptr, bool elem); +template int JsonFile::get_index_of_elem_in_array(const std::string &ptr, std::string elem) const; +template int JsonFile::get_index_of_elem_in_array(const std::string &ptr, int elem) const; +template int JsonFile::get_index_of_elem_in_array(const std::string &ptr, bool elem) const; template -T JsonFile::get_elem_from_array(const std::string &ptr, size_t index) { +T JsonFile::get_elem_from_array(const std::string &ptr, size_t index) const { const json::json_pointer jsonPtr(ptr); json arrayJson = _data->data[jsonPtr]; if(!arrayJson.is_array()) { @@ -155,12 +181,124 @@ T JsonFile::get_elem_from_array(const std::string &ptr, size_t index) { return arrayJson[index].get(); } -template std::string JsonFile::get_elem_from_array(const std::string &ptr, size_t index); -template int JsonFile::get_elem_from_array(const std::string &ptr, size_t index); -template bool JsonFile::get_elem_from_array(const std::string &ptr, size_t index); -template float JsonFile::get_elem_from_array(const std::string &ptr, size_t index); +template std::string JsonFile::get_elem_from_array(const std::string &ptr, size_t index) const; +template int JsonFile::get_elem_from_array(const std::string &ptr, size_t index) const; +template bool JsonFile::get_elem_from_array(const std::string &ptr, size_t index) const; +template float JsonFile::get_elem_from_array(const std::string &ptr, size_t index) const; -size_t JsonFile::length_of_array(const std::string &ptr) { + +template +std::optional JsonFile::get_elem_from_object_array_that_has_property(const std::string& ptr, const std::string& valueName, const std::string& propertyName, T2 propertyValue) const { + const json::json_pointer jsonPtr(ptr); + json &arrayJson = _data->data[jsonPtr]; + DebugHelper::assert_(arrayJson.is_array(), "(JsonFile::get_elem_from_object_array_that_has_property) ", + _filepath, " [", ptr, "] is not an array!"); + + for (auto it = arrayJson.begin(); it != arrayJson.end(); it++) { + json &arrayJsonObj = it.value(); + DebugHelper::assert_(arrayJsonObj.is_object(), "(JsonFile::get_elem_from_object_array_that_has_property) ", + _filepath, " [", ptr, "] has an element that is not an object!"); + if (arrayJsonObj.contains(propertyName) && arrayJsonObj[propertyName] == propertyValue) { + return arrayJsonObj[valueName]; + } + } + + // Value does not exist in the array. + return std::nullopt; +} +template std::optional JsonFile::get_elem_from_object_array_that_has_property(const std::string& ptr, const std::string& valueName, + const std::string& propertyName, std::string propertyValue) const; +template std::optional JsonFile::get_elem_from_object_array_that_has_property(const std::string& ptr, const std::string& valueName, + const std::string& propertyName, std::string propertyValue) const; + +template +std::optional JsonFile::get_index_of_object_that_has_property(const std::string& ptr, const std::string& propertyName, T propertyValue) const { + const json::json_pointer jsonPtr(ptr); + json &arrayJson = _data->data[jsonPtr]; + DebugHelper::assert_(arrayJson.is_array(), "(JsonFile::get_index_of_object_that_has_property) ", + _filepath, " [", ptr, "] is not an array!"); + + for (size_t i = 0; i < arrayJson.size(); i++) { + json &arrayJsonObj = arrayJson[i]; + DebugHelper::assert_(arrayJsonObj.is_object(), "(JsonFile::get_index_of_object_that_has_property) ", + _filepath, " [", ptr, "] has an element that is not an object!"); + if (arrayJsonObj.contains(propertyName) && arrayJsonObj[propertyName] == propertyValue) { + return i; + } + } + + // Value does not exist in the array. + return std::nullopt; +} + +template std::optional JsonFile::get_index_of_object_that_has_property(const std::string& ptr, + const std::string& propertyName, std::string propertyValue) const; + +template +std::unordered_map> JsonFile::create_map_of_indices_from_property_value(const std::string& ptr, const std::string& propertyName) const { + std::unordered_map> out; + + const json::json_pointer jsonPtr(ptr); + json& arrayJson = _data->data[jsonPtr]; + DebugHelper::assert_(arrayJson.is_array(), "(JsonFile::get_index_of_object_that_has_property) ", + _filepath, " [", ptr, "] is not an array!"); + + for (size_t i = 0; i < arrayJson.size(); i++) { + json& arrayJsonObj = arrayJson[i]; + DebugHelper::assert_(arrayJsonObj.is_object(), "(JsonFile::get_index_of_object_that_has_property) ", + _filepath, " [", ptr, "] has an element that is not an object!"); + if (arrayJsonObj.contains(propertyName)) { + T outIndex = arrayJsonObj[propertyName].get(); + if (out.find(outIndex) == out.end()) { + out[outIndex] = std::vector(); + } + out[outIndex].emplace_back(i); // Add the index into the out vector. + } + } + + return out; +} + +template std::unordered_map> JsonFile::create_map_of_indices_from_property_value(const std::string& ptr, const std::string& propertyName) const; + + +std::vector JsonFile::get_keys_of_object(const std::string& ptr) const { + std::vector keys; + + const json::json_pointer jsonPtr(ptr); + json data = _data->data[jsonPtr]; + + if (!data.is_object()) { + return keys; // Return empty vector. + } + + for (auto it = data.begin(); it != data.end(); it++) { + keys.push_back(it.key()); + } + + return keys; +} + +static void add_json_pointers(std::vector &pointers, json &data, std::string currentPointer = "") { + if (!currentPointer.empty()) { + pointers.push_back(currentPointer); + } + if (!data.is_object() && !data.is_array()) { + return; + } + currentPointer += "/"; + for (auto it = data.begin(); it != data.end(); it++) { + add_json_pointers(pointers, it.value(), currentPointer + it.key()); + } +} + +std::vector JsonFile::get_all_pointers() const { + std::vector pointers; + add_json_pointers(pointers, _data->data); + return pointers; +} + +size_t JsonFile::length_of_array(const std::string &ptr) const { const json::json_pointer jsonPtr(ptr); json arrayJson = _data->data[jsonPtr]; if(arrayJson.is_null()) { @@ -172,7 +310,7 @@ size_t JsonFile::length_of_array(const std::string &ptr) { return arrayJson.size(); } -size_t JsonFile::length_of_string(const std::string &ptr) { +size_t JsonFile::length_of_string(const std::string &ptr) const { const json::json_pointer jsonPtr(ptr); json strJson = _data->data[jsonPtr]; if(!strJson.is_string()) { @@ -182,80 +320,61 @@ size_t JsonFile::length_of_string(const std::string &ptr) { return strJson.get().size(); } -bool JsonFile::has(const std::string &ptr) { +bool JsonFile::has(const std::string &ptr) const { const json::json_pointer jsonPtr(ptr); json data = _data->data[jsonPtr]; return !data.is_null(); } -bool JsonFile::is_value_a_number(const std::string &ptr) { +bool JsonFile::is_value_a_number(const std::string &ptr) const { const json::json_pointer jsonPtr(ptr); json data = _data->data[jsonPtr]; return data.is_number(); } -bool JsonFile::is_value_a_bool(const std::string &ptr) { +bool JsonFile::is_value_a_bool(const std::string &ptr) const { const json::json_pointer jsonPtr(ptr); json data = _data->data[jsonPtr]; return data.is_boolean(); } -bool JsonFile::is_value_a_string(const std::string &ptr) { +bool JsonFile::is_value_a_string(const std::string &ptr) const { const json::json_pointer jsonPtr(ptr); json data = _data->data[jsonPtr]; return data.is_string(); } -bool JsonFile::is_value_an_array(const std::string &ptr) { +bool JsonFile::is_value_an_array(const std::string &ptr) const { const json::json_pointer jsonPtr(ptr); json data = _data->data[jsonPtr]; return data.is_array(); } -bool JsonFile::is_value_an_object(const std::string &ptr) { +bool JsonFile::is_value_an_object(const std::string &ptr) const { const json::json_pointer jsonPtr(ptr); json data = _data->data[jsonPtr]; return data.is_object(); } -bool JsonFile::is_value_null(const std::string &ptr) { +bool JsonFile::is_value_null(const std::string &ptr) const { return !has(ptr); } -fs::path JsonFile::get_filepath() { +fs::path JsonFile::get_filepath() const { return _filepath; } -JSON_HELPER_DETAILS::JsonFileData *JsonFile::get_data() { - return _data; +JSON_HELPER_DETAILS::JsonFileData *JsonFile::get_data() const { + return _data.get(); } /*******************************************************************************************************/ -/* -class WritableJsonFile { - public: - WritableJsonFile(std::string filepath); - ~WritableJsonFile(); - - std::string set_string(const std::string &ptr, const std::string &value); - int set_int(const std::string &ptr, const int &value); - bool set_bool(const std::string &ptr, const bool &value); - - bool save_file(); - - private: - std::string _filepath; - JSON_HELPER_DETAILS::JsonFileData *_data; -}; -*/ - WritableJsonFile::WritableJsonFile(std::string outFilepath) : _outFilepath(outFilepath) { - _data = new JSON_HELPER_DETAILS::JsonFileData(); + _data = std::make_shared(); } WritableJsonFile::~WritableJsonFile() { - delete _data; } void WritableJsonFile::new_object(const std::string &ptr) { @@ -301,6 +420,11 @@ void WritableJsonFile::set_float(const std::string &ptr, double value, const int _data->data[jsonPtr] = value; } +void WritableJsonFile::set_float_if_not_zero(const std::string& ptr, double value, const int precision) { + if (value == 0.0) return; + set_float(ptr, value, precision); +} + void WritableJsonFile::set_bool(const std::string &ptr, const bool value) { const json::json_pointer jsonPtr(ptr); _data->data[jsonPtr] = value; @@ -316,9 +440,25 @@ void WritableJsonFile::set_null(const std::string &ptr) { _data->data[jsonPtr] = nullptr; } +template +void WritableJsonFile::set_array(const std::string &ptr, const std::vector &arr) { + new_array(ptr); + for(size_t i = 0; i < arr.size(); i++) { + const json::json_pointer jsonPtr(ptr + "/" + std::to_string(i)); + _data->data[jsonPtr] = arr[i]; + } +} + +template void WritableJsonFile::set_array(const std::string &ptr, const std::vector &arr); +template void WritableJsonFile::set_array(const std::string &ptr, const std::vector &arr); +template void WritableJsonFile::set_array(const std::string &ptr, const std::vector &arr); + void WritableJsonFile::save() { // Make sure the directory exists first FileHelper::write_folder_if_it_does_not_exist(_outFilepath); + if(StringHelper::ends_with(_outFilepath, "menu_text.json")) { + DebugHelper::info(_data->data); + } std::ofstream o(_outFilepath); o << std::setw(4) << _data->data << std::endl; } @@ -382,13 +522,6 @@ void StatJsonFile::save() { o << std::setw(4) << _data->data << std::endl; } -/*******************************************************************************************************/ - -bool JsonHelper::get_file(fs::path filepath, JsonFile **out) { - *out = _load_json_from_cache(filepath); - return *out != nullptr; -} - /******************************************************************/ // Prototype here, because of recursion. (Can't have the `json` type be in the header file either) @@ -419,8 +552,8 @@ void json_merge_append(json &dst, json &patch) { /******************************************************************/ -void json_delete_file(DkrAssetsSettings &settings, json &dst, std::string filename) { - fs::path pathToAssets = settings.pathToAssets / settings.dkrVersion; +void json_delete_file(json &dst, std::string filename) { + fs::path pathToAssets = GlobalSettings::get_decomp_path_to_output_assets(); std::string folder = dst[json::json_pointer("/folder")]; fs::path fileToDelete = pathToAssets / folder / filename; @@ -431,7 +564,7 @@ void json_delete_file(DkrAssetsSettings &settings, json &dst, std::string filena #define _JSON_HAS_KEY(json, key) (json.find(key) != json.end()) -void json_check_for_removed_file_sections(DkrAssetsSettings &settings, json &dst, json &patch) { +void json_check_for_removed_file_sections(json &dst, json &patch) { json &order = dst[json::json_pointer("/files/order")]; json §ions = dst[json::json_pointer("/files/sections")]; json &patchSections = patch[json::json_pointer("/files/sections")]; @@ -450,7 +583,7 @@ void json_check_for_removed_file_sections(DkrAssetsSettings &settings, json &dst json &patchSection = patchSections.at(key); if(_JSON_HAS_KEY(section, "filename") && _JSON_HAS_KEY(patchSection, "filename")) { // Make sure both the patch & dst have a filename. if(!section.at("filename").is_null() && patchSection.at("filename").is_null()) { // Check if the filename becomes null - json_delete_file(settings, dst, section.at("filename")); // Delete the file if it exists. + json_delete_file(dst, section.at("filename")); // Delete the file if it exists. order.erase(order.begin() + index); // Erase the index from the order. sections.erase(key); // Erase the section. continue; @@ -478,22 +611,27 @@ const std::vector JSON_MERGE_TYPE_VALUES = { // Prefer appending arrays instead of overwriting them! const std::string DEFAULT_PATCH_TYPE = "patch-append"; +std::mutex _jsonHelperMutex; + /******************************************************************/ -void JsonHelper::patch_json(DkrAssetsSettings &settings, const fs::path &dstPath, const fs::path &patchPath) { - JsonFile *dstJsonFile = _load_json_from_cache(dstPath); - JsonFile *patchJsonFile = _load_json_from_cache(patchPath); +void JsonHelper::patch_json(const fs::path &dstPath, const fs::path &patchPath) { + auto tryGetDstJsonFile = get_file(dstPath); + auto tryGetPatchJsonFile = get_file(patchPath); - DebugHelper::assert_(dstJsonFile != nullptr, "(JsonHelper::patch_json) ", dstPath, " could not be loaded. Make sure it is formatted properly."); - DebugHelper::assert_(patchJsonFile != nullptr, "(JsonHelper::patch_json) ", patchPath, " could not be loaded. Make sure it is formatted properly."); + DebugHelper::assert_(tryGetDstJsonFile.has_value(), "(JsonHelper::patch_json) ", dstPath, " could not be loaded. Make sure it is formatted properly."); + DebugHelper::assert_(tryGetPatchJsonFile.has_value(), "(JsonHelper::patch_json) ", patchPath, " could not be loaded. Make sure it is formatted properly."); - std::string mergeTypeStr = patchJsonFile->get_string_lowercase("/merge-type", DEFAULT_PATCH_TYPE); + JsonFile &dstJsonFile = tryGetDstJsonFile.value(); + JsonFile &patchJsonFile = tryGetPatchJsonFile.value(); + + std::string mergeTypeStr = patchJsonFile.get_string_lowercase("/merge-type", DEFAULT_PATCH_TYPE); JsonMergeType mergeType = static_cast(DataHelper::vector_index_of(JSON_MERGE_TYPE_VALUES, mergeTypeStr)); - JSON_HELPER_DETAILS::JsonFileData *dstJson = dstJsonFile->get_data(); - JSON_HELPER_DETAILS::JsonFileData *patchJson = patchJsonFile->get_data(); + JSON_HELPER_DETAILS::JsonFileData *dstJson = dstJsonFile.get_data(); + JSON_HELPER_DETAILS::JsonFileData *patchJson = patchJsonFile.get_data(); - json_check_for_removed_file_sections(settings, dstJson->data, patchJson->data); + json_check_for_removed_file_sections(dstJson->data, patchJson->data); switch(mergeType) { case JsonMergeType::MERGE_PATCH: // RFC 7386 @@ -516,17 +654,21 @@ void JsonHelper::patch_json(DkrAssetsSettings &settings, const fs::path &dstPath _jsonHelperMutex.unlock(); } -// Returns nullptr if unsuccessful -JsonFile *JsonHelper::_load_json_from_cache(const fs::path &filepath) { - _jsonHelperMutex.lock(); - if(_fileCache.find(filepath) == _fileCache.end()) { +/*******************************************************************************************************/ + +std::unordered_map _fileCache; + +std::optional> JsonHelper::get_file(fs::path filepath) { + _jsonHelperMutex.lock(); + if (_fileCache.find(filepath) == _fileCache.end()) { try { - _fileCache[filepath] = new JsonFile(filepath); - } catch (nlohmann::detail::parse_error &err) { + _fileCache[filepath] = new JsonFile(filepath.generic_string()); + } catch (nlohmann::detail::parse_error& ex) { + DebugHelper::error_no_throw(ex.what()); _jsonHelperMutex.unlock(); - return nullptr; + return std::nullopt; } } _jsonHelperMutex.unlock(); - return _fileCache[filepath]; -} \ No newline at end of file + return *_fileCache[filepath]; +} diff --git a/tools/dkr_assets_tool_src/helpers/jsonHelper.h b/tools/dkr_assets_tool_src/helpers/jsonHelper.h index 3609120e..9729027a 100644 --- a/tools/dkr_assets_tool_src/helpers/jsonHelper.h +++ b/tools/dkr_assets_tool_src/helpers/jsonHelper.h @@ -6,58 +6,76 @@ #include #include #include // for is_integral_v +#include +#include +#include #include "helpers/fileHelper.h" +namespace DkrAssetsTool { + namespace JSON_HELPER_DETAILS { // Only forward declared here, cause I don't want to expose the JSON library in the header. // This will allow me to change the implementation if I want to in the future. class JsonFileData; } -typedef std::variant JsonKey; -typedef std::variant JsonValue; - // Read-Only JSON class class JsonFile { public: JsonFile(std::string filepath); ~JsonFile(); - std::string get_string(const std::string &ptr, const std::string &defaultValue = ""); - std::string get_string_lowercase(const std::string &ptr, const std::string &defaultValue = ""); - std::string get_string_uppercase(const std::string &ptr, const std::string &defaultValue = ""); - fs::path get_path(const std::string &ptr, const std::string &defaultValue = ""); - void copy_string_to(const std::string &ptr, char *output, size_t maxLengthForOutput, const std::string &defaultValue = ""); - int get_int(const std::string &ptr, const int &defaultValue = -1); - bool get_bool(const std::string &ptr, const bool &defaultValue = false); - double get_float(const std::string &ptr, const double &defaultValue = 0.0); + std::string get_string(const std::string &ptr, const std::string &defaultValue = "") const; + std::string get_string_lowercase(const std::string &ptr, const std::string &defaultValue = "") const; + std::string get_string_uppercase(const std::string &ptr, const std::string &defaultValue = "") const; + fs::path get_path(const std::string &ptr, const std::string &defaultValue = "") const; + void copy_string_to(const std::string &ptr, char *output, size_t maxLengthForOutput, const std::string &defaultValue = "") const; + int get_int(const std::string &ptr, const int &defaultValue = -1) const; + bool get_bool(const std::string &ptr, const bool &defaultValue = false) const; + double get_float(const std::string &ptr, const double &defaultValue = 0.0) const; + std::any get_any(const std::string& ptr) const; template - void get_array(const std::string &ptr, std::vector &arr); + void get_array(const std::string &ptr, std::vector &arr) const; template - int get_index_of_elem_in_array(const std::string &ptr, T elem); + int get_index_of_elem_in_array(const std::string &ptr, T elem) const; template - T get_elem_from_array(const std::string &ptr, size_t index); + T get_elem_from_array(const std::string &ptr, size_t index) const; + + template + std::optional get_elem_from_object_array_that_has_property(const std::string& ptr, const std::string& valueName, const std::string& propertyName, T2 propertyValue) const; - size_t length_of_array(const std::string &ptr); - size_t length_of_string(const std::string &ptr); - bool has(const std::string &ptrStr); + template + std::optional get_index_of_object_that_has_property(const std::string& ptr, const std::string& propertyName, T propertyValue) const; + + // I made this as a faster version of `get_index_of_object_that_has_property`, for when that gets called a lot. + // With this map, you use the property value (sha1 hash for example) to get the index in the array. + template + std::unordered_map> create_map_of_indices_from_property_value(const std::string& ptr, const std::string& propertyName) const; + + std::vector get_keys_of_object(const std::string& ptr) const; + + std::vector get_all_pointers() const; + + size_t length_of_array(const std::string &ptr) const; + size_t length_of_string(const std::string &ptr) const; + bool has(const std::string &ptrStr) const; - bool is_value_a_number(const std::string &ptr); - bool is_value_a_bool(const std::string &ptr); - bool is_value_a_string(const std::string &ptr); - bool is_value_an_array(const std::string &ptr); - bool is_value_an_object(const std::string &ptr); - bool is_value_null(const std::string &ptr); + bool is_value_a_number(const std::string &ptr) const; + bool is_value_a_bool(const std::string &ptr) const; + bool is_value_a_string(const std::string &ptr) const; + bool is_value_an_array(const std::string &ptr) const; + bool is_value_an_object(const std::string &ptr) const; + bool is_value_null(const std::string &ptr) const; - fs::path get_filepath(); - JSON_HELPER_DETAILS::JsonFileData *get_data(); + fs::path get_filepath() const; + JSON_HELPER_DETAILS::JsonFileData *get_data() const; private: std::string _filepath; - JSON_HELPER_DETAILS::JsonFileData *_data; + std::unique_ptr _data; }; // Write-Only JSON class @@ -69,20 +87,25 @@ class WritableJsonFile { void new_object(const std::string &ptr); void new_array(const std::string &ptr); void set_string(const std::string &ptr, const std::string &value); + void set_string_if_not_empty(const std::string& ptr, const std::string& value); void set_path(const std::string &ptr, fs::path value); void set_int(const std::string &ptr, const int value); void set_int_if_not_value(const std::string &ptr, const int value, const int checkValue); void set_int_if_not_zero(const std::string &ptr, const int value); void set_float(const std::string &ptr, double value, const int precision = 0); + void set_float_if_not_zero(const std::string& ptr, double value, const int precision = 0); void set_bool(const std::string &ptr, const bool value); void set_bool_if_true(const std::string &ptr, const bool value); void set_null(const std::string &ptr); + template + void set_array(const std::string &ptr, const std::vector &arr); + void save(); private: - std::string _outFilepath; - JSON_HELPER_DETAILS::JsonFileData *_data; + std::string _outFilepath = ""; + std::shared_ptr _data; }; // Represents a json file with limited read/write capability. @@ -106,26 +129,9 @@ class StatJsonFile { JSON_HELPER_DETAILS::JsonFileData *_data; }; -class DkrAssetsSettings; +namespace JsonHelper { + std::optional> get_file(fs::path filepath); + void patch_json(const fs::path &dst, const fs::path &patch); +} -/** - * Singleton class that deals with saving & loading json files. - */ -class JsonHelper { -public: - static JsonHelper& get() { - static JsonHelper instance; - return instance; - } - - bool get_file(fs::path filepath, JsonFile **out); - void patch_json(DkrAssetsSettings &settings, const fs::path &dst, const fs::path &patch); - -private: - std::unordered_map _fileCache; - std::mutex _jsonHelperMutex; - - // Returns nullptr if unsuccessful - JsonFile *_load_json_from_cache(const fs::path &filepath); - -}; +} diff --git a/tools/dkr_assets_tool_src/helpers/mathHelper.cpp b/tools/dkr_assets_tool_src/helpers/mathHelper.cpp new file mode 100644 index 00000000..dbd94c81 --- /dev/null +++ b/tools/dkr_assets_tool_src/helpers/mathHelper.cpp @@ -0,0 +1,380 @@ +#include "mathHelper.h" + +using namespace DkrAssetsTool; + +/***************************************************************************/ + +Vec2f::Vec2f() : x(0), y(0) {} + +Vec2f::Vec2f(float s) : x(s), y(s) { +} + +Vec2f::Vec2f(float x, float y) : x(x), y(y){ +} + +Vec2f::Vec2f(std::vector &floats, size_t offset) : x(floats[offset]), y(floats[offset+1]) { +} + +float Vec2f::operator[](int index) const { + return values[index]; +} + +float& Vec2f::operator[](int index) { + return values[index]; +} + +bool Vec2f::operator==(const Vec2f& other) const { + return (x == other.x) && (y == other.y); +} + +bool Vec2f::operator!=(const Vec2f& other) const { + return !operator==(other); +} + +Vec2f Vec2f::operator+(const Vec2f& other) { + return Vec2f(x + other.x, y + other.y); +} + +Vec2f Vec2f::operator-(const Vec2f& other) { + return Vec2f(x - other.x, y - other.y); +} + +Vec2f Vec2f::operator*(const Vec2f& other) { + return Vec2f(x * other.x, y * other.y); +} + +Vec2f Vec2f::operator*(const float other) { + return Vec2f(x * other, y * other); +} + +Vec2f Vec2f::operator/(const Vec2f& other) { + return Vec2f(x / other.x, y / other.y); +} + +Vec2f Vec2f::operator/(const float other) { + return Vec2f(x / other, y / other); +} + +// The namespace is needed here for g++ to resolve the function correctly. +namespace DkrAssetsTool { + std::ostream& operator<<(std::ostream& os, const Vec2f& vec) { + os << "{ x: " << vec.x << ", y: " << vec.y << " }"; + return os; + } +} + +Vec2f Vec2f::min(const Vec2f& other) const { + return Vec2f( + (x < other.x) ? x : other.x, + (y < other.y) ? y : other.y + ); +} + +Vec2f Vec2f::max(const Vec2f& other) const { + return Vec2f( + (x > other.x) ? x : other.x, + (y > other.y) ? y : other.y + ); +} + +void Vec2f::update_min(const Vec2f& other){ + x = (x < other.x) ? x : other.x; + y = (y < other.y) ? y : other.y; +} + +void Vec2f::update_max(const Vec2f& other){ + x = (x > other.x) ? x : other.x; + y = (y > other.y) ? y : other.y; +} + +bool Vec2f::within(const Vec2f& other, float amountU, float amountV) { + return (std::abs(u - other.u) < amountU) && (std::abs(v - other.v) < amountV); +} + +bool Vec2f::is_zero() const { + return (x == 0.0f) && (y == 0.0f); +} + +void Vec2f::copy_to(float* dst) { + dst[0] = x; + dst[1] = y; +} + +std::vector Vec2f::to_vector() { + return { x, y }; +} + +std::vector Vec2f::to_double_vector() { + return { x, y }; +} + +/***************************************************************************/ + +Vec3f::Vec3f() : x(0), y(0), z(0) {} + +Vec3f::Vec3f(float s) : x(s), y(s), z(s) { +} + +Vec3f::Vec3f(float x, float y, float z) : x(x), y(y), z(z) { +} + +Vec3f::Vec3f(std::vector& floats, size_t offset) : x(floats[offset]), y(floats[offset + 1]), z(floats[offset + 2]) { +} + +float Vec3f::operator[](int index) const { + return values[index]; +} + +float& Vec3f::operator[](int index) { + return values[index]; +} + +bool Vec3f::operator==(const Vec3f& other) const { + return (x == other.x) && (y == other.y) && (z == other.z); +} + +bool Vec3f::operator!=(const Vec3f& other) const { + return !operator==(other); +} + +Vec3f Vec3f::operator+(const Vec3f& other) { + return Vec3f(x + other.x, y + other.y, z + other.z); +} + +Vec3f Vec3f::operator-(const Vec3f& other) { + return Vec3f(x - other.x, y - other.y, z - other.z); +} + +Vec3f Vec3f::operator*(const Vec3f& other) { + return Vec3f(x * other.x, y * other.y, z * other.z); +} + +Vec3f Vec3f::operator*(const float other) { + return Vec3f(x * other, y * other, z * other); +} + +Vec3f Vec3f::operator/(const Vec3f& other) { + return Vec3f(x / other.x, y / other.y, z / other.z); +} + +Vec3f Vec3f::operator/(const float other) { + return Vec3f(x / other, y / other, z / other); +} + +// The namespace is needed here for g++ to resolve the function correctly. +namespace DkrAssetsTool { + std::ostream& operator<<(std::ostream& os, const Vec3f& vec) { + os << "{ x: " << vec.x << ", y: " << vec.y << ", z: " << vec.z << " }"; + return os; + } +} + +Vec3f Vec3f::min(const Vec3f& other) const { + return Vec3f( + (x < other.x) ? x : other.x, + (y < other.y) ? y : other.y, + (z < other.z) ? z : other.z + ); +} + +Vec3f Vec3f::max(const Vec3f& other) const { + return Vec3f( + (x > other.x) ? x : other.x, + (y > other.y) ? y : other.y, + (z > other.z) ? z : other.z + ); +} + +void Vec3f::update_min(const Vec3f& other) { + x = (x < other.x) ? x : other.x; + y = (y < other.y) ? y : other.y; + z = (z < other.z) ? z : other.z; +} + +void Vec3f::update_max(const Vec3f& other) { + x = (x > other.x) ? x : other.x; + y = (y > other.y) ? y : other.y; + z = (z > other.z) ? z : other.z; +} + +bool Vec3f::is_zero() const { + return (x == 0.0f) && (y == 0.0f) && (z == 0.0f); +} + +void Vec3f::copy_to(float* dst) { + dst[0] = x; + dst[1] = y; + dst[2] = z; +} + +std::vector Vec3f::to_vector() { + return { x, y, z }; +} + +std::vector Vec3f::to_double_vector() { + return { x, y, z }; +} + +/***************************************************************************/ + +Vec4f::Vec4f() : x(0), y(0), z(0), w(0) {} + +Vec4f::Vec4f(float s) : x(s), y(s), z(s), w(s) {} + +Vec4f::Vec4f(float x, float y, float z, float w) : x(x), y(y), z(z), w(w) { +} + +Vec4f::Vec4f(uint8_t red, uint8_t green, uint8_t blue) { + x = static_cast(red) / 255.0f; + y = static_cast(green) / 255.0f; + z = static_cast(blue) / 255.0f; + w = 1.0f; // Alpha is assumed to be full. +} + +Vec4f::Vec4f(uint8_t red, uint8_t green, uint8_t blue, uint8_t alpha) { + x = static_cast(red) / 255.0f; + y = static_cast(green) / 255.0f; + z = static_cast(blue) / 255.0f; + w = static_cast(alpha) / 255.0f; +} + +Vec4f::Vec4f(uint32_t rgba) { + // Extract rgba into individual channels + uint8_t red = (rgba >> 24); + uint8_t green = (rgba >> 16); + uint8_t blue = (rgba >> 8); + uint8_t alpha = (rgba); + x = static_cast(red) / 255.0f; + y = static_cast(green) / 255.0f; + z = static_cast(blue) / 255.0f; + w = static_cast(alpha) / 255.0f; +} + +Vec4f::Vec4f(std::vector& floats, size_t offset) : x(floats[offset]), y(floats[offset + 1]), + z(floats[offset + 2]), w(floats[offset + 3]) {} + +Vec4f::Vec4f(std::vector& bytes, size_t offset) : + Vec4f(bytes[offset], bytes[offset+1], bytes[offset+2], bytes[offset+3]) { +} + +float Vec4f::operator[](int index) const { + return values[index]; +} + +float& Vec4f::operator[](int index) { + return values[index]; +} + +bool Vec4f::operator==(const Vec4f& other) const { + return (x == other.x) && (y == other.y) && (z == other.z) && (w == other.w); +} + +bool Vec4f::operator!=(const Vec4f& other) const { + return !operator==(other); +} + +Vec4f Vec4f::operator+(const Vec4f& other) { + return Vec4f(x + other.x, y + other.y, z + other.z, w + other.w); +} + +Vec4f Vec4f::operator-(const Vec4f& other) { + return Vec4f(x + other.x, y + other.y, z + other.z, w + other.w); +} + +Vec4f Vec4f::operator*(const Vec4f& other) { + return Vec4f(x * other.x, y * other.y, z * other.z, w * other.w); +} + +Vec4f Vec4f::operator*(const float other) { + return Vec4f(x * other, y * other, z * other, w * other); +} + +Vec4f Vec4f::operator/(const Vec4f& other) { + return Vec4f(x / other.x, y / other.y, z / other.z, w / other.w); +} + +Vec4f Vec4f::operator/(const float other) { + return Vec4f(x / other, y / other, z / other, w / other); +} + +// The namespace is needed here for g++ to resolve the function correctly. +namespace DkrAssetsTool { + std::ostream& operator<<(std::ostream& os, const Vec4f& vec) { + os << "{ x: " << vec.x << ", y: " << vec.y << ", z: " << vec.z << ", w: " << vec.w << " }"; + return os; + } +} + +Vec4f Vec4f::min(const Vec4f& other) const { + return Vec4f( + (x < other.x) ? x : other.x, + (y < other.y) ? y : other.y, + (z < other.z) ? z : other.z, + (w < other.w) ? w : other.w + ); +} + +Vec4f Vec4f::max(const Vec4f& other) const { + return Vec4f( + (x > other.x) ? x : other.x, + (y > other.y) ? y : other.y, + (z > other.z) ? z : other.z, + (w > other.w) ? w : other.w + ); +} + +void Vec4f::update_min(const Vec4f& other) { + x = (x < other.x) ? x : other.x; + y = (y < other.y) ? y : other.y; + z = (z < other.z) ? z : other.z; + w = (w < other.w) ? w : other.w; +} + +void Vec4f::update_max(const Vec4f& other) { + x = (x > other.x) ? x : other.x; + y = (y > other.y) ? y : other.y; + z = (z > other.z) ? z : other.z; + w = (w > other.w) ? w : other.w; +} + +bool Vec4f::is_zero() const { + return (x == 0.0f) && (y == 0.0f) && (z == 0.0f) && (w == 0.0f); +} + +void Vec4f::copy_to(float* dst) { + dst[0] = x; + dst[1] = y; + dst[2] = z; + dst[3] = w; +} + +uint8_t Vec4f::get_red_as_byte() const { + return static_cast(r * 255.0f); +} + +uint8_t Vec4f::get_green_as_byte() const { + return static_cast(g * 255.0f); +} + +uint8_t Vec4f::get_blue_as_byte() const { + return static_cast(b * 255.0f); +} + +uint8_t Vec4f::get_alpha_as_byte() const { + return static_cast(a * 255.0f); +} + +uint32_t Vec4f::get_as_rgba() const { + return (get_red_as_byte() << 24) | + (get_green_as_byte() << 16) | + (get_blue_as_byte() << 8) | + (get_alpha_as_byte()); +} + +std::vector Vec4f::to_vector() { + return { x, y, z, w }; +} + +std::vector Vec4f::to_double_vector() { + return { x, y, z, w }; +} diff --git a/tools/dkr_assets_tool_src/helpers/mathHelper.h b/tools/dkr_assets_tool_src/helpers/mathHelper.h new file mode 100644 index 00000000..e75f855e --- /dev/null +++ b/tools/dkr_assets_tool_src/helpers/mathHelper.h @@ -0,0 +1,197 @@ +#pragma once +#include +#include +#include +#include + +namespace DkrAssetsTool { + +struct Vec2f { + union { + struct { + float x; + float y; + }; + struct { + float u; // Same as x + float v; // Same as y + }; + float values[2]; + }; + + Vec2f(); + Vec2f(float s); + Vec2f(float x, float y); + Vec2f(std::vector &floats, size_t offset = 0); + + float operator[](int index) const; + float& operator[](int index); + bool operator==(const Vec2f& other) const; + bool operator!=(const Vec2f& other) const; + Vec2f operator+(const Vec2f& other); + Vec2f operator-(const Vec2f& other); + Vec2f operator*(const Vec2f& other); + Vec2f operator*(const float other); + Vec2f operator/(const Vec2f& other); + Vec2f operator/(const float other); + friend std::ostream& operator<<(std::ostream& os, const Vec2f& vec); + + Vec2f min(const Vec2f& other) const; // Returns the minimum XY values of both vectors + Vec2f max(const Vec2f& other) const; // Returns the maximum XY values of both vectors + + void update_min(const Vec2f& other); // Updates this struct to be the minimum of this and other. + void update_max(const Vec2f& other); // Updates this struct to be the maximum of this and other. + + bool within(const Vec2f& other, float amountU, float amountV); + + bool is_zero() const; + + void copy_to(float *dst); + + std::vector to_vector(); + std::vector to_double_vector(); + + static Vec2f min_value() { + return Vec2f(std::numeric_limits::min()); + } + static Vec2f max_value() { + return Vec2f(std::numeric_limits::max()); + } +}; + + +struct Vec3f { + union { + struct { + float x; + float y; + float z; + }; + float values[3]; + }; + + Vec3f(); + Vec3f(float s); + Vec3f(float x, float y, float z); + Vec3f(std::vector &floats, size_t offset = 0); + + float operator[](int index) const; + float& operator[](int index); + bool operator==(const Vec3f& other) const; + bool operator!=(const Vec3f& other) const; + Vec3f operator+(const Vec3f& other); + Vec3f operator-(const Vec3f& other); + Vec3f operator*(const Vec3f& other); + Vec3f operator*(const float other); + Vec3f operator/(const Vec3f& other); + Vec3f operator/(const float other); + friend std::ostream& operator<<(std::ostream& os, const Vec3f& vec); + + Vec3f min(const Vec3f& other) const; // Returns the minimum XYZ values of both vectors + Vec3f max(const Vec3f& other) const; // Returns the maximum XYZ values of both vectors + + void update_min(const Vec3f& other); // Updates this struct to be the minimum of this and other. + void update_max(const Vec3f& other); // Updates this struct to be the maximum of this and other. + + bool is_zero() const; + + void copy_to(float* dst); + + std::vector to_vector(); + std::vector to_double_vector(); + + static Vec3f min_value() { + return Vec3f(std::numeric_limits::min()); + } + static Vec3f max_value() { + return Vec3f(std::numeric_limits::max()); + } +}; + +struct Vec4f { + union { + struct { + float x; + float y; + float z; + float w; + }; + struct { + float r; // Same as x + float g; // Same as y + float b; // Same as z + float a; // Same as w + }; + float values[4]; + }; + + Vec4f(); + Vec4f(float s); + Vec4f(float x, float y, float z, float w); + Vec4f(uint8_t r, uint8_t g, uint8_t b); + Vec4f(uint8_t r, uint8_t g, uint8_t b, uint8_t a); + Vec4f(uint32_t rgba); + Vec4f(std::vector &floats, size_t offset = 0); + Vec4f(std::vector &bytes, size_t offset = 0); + + float operator[](int index) const; + float& operator[](int index); + bool operator==(const Vec4f& other) const; + bool operator!=(const Vec4f& other) const; + Vec4f operator+(const Vec4f& other); + Vec4f operator-(const Vec4f& other); + Vec4f operator*(const Vec4f& other); + Vec4f operator*(const float other); + Vec4f operator/(const Vec4f& other); + Vec4f operator/(const float other); + friend std::ostream& operator<<(std::ostream& os, const Vec4f& vec); + + Vec4f min(const Vec4f& other) const; // Returns the minimum XYZW values of both vectors + Vec4f max(const Vec4f& other) const; // Returns the maximum XYZW values of both vectors + + void update_min(const Vec4f& other); // Updates this struct to be the minimum of this and other. + void update_max(const Vec4f& other); // Updates this struct to be the maximum of this and other. + + bool is_zero() const; + + void copy_to(float* dst); + + uint8_t get_red_as_byte() const; + uint8_t get_green_as_byte() const; + uint8_t get_blue_as_byte() const; + uint8_t get_alpha_as_byte() const; + uint32_t get_as_rgba() const; + + std::vector to_vector(); + std::vector to_double_vector(); + + static Vec4f min_value() { + return Vec4f(std::numeric_limits::min()); + } + static Vec4f max_value() { + return Vec4f(std::numeric_limits::max()); + } +}; + +} + +namespace std { + template <> + struct hash { + std::size_t operator()(const DkrAssetsTool::Vec2f& vec) const { + return std::hash()(vec.x) ^ std::hash()(vec.y); + } + }; + template <> + struct hash { + std::size_t operator()(const DkrAssetsTool::Vec3f& vec) const { + return std::hash()(vec.x) ^ std::hash()(vec.y) ^ std::hash()(vec.z); + } + }; + template <> + struct hash { + std::size_t operator()(const DkrAssetsTool::Vec4f& vec) const { + return std::hash()(vec.x) ^ std::hash()(vec.y) ^ std::hash()(vec.z) ^ std::hash()(vec.w); + } + }; +} diff --git a/tools/dkr_assets_tool_src/helpers/miscHelper.cpp b/tools/dkr_assets_tool_src/helpers/miscHelper.cpp index 1b694dfc..c1db9b5c 100644 --- a/tools/dkr_assets_tool_src/helpers/miscHelper.cpp +++ b/tools/dkr_assets_tool_src/helpers/miscHelper.cpp @@ -1,5 +1,7 @@ #include "miscHelper.h" +using namespace DkrAssetsTool; + void MiscHelper::process_cheats_encryption(uint8_t *data, size_t dataSize) { uint8_t a, b, c, d; uint32_t sp0, sp1, sp2, sp3; diff --git a/tools/dkr_assets_tool_src/helpers/miscHelper.h b/tools/dkr_assets_tool_src/helpers/miscHelper.h index 2ed1ebf6..e7469c72 100644 --- a/tools/dkr_assets_tool_src/helpers/miscHelper.h +++ b/tools/dkr_assets_tool_src/helpers/miscHelper.h @@ -4,8 +4,9 @@ #include #include -class MiscHelper { -public: - static void process_cheats_encryption(uint8_t *data, size_t dataSize); - static void process_cheats_encryption(std::vector &data); -}; +namespace DkrAssetsTool { +namespace MiscHelper { + void process_cheats_encryption(uint8_t *data, size_t dataSize); + void process_cheats_encryption(std::vector &data); +} +} \ No newline at end of file diff --git a/tools/dkr_assets_tool_src/helpers/regex/match.cpp b/tools/dkr_assets_tool_src/helpers/regex/match.cpp index 8feebd01..f354082a 100644 --- a/tools/dkr_assets_tool_src/helpers/regex/match.cpp +++ b/tools/dkr_assets_tool_src/helpers/regex/match.cpp @@ -1,5 +1,7 @@ #include "match.h" +using namespace DkrAssetsTool; + RegexMatchGroup::RegexMatchGroup(std::string &text, int offset) : _text(text), _offset(offset) { } diff --git a/tools/dkr_assets_tool_src/helpers/regex/match.h b/tools/dkr_assets_tool_src/helpers/regex/match.h index db7b634d..3f1284ed 100644 --- a/tools/dkr_assets_tool_src/helpers/regex/match.h +++ b/tools/dkr_assets_tool_src/helpers/regex/match.h @@ -3,6 +3,7 @@ #include #include +namespace DkrAssetsTool { class RegexMatchGroup { public: RegexMatchGroup(std::string &text, int offset); @@ -31,3 +32,4 @@ public: private: std::vector _groups; }; +} diff --git a/tools/dkr_assets_tool_src/helpers/regex/regexPcre2.cpp b/tools/dkr_assets_tool_src/helpers/regex/regexPcre2.cpp index 7c43b47c..7b7b62e6 100644 --- a/tools/dkr_assets_tool_src/helpers/regex/regexPcre2.cpp +++ b/tools/dkr_assets_tool_src/helpers/regex/regexPcre2.cpp @@ -4,8 +4,11 @@ #include "regexPcre2.h" +using namespace DkrAssetsTool; + #include "helpers/debugHelper.h" +namespace DkrAssetsTool { class PCRE2Cache { public: static PCRE2Cache& get() { @@ -35,6 +38,7 @@ private: std::unordered_map _cache; }; +} void RegexHelperPcre2::get_matches(const std::string &input, const std::string ®exInput, std::vector &out, int startOffset) { pcre2_code *re = PCRE2Cache::get().compile_regex(regexInput); diff --git a/tools/dkr_assets_tool_src/helpers/regex/regexPcre2.h b/tools/dkr_assets_tool_src/helpers/regex/regexPcre2.h index 6833170d..cb282097 100644 --- a/tools/dkr_assets_tool_src/helpers/regex/regexPcre2.h +++ b/tools/dkr_assets_tool_src/helpers/regex/regexPcre2.h @@ -10,9 +10,10 @@ #include "match.h" -class RegexHelperPcre2 { -public: - static void get_matches(const std::string &input, const std::string ®exInput, std::vector &out, int startOffset); - static RegexMatch *get_first_match(const std::string &input, const std::string ®exInput, int startOffset); - static std::string get_name(); -}; +namespace DkrAssetsTool { +namespace RegexHelperPcre2 { + void get_matches(const std::string &input, const std::string ®exInput, std::vector &out, int startOffset); + RegexMatch *get_first_match(const std::string &input, const std::string ®exInput, int startOffset); + std::string get_name(); +} +} diff --git a/tools/dkr_assets_tool_src/helpers/regex/regexStd.cpp b/tools/dkr_assets_tool_src/helpers/regex/regexStd.cpp index 0f607cf4..6dada32a 100644 --- a/tools/dkr_assets_tool_src/helpers/regex/regexStd.cpp +++ b/tools/dkr_assets_tool_src/helpers/regex/regexStd.cpp @@ -5,6 +5,8 @@ #include "regexStd.h" #include "helpers/debugHelper.h" +using namespace DkrAssetsTool; + void RegexHelperStl::get_matches(const std::string &input, const std::string ®exInput, std::vector &out, int startOffset) { std::regex rgx(regexInput, std::regex_constants::ECMAScript); std::smatch matches; diff --git a/tools/dkr_assets_tool_src/helpers/regex/regexStd.h b/tools/dkr_assets_tool_src/helpers/regex/regexStd.h index c2479cef..4813561a 100644 --- a/tools/dkr_assets_tool_src/helpers/regex/regexStd.h +++ b/tools/dkr_assets_tool_src/helpers/regex/regexStd.h @@ -7,9 +7,10 @@ #include "match.h" -class RegexHelperStl { -public: - static void get_matches(const std::string &input, const std::string ®exInput, std::vector &out, int startOffset); - static RegexMatch *get_first_match(const std::string &input, const std::string ®exInput, int startOffset); - static std::string get_name(); -}; +namespace DkrAssetsTool { +namespace RegexHelperStl { + void get_matches(const std::string &input, const std::string ®exInput, std::vector &out, int startOffset); + RegexMatch *get_first_match(const std::string &input, const std::string ®exInput, int startOffset); + std::string get_name(); +} +} diff --git a/tools/dkr_assets_tool_src/helpers/regexHelper.cpp b/tools/dkr_assets_tool_src/helpers/regexHelper.cpp index 2b8bfc65..ef32f3d1 100644 --- a/tools/dkr_assets_tool_src/helpers/regexHelper.cpp +++ b/tools/dkr_assets_tool_src/helpers/regexHelper.cpp @@ -1,6 +1,8 @@ #include "regexHelper.h" #include "helpers/debugHelper.h" +using namespace DkrAssetsTool; + #define HAS_PCRE2 __has_include () #if HAS_PCRE2 diff --git a/tools/dkr_assets_tool_src/helpers/regexHelper.h b/tools/dkr_assets_tool_src/helpers/regexHelper.h index fbdef496..76f17713 100644 --- a/tools/dkr_assets_tool_src/helpers/regexHelper.h +++ b/tools/dkr_assets_tool_src/helpers/regexHelper.h @@ -5,6 +5,8 @@ #include "regex/match.h" +namespace DkrAssetsTool { + // Supported regex engine libraries enum RegexEngine { STL, // standard C++11 library @@ -30,3 +32,5 @@ public: private: RegexEngine _currentEngine; }; + +} \ No newline at end of file diff --git a/tools/dkr_assets_tool_src/helpers/stringHelper.cpp b/tools/dkr_assets_tool_src/helpers/stringHelper.cpp index b6fb51ac..2d77f525 100644 --- a/tools/dkr_assets_tool_src/helpers/stringHelper.cpp +++ b/tools/dkr_assets_tool_src/helpers/stringHelper.cpp @@ -4,12 +4,19 @@ #include #include +#include #include // for std::strchr +using namespace DkrAssetsTool; + bool StringHelper::has(const std::string &input, const char* substring) { return input.find(substring) != std::string::npos; } +bool StringHelper::has(const std::string &input, const std::string substring) { + return input.find(substring) != std::string::npos; +} + void StringHelper::make_lowercase(std::string& input) { for(char& character : input) { character = std::tolower(character); @@ -31,6 +38,10 @@ bool StringHelper::ends_with(const std::string &input, const std::string &sub) { return std::equal(input.begin() + input.size() - sub.size(), input.end(), sub.begin()); } +bool StringHelper::is_a_number(const std::string& input) { + return (!input.empty()) && (std::all_of(input.begin(), input.end(), ::isdigit)); +} + const char* WHITESPACE = " \t\n\r\f\v"; void StringHelper::rtrim(std::string& input) { @@ -52,6 +63,17 @@ void StringHelper::remove_all_whitespace(std::string &input) { }), input.end()); } +std::string StringHelper::simplify(const std::string& input) { + std::string output(input); // Create a copy of the input + + make_lowercase(output); + remove_all_whitespace(output); + replace(output, "-", ""); // Remove all dashes + replace(output, "_", ""); // Remove all underscores + + return output; +} + void StringHelper::replace(std::string &input, std::string oldPattern, std::string newPattern) { size_t pos = 0; while((pos = input.find(oldPattern, pos)) != std::string::npos) { @@ -77,6 +99,17 @@ void StringHelper::split_and_trim(std::string &input, const char delim, std::vec } } +std::string StringHelper::join(const std::vector &input, std::string delim, size_t startIndex) { + std::stringstream ss; + for(size_t i = startIndex; i < input.size(); i++) { + ss << input[i]; + if(i < input.size() - 1) { + ss << delim; + } + } + return ss.str(); +} + int StringHelper::find_closing_brace(const std::string &input, int inputOffset) { int curOffset = inputOffset; int limit = input.length(); @@ -116,7 +149,7 @@ std::string StringHelper::upper_snake_case_to_pascal_case(const std::string &inp out << input[i]; isFirst = false; } else { - out << (char)tolower(input[i]); + out << static_cast(std::tolower(input[i])); } } } @@ -124,6 +157,20 @@ std::string StringHelper::upper_snake_case_to_pascal_case(const std::string &inp return out.str(); } +std::string StringHelper::pascal_case_to_upper_snake_case(const std::string &input) { + std::stringstream out; + + for (size_t i = 0; i < input.size(); i++) { + char ch = input[i]; + if (std::isupper(ch) && i != 0) { + out << '_'; + } + out << static_cast(std::toupper(ch)); + } + + return out.str(); +} + std::string StringHelper::to_hex(uint64_t value, int numDigits) { std::stringstream ss; ss << std::hex; @@ -134,6 +181,12 @@ std::string StringHelper::to_hex(uint64_t value, int numDigits) { return ss.str(); } +std::string StringHelper::to_uppercase_hex(uint64_t value, int numDigits) { + std::string out = to_hex(value, numDigits); + make_uppercase(out); + return out; +} + // Returns offset + length of string + 1 (for null-terminator) size_t StringHelper::get_ascii_from_data(std::vector &data, size_t offset, std::string &out) { char *dataAsStr = reinterpret_cast(&data[offset]); diff --git a/tools/dkr_assets_tool_src/helpers/stringHelper.h b/tools/dkr_assets_tool_src/helpers/stringHelper.h index a4701d4a..cdd4acd4 100644 --- a/tools/dkr_assets_tool_src/helpers/stringHelper.h +++ b/tools/dkr_assets_tool_src/helpers/stringHelper.h @@ -4,38 +4,51 @@ #include #include -// These are functions that I would've expected to be a part of std::string. (Except for a few) -class StringHelper { -public: - static bool has(const std::string &input, const char *substring); - - static void make_lowercase(std::string &input); - static void make_uppercase(std::string &input); +namespace DkrAssetsTool { - static bool starts_with(const std::string &input, const std::string &sub); - static bool ends_with(const std::string &input, const std::string &sub); +// These are functions that I would've expected to be a part of std::string. (Except for a few) +namespace StringHelper { + bool has(const std::string &input, const char *substring); + bool has(const std::string &input, const std::string substring); + + void make_lowercase(std::string &input); + void make_uppercase(std::string &input); + + bool starts_with(const std::string &input, const std::string &sub); + bool ends_with(const std::string &input, const std::string &sub); + + bool is_a_number(const std::string& input); // Trim functions from: https://stackoverflow.com/a/25385766 - static void rtrim(std::string &input); // Trim whitespace from the end of the string - static void ltrim(std::string &input); // Trim whitespace from the start of the string - static void trim(std::string &input); // Trim whitespace from both sides + void rtrim(std::string &input); // Trim whitespace from the end of the string + void ltrim(std::string &input); // Trim whitespace from the start of the string + void trim(std::string &input); // Trim whitespace from both sides - static void remove_all_whitespace(std::string &input); + void remove_all_whitespace(std::string &input); - static void replace(std::string &input, std::string oldPattern, std::string newPattern); + void replace(std::string &input, std::string oldPattern, std::string newPattern); + + // Returns a string that is made lowercase, whitespace removed, and all dashes `-` and underscores `_` removed. + std::string simplify(const std::string& input); // Splits the input string by a single character into out, so "A,B,C" would be put into [A,B,C]. input is NOT modified! - static void split(std::string &input, const char delim, std::vector &out); - static void split_and_trim(std::string &input, const char delim, std::vector &out); + void split(std::string &input, const char delim, std::vector &out); + void split_and_trim(std::string &input, const char delim, std::vector &out); + + std::string join(const std::vector &input, std::string delim, size_t startIndex = 0); // Returns the index of the closing brace of the first opening brace encountered. Or -1 if none was encountered. - static int find_closing_brace(const std::string &input, int inputOffset=0); + int find_closing_brace(const std::string &input, int inputOffset=0); // Converts `FOO_BAR` to `FooBar`. - static std::string upper_snake_case_to_pascal_case(const std::string &input); + std::string upper_snake_case_to_pascal_case(const std::string &input); + // Converts `FooBar` to `FOO_BAR` + std::string pascal_case_to_upper_snake_case(const std::string &input); - static std::string to_hex(uint64_t value, int numDigits=0); + std::string to_hex(uint64_t value, int numDigits=0); + std::string to_uppercase_hex(uint64_t value, int numDigits = 0); // Returns offset + length of string + 1 (for null-terminator) - static size_t get_ascii_from_data(std::vector &data, size_t offset, std::string &out); -}; + size_t get_ascii_from_data(std::vector &data, size_t offset, std::string &out); +} +} \ No newline at end of file diff --git a/tools/dkr_assets_tool_src/libs/bytes_view.hpp b/tools/dkr_assets_tool_src/libs/bytes_view.hpp new file mode 100644 index 00000000..77a5a7d1 --- /dev/null +++ b/tools/dkr_assets_tool_src/libs/bytes_view.hpp @@ -0,0 +1,253 @@ +#ifndef BYTES_VIEW_H +#define BYTES_VIEW_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class BytesView { +public: + // TODO: Can I use this with std::vector without needing a default constructor? Only reason for `_data` being a pointer instead of a reference. + BytesView() { + } + + BytesView(std::vector &vec, size_t startOffset=0, std::optional size=std::nullopt) : _startOffset(startOffset), _data(&vec) { + if(size == std::nullopt) { + _length = _data->size() - _startOffset; + } else { + _length = size.value(); + } + if (_startOffset + _length > _data->size()) { + throw std::out_of_range("BytesView range exceeds vector size"); + } + } + + BytesView(std::vector *vec, size_t startOffset = 0, std::optional size=std::nullopt) : _startOffset(startOffset), _data(vec) { + if(size == std::nullopt) { + _length = _data->size() - _startOffset; + } else { + _length = size.value(); + } + if (_startOffset + _length > _data->size()) { + throw std::out_of_range("BytesView range exceeds vector size"); + } + } + + const uint8_t operator[](size_t index) const { + if (_data == nullptr) throw std::runtime_error("BytesView was not initialized!"); + if (index >= _length) { + throw std::out_of_range("Index out of range"); + } + return _data->at(_startOffset + index); + } + + uint8_t& operator[](size_t index) { + if (_data == nullptr) throw std::runtime_error("BytesView was not initialized!"); + if (index >= _length) { + throw std::out_of_range("Index out of range"); + } + return (*_data)[_startOffset + index]; + } + + size_t offset() const { + return _startOffset; + } + + size_t size() const { + return _length; + } + + const uint8_t* data() const { + if (_data == nullptr) throw std::runtime_error("BytesView was not initialized!"); + return &_data->at(_startOffset); + } + + const std::reference_wrapper> data_vector() const { + if (_data == nullptr) throw std::runtime_error("BytesView was not initialized!"); + return std::ref(*_data); + } + + template + T* data_cast(size_t offset=0) { + if (_data == nullptr) throw std::runtime_error("BytesView was not initialized!"); + return reinterpret_cast(&_data->at(_startOffset) + offset); + }; + + // Copy data from a vector. + void copy_from(const std::vector &srcData, size_t offset = 0) { + if (_data == nullptr) throw std::runtime_error("BytesView was not initialized!"); + std::copy(srcData.begin(), srcData.end(), _data->begin() + _startOffset + offset); + } + + // Copy data from another view into this view. + void copy_from(BytesView srcView, size_t offset = 0) { + copy_from(srcView.data_vector(), offset); + } + + BytesView get_sub_view(size_t startOffset, std::optional size=std::nullopt) const { + if (_data == nullptr) throw std::runtime_error("BytesView was not initialized!"); + size_t newSize; + if (size == std::nullopt) { + newSize = _length - startOffset; + } else { + newSize = size.value(); + } + return BytesView(_data, _startOffset + startOffset, newSize); + } + + // little-endian unsigned 32-bit value. + uint32_t get_u32_le(size_t offset) const { + if (_data == nullptr) throw std::runtime_error("BytesView was not initialized!"); + return (_data->at(_startOffset + offset + 3) << 24) | + (_data->at(_startOffset + offset + 2) << 16) | + (_data->at(_startOffset + offset + 1) << 8) | + (_data->at(_startOffset + offset + 0)); + } + + int32_t get_s32_le(size_t offset) const { + return (int32_t)get_u32_le(offset); + } + + void set_u32_le(size_t offset, uint32_t value) { + if (_data == nullptr) throw std::runtime_error("BytesView was not initialized!"); + (*_data)[_startOffset + offset + 3] = (value >> 24) & 0xFF; + (*_data)[_startOffset + offset + 2] = (value >> 16) & 0xFF; + (*_data)[_startOffset + offset + 1] = (value >> 8) & 0xFF; + (*_data)[_startOffset + offset + 0] = value & 0xFF; + } + + void set_s32_le(size_t offset, int32_t value) { + set_u32_le(offset, (uint32_t)value); + } + + // little-endian unsigned 16-bit value. + uint16_t get_u16_le(size_t offset) const { + if (_data == nullptr) throw std::runtime_error("BytesView was not initialized!"); + return (_data->at(_startOffset + offset + 1) << 8) | + (_data->at(_startOffset + offset + 0)); + } + + int16_t get_s16_le(size_t offset) const { + return (int16_t)get_u16_le(offset); + } + + void set_u16_le(size_t offset, uint16_t value) { + if (_data == nullptr) throw std::runtime_error("BytesView was not initialized!"); + (*_data)[_startOffset + offset + 1] = (value >> 8) & 0xFF; + (*_data)[_startOffset + offset + 0] = value & 0xFF; + } + + void set_s16_le(size_t offset, int16_t value) { + set_u16_le(offset, (uint16_t)value); + } + + // big-endian unsigned 16-bit value. + uint16_t get_u16_be(size_t offset) const { + if (_data == nullptr) throw std::runtime_error("BytesView was not initialized!"); + return (_data->at(_startOffset + offset + 0) << 8) | + (_data->at(_startOffset + offset + 1)); + } + + int16_t get_s16_be(size_t offset) const { + return (int16_t)get_u16_be(offset); + } + + void set_u16_be(size_t offset, uint16_t value) { + if (_data == nullptr) throw std::runtime_error("BytesView was not initialized!"); + (*_data)[_startOffset + offset + 0] = (value >> 8) & 0xFF; + (*_data)[_startOffset + offset + 1] = value & 0xFF; + } + + void set_s16_be(size_t offset, int16_t value) { + set_u16_be(offset, (uint16_t)value); + } + + // big-endian unsigned 32-bit value. + uint32_t get_u32_be(size_t offset) const { + if (_data == nullptr) throw std::runtime_error("BytesView was not initialized!"); + return (_data->at(_startOffset + offset + 0) << 24) | + (_data->at(_startOffset + offset + 1) << 16) | + (_data->at(_startOffset + offset + 2) << 8) | + (_data->at(_startOffset + offset + 3)); + } + + int32_t get_s32_be(size_t offset) const { + return (int32_t)get_u32_be(offset); + } + + void set_u32_be(size_t offset, uint32_t value) { + if (_data == nullptr) throw std::runtime_error("BytesView was not initialized!"); + (*_data)[_startOffset + offset + 0] = (value >> 24) & 0xFF; + (*_data)[_startOffset + offset + 1] = (value >> 16) & 0xFF; + (*_data)[_startOffset + offset + 2] = (value >> 8) & 0xFF; + (*_data)[_startOffset + offset + 3] = value & 0xFF; + } + + void set_s32_be(size_t offset, int32_t value) { + set_u32_be(offset, (uint32_t)value); + } + + void print(int32_t offset = 0, int32_t length = 32, size_t groupBy = 4) const { + if (_data == nullptr) throw std::runtime_error("BytesView was not initialized!"); + + + std::stringstream ss; + + if(_length == 0) { + ss << "BytesView is empty!"; + std::cout << ss.str() << std::endl; + return; + } + + if (length > (int32_t)_length - offset) { + length = (int32_t)_length - offset; + } + if (groupBy < 1) groupBy = 1; + + size_t byteCountInLine = 0; + while (length > 0) { + for (size_t i = 0; i < groupBy; i++) { + try { + int byteValue = _data->at(_startOffset + offset + i) & 0xFF; + ss << std::hex << std::setw(2) << std::setfill('0') << byteValue; + } catch (const std::out_of_range& oor) { + break; + } + } + ss << " "; + offset += groupBy; + length -= groupBy; + byteCountInLine += groupBy; + if (byteCountInLine >= 16) { + byteCountInLine = 0; + ss << std::endl; + } + } + + std::cout << ss.str() << std::endl; + } + +private: + size_t _startOffset = 0; + size_t _length = 0; + std::vector *_data = nullptr; +}; + + +// Allows BytesView to be converted into a std::istream +class BytesViewStreamBuf : public std::streambuf { +public: + BytesViewStreamBuf(BytesView bytesView) { + char* begin = reinterpret_cast(const_cast(bytesView.data())); + this->setg(begin, begin, begin + bytesView.size()); + } +}; + +#endif // BYTES_VIEW_H \ No newline at end of file diff --git a/tools/dkr_assets_tool_src/libs/gzip/DKRGzip.c b/tools/dkr_assets_tool_src/libs/gzip/DKRGzip.c index 6a25580e..1b2cc2e4 100644 --- a/tools/dkr_assets_tool_src/libs/gzip/DKRGzip.c +++ b/tools/dkr_assets_tool_src/libs/gzip/DKRGzip.c @@ -1946,6 +1946,9 @@ unsigned char *dkr_gzip_compress(unsigned char *input, int inputSize, int gzipLe return NULL; } + // Must reset the window to zeroes for the gzip to work properly for subsequent compressions. + memset(window, 0, 2*WSIZE); + inbuf = input; inbufSize = inputSize; level = gzipLevel; @@ -1955,4 +1958,3 @@ unsigned char *dkr_gzip_compress(unsigned char *input, int inputSize, int gzipLe *outputSize = outcnt; return outbuf; } - diff --git a/tools/dkr_assets_tool_src/libs/sha1.hpp b/tools/dkr_assets_tool_src/libs/sha1.hpp new file mode 100644 index 00000000..67a6b522 --- /dev/null +++ b/tools/dkr_assets_tool_src/libs/sha1.hpp @@ -0,0 +1,334 @@ +/* + sha1.hpp - source code of + + ============ + SHA-1 in C++ + ============ + + 100% Public Domain. + + Original C Code + -- Steve Reid + Small changes to fit into bglibs + -- Bruce Guenter + Translation to simpler C++ Code + -- Volker Diels-Grabsch + Safety fixes + -- Eugene Hopkinson + Header-only library + -- Zlatko Michailov +*/ + +#ifndef SHA1_HPP +#define SHA1_HPP + + +#include +#include +#include +#include +#include +#include + + +class SHA1 +{ +public: + SHA1(); + void update(const std::string &s); + void update(std::istream &is); + std::string final(); + static std::string from_file(const std::string &filename); + +private: + uint32_t digest[5]; + std::string buffer; + uint64_t transforms; +}; + + +static const size_t BLOCK_INTS = 16; /* number of 32bit integers per SHA1 block */ +static const size_t BLOCK_BYTES = BLOCK_INTS * 4; + + +inline static void reset(uint32_t digest[], std::string &buffer, uint64_t &transforms) +{ + /* SHA1 initialization constants */ + digest[0] = 0x67452301; + digest[1] = 0xefcdab89; + digest[2] = 0x98badcfe; + digest[3] = 0x10325476; + digest[4] = 0xc3d2e1f0; + + /* Reset counters */ + buffer = ""; + transforms = 0; +} + + +inline static uint32_t rol(const uint32_t value, const size_t bits) +{ + return (value << bits) | (value >> (32 - bits)); +} + + +inline static uint32_t blk(const uint32_t block[BLOCK_INTS], const size_t i) +{ + return rol(block[(i+13)&15] ^ block[(i+8)&15] ^ block[(i+2)&15] ^ block[i], 1); +} + + +/* + * (R0+R1), R2, R3, R4 are the different operations used in SHA1 + */ + +inline static void R0(const uint32_t block[BLOCK_INTS], const uint32_t v, uint32_t &w, const uint32_t x, const uint32_t y, uint32_t &z, const size_t i) +{ + z += ((w&(x^y))^y) + block[i] + 0x5a827999 + rol(v, 5); + w = rol(w, 30); +} + + +inline static void R1(uint32_t block[BLOCK_INTS], const uint32_t v, uint32_t &w, const uint32_t x, const uint32_t y, uint32_t &z, const size_t i) +{ + block[i] = blk(block, i); + z += ((w&(x^y))^y) + block[i] + 0x5a827999 + rol(v, 5); + w = rol(w, 30); +} + + +inline static void R2(uint32_t block[BLOCK_INTS], const uint32_t v, uint32_t &w, const uint32_t x, const uint32_t y, uint32_t &z, const size_t i) +{ + block[i] = blk(block, i); + z += (w^x^y) + block[i] + 0x6ed9eba1 + rol(v, 5); + w = rol(w, 30); +} + + +inline static void R3(uint32_t block[BLOCK_INTS], const uint32_t v, uint32_t &w, const uint32_t x, const uint32_t y, uint32_t &z, const size_t i) +{ + block[i] = blk(block, i); + z += (((w|x)&y)|(w&x)) + block[i] + 0x8f1bbcdc + rol(v, 5); + w = rol(w, 30); +} + + +inline static void R4(uint32_t block[BLOCK_INTS], const uint32_t v, uint32_t &w, const uint32_t x, const uint32_t y, uint32_t &z, const size_t i) +{ + block[i] = blk(block, i); + z += (w^x^y) + block[i] + 0xca62c1d6 + rol(v, 5); + w = rol(w, 30); +} + + +/* + * Hash a single 512-bit block. This is the core of the algorithm. + */ + +inline static void transform(uint32_t digest[], uint32_t block[BLOCK_INTS], uint64_t &transforms) +{ + /* Copy digest[] to working vars */ + uint32_t a = digest[0]; + uint32_t b = digest[1]; + uint32_t c = digest[2]; + uint32_t d = digest[3]; + uint32_t e = digest[4]; + + /* 4 rounds of 20 operations each. Loop unrolled. */ + R0(block, a, b, c, d, e, 0); + R0(block, e, a, b, c, d, 1); + R0(block, d, e, a, b, c, 2); + R0(block, c, d, e, a, b, 3); + R0(block, b, c, d, e, a, 4); + R0(block, a, b, c, d, e, 5); + R0(block, e, a, b, c, d, 6); + R0(block, d, e, a, b, c, 7); + R0(block, c, d, e, a, b, 8); + R0(block, b, c, d, e, a, 9); + R0(block, a, b, c, d, e, 10); + R0(block, e, a, b, c, d, 11); + R0(block, d, e, a, b, c, 12); + R0(block, c, d, e, a, b, 13); + R0(block, b, c, d, e, a, 14); + R0(block, a, b, c, d, e, 15); + R1(block, e, a, b, c, d, 0); + R1(block, d, e, a, b, c, 1); + R1(block, c, d, e, a, b, 2); + R1(block, b, c, d, e, a, 3); + R2(block, a, b, c, d, e, 4); + R2(block, e, a, b, c, d, 5); + R2(block, d, e, a, b, c, 6); + R2(block, c, d, e, a, b, 7); + R2(block, b, c, d, e, a, 8); + R2(block, a, b, c, d, e, 9); + R2(block, e, a, b, c, d, 10); + R2(block, d, e, a, b, c, 11); + R2(block, c, d, e, a, b, 12); + R2(block, b, c, d, e, a, 13); + R2(block, a, b, c, d, e, 14); + R2(block, e, a, b, c, d, 15); + R2(block, d, e, a, b, c, 0); + R2(block, c, d, e, a, b, 1); + R2(block, b, c, d, e, a, 2); + R2(block, a, b, c, d, e, 3); + R2(block, e, a, b, c, d, 4); + R2(block, d, e, a, b, c, 5); + R2(block, c, d, e, a, b, 6); + R2(block, b, c, d, e, a, 7); + R3(block, a, b, c, d, e, 8); + R3(block, e, a, b, c, d, 9); + R3(block, d, e, a, b, c, 10); + R3(block, c, d, e, a, b, 11); + R3(block, b, c, d, e, a, 12); + R3(block, a, b, c, d, e, 13); + R3(block, e, a, b, c, d, 14); + R3(block, d, e, a, b, c, 15); + R3(block, c, d, e, a, b, 0); + R3(block, b, c, d, e, a, 1); + R3(block, a, b, c, d, e, 2); + R3(block, e, a, b, c, d, 3); + R3(block, d, e, a, b, c, 4); + R3(block, c, d, e, a, b, 5); + R3(block, b, c, d, e, a, 6); + R3(block, a, b, c, d, e, 7); + R3(block, e, a, b, c, d, 8); + R3(block, d, e, a, b, c, 9); + R3(block, c, d, e, a, b, 10); + R3(block, b, c, d, e, a, 11); + R4(block, a, b, c, d, e, 12); + R4(block, e, a, b, c, d, 13); + R4(block, d, e, a, b, c, 14); + R4(block, c, d, e, a, b, 15); + R4(block, b, c, d, e, a, 0); + R4(block, a, b, c, d, e, 1); + R4(block, e, a, b, c, d, 2); + R4(block, d, e, a, b, c, 3); + R4(block, c, d, e, a, b, 4); + R4(block, b, c, d, e, a, 5); + R4(block, a, b, c, d, e, 6); + R4(block, e, a, b, c, d, 7); + R4(block, d, e, a, b, c, 8); + R4(block, c, d, e, a, b, 9); + R4(block, b, c, d, e, a, 10); + R4(block, a, b, c, d, e, 11); + R4(block, e, a, b, c, d, 12); + R4(block, d, e, a, b, c, 13); + R4(block, c, d, e, a, b, 14); + R4(block, b, c, d, e, a, 15); + + /* Add the working vars back into digest[] */ + digest[0] += a; + digest[1] += b; + digest[2] += c; + digest[3] += d; + digest[4] += e; + + /* Count the number of transformations */ + transforms++; +} + + +inline static void buffer_to_block(const std::string &buffer, uint32_t block[BLOCK_INTS]) +{ + /* Convert the std::string (byte buffer) to a uint32_t array (MSB) */ + for (size_t i = 0; i < BLOCK_INTS; i++) + { + block[i] = (buffer[4*i+3] & 0xff) + | (buffer[4*i+2] & 0xff)<<8 + | (buffer[4*i+1] & 0xff)<<16 + | (buffer[4*i+0] & 0xff)<<24; + } +} + + +inline SHA1::SHA1() +{ + reset(digest, buffer, transforms); +} + + +inline void SHA1::update(const std::string &s) +{ + std::istringstream is(s); + update(is); +} + + +inline void SHA1::update(std::istream &is) +{ + while (true) + { + char sbuf[BLOCK_BYTES]; + is.read(sbuf, BLOCK_BYTES - buffer.size()); + buffer.append(sbuf, (std::size_t)is.gcount()); + if (buffer.size() != BLOCK_BYTES) + { + return; + } + uint32_t block[BLOCK_INTS]; + buffer_to_block(buffer, block); + transform(digest, block, transforms); + buffer.clear(); + } +} + + +/* + * Add padding and return the message digest. + */ + +inline std::string SHA1::final() +{ + /* Total number of hashed bits */ + uint64_t total_bits = (transforms*BLOCK_BYTES + buffer.size()) * 8; + + /* Padding */ + buffer += (char)0x80; + size_t orig_size = buffer.size(); + while (buffer.size() < BLOCK_BYTES) + { + buffer += (char)0x00; + } + + uint32_t block[BLOCK_INTS]; + buffer_to_block(buffer, block); + + if (orig_size > BLOCK_BYTES - 8) + { + transform(digest, block, transforms); + for (size_t i = 0; i < BLOCK_INTS - 2; i++) + { + block[i] = 0; + } + } + + /* Append total_bits, split this uint64_t into two uint32_t */ + block[BLOCK_INTS - 1] = (uint32_t)total_bits; + block[BLOCK_INTS - 2] = (uint32_t)(total_bits >> 32); + transform(digest, block, transforms); + + /* Hex std::string */ + std::ostringstream result; + for (size_t i = 0; i < sizeof(digest) / sizeof(digest[0]); i++) + { + result << std::hex << std::setfill('0') << std::setw(8); + result << digest[i]; + } + + /* Reset for next run */ + reset(digest, buffer, transforms); + + return result.str(); +} + + +inline std::string SHA1::from_file(const std::string &filename) +{ + std::ifstream stream(filename.c_str(), std::ios::binary); + SHA1 checksum; + checksum.update(stream); + return checksum.final(); +} + + +#endif /* SHA1_HPP */ diff --git a/tools/dkr_assets_tool_src/main.cpp b/tools/dkr_assets_tool_src/main.cpp index cf1b8e36..098d617f 100644 --- a/tools/dkr_assets_tool_src/main.cpp +++ b/tools/dkr_assets_tool_src/main.cpp @@ -6,91 +6,37 @@ #include "helpers/jsonHelper.h" #include "helpers/debugHelper.h" -#include "misc/settings.hpp" +#include "misc/args.h" +#include "misc/globalSettings.h" #include "extract/extractor.h" #include "builder/builder.h" -#include "prebuild/prebuild.h" #include "test/test.h" +using namespace DkrAssetsTool; + /*******************************************************************************************************/ int main(int argc, char *argv[]) { - argparse::ArgumentParser args(DKRAT_NAME, DKRAT_VERSION); + DebugHelper::get().set_asserts(); - DkrAssetsSettings settings; + std::optional decompRoot = GlobalSettings::find_decomp_root(); + DebugHelper::assert_(decompRoot.has_value(), "(main) Could not find the root to the decomp."); + GlobalSettings::parse_values_from_json_file(decompRoot.value() / "tools/dkr_assets_tool_settings.json"); - /*** Extract tool ***/ - argparse::ArgumentParser extract("extract"); - - /*** Build tool ***/ - argparse::ArgumentParser builder("build"); - - /*** Pre-Build tool ***/ - argparse::ArgumentParser prebuild("prebuild"); - - /*** Test tool (For testing functionality) ***/ - argparse::ArgumentParser tester("test"); - - builder.add_argument("-i", "--input") - .required() - .help("Input JSON filepath."); - - builder.add_argument("-o", "--output") - .required() - .help("Output path."); - - args.add_subparser(extract); - args.add_subparser(builder); - args.add_subparser(prebuild); - args.add_subparser(tester); - - args.add_argument("-dkrv", "--dkr_version") - .default_value(settings.dkrVersion) - .help("Which version of DKR to use. Overrides default."); - - args.add_argument("-vb", "--verbose") - .default_value(DEFAULT_VERBOSE_VALUE) - .implicit_value(true) - .help("Which version of DKR to use. Overrides default."); - - try { - args.parse_args(argc, argv); - } catch (const std::exception &err) { - if(args.is_subcommand_used(extract)) { - std::cout << extract << std::endl; - } else if(args.is_subcommand_used(builder)) { - std::cout << builder << std::endl; - } - DebugHelper::error(err.what()); + //GlobalSettings::print_all_values(); + + Args::parse(argc, argv); + + switch (Args::get_command()) { + default: + Args::print_help(); + break; + case Args::ToolCommand::EXTRACT: + AssetExtractor::extract_all(); + break; + case Args::ToolCommand::BUILD: + AssetBuilder::build_all(Args::get("-o", "")); + break; } - - settings.dkrVersion = args.get("-dkrv"); - DebugHelper::get().set_verbose(args.get("-vb")); - DebugHelper::get().set_asserts(USING_ASSERTS); - - if(args.is_subcommand_used(extract)) { - //settings.print(); - DkrExtract extract(settings); - return 0; - } - if(args.is_subcommand_used(builder)) { - std::string inputPath = builder.get("-i"); - std::string outputPath = builder.get("-o"); - //settings.print(); - DkrAssetBuilder builder(settings, inputPath, outputPath); - return 0; - } - if(args.is_subcommand_used(tester)) { - //settings.print(); - TestDKRAT test(settings); - return 0; - } - if(args.is_subcommand_used(prebuild)) { - //settings.print(); - PreBuild prebuild(settings); - return 0; - } - - return 0; } diff --git a/tools/dkr_assets_tool_src/misc/args.cpp b/tools/dkr_assets_tool_src/misc/args.cpp new file mode 100644 index 00000000..2d205a83 --- /dev/null +++ b/tools/dkr_assets_tool_src/misc/args.cpp @@ -0,0 +1,96 @@ +#include "args.h" +#include "libs/argparse.hpp" +#include "helpers/debugHelper.h" +#include "helpers/fileHelper.h" +#include "misc/constants.hpp" + +using namespace DkrAssetsTool; + +Args::ToolCommand _currentCommand = Args::ToolCommand::NOCMD; +argparse::ArgumentParser _args(DKRAT_NAME, DKRAT_VERSION); + +/*** Extract tool ***/ +argparse::ArgumentParser _extract("extract"); +argparse::ArgumentParser _builder("build"); + +void Args::parse(int argc, char* argv[]) { + _extract.add_argument("-dkrv", "--dkrVersion") + .required() + .help("The version of DKR being used."); + + _extract.add_argument("-t", "--type") + .default_value("") + .help("Asset type to extract (Only for extracting a single asset)"); + + _builder.add_argument("-i", "--input") + .help("Input JSON filepath."); + + _builder.add_argument("-o", "--output") + .required() + .help("Output path."); + + _builder.add_argument("-dkrv", "--dkrVersion") + .required() + .help("The version of DKR being used."); + + _builder.add_argument("-m", "--modded") + .flag() + .help("Will try to compile assets if this flag is set."); + + _args.add_subparser(_extract); + _args.add_subparser(_builder); + + try { + _args.parse_args(argc, argv); + } catch (const std::exception& err) { + if (_args.is_subcommand_used(_extract)) { + std::cout << _extract << std::endl; + } else if (_args.is_subcommand_used(_builder)) { + std::cout << _builder << std::endl; + } + DebugHelper::error(err.what()); + } + + if (_args.is_subcommand_used(_extract)) { + _currentCommand = ToolCommand::EXTRACT; + } else if (_args.is_subcommand_used(_builder)) { + _currentCommand = ToolCommand::BUILD; + } +} + +Args::ToolCommand Args::get_command() { + return _currentCommand; +} + +template +T Args::get(std::string key, T defaultValue) { + try { + switch (_currentCommand) { + case ToolCommand::EXTRACT: + return _extract.get(key); + case ToolCommand::BUILD: + return _builder.get(key); + default: + return defaultValue; + } + } catch (const std::bad_any_cast& err) { + DebugHelper::warn("Could not get ", key, " from args. ", err.what()); + } + + return defaultValue; +} + +template std::string Args::get(std::string key, std::string defaultValue); +template int Args::get(std::string key, int defaultValue); +template bool Args::get(std::string key, bool defaultValue); +template double Args::get(std::string key, double defaultValue); + +void Args::print_help() { + std::cout << _args << std::endl; +} + +std::string Args::get_dkr_version() { + std::string ver = get("-dkrv", ""); + DebugHelper::assert_(!ver.empty(), "(Args::get_dkr_version) You MUST specify a DKR version with \"-dkrv \""); + return ver; +} diff --git a/tools/dkr_assets_tool_src/misc/args.h b/tools/dkr_assets_tool_src/misc/args.h new file mode 100644 index 00000000..c9f769af --- /dev/null +++ b/tools/dkr_assets_tool_src/misc/args.h @@ -0,0 +1,28 @@ +#pragma once + +#include + +namespace DkrAssetsTool { + +// Helps with getting values from the passed-in arguments. +namespace Args { + enum ToolCommand { + NOCMD, + EXTRACT, + BUILD + }; + + void parse(int argc, char* argv[]); + + ToolCommand get_command(); + + template + T get(std::string key, T defaultValue); + + void print_help(); + std::string get_dkr_version(); + + bool is_modded(); // Was the -m flag set? +}; + +} diff --git a/tools/dkr_assets_tool_src/misc/constants.hpp b/tools/dkr_assets_tool_src/misc/constants.hpp index abffb712..43f4a14c 100644 --- a/tools/dkr_assets_tool_src/misc/constants.hpp +++ b/tools/dkr_assets_tool_src/misc/constants.hpp @@ -2,14 +2,18 @@ #include +namespace DkrAssetsTool { + const std::string DKRAT_NAME = "DKR Assets Tool"; -const std::string DKRAT_VERSION = "Revision 4"; -const int DKRAT_REVISION_MAJOR = 4; -const int DKRAT_REVISION_MINOR = 0; +const int DKRAT_VERSION_RELEASE = 0; +const int DKRAT_VERSION_MAJOR = 5; +const int DKRAT_VERSION_MINOR = 0; +const std::string DKRAT_VERSION = "Version " + std::to_string(DKRAT_VERSION_RELEASE) + "." + + std::to_string(DKRAT_VERSION_MAJOR) + "." + + std::to_string(DKRAT_VERSION_MINOR); const std::string DKRAT_SETTINGS_FILE = "dkr_assets_tool_settings.json"; -const std::string DEFAULT_DKR_VERSION = "us_1.0"; const std::string DEFAULT_BASEROMS_SUBPATH = "baseroms/"; const std::string DEFAULT_ASSETS_SUBPATH = "assets/"; const std::string DEFAULT_CONFIGS_SUBPATH = "extract-ver/"; @@ -28,3 +32,5 @@ const bool USING_ASSERTS = true; const double DEFAULT_MODEL_SCALE_GLTF = 1.0 / 1000.0; const double DKR_FPS = 60.0; // For time conversions + +} diff --git a/tools/dkr_assets_tool_src/misc/globalSettings.cpp b/tools/dkr_assets_tool_src/misc/globalSettings.cpp new file mode 100644 index 00000000..922e800b --- /dev/null +++ b/tools/dkr_assets_tool_src/misc/globalSettings.cpp @@ -0,0 +1,176 @@ +#include "globalSettings.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "helpers/debugHelper.h" +#include "helpers/jsonHelper.h" +#include "helpers/stringHelper.h" + +#include "args.h" + +using namespace DkrAssetsTool; + +std::unordered_map settingValues; + +template +T GlobalSettings::get_value(std::string key, T defaultValue) { + auto it = settingValues.find(StringHelper::simplify(key)); + if (it != settingValues.end()) { + try { + return std::any_cast(it->second); + } catch (const std::bad_any_cast&) { + return defaultValue; + } + } + return defaultValue; +} + +template std::string GlobalSettings::get_value(std::string key, std::string defaultValue); +template fs::path GlobalSettings::get_value(std::string key, fs::path defaultValue); +template int GlobalSettings::get_value(std::string key, int defaultValue); +template bool GlobalSettings::get_value(std::string key, bool defaultValue); +template double GlobalSettings::get_value(std::string key, double defaultValue); + +template +void GlobalSettings::set_value(std::string key, T value) { + settingValues[StringHelper::simplify(key)] = value; +} + +template void GlobalSettings::set_value(std::string key, std::string value); +template void GlobalSettings::set_value(std::string key, fs::path value); +template void GlobalSettings::set_value(std::string key, int value); +template void GlobalSettings::set_value(std::string key, bool value); +template void GlobalSettings::set_value(std::string key, double value); + +void GlobalSettings::parse_values_from_json_file(fs::path pathToJsonFile) { + JsonFile settingsJson(pathToJsonFile); + + std::vector allPointers = settingsJson.get_all_pointers(); + + for (std::string& jsonPtr : allPointers) { + std::any jsonPtrValue = settingsJson.get_any(jsonPtr); + if (jsonPtrValue.has_value()) { + settingValues[StringHelper::simplify(jsonPtr)] = jsonPtrValue; + } + } +} + +static void print_any(std::stringstream& ss, const std::any& anyValue) { + // This is more compact then doing a bunch of try-catch blocks for each cast. + static const std::unordered_map> handlers = { + { typeid(bool), [](std::stringstream& ss, const std::any& a) { ss << (std::any_cast(a) ? "true" : "false"); }}, + { typeid(int), [](std::stringstream& ss, const std::any& a) { ss << std::any_cast(a); }}, + { typeid(double), [](std::stringstream& ss, const std::any& a) { ss << std::any_cast(a); }}, + { typeid(std::string), [](std::stringstream& ss, const std::any& a) { ss << "\"" << std::any_cast(a) << "\""; }}, + }; + + auto it = handlers.find(anyValue.type()); + if (it != handlers.end()) { + it->second(ss, anyValue); + } else { + DebugHelper::error("Bad std::any value! Unknown type to cast!"); + } +} + +void GlobalSettings::print_all_values() { + std::stringstream ss; + + ss << "------ Settings ------" << std::endl; + for (auto& setting : settingValues) { + if (!setting.second.has_value()) { + continue; + } + ss << "\"" << setting.first << "\": "; + print_any(ss, setting.second); + ss << std::endl; + } + ss << "----------------------"; + + DebugHelper::info(ss.str()); +} + +std::string GlobalSettings::get_dkr_version() { + return Args::get_dkr_version(); +} + +std::mutex _findDecompRootMutex; +std::optional _cachedDecompRootResult = std::nullopt; + +std::optional GlobalSettings::find_decomp_root() { + // This code could possibly be called from multiple threads. A mutex is needed since I'm caching the result. + _findDecompRootMutex.lock(); + + // First we see if the result was already found before. + if (_cachedDecompRootResult.has_value()) { + _findDecompRootMutex.unlock(); + return _cachedDecompRootResult; + } + + // Next see if `decomp_root` was defined in the settings before trying to find it automatically. + fs::path rootFromSettings = get_value("decomp_root", ""); + if (!rootFromSettings.empty() && FileHelper::path_exists(rootFromSettings)) { + _findDecompRootMutex.unlock(); + return rootFromSettings; + } + + // Lastly, we'll check the existance of some known files/folders to see if we can find it auto-magically. + fs::path curDir = FileHelper::get_working_directory(); + + const std::vector lookForPaths = { + "src/", "baseroms/", "tools/", "Makefile" + }; + + while (!curDir.empty()) { + if (FileHelper::does_folder_contain_paths(curDir, lookForPaths)) { + _cachedDecompRootResult = curDir; // We found it! Cache it so we don't have to get it later. + _findDecompRootMutex.unlock(); + return _cachedDecompRootResult; + } + curDir = curDir.parent_path(); + } + + _findDecompRootMutex.unlock(); + return std::nullopt; // Could not find the decomp. :( +} + +fs::path GlobalSettings::get_decomp_path(std::string key, fs::path defaultSubpath) { + if(!defaultSubpath.empty()) { + DebugHelper::assert_(defaultSubpath.generic_string()[0] != '/', + "(GlobalSettings::get_decomp_path) HEY! defaultSubpath should not start with '/', it goes at the END."); + } + std::optional decompRoot = find_decomp_root(); + DebugHelper::assert_(decompRoot.has_value(), + "(GlobalSettings::get_decomp_path) Could not find the DKR decomp folder!"); + return decompRoot.value() / get_value(key, defaultSubpath); +} + +fs::path GlobalSettings::get_decomp_path_to_output_assets(bool fallbackToVanillaPath) { + std::optional decompPath = get_decomp_path("/assets_subpath", "assets/"); + DebugHelper::assert_(decompPath.has_value(), "(GlobalSettings::get_decomp_path_to_output_assets) Could not find the DKR decomp folder!"); + fs::path out = decompPath.value() / get_dkr_version(); + + // Use vanilla directory if the output directory doesn't exist yet. + if(!FileHelper::path_exists(out) && fallbackToVanillaPath) { + return get_decomp_path_to_vanilla_assets(); + } + + return out; +} + +fs::path GlobalSettings::get_decomp_path_to_vanilla_assets() { + std::optional decompPath = get_decomp_path("/assets_subpath", "assets/"); + DebugHelper::assert_(decompPath.has_value(), "(GlobalSettings::get_decomp_path_to_output_assets) Could not find the DKR decomp folder!"); + return (decompPath.value() / ".vanilla") / get_dkr_version(); +} + +size_t GlobalSettings::get_max_thread_count() { + int value = get_value("/threads", 0); + return (value > 0) ? (size_t)value : std::thread::hardware_concurrency(); +} \ No newline at end of file diff --git a/tools/dkr_assets_tool_src/misc/globalSettings.h b/tools/dkr_assets_tool_src/misc/globalSettings.h new file mode 100644 index 00000000..a0c8a243 --- /dev/null +++ b/tools/dkr_assets_tool_src/misc/globalSettings.h @@ -0,0 +1,32 @@ +#pragma once + +#include +#include "helpers/fileHelper.h" + +namespace DkrAssetsTool { +namespace GlobalSettings { + + template + T get_value(std::string key, T defaultValue); + + template + void set_value(std::string key, T value); + + void parse_values_from_json_file(fs::path pathToJsonFile); + + void print_all_values(); + + std::string get_dkr_version(); // Alias of Args::get_dkr_version() + std::optional find_decomp_root(); + fs::path get_decomp_path(std::string key, fs::path defaultSubpath); + + // Gets the path to "/assets/". + // Will use get_decomp_path_to_vanilla_assets() if output dir could not be found and fallbackToVanillaPath is true. + fs::path get_decomp_path_to_output_assets(bool fallbackToVanillaPath=true); + + // Gets the path to "/assets/.vanilla/". + fs::path get_decomp_path_to_vanilla_assets(); + + size_t get_max_thread_count(); +}; +}; diff --git a/tools/dkr_assets_tool_src/misc/settings.hpp b/tools/dkr_assets_tool_src/misc/old_settings.hpp similarity index 96% rename from tools/dkr_assets_tool_src/misc/settings.hpp rename to tools/dkr_assets_tool_src/misc/old_settings.hpp index c83030ee..06e1cdf2 100644 --- a/tools/dkr_assets_tool_src/misc/settings.hpp +++ b/tools/dkr_assets_tool_src/misc/old_settings.hpp @@ -9,6 +9,8 @@ #include "helpers/jsonHelper.h" #include "misc/constants.hpp" +namespace DkrAssetsTool { + // Some paths to find if a directory is considered to be the "root" of the decomp. const std::vector REPO_ROOT_FIND_PATHS = { "src", @@ -94,7 +96,9 @@ struct DkrAssetsSettings { } void load_from_json(const std::string &jsonPath) { - _settingsFileExists = JsonHelper::get().get_file(jsonPath, &_settingsJson); + auto tryGetSettingsFile = JsonHelper::get_file(jsonPath); + _settingsFileExists = tryGetSettingsFile.has_value(); + //_settingsJson = &tryGetSettingsFile.value_or(nullptr); _load_string_from_ptr(dkrVersion, "/default_dkr_version", DEFAULT_DKR_VERSION); @@ -176,3 +180,4 @@ private: sizeVar = (_settingsFileExists) ? _settingsJson->get_int(ptr, defaultValue) : defaultValue; } }; +} diff --git a/tools/dkr_assets_tool_src/prebuild/compileAssets/compile.cpp b/tools/dkr_assets_tool_src/prebuild/compileAssets/compile.cpp index 060a107b..7a34f887 100644 --- a/tools/dkr_assets_tool_src/prebuild/compileAssets/compile.cpp +++ b/tools/dkr_assets_tool_src/prebuild/compileAssets/compile.cpp @@ -1,42 +1,14 @@ #include "compile.h" #include "helpers/dataHelper.h" +#include "helpers/jsonHelper.h" #include "libs/zip_file.hpp" -CompileAssets::CompileAssets(DkrAssetsSettings &settings) : _settings(settings) { - _vanillaAssetsPath = _settings.pathToAssets / ".vanilla" / settings.dkrVersion; - _outAssetsPath = _settings.pathToAssets / _settings.dkrVersion; - - _statFile = new StatJsonFile(_settings.pathToCache / "compileAssetsCache.json"); - - // Load order.json - DebugHelper::assert_(JsonHelper::get().get_file(_settings.pathToModAssets / "order.json", &_modOrderFile), - "Failed to get order.json for compiling!"); +#include "misc/globalSettings.h" - _modOrderCount = _modOrderFile->length_of_array("/order"); - - bool doCompile = - _compile_check_assets_exist() || - _compile_check_order_size(); - - if(!doCompile && (_modOrderCount > 0)) { - // Only do these checks if there are any entries in the order.json file. - doCompile = _compile_check_order_of_mods() || - _compile_check_order_files_updated(); - } - - if(doCompile) { - _compile_assets(); - _update_last_mod_order(); - _statFile->save(); - } -} +using namespace DkrAssetsTool; -CompileAssets::~CompileAssets() { - delete _statFile; -} - -void CompileAssets::_check_mod_path(fs::path &modPath) { +void check_mod_path(fs::path &modPath) { if(!FileHelper::path_exists(modPath)) { // This might just be a zip file. See if adding .zip as the extension will find it. fs::path tryZipPath = modPath; @@ -44,30 +16,25 @@ void CompileAssets::_check_mod_path(fs::path &modPath) { if(FileHelper::path_exists(tryZipPath)) { modPath = tryZipPath; } else { - DebugHelper::error("(CompileAssets::_check_mod_path) Path ", modPath, " does not exist!"); + DebugHelper::error("(check_mod_path) Path ", modPath, " does not exist!"); } } } -// Check if the main assets folder exists. -bool CompileAssets::_compile_check_assets_exist() { - return !FileHelper::path_exists(_outAssetsPath); -} - // Check if the number of mods has changed. -bool CompileAssets::_compile_check_order_size() { - size_t lastOrderCount = _statFile->get_value("/last-order-size", 0); - return _modOrderCount != lastOrderCount; +bool compile_check_order_size(size_t modOrderCount, StatJsonFile &statFile) { + size_t lastOrderCount = statFile.get_value("/last-order-size", 0); + return modOrderCount != lastOrderCount; } // Check if the order of the mods was changed. -bool CompileAssets::_compile_check_order_of_mods() { - if(_modOrderCount < 2) { +bool compile_check_order_of_mods(size_t modOrderCount, const JsonFile &modOrderFile, StatJsonFile &statFile) { + if(modOrderCount < 2) { return false; } - for(size_t i = 0; i < _modOrderCount; i++) { - std::string modName = _modOrderFile->get_string("/order/" + std::to_string(i)); - std::string lastModName = _statFile->get_value("/last-mod-order/" + std::to_string(i) , ""); + for(size_t i = 0; i < modOrderCount; i++) { + std::string modName = modOrderFile.get_string("/order/" + std::to_string(i)); + std::string lastModName = statFile.get_value("/last-mod-order/" + std::to_string(i) , ""); if(modName != lastModName) { return true; } @@ -76,87 +43,82 @@ bool CompileAssets::_compile_check_order_of_mods() { return false; } -void CompileAssets::_update_last_mod_order() { - for(size_t i = 0; i < _modOrderCount; i++) { - std::string modName = _modOrderFile->get_string("/order/" + std::to_string(i)); - _statFile->set_value("/last-mod-order/" + std::to_string(i), modName); +void update_last_mod_order(size_t modOrderCount, const JsonFile &modOrderFile, StatJsonFile &statFile) { + for(size_t i = 0; i < modOrderCount; i++) { + std::string modName = modOrderFile.get_string("/order/" + std::to_string(i)); + statFile.set_value("/last-mod-order/" + std::to_string(i), modName); } } // Check if any of the mod files have been updated. -bool CompileAssets::_compile_check_order_files_updated() { - for(size_t i = 0; i < _modOrderCount; i++) { - std::string modFolderName = _modOrderFile->get_string("/order/" + std::to_string(i)); +bool compile_check_order_files_updated(size_t modOrderCount, const JsonFile &modOrderFile, StatJsonFile &statFile, std::vector &modFilesModified) { + std::unordered_map lastModifiedDates; + + for(size_t i = 0; i < modOrderCount; i++) { + std::string modFolderName = modOrderFile.get_string("/order/" + std::to_string(i)); if(modFolderName.empty()) { continue; } - fs::path modPath = _settings.pathToModAssets / modFolderName; + fs::path modPath = GlobalSettings::get_decomp_path("mods-subpath", "mods/") / "assets"; // Make sure the path is valid. - _check_mod_path(modPath); + check_mod_path(modPath); // is_zip_file() checks the first 4 bytes to see if the file contains the standard .zip signature. if(FileHelper::is_zip_file(modPath)) { // If it is a zip file, then we only care about the archive file itself. Not it's contents - _lastModifiedDates[modPath] = FileHelper::get_last_modified_timestamp(modPath); + lastModifiedDates[modPath] = FileHelper::get_last_modified_timestamp(modPath); } else { - // Insert the timestamps from all the files in modPath into _lastModifiedDates - FileHelper::insert_timestamps_from_directory(modPath, _lastModifiedDates); + // Insert the timestamps from all the files in modPath into lastModifiedDates + FileHelper::insert_timestamps_from_directory(modPath, lastModifiedDates); } } - _modFilesModified.clear(); + modFilesModified.clear(); - for(auto &pair : _lastModifiedDates) { - std::string statModifiedDate = _statFile->get_entry(pair.first); + for(auto &pair : lastModifiedDates) { + std::string statModifiedDate = statFile.get_entry(pair.first); // If the file isn't on record, or if the modified date has changed, then we should compile! if(statModifiedDate.empty() || (statModifiedDate != pair.second)) { - _statFile->set_entry(pair.first, pair.second); - _modFilesModified.push_back(pair.first); + statFile.set_entry(pair.first, pair.second); + modFilesModified.push_back(pair.first); } } - return _modFilesModified.size() > 0; + return modFilesModified.size() > 0; } -void CompileAssets::_compile_assets() { - DebugHelper::info("Compiling assets..."); +void merge_or_copy_file(fs::path &modDir, fs::path &path) { + fs::path modPath = modDir / path; + fs::path outPath = GlobalSettings::get_decomp_path_to_output_assets() / path; - _statFile->set_value("/last-order-size", _modOrderCount); + bool copyFile = (path.extension() != ".json") || !FileHelper::path_exists(outPath); - // First clear the output directory (if it exists) - FileHelper::delete_directory(_outAssetsPath); - - // Copy all the vanilla files over to the output directory - FileHelper::copy(_vanillaAssetsPath, _outAssetsPath, true); - - if(_modOrderCount == 0) { - DebugHelper::info("Done! (Vanilla)"); - return; + if(copyFile) { + FileHelper::copy(modPath, outPath); + } else { // Merge file + JsonHelper::patch_json(outPath, modPath); } - - _merge_and_copy_files(); - - DebugHelper::info("Done! (", _modOrderCount, (_modOrderCount == 1) ? " mod)" : " mods)"); } -void CompileAssets::_merge_and_copy_files() { - std::vector modDirectories(_modOrderCount); + +void merge_and_copy_files(size_t modOrderCount, const JsonFile &modOrderFile, std::vector &modFilesModified) { + std::vector modDirectories(modOrderCount); - for(size_t i = 0; i < _modOrderCount; i++) { - std::string modFolderName = _modOrderFile->get_string("/order/" + std::to_string(i)); + for(size_t i = 0; i < modOrderCount; i++) { + std::string modFolderName = modOrderFile.get_string("/order/" + std::to_string(i)); if(modFolderName.empty()) { continue; } - modDirectories[i] = _settings.pathToModAssets / modFolderName; + modDirectories[i] = GlobalSettings::get_decomp_path("mods-subdir", "mods/") / "assets" / modFolderName; // Make sure the path exists. - _check_mod_path(modDirectories[i]); + check_mod_path(modDirectories[i]); } for(fs::path &modDir : modDirectories) { @@ -165,9 +127,9 @@ void CompileAssets::_merge_and_copy_files() { fs::path modName = modDir.stem(); - fs::path extractedDir = _settings.pathToModAssets / ".extracted"; + fs::path extractedDir = GlobalSettings::get_decomp_path("mods-subdir", "mods/") / "assets" / ".extracted"; - const bool zipFileHasChanged = DataHelper::vector_has(_modFilesModified, modDir); + const bool zipFileHasChanged = DataHelper::vector_has(modFilesModified, modDir); // Only extract if the zip file changed or if the mod's extracted folder does not exist. if(zipFileHasChanged || !FileHelper::path_exists(extractedDir / modName)) { @@ -182,35 +144,78 @@ void CompileAssets::_merge_and_copy_files() { file.extractall(extractedDir); } - modDir = _settings.pathToModAssets / ".extracted" / modName; + modDir = GlobalSettings::get_decomp_path("mods-subdir", "mods/") / "assets" / ".extracted" / modName; DebugHelper::assert_(FileHelper::path_exists(modDir), - "(CompileAssets::_merge_and_copy_files) Path ", modDir, " does not exist!"); + "(merge_and_copy_files) Path ", modDir, " does not exist!"); } else { DebugHelper::info_verbose("Applying Asset Mod: ", modDir); } - FileHelper::append_files_from_directory_relative(modDir, _modFiles[modDir]); - for(fs::path &path : _modFiles[modDir]) { + std::unordered_map, PathHash> modFiles; + FileHelper::append_files_from_directory_relative(modDir, modFiles[modDir]); + for(fs::path &path : modFiles[modDir]) { if(FileHelper::does_filename_equal(path, "meta.json")) { // Don't copy meta.json over. continue; } - _merge_or_copy_file(modDir, path); + merge_or_copy_file(modDir, path); } } } - -void CompileAssets::_merge_or_copy_file(fs::path &modDir, fs::path &path) { - fs::path modPath = modDir / path; - fs::path outPath = _outAssetsPath / path; +void compile_assets(size_t modOrderCount, const JsonFile &modOrderFile, StatJsonFile &statFile, std::vector &modFilesModified) { + statFile.set_value("/last-order-size", modOrderCount); - bool copyFile = (path.extension() != ".json") || !FileHelper::path_exists(outPath); + fs::path vanillaDir = GlobalSettings::get_decomp_path_to_vanilla_assets(); + fs::path outDir = GlobalSettings::get_decomp_path_to_output_assets(false); - if(copyFile) { - FileHelper::copy(modPath, outPath); - } else { // Merge file - JsonHelper::get().patch_json(_settings, outPath, modPath); + // Clear the output directory (if it exists) + FileHelper::delete_directory(outDir); + + if(modOrderCount == 0) { + DebugHelper::info("Done! (Vanilla)"); + return; } + // Copy all the vanilla files over to the output directory + FileHelper::copy(vanillaDir, outDir, true); + + merge_and_copy_files(modOrderCount, modOrderFile, modFilesModified); + + DebugHelper::info("Done! (", modOrderCount, (modOrderCount == 1) ? " mod)" : " mods)"); +} + +void CompileAssets::compile() { + DebugHelper::info("Compiling modded assets..."); + + std::vector modFilesModified; + + StatJsonFile statFile(GlobalSettings::get_decomp_path("cache_subdir", ".cache/") / "compileAssetsCache.json"); + + // Load order.json + auto tryGetModOrderFile = JsonHelper::get_file(GlobalSettings::get_decomp_path("mods-subdir", "mods/") / "assets/order.json"); + + if(!tryGetModOrderFile.has_value()) { + DebugHelper::warn("Could not find mods/assets/order.json"); + return; + } + + const JsonFile &modOrderFile = tryGetModOrderFile.value(); + + size_t modOrderCount = modOrderFile.length_of_array("/order"); + + bool doCompile = + compile_check_order_size(modOrderCount, statFile); + + if(!doCompile && (modOrderCount > 0)) { + // Only do these checks if there are any entries in the order.json file. + doCompile = compile_check_order_of_mods(modOrderCount, modOrderFile, statFile) || + compile_check_order_files_updated(modOrderCount, modOrderFile, statFile, modFilesModified); + } + + if(doCompile) { + compile_assets(modOrderCount, modOrderFile, statFile, modFilesModified); + update_last_mod_order(modOrderCount, modOrderFile, statFile); + statFile.save(); + } } \ No newline at end of file diff --git a/tools/dkr_assets_tool_src/prebuild/compileAssets/compile.h b/tools/dkr_assets_tool_src/prebuild/compileAssets/compile.h index e8017d5b..b8dbd02b 100644 --- a/tools/dkr_assets_tool_src/prebuild/compileAssets/compile.h +++ b/tools/dkr_assets_tool_src/prebuild/compileAssets/compile.h @@ -1,39 +1,7 @@ #pragma once -#include -#include - -#include "helpers/jsonHelper.h" -#include "helpers/fileHelper.h" - -#include "misc/settings.hpp" - -class CompileAssets { -public: - CompileAssets(DkrAssetsSettings &settings); - ~CompileAssets(); -private: - DkrAssetsSettings &_settings; - fs::path _outAssetsPath; - fs::path _vanillaAssetsPath; - StatJsonFile *_statFile; - JsonFile *_modOrderFile; - size_t _modOrderCount; - - std::unordered_map _lastModifiedDates; - std::unordered_map, PathHash> _modFiles; - std::vector _modFilesModified; - - void _check_mod_path(fs::path &modPath); - - bool _compile_check_assets_exist(); - bool _compile_check_order_size(); - bool _compile_check_order_of_mods(); - bool _compile_check_order_files_updated(); - - void _update_last_mod_order(); - - void _compile_assets(); - void _merge_and_copy_files(); - void _merge_or_copy_file(fs::path &modDir, fs::path &path); -}; +namespace DkrAssetsTool { +namespace CompileAssets { + void compile(); +} +} diff --git a/tools/dkr_assets_tool_src/prebuild/makeIncludes/assetEnums.cpp b/tools/dkr_assets_tool_src/prebuild/makeIncludes/assetEnums.cpp deleted file mode 100644 index 3535897f..00000000 --- a/tools/dkr_assets_tool_src/prebuild/makeIncludes/assetEnums.cpp +++ /dev/null @@ -1,190 +0,0 @@ -#include "assetEnums.h" - -#include "helpers/assetsHelper.h" -#include "helpers/stringHelper.h" -#include "helpers/c/cEnumsHelper.h" - -AssetEnums::AssetEnums(DkrAssetsSettings &settings) : _settings(settings) { - _outFilepath = _settings.pathToInclude / "asset_enums.h"; - - _cHeader.write_comment("This file is automatically generated. Any changes you make to this file will get overwritten."); - _cHeader.write_newline(); - - _cHeader.write_raw_text_line("#ifndef _ASSET_ENUMS_H"); - _cHeader.write_raw_text_line("#define _ASSET_ENUMS_H"); - _cHeader.write_newline(); - - _cHeader.write_header_comment("Asset Sections"); - _write_asset_section_enums(); - _cHeader.write_newline(); - - _cHeader.write_raw_text_line("#endif"); - - _cHeader.save(_outFilepath); -} - -AssetEnums::~AssetEnums() { - -} - -void AssetEnums::_write_asset_section_enums() { - JsonFile *mainJson = AssetsHelper::get_main_json(_settings); - - std::vector mainOrder; - mainJson->get_array("/assets/order", mainOrder); - - _write_main_asset_enum(mainOrder); - - for(std::string §ionId : mainOrder) { - JsonFile *sectionJson = AssetsHelper::get_asset_section_json(_settings, sectionId); - - if(sectionJson != nullptr) { - if(sectionJson->has("/files")) { - _cHeader.write_newline(); - _cHeader.write_header_comment(sectionId.c_str()); - _write_asset_section_enums(sectionId, sectionJson); - } else if(sectionJson->has("/filename")) { - _write_single_asset_section_enums(sectionId, sectionJson); - } - continue; - } - - std::string sectionPtr = "/assets/sections/" + sectionId; - - bool isDeferred = mainJson->get_bool(sectionPtr + "/deferred"); - - if(isDeferred) { - std::string deferInfoPtr = sectionPtr + "/defer-info"; - _cHeader.write_newline(); - _cHeader.write_header_comment(sectionId.c_str()); - _write_deferred_asset_section_enums(sectionId, mainJson, deferInfoPtr); - } - } -} - -void AssetEnums::_write_main_asset_enum(std::vector &mainOrder) { - WriteableCEnum mainEnum("AssetSectionsEnum"); - for(std::string §ionId : mainOrder) { - mainEnum.add_symbol(sectionId); - } - mainEnum.add_symbol("\n ASSET_SECTIONS_COUNT"); - _cHeader.write_raw_text(mainEnum.to_string()); -} - -void AssetEnums::_write_single_asset_section_enums(const std::string §ionId, JsonFile *sectionJson) { - if((sectionId != "ASSET_FONTS") && (sectionId != "ASSET_LEVEL_OBJECT_TRANSLATION_TABLE")) { - return; - } - _cHeader.write_newline(); - _cHeader.write_header_comment(sectionId.c_str()); - - std::string sectionEnumName = StringHelper::upper_snake_case_to_pascal_case(sectionId) + "Enum"; - WriteableCEnum sectionEnum(sectionEnumName); - - fs::path subFolder = sectionJson->get_path("/folder"); - fs::path jsonPath = _settings.pathToAssets; - if(!subFolder.empty()) { - jsonPath /= subFolder; - } - - if(sectionJson->is_value_null("/filename")) { - _cHeader.write_comment("No file"); - return; - } - - jsonPath /= sectionJson->get_string("/filename"); - JsonFile *assetJson; - DebugHelper::assert(JsonHelper::get().get_file(jsonPath, &assetJson), - "(AssetEnums::_write_single_asset_section_enums) Could not load fonts json!"); - - if(sectionId == "ASSET_FONTS") { - std::vector fontIds; - assetJson->get_array("/fonts-order", fontIds); - for(std::string &fontId : fontIds) { - sectionEnum.add_symbol(fontId); - } - } else if(sectionId == "ASSET_LEVEL_OBJECT_TRANSLATION_TABLE") { - size_t tableLen = assetJson->length_of_array("/table"); - for(size_t i = 0; i < tableLen; i++) { - std::string ptr = "/table/" + std::to_string(i); - if(assetJson->is_value_null(ptr)) { - sectionEnum.add_symbol("NULL_OBJECT_" + std::to_string(i) + "_ID"); - continue; - } - std::string objectId = assetJson->get_string(ptr); - - if(StringHelper::starts_with(objectId, "ASSET_OBJECT_")) { - objectId.insert(13, "ID_"); - } else { - objectId += "_ID"; - } - - sectionEnum.add_symbol(objectId); - } - } - - sectionEnum.add_symbol("\n " + sectionId + "_COUNT"); - _cHeader.write_raw_text(sectionEnum.to_string()); -} - -void AssetEnums::_write_asset_section_enums(const std::string §ionId, JsonFile *sectionJson) { - std::string sectionEnumName = StringHelper::upper_snake_case_to_pascal_case(sectionId) + "Enum"; - WriteableCEnum sectionEnum(sectionEnumName); - - std::vector sectionOrder; - sectionJson->get_array("/files/order", sectionOrder); - - for(std::string &assetBuildId : sectionOrder) { - sectionEnum.add_symbol(assetBuildId); - } - - - if(sectionId != "ASSET_MENU_TEXT") { - sectionEnum.add_symbol("\n " + sectionId + "_COUNT"); - } - _cHeader.write_raw_text(sectionEnum.to_string()); - - if(sectionId == "ASSET_MENU_TEXT") { - std::string menuTextIdsEnumName = StringHelper::upper_snake_case_to_pascal_case(sectionId) + "IdsEnum"; - WriteableCEnum menuTextIdsEnum(menuTextIdsEnumName); - - std::vector menuTextIds; - sectionJson->get_array("/menu-text-build-ids", menuTextIds); - for(std::string &textId : menuTextIds) { - menuTextIdsEnum.add_symbol(textId); - } - - menuTextIdsEnum.add_symbol("\n " + sectionId + "_COUNT"); - _cHeader.write_newline(); - _cHeader.write_raw_text(menuTextIdsEnum.to_string()); - } -} - -void AssetEnums::_write_deferred_asset_section_enums(const std::string §ionId, JsonFile *mainJson, const std::string &deferInfoPtr) { - std::string sectionEnumName = StringHelper::upper_snake_case_to_pascal_case(sectionId) + "Enum"; - WriteableCEnum sectionEnum(sectionEnumName); - - std::string fromSectionId = mainJson->get_string(deferInfoPtr + "/from-section"); - std::string idPostfix = mainJson->get_string(deferInfoPtr + "/id-postfix"); - - JsonFile *fromSectionJson = AssetsHelper::get_asset_section_json(_settings, fromSectionId); - - std::vector sectionOrder; - fromSectionJson->get_array("/files/order", sectionOrder); - - std::string sectionPtr = "/files/sections/"; - - for(std::string &assetBuildId : sectionOrder) { - // Don't include files that have null filenames. - if(fromSectionJson->is_value_null(sectionPtr + assetBuildId + "/filename")) { - continue; - } - - // TODO: This only works for LevelNames. - // Will need to be modified later since Object Animations aren't one-to-one with Object Models. - sectionEnum.add_symbol(assetBuildId + idPostfix); - } - - sectionEnum.add_symbol("\n " + sectionId + "_COUNT"); - _cHeader.write_raw_text(sectionEnum.to_string()); -} diff --git a/tools/dkr_assets_tool_src/prebuild/makeIncludes/assetEnums.h b/tools/dkr_assets_tool_src/prebuild/makeIncludes/assetEnums.h deleted file mode 100644 index f55d5831..00000000 --- a/tools/dkr_assets_tool_src/prebuild/makeIncludes/assetEnums.h +++ /dev/null @@ -1,27 +0,0 @@ -#pragma once - -#include -#include - -#include "misc/settings.hpp" -#include "helpers/fileHelper.h" -#include "helpers/jsonHelper.h" -#include "helpers/c/cHeader.h" - -class AssetEnums { -public: - AssetEnums(DkrAssetsSettings &settings); - ~AssetEnums(); -private: - DkrAssetsSettings &_settings; - WritableCHeader _cHeader; - fs::path _outFilepath; - - void _write_asset_section_enums(); - void _write_main_asset_enum(std::vector &mainOrder); - void _write_single_asset_section_enums(const std::string §ionId, JsonFile *sectionJson); - void _write_asset_section_enums(const std::string §ionId, JsonFile *sectionJson); - - void _write_deferred_asset_section_enums(const std::string §ionId, JsonFile *mainJson, - const std::string &deferInfoPtr); -}; \ No newline at end of file diff --git a/tools/dkr_assets_tool_src/prebuild/makeIncludes/assetsAsm.cpp b/tools/dkr_assets_tool_src/prebuild/makeIncludes/assetsAsm.cpp deleted file mode 100644 index 89025bd6..00000000 --- a/tools/dkr_assets_tool_src/prebuild/makeIncludes/assetsAsm.cpp +++ /dev/null @@ -1,320 +0,0 @@ -#include "assetsAsm.h" - -#include -#include -#include - -#include "helpers/assetsHelper.h" -#include "helpers/debugHelper.h" -#include "helpers/stringHelper.h" - -#include "helpers/c/cEnumsHelper.h" - -const std::string ASSETS_START_LABEL = "ASSETS_START"; -const std::string ASSETS_END_LABEL = "ASSETS_END"; -const std::string ASSETS_SIZE_LABEL = ASSETS_END_LABEL + " - " + ASSETS_START_LABEL; - -const std::string sectionsPtr = "/assets/sections"; - -AssetsAsm::AssetsAsm(DkrAssetsSettings &settings) : _settings(settings) { - _preload_c_context(); - - _outFilepath = _settings.pathToAsm / "assets/assets.s"; - - _outPrefix = _settings.pathToBuild / "assets/"; - - _write(); -} - -AssetsAsm::~AssetsAsm() { - -} - -void AssetsAsm::_write() { - _asm.write_comment("This file is automatically generated. Any changes you make to this file will get overwritten."); - - // Includes - _asm.write_newline(); - _asm.write_include("macro.inc"); - _asm.write_newline(); - _asm.write_section("data"); - _asm.write_newline(); - - _write_asset_sections(); - - _asm.save(_outFilepath); -} - -void AssetsAsm::_write_asset_sections() { - JsonFile *mainJson = AssetsHelper::get_main_json(_settings); - - std::vector mainOrder; - mainJson->get_array("/assets/order", mainOrder); - - _write_main_table(mainOrder); - - _asm.write_header_comment("Asset Sections Table"); - _asm.write_global_label(ASSETS_START_LABEL, true); - _asm.write_newline(); - - for(std::string §ionId : mainOrder) { - _asm.write_header_comment(sectionId.c_str()); - _asm.write_global_label(sectionId, true); - - _write_asset_section(mainJson, sectionId); - - _asm.write_global_label(sectionId + "_END"); - _asm.write_newline(); - } - - _asm.write_global_label(ASSETS_END_LABEL, true); -} - -void AssetsAsm::_write_asset_section(JsonFile *mainJson, std::string §ionId) { - std::string sectionPtr = sectionsPtr + "/" + sectionId; - - bool isDeferred = mainJson->get_bool(sectionPtr + "/deferred"); - std::string type = mainJson->get_string(sectionPtr + "/type"); - - DebugHelper::assert(!type.empty(), "(AssetsAsm::_write_asset_sections) [", sectionPtr, - "] does not have a type in the main json file!"); - - if(isDeferred) { - _write_deferred_asset(mainJson, sectionPtr); - return; - } - - if(type == "Empty") { - // TODO - return; - } - - // Tables are handeled differently. - if(type == "Table") { - std::string forSectionId = mainJson->get_string(sectionPtr + "/for"); - DebugHelper::assert(!forSectionId.empty(), "(AssetsAsm::_write_asset_sections) [", sectionPtr, - "] table does not have a \"for\" property!"); - std::string forSectionPtr = sectionsPtr + "/" + forSectionId; - bool isForDeferred = mainJson->get_bool(forSectionPtr + "/deferred"); - if(isForDeferred) { - _write_deferred_asset_table(mainJson, forSectionPtr, forSectionId); - } else { - _write_asset_table(forSectionId); - } - std::string forType = mainJson->get_string(forSectionPtr + "/type"); - - if(forType == "TTGhost") { - _asm.write_two_words("0xFFFF0000", forSectionId + "_END - " + forSectionId); - _asm.write_two_words("0xFFFF0000", "0xFFFFFFFF"); - } else { - if(forType == "Miscellaneous") { - _asm.write_word("(" + forSectionId + "_END - " + forSectionId + ") / 4"); - } else { - _asm.write_word(forSectionId + "_END - " + forSectionId); - } - _asm.write_word("0xFFFFFFFF"); - } - return; - } - - // Not deferred, so write them out normally. - - std::string filename = mainJson->get_string(sectionPtr + "/filename"); - - DebugHelper::assert(!filename.empty(), "(AssetsAsm::_write_asset_sections) [", sectionPtr, - "] does not have a filename set in the main json file!"); - - JsonFile *assetSectionJson = AssetsHelper::get_asset_section_json(_settings, sectionId); - - DebugHelper::assert(assetSectionJson != nullptr, - "(AssetsAsm::_write_asset) [", sectionPtr, "] Could not get section json!"); - - _write_asset(assetSectionJson); -} - -void AssetsAsm::_write_main_table(std::vector &mainOrder) { - _asm.write_header_comment("Asset Sections Table"); - - std::string numEntries = std::to_string(mainOrder.size()); - _asm.write_word_with_comment(numEntries, "Number of entries in the table"); - - for(std::string §ionId : mainOrder) { - std::string entry = sectionId + " - " + ASSETS_START_LABEL; - _asm.write_word(entry); - } - - _asm.write_word(ASSETS_SIZE_LABEL); - - _asm.write_newline(); -} - -void AssetsAsm::_write_deferred_asset(JsonFile *mainJson, const std::string §ionPtr) { - std::string deferInfoPtr = sectionPtr + "/defer-info"; - - std::string fromSectionId = mainJson->get_string(deferInfoPtr + "/from-section"); - std::string idPostfix = mainJson->get_string(deferInfoPtr + "/id-postfix"); - fs::path outputLocalPath = mainJson->get_path(deferInfoPtr + "/output-path"); - - JsonFile *fromSectionJson = AssetsHelper::get_asset_section_json(_settings, fromSectionId); - - std::vector sectionOrder; - fromSectionJson->get_array("/files/order", sectionOrder); - - fs::path fromSectionFolder = fromSectionJson->get_path("/folder"); - - for(std::string &assetBuildId : sectionOrder) { - std::string fileSectionPtr = "/files/sections/"+assetBuildId; - fs::path filename = fromSectionJson->get_string(fileSectionPtr+"/filename"); - filename.replace_extension(".bin"); - - // TODO: This only works for LevelNames. - // Will need to be modified later since Object Animations aren't one-to-one with Object Models. - _asm.write_global_label(assetBuildId + idPostfix); - _asm.write_binary_include(_outPrefix / fromSectionFolder / outputLocalPath / filename); - } -} - -void AssetsAsm::_write_asset(JsonFile *assetSectionJson) { - fs::path folder = assetSectionJson->get_path("/folder"); - - if(!assetSectionJson->has("/files")) { - // Single file asset. - if(assetSectionJson->has("/filename")) { - std::string filename = assetSectionJson->get_string("/filename"); - fs::path localFilepath = folder / filename; - localFilepath.replace_extension(".bin"); - _asm.write_binary_include(_outPrefix / localFilepath); - } - return; - } - - std::vector sectionOrder; - assetSectionJson->get_array("/files/order", sectionOrder); - - for(std::string &assetBuildId : sectionOrder) { - std::string fileSectionPtr = "/files/sections/"+assetBuildId; - std::string filename = assetSectionJson->get_string(fileSectionPtr+"/filename"); - DebugHelper::assert(!filename.empty(), "(AssetsAsm::_write_asset) [", - fileSectionPtr,"] does not define a filename!"); - fs::path localFolder = assetSectionJson->get_string(fileSectionPtr+"/folder"); - fs::path localFilepath = folder; - if(!localFolder.empty()) { - localFilepath /= localFolder; - } - localFilepath /= filename; - - localFilepath.replace_extension(".bin"); - - _asm.write_global_label(assetBuildId); - _asm.write_binary_include(_outPrefix / localFilepath); - } -} - -void AssetsAsm::_write_asset_table(const std::string &assetSectionId) { - JsonFile *targetSectionJson = AssetsHelper::get_asset_section_json(_settings, assetSectionId); - - if(targetSectionJson == nullptr) { - return; - } - - if(!targetSectionJson->has("/files")) { - return; - } - - std::string targetType = targetSectionJson->get_string("/type"); - - if(targetType == "MenuText") { - // Write the number of entries in each language. - JsonFile *menuTextSection = AssetsHelper::get_asset_section_json(_settings, "ASSET_MENU_TEXT"); - size_t numberOfTextEntries = menuTextSection->length_of_array("/menu-text-build-ids"); - _asm.write_word(std::to_string(numberOfTextEntries)); - } - - bool first = true; - - std::vector sectionOrder; - targetSectionJson->get_array("/files/order", sectionOrder); - for(std::string &assetBuildId : sectionOrder) { - - if(first && targetType == "Audio") { - _asm.write_comment("For whatever reason, the first table entry in the audio table is not set."); - first = false; - continue; - } - - std::string tableEntry = assetBuildId + " - " + assetSectionId; - if(targetType == "Miscellaneous") { - tableEntry = "(" + tableEntry + ") / 4"; - } else if (targetType == "GameText") { - JsonFile *gameTextEntry = AssetsHelper::get_asset_json(_settings, assetSectionId, assetBuildId); - bool isDialog = gameTextEntry->get_string("/text-type") == "Dialog"; - if(isDialog) { - // Upper-most bit of the entry signifies that it is a dialog instead of a textbox. - tableEntry = "(" + tableEntry + ") | 0x80000000"; - } - } - - if(targetType == "TTGhost") { - JsonFile *ghostJson = AssetsHelper::get_asset_json(_settings, assetSectionId, assetBuildId); - std::string ghostInfo = _get_ghost_level_and_vehicle(ghostJson); - _asm.write_two_words(ghostInfo, tableEntry); - continue; - } - - _asm.write_word(tableEntry); - } -} - -std::string AssetsAsm::_get_ghost_level_and_vehicle(JsonFile *ghostJson) { - std::string levelId = ghostJson->get_string("/header/level"); - std::string vehicleId = ghostJson->get_string("/header/vehicle"); - - uint32_t levelIndex = (uint32_t)AssetsHelper::get_asset_index(_settings, "ASSET_LEVEL_HEADERS", levelId); - uint32_t vehicleIndex = (uint32_t)_c_context.get_int_value_of_symbol(vehicleId); - - // First byte is the level index, second is the vehicle index. Bytes 3 & 4 are always zero. - uint32_t word = ((levelIndex << 24) | (vehicleIndex << 16)) & 0xFFFF0000; - - std::stringstream ss; - - // Set formatting - ss << "0x" << std::hex << std::uppercase << std::setfill('0') << std::setw(8); - - ss << word; - - return ss.str(); -} - - -void AssetsAsm::_write_deferred_asset_table(JsonFile *mainJson, const std::string §ionPtr, const std::string &assetSectionId) { - std::string deferInfoPtr = sectionPtr + "/defer-info"; - - std::string fromSectionId = mainJson->get_string(deferInfoPtr + "/from-section"); - std::string idPostfix = mainJson->get_string(deferInfoPtr + "/id-postfix"); - //fs::path outputLocalPath = mainJson->get_path(deferInfoPtr + "/output-path"); - - JsonFile *fromSectionJson = AssetsHelper::get_asset_section_json(_settings, fromSectionId); - - std::vector sectionOrder; - fromSectionJson->get_array("/files/order", sectionOrder); - for(std::string &assetBuildId : sectionOrder) { - // TODO: This only works for LevelNames. - // Will need to be modified later since Object Animations aren't one-to-one with Object Models. - _asm.write_word(assetBuildId + idPostfix + " - " + assetSectionId); - } -} - -void AssetsAsm::_preload_c_context() { - fs::path includeFolder = _settings.pathToRepo / "include/"; - - // No structs are needed. - - // Only need enums.h - fs::path enumPaths[] = { - includeFolder / "enums.h" - }; - - for(fs::path enumPath : enumPaths) { - CEnumsHelper::load_enums_from_file(&_c_context, enumPath); - } -} diff --git a/tools/dkr_assets_tool_src/prebuild/makeIncludes/assetsAsm.h b/tools/dkr_assets_tool_src/prebuild/makeIncludes/assetsAsm.h deleted file mode 100644 index 10c0f619..00000000 --- a/tools/dkr_assets_tool_src/prebuild/makeIncludes/assetsAsm.h +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once - -#include -#include "misc/settings.hpp" - -#include "helpers/fileHelper.h" -#include "helpers/asmHeader.h" -#include "helpers/jsonHelper.h" -#include "helpers/c/cContext.h" - -class AssetsAsm { -public: - AssetsAsm(DkrAssetsSettings &settings); - ~AssetsAsm(); -private: - CContext _c_context; - - DkrAssetsSettings &_settings; - fs::path _outFilepath; - fs::path _outPrefix; - WritableAsmInclude _asm; - - void _write(); - void _write_asset_sections(); - void _write_asset_section(JsonFile *mainJson, std::string §ionId); - - void _write_main_table(std::vector &mainOrder); - - void _write_deferred_asset(JsonFile *mainJson, const std::string §ionPtr); - void _write_asset(JsonFile *assetSectionJson); - void _write_asset_table(const std::string &assetSectionId); - std::string _get_ghost_level_and_vehicle(JsonFile *ghostJson); - void _write_deferred_asset_table(JsonFile *mainJson, const std::string §ionPtr, const std::string &assetSectionId); - - void _preload_c_context(); -}; \ No newline at end of file diff --git a/tools/dkr_assets_tool_src/prebuild/prebuild.cpp b/tools/dkr_assets_tool_src/prebuild/prebuild.cpp deleted file mode 100644 index 3152c05c..00000000 --- a/tools/dkr_assets_tool_src/prebuild/prebuild.cpp +++ /dev/null @@ -1,34 +0,0 @@ -#include "prebuild.h" - -#include "libs/ThreadPool.h" - -#include "helpers/debugHelper.h" -#include "helpers/regexHelper.h" -#include "helpers/dataHelper.h" -#include "helpers/stringHelper.h" - -#include "prebuild/makeIncludes/assetsAsm.h" -#include "prebuild/makeIncludes/assetEnums.h" -#include "prebuild/compileAssets/compile.h" - -const std::string SECTION_TEXT = "text"; -const std::string SECTION_DATA = "data"; -const std::string SECTION_RODATA = "rodata"; -const std::string SECTION_BSS = "bss"; - -PreBuild::PreBuild(DkrAssetsSettings &settings) : _settings(settings) { - _buildFolder = _settings.pathToBuild; - - // Gets rid of the starting "./" from the path. - _buildFolder = fs::relative(_buildFolder); - - CompileAssets compileAssets(_settings); - - _settings.pathToAssets /= _settings.dkrVersion; - - AssetsAsm assetsAsm(_settings); // Generate asm/assets/assets.s - AssetEnums assetEnums(_settings); // Generate include/asset_enums.h -} - -PreBuild::~PreBuild() { -} diff --git a/tools/dkr_assets_tool_src/prebuild/prebuild.h b/tools/dkr_assets_tool_src/prebuild/prebuild.h deleted file mode 100644 index e8a787e0..00000000 --- a/tools/dkr_assets_tool_src/prebuild/prebuild.h +++ /dev/null @@ -1,25 +0,0 @@ -#pragma once - -#include -#include -#include - -#include "misc/settings.hpp" - -#include "helpers/fileHelper.h" -#include "helpers/asmHeader.h" - -struct LDCodeFile { - std::string path; - std::string condition; -}; - -class PreBuild { -public: - PreBuild(DkrAssetsSettings &settings); - ~PreBuild(); -private: - DkrAssetsSettings &_settings; - - fs::path _buildFolder; -}; diff --git a/tools/dkr_assets_tool_src/test/test.cpp b/tools/dkr_assets_tool_src/test/test.cpp index 004d60f2..86fdc1a4 100644 --- a/tools/dkr_assets_tool_src/test/test.cpp +++ b/tools/dkr_assets_tool_src/test/test.cpp @@ -11,6 +11,10 @@ #include "helpers/c/cStructHelper.h" #include "helpers/c/cContext.h" +#include "misc/globalSettings.h" + +using namespace DkrAssetsTool; + void test_string_helper() { DebugHelper::DebugTimer timer; @@ -220,7 +224,7 @@ void test_regex_helper() { test_regex_engine(RegexEngine::PCRE2); } -void test_cstruct_helper_engine(RegexEngine engine, DkrAssetsSettings &settings) { +void test_cstruct_helper_engine(RegexEngine engine) { if(!RegexHelper::set_engine(engine)) { DebugHelper::warn("Regex engine ", engine, " is not implemented!"); return; @@ -244,7 +248,7 @@ void test_cstruct_helper_engine(RegexEngine engine, DkrAssetsSettings &settings) }; )"; - CStruct test0(&ctx, input); + CStruct test0(ctx, input); DebugHelper::assert(test0.is_trivial(), "Failed test 0.0 (struct was not trivial)"); DebugHelper::assert(test0.get_byte_size() == 16, "Failed test 0.1 (struct was incorrect size, was ", test0.get_byte_size(), " when it should be 16)"); @@ -269,7 +273,7 @@ void test_cstruct_helper_engine(RegexEngine engine, DkrAssetsSettings &settings) s16 x, y, z; // Position in level } LevelObjectEntryCommon; )"; - CStruct entryCommon(&ctx, input); + CStruct entryCommon(ctx, input); input = R"( typedef struct LevelObjectEntry_Racer { @@ -281,7 +285,7 @@ void test_cstruct_helper_engine(RegexEngine engine, DkrAssetsSettings &settings) } LevelObjectEntry_Racer; )"; - CStruct test1(&ctx, input); + CStruct test1(ctx, input); DebugHelper::assert(!test1.is_trivial(), "Failed test 1.0 (struct was trivial)"); DebugHelper::assert(test1.get_byte_size() == 16, "Failed test 1.1 (struct size incorrect, was ", test1.get_byte_size(), " when it should be 16)"); DebugHelper::assert(test1.get_entry(1)->get_hint_type() == "Angle", "Failed test 1.2 (Invalid hint type, was \"", test1.get_entry(1)->get_hint_type(), @@ -303,7 +307,7 @@ void test_cstruct_helper_engine(RegexEngine engine, DkrAssetsSettings &settings) s16 x, y, z; // Position in level } LevelObjectEntryCommon; )"; - CStruct entryCommon2(&ctx, input); + CStruct entryCommon2(ctx, input); input = R"( typedef struct LevelObjectEntry_Exit { @@ -380,7 +384,7 @@ void test_cstruct_helper_engine(RegexEngine engine, DkrAssetsSettings &settings) }; } LevelObjectEntry_Exit; )"; - CStruct test2(&ctx, input); + CStruct test2(ctx, input); DebugHelper::assert(!test2.is_trivial(), "Failed test 2.0 (struct was trivial)"); @@ -392,8 +396,8 @@ void test_cstruct_helper_engine(RegexEngine engine, DkrAssetsSettings &settings) DebugHelper::DebugTimer timer2; - fs::path levelObjectEntriesFilepath = settings.pathToRepo / "include/level_object_entries.h"; - CStructHelper::load_structs_from_file(&ctx, levelObjectEntriesFilepath); + fs::path levelObjectEntriesFilepath = GlobalSettings::get_decomp_path("include_subpath", "/include") / "level_object_entries.h"; + CStructHelper::load_structs_from_file(ctx, levelObjectEntriesFilepath); DebugHelper::info(YELLOW_TEXT, "Took ", timer2.elapsed(), " to parse level_object_entries.h", RESET_TEXT); @@ -430,12 +434,12 @@ void test_cstruct_helper_engine(RegexEngine engine, DkrAssetsSettings &settings) DebugHelper::info(GREEN_TEXT, "C Struct Helper (using regex engine \"", regexEngineName, "\") passed all tests!", RESET_TEXT, " Took ", timer.elapsed()); } -void test_cstruct_helper(DkrAssetsSettings &settings) { - test_cstruct_helper_engine(RegexEngine::STL, settings); - test_cstruct_helper_engine(RegexEngine::PCRE2, settings); +void test_cstruct_helper() { + test_cstruct_helper_engine(RegexEngine::STL); + test_cstruct_helper_engine(RegexEngine::PCRE2); } -void test_cenum_helper_engine(RegexEngine engine, DkrAssetsSettings &settings) { +void test_cenum_helper_engine(RegexEngine engine) { if(!RegexHelper::set_engine(engine)) { DebugHelper::warn("Regex engine ", engine, " is not implemented!"); return; @@ -455,7 +459,7 @@ void test_cenum_helper_engine(RegexEngine engine, DkrAssetsSettings &settings) { FOO_BAR_4 = 123 } Test; )"; - CEnum testEnum(&ctx, input); + CEnum testEnum(ctx, input); input = R"( typedef enum Test2 { @@ -466,7 +470,7 @@ void test_cenum_helper_engine(RegexEngine engine, DkrAssetsSettings &settings) { AE = FOO_BAR_4 | AD } Test2; )"; - CEnum test0(&ctx, input); + CEnum test0(ctx, input); DebugHelper::assert(ctx.get_int_value_of_symbol("AA") == -1, "Failed test 0.1 (AA has the incorrect value)"); DebugHelper::assert(ctx.get_int_value_of_symbol("AB") == 2, "Failed test 0.2 (AB has the incorrect value)"); @@ -477,8 +481,8 @@ void test_cenum_helper_engine(RegexEngine engine, DkrAssetsSettings &settings) { ctx.clear_enums(); // Test enums.h - fs::path enumsFilepath = settings.pathToRepo / "include/enums.h"; - CEnumsHelper::load_enums_from_file(&ctx, enumsFilepath); + fs::path enumsFilepath = GlobalSettings::get_decomp_path("include_subpath", "/include") / "enums.h"; + CEnumsHelper::load_enums_from_file(ctx, enumsFilepath); // Check a single member from each enum. DebugHelper::assert(ctx.get_int_value_of_symbol("VEHICLE_PLANE") == 2, "Failed test 1.1 (VEHICLE_PLANE has the incorrect value)"); @@ -494,19 +498,14 @@ void test_cenum_helper_engine(RegexEngine engine, DkrAssetsSettings &settings) { DebugHelper::info(GREEN_TEXT, "C Enum Helper (using regex engine \"", regexEngineName, "\") passed all tests!", RESET_TEXT, " Took ", timer.elapsed()); } -void test_cenum_helper(DkrAssetsSettings &settings) { - test_cenum_helper_engine(RegexEngine::STL, settings); - test_cenum_helper_engine(RegexEngine::PCRE2, settings); +void test_cenum_helper() { + test_cenum_helper_engine(RegexEngine::STL); + test_cenum_helper_engine(RegexEngine::PCRE2); } -TestDKRAT::TestDKRAT(DkrAssetsSettings &settings) : _settings(settings) { +void Test::test_all() { DebugHelper::info("Testing helpers!"); - //test_string_helper(); test_regex_helper(); - test_cstruct_helper(_settings); - test_cenum_helper(_settings); + test_cstruct_helper(); + test_cenum_helper(); } - -TestDKRAT::~TestDKRAT() { - -} \ No newline at end of file diff --git a/tools/dkr_assets_tool_src/test/test.h b/tools/dkr_assets_tool_src/test/test.h index cdbe667d..41742339 100644 --- a/tools/dkr_assets_tool_src/test/test.h +++ b/tools/dkr_assets_tool_src/test/test.h @@ -1,11 +1,7 @@ #pragma once -#include "misc/settings.hpp" - -class TestDKRAT { - public: - TestDKRAT(DkrAssetsSettings &settings); - ~TestDKRAT(); - private: - DkrAssetsSettings &_settings; -}; \ No newline at end of file +namespace DkrAssetsTool { +namespace Test { + void test_all(); +} +} diff --git a/tools/dkr_assets_tool_src/text/dkrText.cpp b/tools/dkr_assets_tool_src/text/dkrText.cpp new file mode 100644 index 00000000..08a7d559 --- /dev/null +++ b/tools/dkr_assets_tool_src/text/dkrText.cpp @@ -0,0 +1,166 @@ +#include "dkrText.h" + +#include + +#include "helpers/stringHelper.h" +#include "helpers/dataHelper.h" +#include "helpers/debugHelper.h" + +using namespace DkrAssetsTool; + +const std::vector DKRJP_FONT_CHARACTERS = { + "", "、", "$", "(", ")", "・", "%", "「", "」", "’", "”", "<", ">", "&", "〜", " ", + "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", + "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", + "W", "X", "Y", "Z", "!", "\"", "#", "'", "*", "+", ",", "-", ".", "/", ":", "=", + "?", "@", "。", "゛", "゜", "ァ", "ィ", "ゥ", "ェ", "ォ", "ッ", "ャ", "ュ", "ョ", "ヲ", "ン", + "ア", "イ", "ウ", "エ", "オ", "カ", "キ", "ク", "ケ", "コ", "サ", "シ", "ス", "セ", "ソ", "タ", + "チ", "ツ", "テ", "ト", "ナ", "ニ", "ヌ", "ネ", "ノ", "ハ", "ヒ", "フ", "ヘ", "ホ", "マ", "ミ", + "ム", "メ", "モ", "ヤ", "ユ", "ヨ", "ラ", "リ", "ル", "レ", "ロ", "ワ", "ガ", "ギ", "グ", "ゲ", + "ゴ", "ザ", "ジ", "ズ", "ゼ", "ゾ", "ダ", "ヂ", "ヅ", "デ", "ド", "バ", "ビ", "ブ", "ベ", "ボ", + "パ", "ピ", "プ", "ペ", "ポ", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", + "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "ぁ", + "ぃ", "ぅ", "ぇ", "ぉ", "っ", "ゃ", "ゅ", "ょ", "を", "ん", "あ", "い", "う", "え", "お", "か", + "き", "く", "け", "こ", "さ", "し", "す", "せ", "そ", "た", "ち", "つ", "て", "と", "な", "に", + "ぬ", "ね", "の", "は", "ひ", "ふ", "へ", "ほ", "ま", "み", "む", "め", "も", "や", "ゆ", "よ", + "ら", "り", "る", "れ", "ろ", "わ", "が", "ぎ", "ぐ", "げ", "ご", "ざ", "じ", "ず", "ぜ", "ぞ", + "だ", "ぢ", "づ", "で", "ど", "ば", "び", "ぶ", "べ", "ぼ", "ぱ", "ぴ", "ぷ", "ぺ", "ぽ", "ヴ" + // Note: In v77, there is actually a ton of kanji after the hiragana characters, + // but they were removed in later versions most likely to save on ROM space. +}; + +static bool string_has_non_ascii(const std::string& str) { + return std::any_of(str.begin(), str.end(), [](unsigned char c) { + return c > 127; + }); +} + +DKRText::DKRText(std::string text) : _text(text) { +} + +DKRText::DKRText(std::vector &textBytes, size_t startOffset) : DKRText(BytesView(textBytes, startOffset)) { +} + +DKRText::DKRText(BytesView view) { + size_t numBytes = 0; + bool hasNonAscii = false; + + // Must first determine if there are any non-ascii characters. + // If so, then this text is assumed to be in the DKRJP text format. + while (numBytes < view.size() && view[numBytes] != '\0') { + uint8_t curChar = view[numBytes++]; + if (curChar & 0x80) { + hasNonAscii = true; + numBytes++; // Increment by 1 since DKRJP text characters use 2 bytes. + } + } + + _dkrjpSize = numBytes; + + if (!hasNonAscii) { + // The text is ascii, so this is easy. + _text = std::string(view.data(), view.data() + numBytes); + return; + } + + // Gotta convert from DKRJP text bytes to UTF-8 characters. + for (size_t i = 0; i < numBytes; i++) { + uint8_t curChar = view[i]; + if (curChar & 0x80) { + size_t tableOffset = (((size_t)curChar & 0x7F) << 8) | view[++i]; + DebugHelper::assert_(tableOffset < DKRJP_FONT_CHARACTERS.size(), "(DKRText::DKRText) jp font index 0x", std::hex, tableOffset, + " is out of range. It should be smaller than 0x", DKRJP_FONT_CHARACTERS.size(), ".", std::dec, " At byte index ", i - 1); + _text += DKRJP_FONT_CHARACTERS[tableOffset]; + } else { + _text += (char)curChar; + } + } +} + +DKRText::~DKRText() { +} + +std::string DKRText::get_text() { + return _text; +} + +// TODO: Is there a better way to handle this? +void DKRText::_get_next_utf8_char(std::string& outChar, size_t& textOffset) { + uint8_t curByte = _text[textOffset]; + + // Determine number of bytes for the character.. + size_t charLength = 1; + if ((curByte & 0xE0) == 0xC0) { + charLength = 2; + } else if ((curByte & 0xF0) == 0xE0) { + charLength = 3; + } else if ((curByte & 0xF8) == 0xF0) { + charLength = 4; + } + + outChar = _text.substr(textOffset, charLength); + + textOffset += charLength; +} + +std::vector DKRText::get_bytes(bool forceDKRJP) { + + if(!forceDKRJP && !string_has_non_ascii(_text)) { + // The text is ascii, so this is easy. + return std::vector(_text.begin(), _text.end()); + } + + // Gotta convert from UTF-8 to DKRJP text bytes + std::vector bytes; + + if(_text.empty()) { + // Only occurs if forceDKRJP is true. + bytes.push_back(0x80); + bytes.push_back(0x00); + return bytes; + } + + std::string curChar; + size_t offset = 0; + while (offset < _text.length()) { + // Gets the next utf-8 character from the string and puts it into curChar. + // Offset will be updated to the next character. + _get_next_utf8_char(curChar, offset); + + int indexOfJpChar = DataHelper::vector_index_of(DKRJP_FONT_CHARACTERS, curChar); + + if (indexOfJpChar == -1) { + // Not found in the table. + if (curChar.length() > 1 || curChar[0] > 127) { + // Not a valid DKRJP/ASCII character. Skip it! + continue; + } + + // This is an ASCII character. DKRJP uses the control characters of ASCII, but ignores regular characters. + bytes.push_back(curChar[0]); + continue; + } + + bytes.push_back(0x80 | ((indexOfJpChar >> 8) & 0xFF)); + bytes.push_back(indexOfJpChar & 0xFF); + } + + return bytes; +} + +size_t DKRText::bytes_size(bool forceDKRJP) { + if(!_dkrjpSize.has_value()) { + // Not the most efficient way to do this, but it should work. + _dkrjpSize = get_bytes(forceDKRJP).size(); + } + return _dkrjpSize.value(); +} + +size_t DKRText::length() { + return _text.length(); +} + +const std::vector &DKRText::get_dkrjp_characters() { + return DKRJP_FONT_CHARACTERS; +} + diff --git a/tools/dkr_assets_tool_src/text/dkrText.h b/tools/dkr_assets_tool_src/text/dkrText.h new file mode 100644 index 00000000..465651b6 --- /dev/null +++ b/tools/dkr_assets_tool_src/text/dkrText.h @@ -0,0 +1,32 @@ +#pragma once + +#include +#include +#include +#include "libs/bytes_view.hpp" + +namespace DkrAssetsTool { +class DKRText { + public: + DKRText(std::string text); + + // Can't use `const std::vector &` here, since BytesView requires it be non-const. + DKRText(std::vector& textBytes, size_t startOffset=0); + DKRText(BytesView textView); + ~DKRText(); + + std::string get_text(); + std::vector get_bytes(bool forceDKRJP=false); // Will convert to the native DKRJP text format if needed. + + size_t size(); // Number of bytes in the utf-8 string. (same as length() for ascii text) + size_t bytes_size(bool forceDKRJP=false); // Number of bytes (ASCII or DKRJP) needed for this text. + size_t length(); // Number of characters + + static const std::vector &get_dkrjp_characters(); + + private: + std::string _text; + void _get_next_utf8_char(std::string &outChar, size_t &textOffset); + std::optional _dkrjpSize = std::nullopt; +}; +}