From eaddecd0b402c12a780831e3139d7a35e78322e6 Mon Sep 17 00:00:00 2001 From: Lywx Date: Wed, 15 Nov 2023 15:11:15 -0600 Subject: [PATCH] Torch v0.1 (#12) * Splitted version yamls and implemented wip geo and dlist extraction * Fixed linux compilation * Added PoC WSL 2 detection * Add undefined behaviour * Added gfxdis as submodule * update * Removed gfxdis as a submodule * Code works * Replace ByteSwap with BSWAP * Cleanup vertice factory * readability * readability 2 * Cleanup gfxfactory * last one * Rename name to symbol * More implementation * Implemented first PoC of C file generation * Added output formatting on factories * changes * Moved generated dlists onto their respective folder * Migrated more factories onto the new extractor system * Fully ported all factories and added header generation * Some updates * Added Lights factory * fix * Fixed vtx extraction * Lights work now * delete old startup_logo yaml * Generate all sections in single file * Added support to generate header and code for textures * Added O3 for release builds * Added WIP dlist extraction and moved to use f3dold microcode * Added segment support, autogeneration and fixed C generation * Added symbol names on display list extraction * Removed warnings * Moved back to transform and replace * Removed unnecesary macros * Added extraction order and reversed vtx order * Implemented true backwards sort * [WIP] Implemented runtime gbi, more headers and a few config features * Fix CLI11 on WSL and variety of fixes * Fixes * Update DisplayListFactory.h * Update TextureFactory.cpp * wip lights * fix * Correct callback * Added waypoints * Update ceremony_data.yml * Changes * Update TextureFactory.cpp * Update commandline args * Update comment * Remove printf * Update couple commands * Renamed cubeos to torch * Removed unused stuff and added an example config file --------- Co-authored-by: KiritoDv Co-authored-by: MegaMech --- .gitignore | 2 + CMakeLists.txt | 44 +- README.md | 6 +- assets/example/demo.yml | 8 + assets/sm64/eu/actors.yml | 3704 ------------- assets/sm64/eu/assets.yml | 2327 -------- assets/sm64/eu/levels.yml | 2429 --------- assets/sm64/eu/sound.yml | 1000 ---- assets/sm64/eu/textures.yml | 4102 -------------- assets/sm64/jp/actors.yml | 3704 ------------- assets/sm64/jp/assets.yml | 2327 -------- assets/sm64/jp/levels.yml | 3045 ----------- assets/sm64/jp/sound.yml | 965 ---- assets/sm64/jp/texts.yml | 1239 ----- assets/sm64/jp/textures.yml | 4687 ---------------- assets/sm64/us/actors.yml | 3704 ------------- assets/sm64/us/assets.yml | 2331 -------- assets/sm64/us/levels.yml | 2389 -------- assets/sm64/us/sound.yml | 1035 ---- assets/sm64/us/texts.yml | 1243 ----- assets/sm64/us/textures.yml | 4023 -------------- banks_table.h | 129 - config.yml | 36 +- lib/binarytools/BinaryReader.cpp | 4 + lib/binarytools/BinaryReader.h | 1 + lib/binarytools/BinaryWriter.cpp | 6 + lib/binarytools/BinaryWriter.h | 5 +- lib/strhash64/StrHash64.cpp | 250 + lib/strhash64/StrHash64.h | 93 + src/Companion.cpp | 486 +- src/Companion.h | 69 +- src/factories/AudioHeaderFactory.cpp | 4 +- src/factories/AudioHeaderFactory.h | 10 +- src/factories/BankFactory.cpp | 103 +- src/factories/BankFactory.h | 26 +- src/factories/BaseFactory.cpp | 17 + src/factories/BaseFactory.h | 55 + src/factories/BlobFactory.cpp | 47 +- src/factories/BlobFactory.h | 21 +- src/factories/DisplayListFactory.cpp | 377 ++ src/factories/DisplayListFactory.h | 39 + src/factories/DisplayListOverrides.cpp | 103 + src/factories/DisplayListOverrides.h | 13 + src/factories/LightsFactory.cpp | 94 + src/factories/LightsFactory.h | 66 + src/factories/RawFactory.cpp | 18 - src/factories/RawFactory.h | 39 - src/factories/ResourceType.h | 5 + src/factories/SampleFactory.cpp | 68 +- src/factories/SampleFactory.h | 24 +- src/factories/SequenceFactory.cpp | 32 +- src/factories/SequenceFactory.h | 28 +- src/factories/TextureFactory.cpp | 133 +- src/factories/TextureFactory.h | 36 +- src/factories/VtxFactory.cpp | 114 + src/factories/VtxFactory.h | 41 + src/factories/debug/MIO0Factory.cpp | 23 - src/factories/mk64/WaypointFactory.cpp | 83 + src/factories/mk64/WaypointFactory.h | 44 + src/factories/sm64/AnimationFactory.cpp | 74 + src/factories/sm64/AnimationFactory.h | 32 + src/factories/sm64/DialogFactory.cpp | 54 + src/factories/sm64/DialogFactory.h | 28 + src/factories/sm64/DictionaryFactory.cpp | 39 + src/factories/sm64/DictionaryFactory.h | 25 + src/factories/sm64/GeoCommands.h | 436 ++ src/factories/sm64/GeoFactory.cpp.old | 594 ++ .../MIO0Factory.h => sm64/GeoFactory.h.old} | 4 +- src/factories/sm64/SAnimFactory.cpp | 86 - src/factories/sm64/SAnimFactory.h | 9 - src/factories/sm64/SDialogFactory.cpp | 62 - src/factories/sm64/SDialogFactory.h | 9 - src/factories/sm64/SDictionaryFactory.cpp | 35 - src/factories/sm64/SDictionaryFactory.h | 9 - src/factories/sm64/STextFactory.cpp | 28 - src/factories/sm64/STextFactory.h | 9 - src/factories/sm64/TextFactory.cpp | 29 + src/factories/sm64/TextFactory.h | 18 + src/main.cpp | 78 +- src/n64/Cartridge.h | 1 + src/n64/CommandMacros.h | 17 + src/n64/gbi-otr.h | 140 + src/n64/gbi.h | 4801 +++++++++++++++++ src/n64/types.h | 59 + src/storm/SWrapper.cpp | 20 + src/types/RawBuffer.h | 12 + src/types/SegmentedAddr.h | 7 + src/utils/MIODecoder.cpp | 11 +- src/utils/MIODecoder.h | 4 +- tools/anim_offsets.js | 74 - tools/asset_converter.js | 135 - tools/assets.json | 2237 -------- tools/gen_anim_offsets.py | 51 - tools/gen_banks.js | 37 - tools/gen_bankset.js | 23 - tools/gen_samples.js | 37 - tools/m64test.js | 32 - tools/merge_assets.js | 37 - tools/offset_find.js | 9 - tools/samples_table.h | 717 --- tools/sequences.json | 37 - tools/sequences_table.h | 141 - tools/text_offsets.js | 130 - tools/util.js | 0 tools/yaml/LICENSE | 13 - tools/yaml/README.md | 147 - .../dist/compose/compose-collection.js | 76 - .../yaml/browser/dist/compose/compose-doc.js | 41 - .../yaml/browser/dist/compose/compose-node.js | 92 - .../browser/dist/compose/compose-scalar.js | 80 - tools/yaml/browser/dist/compose/composer.js | 217 - .../browser/dist/compose/resolve-block-map.js | 111 - .../dist/compose/resolve-block-scalar.js | 194 - .../browser/dist/compose/resolve-block-seq.js | 46 - .../yaml/browser/dist/compose/resolve-end.js | 37 - .../dist/compose/resolve-flow-collection.js | 199 - .../dist/compose/resolve-flow-scalar.js | 223 - .../browser/dist/compose/resolve-props.js | 134 - .../dist/compose/util-contains-newline.js | 34 - .../compose/util-empty-scalar-position.js | 27 - .../dist/compose/util-flow-indent-check.js | 15 - .../browser/dist/compose/util-map-includes.js | 17 - tools/yaml/browser/dist/doc/Document.js | 334 -- tools/yaml/browser/dist/doc/anchors.js | 72 - tools/yaml/browser/dist/doc/applyReviver.js | 54 - tools/yaml/browser/dist/doc/createNode.js | 89 - tools/yaml/browser/dist/doc/directives.js | 169 - tools/yaml/browser/dist/errors.js | 57 - tools/yaml/browser/dist/index.js | 17 - tools/yaml/browser/dist/log.js | 16 - .../dist/node_modules/tslib/tslib.es6.js | 21 - tools/yaml/browser/dist/nodes/Alias.js | 101 - tools/yaml/browser/dist/nodes/Collection.js | 148 - tools/yaml/browser/dist/nodes/Node.js | 38 - tools/yaml/browser/dist/nodes/Pair.js | 36 - tools/yaml/browser/dist/nodes/Scalar.js | 24 - tools/yaml/browser/dist/nodes/YAMLMap.js | 144 - tools/yaml/browser/dist/nodes/YAMLSeq.js | 113 - .../yaml/browser/dist/nodes/addPairToJSMap.js | 104 - tools/yaml/browser/dist/nodes/identity.js | 36 - tools/yaml/browser/dist/nodes/toJS.js | 37 - tools/yaml/browser/dist/parse/cst-scalar.js | 214 - .../yaml/browser/dist/parse/cst-stringify.js | 61 - tools/yaml/browser/dist/parse/cst-visit.js | 97 - tools/yaml/browser/dist/parse/cst.js | 98 - tools/yaml/browser/dist/parse/lexer.js | 701 --- tools/yaml/browser/dist/parse/line-counter.js | 39 - tools/yaml/browser/dist/parse/parser.js | 950 ---- tools/yaml/browser/dist/public-api.js | 99 - tools/yaml/browser/dist/schema/Schema.js | 38 - tools/yaml/browser/dist/schema/common/map.js | 17 - tools/yaml/browser/dist/schema/common/null.js | 15 - tools/yaml/browser/dist/schema/common/seq.js | 17 - .../yaml/browser/dist/schema/common/string.js | 14 - tools/yaml/browser/dist/schema/core/bool.js | 19 - tools/yaml/browser/dist/schema/core/float.js | 43 - tools/yaml/browser/dist/schema/core/int.js | 38 - tools/yaml/browser/dist/schema/core/schema.js | 23 - tools/yaml/browser/dist/schema/json/schema.js | 62 - tools/yaml/browser/dist/schema/tags.js | 83 - .../browser/dist/schema/yaml-1.1/binary.js | 66 - .../yaml/browser/dist/schema/yaml-1.1/bool.js | 26 - .../browser/dist/schema/yaml-1.1/float.js | 46 - .../yaml/browser/dist/schema/yaml-1.1/int.js | 71 - .../yaml/browser/dist/schema/yaml-1.1/omap.js | 74 - .../browser/dist/schema/yaml-1.1/pairs.js | 78 - .../browser/dist/schema/yaml-1.1/schema.js | 37 - .../yaml/browser/dist/schema/yaml-1.1/set.js | 93 - .../browser/dist/schema/yaml-1.1/timestamp.js | 101 - .../browser/dist/stringify/foldFlowLines.js | 135 - .../yaml/browser/dist/stringify/stringify.js | 124 - .../dist/stringify/stringifyCollection.js | 151 - .../dist/stringify/stringifyComment.js | 20 - .../dist/stringify/stringifyDocument.js | 85 - .../browser/dist/stringify/stringifyNumber.js | 24 - .../browser/dist/stringify/stringifyPair.js | 150 - .../browser/dist/stringify/stringifyString.js | 328 -- tools/yaml/browser/dist/util.js | 11 - tools/yaml/browser/dist/visit.js | 233 - tools/yaml/browser/index.js | 5 - tools/yaml/browser/package.json | 3 - .../yaml/dist/compose/compose-collection.d.ts | 5 - tools/yaml/dist/compose/compose-collection.js | 78 - tools/yaml/dist/compose/compose-doc.d.ts | 7 - tools/yaml/dist/compose/compose-doc.js | 43 - tools/yaml/dist/compose/compose-node.d.ts | 27 - tools/yaml/dist/compose/compose-node.js | 95 - tools/yaml/dist/compose/compose-scalar.d.ts | 5 - tools/yaml/dist/compose/compose-scalar.js | 82 - tools/yaml/dist/compose/composer.d.ts | 62 - tools/yaml/dist/compose/composer.js | 221 - .../yaml/dist/compose/resolve-block-map.d.ts | 7 - tools/yaml/dist/compose/resolve-block-map.js | 113 - .../dist/compose/resolve-block-scalar.d.ts | 10 - .../yaml/dist/compose/resolve-block-scalar.js | 196 - .../yaml/dist/compose/resolve-block-seq.d.ts | 6 - tools/yaml/dist/compose/resolve-block-seq.js | 48 - tools/yaml/dist/compose/resolve-end.d.ts | 6 - tools/yaml/dist/compose/resolve-end.js | 39 - .../dist/compose/resolve-flow-collection.d.ts | 7 - .../dist/compose/resolve-flow-collection.js | 201 - .../dist/compose/resolve-flow-scalar.d.ts | 10 - .../yaml/dist/compose/resolve-flow-scalar.js | 225 - tools/yaml/dist/compose/resolve-props.d.ts | 22 - tools/yaml/dist/compose/resolve-props.js | 136 - .../dist/compose/util-contains-newline.d.ts | 2 - .../dist/compose/util-contains-newline.js | 36 - .../compose/util-empty-scalar-position.d.ts | 2 - .../compose/util-empty-scalar-position.js | 29 - .../dist/compose/util-flow-indent-check.d.ts | 3 - .../dist/compose/util-flow-indent-check.js | 17 - .../yaml/dist/compose/util-map-includes.d.ts | 4 - tools/yaml/dist/compose/util-map-includes.js | 19 - tools/yaml/dist/doc/Document.d.ts | 141 - tools/yaml/dist/doc/Document.js | 336 -- tools/yaml/dist/doc/anchors.d.ts | 24 - tools/yaml/dist/doc/anchors.js | 77 - tools/yaml/dist/doc/applyReviver.d.ts | 9 - tools/yaml/dist/doc/applyReviver.js | 56 - tools/yaml/dist/doc/createNode.d.ts | 17 - tools/yaml/dist/doc/createNode.js | 91 - tools/yaml/dist/doc/directives.d.ts | 49 - tools/yaml/dist/doc/directives.js | 171 - tools/yaml/dist/errors.d.ts | 21 - tools/yaml/dist/errors.js | 62 - tools/yaml/dist/index.d.ts | 22 - tools/yaml/dist/index.js | 50 - tools/yaml/dist/log.d.ts | 3 - tools/yaml/dist/log.js | 19 - tools/yaml/dist/nodes/Alias.d.ts | 28 - tools/yaml/dist/nodes/Alias.js | 103 - tools/yaml/dist/nodes/Collection.d.ts | 74 - tools/yaml/dist/nodes/Collection.js | 152 - tools/yaml/dist/nodes/Node.d.ts | 46 - tools/yaml/dist/nodes/Node.js | 40 - tools/yaml/dist/nodes/Pair.d.ts | 21 - tools/yaml/dist/nodes/Pair.js | 39 - tools/yaml/dist/nodes/Scalar.d.ts | 42 - tools/yaml/dist/nodes/Scalar.js | 27 - tools/yaml/dist/nodes/YAMLMap.d.ts | 53 - tools/yaml/dist/nodes/YAMLMap.js | 147 - tools/yaml/dist/nodes/YAMLSeq.d.ts | 60 - tools/yaml/dist/nodes/YAMLSeq.js | 115 - tools/yaml/dist/nodes/addPairToJSMap.d.ts | 4 - tools/yaml/dist/nodes/addPairToJSMap.js | 106 - tools/yaml/dist/nodes/identity.d.ts | 23 - tools/yaml/dist/nodes/identity.js | 53 - tools/yaml/dist/nodes/toJS.d.ts | 27 - tools/yaml/dist/nodes/toJS.js | 39 - tools/yaml/dist/options.d.ts | 338 -- tools/yaml/dist/parse/cst-scalar.d.ts | 64 - tools/yaml/dist/parse/cst-scalar.js | 218 - tools/yaml/dist/parse/cst-stringify.d.ts | 8 - tools/yaml/dist/parse/cst-stringify.js | 63 - tools/yaml/dist/parse/cst-visit.d.ts | 39 - tools/yaml/dist/parse/cst-visit.js | 99 - tools/yaml/dist/parse/cst.d.ts | 106 - tools/yaml/dist/parse/cst.js | 112 - tools/yaml/dist/parse/lexer.d.ts | 87 - tools/yaml/dist/parse/lexer.js | 703 --- tools/yaml/dist/parse/line-counter.d.ts | 22 - tools/yaml/dist/parse/line-counter.js | 41 - tools/yaml/dist/parse/parser.d.ts | 84 - tools/yaml/dist/parse/parser.js | 954 ---- tools/yaml/dist/public-api.d.ts | 43 - tools/yaml/dist/public-api.js | 104 - tools/yaml/dist/schema/Schema.d.ts | 18 - tools/yaml/dist/schema/Schema.js | 40 - tools/yaml/dist/schema/common/map.d.ts | 2 - tools/yaml/dist/schema/common/map.js | 19 - tools/yaml/dist/schema/common/null.d.ts | 4 - tools/yaml/dist/schema/common/null.js | 17 - tools/yaml/dist/schema/common/seq.d.ts | 2 - tools/yaml/dist/schema/common/seq.js | 19 - tools/yaml/dist/schema/common/string.d.ts | 2 - tools/yaml/dist/schema/common/string.js | 16 - tools/yaml/dist/schema/core/bool.d.ts | 4 - tools/yaml/dist/schema/core/bool.js | 21 - tools/yaml/dist/schema/core/float.d.ts | 4 - tools/yaml/dist/schema/core/float.js | 47 - tools/yaml/dist/schema/core/int.d.ts | 4 - tools/yaml/dist/schema/core/int.js | 42 - tools/yaml/dist/schema/core/schema.d.ts | 1 - tools/yaml/dist/schema/core/schema.js | 25 - tools/yaml/dist/schema/json-schema.d.ts | 69 - tools/yaml/dist/schema/json/schema.d.ts | 2 - tools/yaml/dist/schema/json/schema.js | 64 - tools/yaml/dist/schema/tags.d.ts | 40 - tools/yaml/dist/schema/tags.js | 86 - tools/yaml/dist/schema/types.d.ts | 90 - tools/yaml/dist/schema/yaml-1.1/binary.d.ts | 2 - tools/yaml/dist/schema/yaml-1.1/binary.js | 68 - tools/yaml/dist/schema/yaml-1.1/bool.d.ts | 7 - tools/yaml/dist/schema/yaml-1.1/bool.js | 29 - tools/yaml/dist/schema/yaml-1.1/float.d.ts | 4 - tools/yaml/dist/schema/yaml-1.1/float.js | 50 - tools/yaml/dist/schema/yaml-1.1/int.d.ts | 5 - tools/yaml/dist/schema/yaml-1.1/int.js | 76 - tools/yaml/dist/schema/yaml-1.1/omap.d.ts | 28 - tools/yaml/dist/schema/yaml-1.1/omap.js | 77 - tools/yaml/dist/schema/yaml-1.1/pairs.d.ts | 10 - tools/yaml/dist/schema/yaml-1.1/pairs.js | 82 - tools/yaml/dist/schema/yaml-1.1/schema.d.ts | 1 - tools/yaml/dist/schema/yaml-1.1/schema.js | 39 - tools/yaml/dist/schema/yaml-1.1/set.d.ts | 28 - tools/yaml/dist/schema/yaml-1.1/set.js | 96 - .../yaml/dist/schema/yaml-1.1/timestamp.d.ts | 6 - tools/yaml/dist/schema/yaml-1.1/timestamp.js | 105 - tools/yaml/dist/stringify/foldFlowLines.d.ts | 34 - tools/yaml/dist/stringify/foldFlowLines.js | 140 - tools/yaml/dist/stringify/stringify.d.ts | 21 - tools/yaml/dist/stringify/stringify.js | 127 - .../dist/stringify/stringifyCollection.d.ts | 17 - .../dist/stringify/stringifyCollection.js | 153 - .../yaml/dist/stringify/stringifyComment.d.ts | 10 - tools/yaml/dist/stringify/stringifyComment.js | 24 - .../dist/stringify/stringifyDocument.d.ts | 4 - .../yaml/dist/stringify/stringifyDocument.js | 87 - .../yaml/dist/stringify/stringifyNumber.d.ts | 2 - tools/yaml/dist/stringify/stringifyNumber.js | 26 - tools/yaml/dist/stringify/stringifyPair.d.ts | 3 - tools/yaml/dist/stringify/stringifyPair.js | 152 - .../yaml/dist/stringify/stringifyString.d.ts | 9 - tools/yaml/dist/stringify/stringifyString.js | 330 -- tools/yaml/dist/test-events.d.ts | 4 - tools/yaml/dist/test-events.js | 134 - tools/yaml/dist/util.d.ts | 12 - tools/yaml/dist/util.js | 28 - tools/yaml/dist/visit.d.ts | 102 - tools/yaml/dist/visit.js | 236 - tools/yaml/package.json | 95 - tools/yaml/util.js | 2 - 332 files changed, 8698 insertions(+), 66885 deletions(-) create mode 100644 assets/example/demo.yml delete mode 100644 assets/sm64/eu/actors.yml delete mode 100644 assets/sm64/eu/assets.yml delete mode 100644 assets/sm64/eu/levels.yml delete mode 100644 assets/sm64/eu/sound.yml delete mode 100644 assets/sm64/eu/textures.yml delete mode 100644 assets/sm64/jp/actors.yml delete mode 100644 assets/sm64/jp/assets.yml delete mode 100644 assets/sm64/jp/levels.yml delete mode 100644 assets/sm64/jp/sound.yml delete mode 100644 assets/sm64/jp/texts.yml delete mode 100644 assets/sm64/jp/textures.yml delete mode 100644 assets/sm64/us/actors.yml delete mode 100644 assets/sm64/us/assets.yml delete mode 100644 assets/sm64/us/levels.yml delete mode 100644 assets/sm64/us/sound.yml delete mode 100644 assets/sm64/us/texts.yml delete mode 100644 assets/sm64/us/textures.yml delete mode 100644 banks_table.h create mode 100644 lib/strhash64/StrHash64.cpp create mode 100644 lib/strhash64/StrHash64.h create mode 100644 src/factories/BaseFactory.cpp create mode 100644 src/factories/BaseFactory.h create mode 100644 src/factories/DisplayListFactory.cpp create mode 100644 src/factories/DisplayListFactory.h create mode 100644 src/factories/DisplayListOverrides.cpp create mode 100644 src/factories/DisplayListOverrides.h create mode 100644 src/factories/LightsFactory.cpp create mode 100644 src/factories/LightsFactory.h delete mode 100644 src/factories/RawFactory.cpp delete mode 100644 src/factories/RawFactory.h create mode 100644 src/factories/VtxFactory.cpp create mode 100644 src/factories/VtxFactory.h delete mode 100644 src/factories/debug/MIO0Factory.cpp create mode 100644 src/factories/mk64/WaypointFactory.cpp create mode 100644 src/factories/mk64/WaypointFactory.h create mode 100644 src/factories/sm64/AnimationFactory.cpp create mode 100644 src/factories/sm64/AnimationFactory.h create mode 100644 src/factories/sm64/DialogFactory.cpp create mode 100644 src/factories/sm64/DialogFactory.h create mode 100644 src/factories/sm64/DictionaryFactory.cpp create mode 100644 src/factories/sm64/DictionaryFactory.h create mode 100644 src/factories/sm64/GeoCommands.h create mode 100644 src/factories/sm64/GeoFactory.cpp.old rename src/factories/{debug/MIO0Factory.h => sm64/GeoFactory.h.old} (68%) delete mode 100644 src/factories/sm64/SAnimFactory.cpp delete mode 100644 src/factories/sm64/SAnimFactory.h delete mode 100644 src/factories/sm64/SDialogFactory.cpp delete mode 100644 src/factories/sm64/SDialogFactory.h delete mode 100644 src/factories/sm64/SDictionaryFactory.cpp delete mode 100644 src/factories/sm64/SDictionaryFactory.h delete mode 100644 src/factories/sm64/STextFactory.cpp delete mode 100644 src/factories/sm64/STextFactory.h create mode 100644 src/factories/sm64/TextFactory.cpp create mode 100644 src/factories/sm64/TextFactory.h create mode 100644 src/n64/CommandMacros.h create mode 100644 src/n64/gbi-otr.h create mode 100644 src/n64/gbi.h create mode 100644 src/n64/types.h create mode 100644 src/types/RawBuffer.h create mode 100644 src/types/SegmentedAddr.h delete mode 100644 tools/anim_offsets.js delete mode 100644 tools/asset_converter.js delete mode 100644 tools/assets.json delete mode 100755 tools/gen_anim_offsets.py delete mode 100644 tools/gen_banks.js delete mode 100644 tools/gen_bankset.js delete mode 100644 tools/gen_samples.js delete mode 100644 tools/m64test.js delete mode 100644 tools/merge_assets.js delete mode 100644 tools/offset_find.js delete mode 100644 tools/samples_table.h delete mode 100644 tools/sequences.json delete mode 100644 tools/sequences_table.h delete mode 100644 tools/text_offsets.js delete mode 100644 tools/util.js delete mode 100644 tools/yaml/LICENSE delete mode 100644 tools/yaml/README.md delete mode 100644 tools/yaml/browser/dist/compose/compose-collection.js delete mode 100644 tools/yaml/browser/dist/compose/compose-doc.js delete mode 100644 tools/yaml/browser/dist/compose/compose-node.js delete mode 100644 tools/yaml/browser/dist/compose/compose-scalar.js delete mode 100644 tools/yaml/browser/dist/compose/composer.js delete mode 100644 tools/yaml/browser/dist/compose/resolve-block-map.js delete mode 100644 tools/yaml/browser/dist/compose/resolve-block-scalar.js delete mode 100644 tools/yaml/browser/dist/compose/resolve-block-seq.js delete mode 100644 tools/yaml/browser/dist/compose/resolve-end.js delete mode 100644 tools/yaml/browser/dist/compose/resolve-flow-collection.js delete mode 100644 tools/yaml/browser/dist/compose/resolve-flow-scalar.js delete mode 100644 tools/yaml/browser/dist/compose/resolve-props.js delete mode 100644 tools/yaml/browser/dist/compose/util-contains-newline.js delete mode 100644 tools/yaml/browser/dist/compose/util-empty-scalar-position.js delete mode 100644 tools/yaml/browser/dist/compose/util-flow-indent-check.js delete mode 100644 tools/yaml/browser/dist/compose/util-map-includes.js delete mode 100644 tools/yaml/browser/dist/doc/Document.js delete mode 100644 tools/yaml/browser/dist/doc/anchors.js delete mode 100644 tools/yaml/browser/dist/doc/applyReviver.js delete mode 100644 tools/yaml/browser/dist/doc/createNode.js delete mode 100644 tools/yaml/browser/dist/doc/directives.js delete mode 100644 tools/yaml/browser/dist/errors.js delete mode 100644 tools/yaml/browser/dist/index.js delete mode 100644 tools/yaml/browser/dist/log.js delete mode 100644 tools/yaml/browser/dist/node_modules/tslib/tslib.es6.js delete mode 100644 tools/yaml/browser/dist/nodes/Alias.js delete mode 100644 tools/yaml/browser/dist/nodes/Collection.js delete mode 100644 tools/yaml/browser/dist/nodes/Node.js delete mode 100644 tools/yaml/browser/dist/nodes/Pair.js delete mode 100644 tools/yaml/browser/dist/nodes/Scalar.js delete mode 100644 tools/yaml/browser/dist/nodes/YAMLMap.js delete mode 100644 tools/yaml/browser/dist/nodes/YAMLSeq.js delete mode 100644 tools/yaml/browser/dist/nodes/addPairToJSMap.js delete mode 100644 tools/yaml/browser/dist/nodes/identity.js delete mode 100644 tools/yaml/browser/dist/nodes/toJS.js delete mode 100644 tools/yaml/browser/dist/parse/cst-scalar.js delete mode 100644 tools/yaml/browser/dist/parse/cst-stringify.js delete mode 100644 tools/yaml/browser/dist/parse/cst-visit.js delete mode 100644 tools/yaml/browser/dist/parse/cst.js delete mode 100644 tools/yaml/browser/dist/parse/lexer.js delete mode 100644 tools/yaml/browser/dist/parse/line-counter.js delete mode 100644 tools/yaml/browser/dist/parse/parser.js delete mode 100644 tools/yaml/browser/dist/public-api.js delete mode 100644 tools/yaml/browser/dist/schema/Schema.js delete mode 100644 tools/yaml/browser/dist/schema/common/map.js delete mode 100644 tools/yaml/browser/dist/schema/common/null.js delete mode 100644 tools/yaml/browser/dist/schema/common/seq.js delete mode 100644 tools/yaml/browser/dist/schema/common/string.js delete mode 100644 tools/yaml/browser/dist/schema/core/bool.js delete mode 100644 tools/yaml/browser/dist/schema/core/float.js delete mode 100644 tools/yaml/browser/dist/schema/core/int.js delete mode 100644 tools/yaml/browser/dist/schema/core/schema.js delete mode 100644 tools/yaml/browser/dist/schema/json/schema.js delete mode 100644 tools/yaml/browser/dist/schema/tags.js delete mode 100644 tools/yaml/browser/dist/schema/yaml-1.1/binary.js delete mode 100644 tools/yaml/browser/dist/schema/yaml-1.1/bool.js delete mode 100644 tools/yaml/browser/dist/schema/yaml-1.1/float.js delete mode 100644 tools/yaml/browser/dist/schema/yaml-1.1/int.js delete mode 100644 tools/yaml/browser/dist/schema/yaml-1.1/omap.js delete mode 100644 tools/yaml/browser/dist/schema/yaml-1.1/pairs.js delete mode 100644 tools/yaml/browser/dist/schema/yaml-1.1/schema.js delete mode 100644 tools/yaml/browser/dist/schema/yaml-1.1/set.js delete mode 100644 tools/yaml/browser/dist/schema/yaml-1.1/timestamp.js delete mode 100644 tools/yaml/browser/dist/stringify/foldFlowLines.js delete mode 100644 tools/yaml/browser/dist/stringify/stringify.js delete mode 100644 tools/yaml/browser/dist/stringify/stringifyCollection.js delete mode 100644 tools/yaml/browser/dist/stringify/stringifyComment.js delete mode 100644 tools/yaml/browser/dist/stringify/stringifyDocument.js delete mode 100644 tools/yaml/browser/dist/stringify/stringifyNumber.js delete mode 100644 tools/yaml/browser/dist/stringify/stringifyPair.js delete mode 100644 tools/yaml/browser/dist/stringify/stringifyString.js delete mode 100644 tools/yaml/browser/dist/util.js delete mode 100644 tools/yaml/browser/dist/visit.js delete mode 100644 tools/yaml/browser/index.js delete mode 100644 tools/yaml/browser/package.json delete mode 100644 tools/yaml/dist/compose/compose-collection.d.ts delete mode 100644 tools/yaml/dist/compose/compose-collection.js delete mode 100644 tools/yaml/dist/compose/compose-doc.d.ts delete mode 100644 tools/yaml/dist/compose/compose-doc.js delete mode 100644 tools/yaml/dist/compose/compose-node.d.ts delete mode 100644 tools/yaml/dist/compose/compose-node.js delete mode 100644 tools/yaml/dist/compose/compose-scalar.d.ts delete mode 100644 tools/yaml/dist/compose/compose-scalar.js delete mode 100644 tools/yaml/dist/compose/composer.d.ts delete mode 100644 tools/yaml/dist/compose/composer.js delete mode 100644 tools/yaml/dist/compose/resolve-block-map.d.ts delete mode 100644 tools/yaml/dist/compose/resolve-block-map.js delete mode 100644 tools/yaml/dist/compose/resolve-block-scalar.d.ts delete mode 100644 tools/yaml/dist/compose/resolve-block-scalar.js delete mode 100644 tools/yaml/dist/compose/resolve-block-seq.d.ts delete mode 100644 tools/yaml/dist/compose/resolve-block-seq.js delete mode 100644 tools/yaml/dist/compose/resolve-end.d.ts delete mode 100644 tools/yaml/dist/compose/resolve-end.js delete mode 100644 tools/yaml/dist/compose/resolve-flow-collection.d.ts delete mode 100644 tools/yaml/dist/compose/resolve-flow-collection.js delete mode 100644 tools/yaml/dist/compose/resolve-flow-scalar.d.ts delete mode 100644 tools/yaml/dist/compose/resolve-flow-scalar.js delete mode 100644 tools/yaml/dist/compose/resolve-props.d.ts delete mode 100644 tools/yaml/dist/compose/resolve-props.js delete mode 100644 tools/yaml/dist/compose/util-contains-newline.d.ts delete mode 100644 tools/yaml/dist/compose/util-contains-newline.js delete mode 100644 tools/yaml/dist/compose/util-empty-scalar-position.d.ts delete mode 100644 tools/yaml/dist/compose/util-empty-scalar-position.js delete mode 100644 tools/yaml/dist/compose/util-flow-indent-check.d.ts delete mode 100644 tools/yaml/dist/compose/util-flow-indent-check.js delete mode 100644 tools/yaml/dist/compose/util-map-includes.d.ts delete mode 100644 tools/yaml/dist/compose/util-map-includes.js delete mode 100644 tools/yaml/dist/doc/Document.d.ts delete mode 100644 tools/yaml/dist/doc/Document.js delete mode 100644 tools/yaml/dist/doc/anchors.d.ts delete mode 100644 tools/yaml/dist/doc/anchors.js delete mode 100644 tools/yaml/dist/doc/applyReviver.d.ts delete mode 100644 tools/yaml/dist/doc/applyReviver.js delete mode 100644 tools/yaml/dist/doc/createNode.d.ts delete mode 100644 tools/yaml/dist/doc/createNode.js delete mode 100644 tools/yaml/dist/doc/directives.d.ts delete mode 100644 tools/yaml/dist/doc/directives.js delete mode 100644 tools/yaml/dist/errors.d.ts delete mode 100644 tools/yaml/dist/errors.js delete mode 100644 tools/yaml/dist/index.d.ts delete mode 100644 tools/yaml/dist/index.js delete mode 100644 tools/yaml/dist/log.d.ts delete mode 100644 tools/yaml/dist/log.js delete mode 100644 tools/yaml/dist/nodes/Alias.d.ts delete mode 100644 tools/yaml/dist/nodes/Alias.js delete mode 100644 tools/yaml/dist/nodes/Collection.d.ts delete mode 100644 tools/yaml/dist/nodes/Collection.js delete mode 100644 tools/yaml/dist/nodes/Node.d.ts delete mode 100644 tools/yaml/dist/nodes/Node.js delete mode 100644 tools/yaml/dist/nodes/Pair.d.ts delete mode 100644 tools/yaml/dist/nodes/Pair.js delete mode 100644 tools/yaml/dist/nodes/Scalar.d.ts delete mode 100644 tools/yaml/dist/nodes/Scalar.js delete mode 100644 tools/yaml/dist/nodes/YAMLMap.d.ts delete mode 100644 tools/yaml/dist/nodes/YAMLMap.js delete mode 100644 tools/yaml/dist/nodes/YAMLSeq.d.ts delete mode 100644 tools/yaml/dist/nodes/YAMLSeq.js delete mode 100644 tools/yaml/dist/nodes/addPairToJSMap.d.ts delete mode 100644 tools/yaml/dist/nodes/addPairToJSMap.js delete mode 100644 tools/yaml/dist/nodes/identity.d.ts delete mode 100644 tools/yaml/dist/nodes/identity.js delete mode 100644 tools/yaml/dist/nodes/toJS.d.ts delete mode 100644 tools/yaml/dist/nodes/toJS.js delete mode 100644 tools/yaml/dist/options.d.ts delete mode 100644 tools/yaml/dist/parse/cst-scalar.d.ts delete mode 100644 tools/yaml/dist/parse/cst-scalar.js delete mode 100644 tools/yaml/dist/parse/cst-stringify.d.ts delete mode 100644 tools/yaml/dist/parse/cst-stringify.js delete mode 100644 tools/yaml/dist/parse/cst-visit.d.ts delete mode 100644 tools/yaml/dist/parse/cst-visit.js delete mode 100644 tools/yaml/dist/parse/cst.d.ts delete mode 100644 tools/yaml/dist/parse/cst.js delete mode 100644 tools/yaml/dist/parse/lexer.d.ts delete mode 100644 tools/yaml/dist/parse/lexer.js delete mode 100644 tools/yaml/dist/parse/line-counter.d.ts delete mode 100644 tools/yaml/dist/parse/line-counter.js delete mode 100644 tools/yaml/dist/parse/parser.d.ts delete mode 100644 tools/yaml/dist/parse/parser.js delete mode 100644 tools/yaml/dist/public-api.d.ts delete mode 100644 tools/yaml/dist/public-api.js delete mode 100644 tools/yaml/dist/schema/Schema.d.ts delete mode 100644 tools/yaml/dist/schema/Schema.js delete mode 100644 tools/yaml/dist/schema/common/map.d.ts delete mode 100644 tools/yaml/dist/schema/common/map.js delete mode 100644 tools/yaml/dist/schema/common/null.d.ts delete mode 100644 tools/yaml/dist/schema/common/null.js delete mode 100644 tools/yaml/dist/schema/common/seq.d.ts delete mode 100644 tools/yaml/dist/schema/common/seq.js delete mode 100644 tools/yaml/dist/schema/common/string.d.ts delete mode 100644 tools/yaml/dist/schema/common/string.js delete mode 100644 tools/yaml/dist/schema/core/bool.d.ts delete mode 100644 tools/yaml/dist/schema/core/bool.js delete mode 100644 tools/yaml/dist/schema/core/float.d.ts delete mode 100644 tools/yaml/dist/schema/core/float.js delete mode 100644 tools/yaml/dist/schema/core/int.d.ts delete mode 100644 tools/yaml/dist/schema/core/int.js delete mode 100644 tools/yaml/dist/schema/core/schema.d.ts delete mode 100644 tools/yaml/dist/schema/core/schema.js delete mode 100644 tools/yaml/dist/schema/json-schema.d.ts delete mode 100644 tools/yaml/dist/schema/json/schema.d.ts delete mode 100644 tools/yaml/dist/schema/json/schema.js delete mode 100644 tools/yaml/dist/schema/tags.d.ts delete mode 100644 tools/yaml/dist/schema/tags.js delete mode 100644 tools/yaml/dist/schema/types.d.ts delete mode 100644 tools/yaml/dist/schema/yaml-1.1/binary.d.ts delete mode 100644 tools/yaml/dist/schema/yaml-1.1/binary.js delete mode 100644 tools/yaml/dist/schema/yaml-1.1/bool.d.ts delete mode 100644 tools/yaml/dist/schema/yaml-1.1/bool.js delete mode 100644 tools/yaml/dist/schema/yaml-1.1/float.d.ts delete mode 100644 tools/yaml/dist/schema/yaml-1.1/float.js delete mode 100644 tools/yaml/dist/schema/yaml-1.1/int.d.ts delete mode 100644 tools/yaml/dist/schema/yaml-1.1/int.js delete mode 100644 tools/yaml/dist/schema/yaml-1.1/omap.d.ts delete mode 100644 tools/yaml/dist/schema/yaml-1.1/omap.js delete mode 100644 tools/yaml/dist/schema/yaml-1.1/pairs.d.ts delete mode 100644 tools/yaml/dist/schema/yaml-1.1/pairs.js delete mode 100644 tools/yaml/dist/schema/yaml-1.1/schema.d.ts delete mode 100644 tools/yaml/dist/schema/yaml-1.1/schema.js delete mode 100644 tools/yaml/dist/schema/yaml-1.1/set.d.ts delete mode 100644 tools/yaml/dist/schema/yaml-1.1/set.js delete mode 100644 tools/yaml/dist/schema/yaml-1.1/timestamp.d.ts delete mode 100644 tools/yaml/dist/schema/yaml-1.1/timestamp.js delete mode 100644 tools/yaml/dist/stringify/foldFlowLines.d.ts delete mode 100644 tools/yaml/dist/stringify/foldFlowLines.js delete mode 100644 tools/yaml/dist/stringify/stringify.d.ts delete mode 100644 tools/yaml/dist/stringify/stringify.js delete mode 100644 tools/yaml/dist/stringify/stringifyCollection.d.ts delete mode 100644 tools/yaml/dist/stringify/stringifyCollection.js delete mode 100644 tools/yaml/dist/stringify/stringifyComment.d.ts delete mode 100644 tools/yaml/dist/stringify/stringifyComment.js delete mode 100644 tools/yaml/dist/stringify/stringifyDocument.d.ts delete mode 100644 tools/yaml/dist/stringify/stringifyDocument.js delete mode 100644 tools/yaml/dist/stringify/stringifyNumber.d.ts delete mode 100644 tools/yaml/dist/stringify/stringifyNumber.js delete mode 100644 tools/yaml/dist/stringify/stringifyPair.d.ts delete mode 100644 tools/yaml/dist/stringify/stringifyPair.js delete mode 100644 tools/yaml/dist/stringify/stringifyString.d.ts delete mode 100644 tools/yaml/dist/stringify/stringifyString.js delete mode 100644 tools/yaml/dist/test-events.d.ts delete mode 100644 tools/yaml/dist/test-events.js delete mode 100644 tools/yaml/dist/util.d.ts delete mode 100644 tools/yaml/dist/util.js delete mode 100644 tools/yaml/dist/visit.d.ts delete mode 100644 tools/yaml/dist/visit.js delete mode 100644 tools/yaml/package.json delete mode 100644 tools/yaml/util.js diff --git a/.gitignore b/.gitignore index 2c7f44f..435b8c8 100644 --- a/.gitignore +++ b/.gitignore @@ -8,5 +8,7 @@ debug/ !src/factories/debug/ *.z64 *.n64 +headers/ build/ +code/ .vscode/ \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 03e025d..7a61706 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,17 +1,37 @@ cmake_minimum_required(VERSION 3.12) -project(CubeOS) +project(torch) include(FetchContent) set(CMAKE_CXX_STANDARD 20) +# Link libgfxd +# Because libgfxd is not a CMake project, we have to manually fetch it and add it to the build + +FetchContent_Declare( + libgfxd + GIT_REPOSITORY https://github.com/glankk/libgfxd.git + GIT_TAG 96fd3b849f38b3a7c7b7f3ff03c5921d328e6cdf +) + +FetchContent_GetProperties(libgfxd) + +if(NOT libgfxd_POPULATED) + FetchContent_Populate(libgfxd) + include_directories(${libgfxd_SOURCE_DIR}) + set(LGFXD_SRC gfxd.c uc_f3d.c uc_f3db.c uc_f3dex.c uc_f3dexb.c uc_f3dex2.c) + foreach (LGFXD_FILE ${LGFXD_SRC}) + list(APPEND LGFXD_FILES "${libgfxd_SOURCE_DIR}/${LGFXD_FILE}") + endforeach() +endif() + + # Source files include_directories(${CMAKE_CURRENT_SOURCE_DIR}/lib) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src) -file(GLOB_RECURSE CXX_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/**/*.cpp) +file(GLOB_RECURSE CXX_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/**/*.cpp ${CMAKE_CURRENT_SOURCE_DIR}/lib/strhash64/*.cpp) file(GLOB C_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/*.c ${CMAKE_CURRENT_SOURCE_DIR}/src/**/*.c ${CMAKE_CURRENT_SOURCE_DIR}/lib/**/*.c) -set(SRC_DIR ${CXX_FILES} ${C_FILES}) -set(CMAKE_CXX_FLAGS_RELEASE "-O3") +set(SRC_DIR ${CXX_FILES} ${C_FILES} ${LGFXD_FILES}) set(USE_STANDALONE ON) set(VPKTOOL_BUILD_GUI OFF) @@ -26,9 +46,24 @@ else() add_library(${PROJECT_NAME} SHARED ${SRC_DIR}) endif() +if(NOT CMAKE_CXX_COMPILER_ID MATCHES "MSVC") + set(CMAKE_CXX_FLAGS_DEBUG "-g") + set(CMAKE_CXX_FLAGS_RELEASE "-O3") +endif() + # Fetch Dependencies add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/lib/binarytools) +if(EXISTS "/mnt/c/WINDOWS/system32/wsl.exe") +FetchContent_Declare( + GSL + GIT_REPOSITORY https://github.com/Microsoft/GSL.git + GIT_TAG a3534567187d2edc428efd3f13466ff75fe5805c +) +FetchContent_MakeAvailable(GSL) +target_link_libraries(${PROJECT_NAME} PRIVATE GSL) +endif() + # Link BinaryTools add_dependencies(${PROJECT_NAME} BinaryTools) target_link_libraries(${PROJECT_NAME} PRIVATE BinaryTools) @@ -46,7 +81,6 @@ FetchContent_Declare( GIT_REPOSITORY https://github.com/jbeder/yaml-cpp.git GIT_TAG f7320141120f720aecc4c32be25586e7da9eb978 ) - set(YAML_CPP_BUILD_TESTS OFF) FetchContent_MakeAvailable(yaml-cpp) target_link_libraries(${PROJECT_NAME} PRIVATE yaml-cpp) diff --git a/README.md b/README.md index 571fecd..690f3cf 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,10 @@ -# CubeOS +# Torch - [T]orch is [O]ur [R]esource [C]onversion [H]elper A generic asset processor for N64 games +## Usage +`./torch otr baserom.z64` +`./torch code baserom.z64` + # Windows ## Visual Studio diff --git a/assets/example/demo.yml b/assets/example/demo.yml new file mode 100644 index 0000000..ba6e96c --- /dev/null +++ b/assets/example/demo.yml @@ -0,0 +1,8 @@ +hud/health: + type: TEXTURE + size: 512 + width: 16 + height: 16 + offset: 0xFF + format: RGBA16 + symbol: health_icon_FF \ No newline at end of file diff --git a/assets/sm64/eu/actors.yml b/assets/sm64/eu/actors.yml deleted file mode 100644 index 268048b..0000000 --- a/assets/sm64/eu/actors.yml +++ /dev/null @@ -1,3704 +0,0 @@ -amp/amp_body: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1912288 - mio0: 6936 - format: RGBA16 -amp/amp_electricity: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 1912288 - mio0: 3864 - format: RGBA16 -amp/amp_eyes: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1912288 - mio0: 4888 - format: RGBA16 -amp/amp_mouth: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1912288 - mio0: 8984 - format: RGBA16 -blue_coin_switch/blue_coin_switch_side: - type: TEXTURE - size: 1024 - width: 32 - height: 16 - offset: 1912288 - mio0: 24 - format: RGBA16 -blue_coin_switch/blue_coin_switch_top: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1912288 - mio0: 1048 - format: RGBA16 -blue_fish/blue_fish: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 112096 - format: RGBA16 -bobomb/bob-omb_buddy_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1136896 - mio0: 120 - format: RGBA16 -bobomb/bob-omb_buddy_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1136896 - mio0: 4216 - format: RGBA16 -bobomb/bob-omb_eyes: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1136896 - mio0: 18552 - format: RGBA16 -bobomb/bob-omb_eyes_blink: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1136896 - mio0: 20600 - format: RGBA16 -bobomb/bob-omb_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1912288 - mio0: 121440 - format: RGBA16 -bobomb/bob-omb_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1912288 - mio0: 125536 - format: RGBA16 -bomb/bomb_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1478688 - mio0: 359440 - format: RGBA16 -bomb/bomb_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1478688 - mio0: 363536 - format: RGBA16 -bomb/bomb_spike: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1478688 - mio0: 367632 - format: RGBA16 -boo/boo_eyes: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1341504 - mio0: 39744 - format: RGBA16 -boo/boo_mouth: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1341504 - mio0: 43840 - format: RGBA16 -boo_castle/bbh_boo_eyes: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1341504 - mio0: 39744 - format: RGBA16 -boo_castle/bbh_boo_mouth: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1341504 - mio0: 43840 - format: RGBA16 -book/book_cover: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1341504 - mio0: 4192 - format: RGBA16 -bookend/bookend_cover: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1341504 - mio0: 4192 - format: RGBA16 -bookend/bookend_mouth: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 1341504 - mio0: 2144 - format: RGBA16 -bookend/bookend_pages: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 1341504 - mio0: 3168 - format: RGBA16 -bookend/bookend_spine: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 1341504 - mio0: 96 - format: RGBA16 -bookend/bookend_tooth: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 1341504 - mio0: 1120 - format: RGBA16 -bowser/bowser_armband: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1478688 - mio0: 146488 - format: RGBA16 -bowser/bowser_armband_spike: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1478688 - mio0: 142392 - format: RGBA16 -bowser/bowser_blue_eye_unused: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1478688 - mio0: 156728 - format: RGBA16 -bowser/bowser_body: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1478688 - mio0: 140344 - format: RGBA16 -bowser/bowser_chest: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1478688 - mio0: 152632 - format: RGBA16 -bowser/bowser_claw_edge: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1478688 - mio0: 171064 - format: RGBA16 -bowser/bowser_claw_horn_angle: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1478688 - mio0: 179256 - format: RGBA16 -bowser/bowser_claw_horn_tooth: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1478688 - mio0: 175160 - format: RGBA16 -bowser/bowser_eye_center_0: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1478688 - mio0: 195640 - format: RGBA16 -bowser/bowser_eye_center_1: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1478688 - mio0: 195640 - format: RGBA16 -bowser/bowser_eye_closed_0: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1478688 - mio0: 191544 - format: RGBA16 -bowser/bowser_eye_closed_1: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1478688 - mio0: 191544 - format: RGBA16 -bowser/bowser_eye_far_left_0: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1478688 - mio0: 203832 - format: RGBA16 -bowser/bowser_eye_far_left_1: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1478688 - mio0: 203832 - format: RGBA16 -bowser/bowser_eye_half_closed_0: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1478688 - mio0: 187448 - format: RGBA16 -bowser/bowser_eye_half_closed_1: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1478688 - mio0: 187448 - format: RGBA16 -bowser/bowser_eye_left_0: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1478688 - mio0: 183352 - format: RGBA16 -bowser/bowser_eye_left_1: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1478688 - mio0: 183352 - format: RGBA16 -bowser/bowser_eye_right_0: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1478688 - mio0: 199736 - format: RGBA16 -bowser/bowser_eye_right_1: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1478688 - mio0: 199736 - format: RGBA16 -bowser/bowser_eyebrow: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1478688 - mio0: 130104 - format: RGBA16 -bowser/bowser_hair: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1478688 - mio0: 166968 - format: RGBA16 -bowser/bowser_mouth_unused: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1478688 - mio0: 160824 - format: RGBA16 -bowser/bowser_muzzle: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1478688 - mio0: 134200 - format: RGBA16 -bowser/bowser_nostrils: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1478688 - mio0: 136248 - format: RGBA16 -bowser/bowser_shell: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1478688 - mio0: 128056 - format: RGBA16 -bowser/bowser_shell_edge: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1478688 - mio0: 154680 - format: RGBA16 -bowser/bowser_tongue: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1478688 - mio0: 148536 - format: RGBA16 -bowser/bowser_upper_face: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1478688 - mio0: 164920 - format: RGBA16 -bowser_flame/bowser_flame_0: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1478688 - mio0: 0 - format: RGBA16 -bowser_flame/bowser_flame_1: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1478688 - mio0: 8192 - format: RGBA16 -bowser_flame/bowser_flame_10: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1478688 - mio0: 81920 - format: RGBA16 -bowser_flame/bowser_flame_11: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1478688 - mio0: 90112 - format: RGBA16 -bowser_flame/bowser_flame_12: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1478688 - mio0: 98304 - format: RGBA16 -bowser_flame/bowser_flame_13: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1478688 - mio0: 106496 - format: RGBA16 -bowser_flame/bowser_flame_2: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1478688 - mio0: 16384 - format: RGBA16 -bowser_flame/bowser_flame_3: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1478688 - mio0: 24576 - format: RGBA16 -bowser_flame/bowser_flame_4: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1478688 - mio0: 32768 - format: RGBA16 -bowser_flame/bowser_flame_5: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1478688 - mio0: 40960 - format: RGBA16 -bowser_flame/bowser_flame_6: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1478688 - mio0: 49152 - format: RGBA16 -bowser_flame/bowser_flame_7: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1478688 - mio0: 57344 - format: RGBA16 -bowser_flame/bowser_flame_8: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1478688 - mio0: 65536 - format: RGBA16 -bowser_flame/bowser_flame_9: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1478688 - mio0: 73728 - format: RGBA16 -breakable_box/cork_box_surface: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1912288 - mio0: 74384 - format: RGBA16 -breakable_box/crazy_box_surface: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1912288 - mio0: 72336 - format: RGBA16 -bub/bub_eye_border: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1447824 - mio0: 5128 - format: RGBA16 -bub/bub_eyes: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1447824 - mio0: 1032 - format: RGBA16 -bub/bub_fins: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1447824 - mio0: 7176 - format: RGBA16 -bub/bub_scales: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1447824 - mio0: 9224 - format: RGBA16 -bubba/bubba_eye_border: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1447824 - mio0: 5128 - format: RGBA16 -bubba/bubba_eyes_unused: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1447824 - mio0: 1032 - format: RGBA16 -bubba/bubba_fins: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1447824 - mio0: 7176 - format: RGBA16 -bubba/bubba_scales: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1447824 - mio0: 9224 - format: RGBA16 -bubba/bubba_sunglasses: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 1447824 - mio0: 8 - format: RGBA16 -bubble/bubble: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 118112 - format: RGBA16 -bubble/mr_i_bubble: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 120160 - format: RGBA16 -bullet_bill/bullet_bill_eye: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1094592 - mio0: 47784 - format: RGBA16 -bullet_bill/bullet_bill_mouth: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1094592 - mio0: 51880 - format: RGBA16 -bully/bully_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1128512 - mio0: 9320 - format: RGBA16 -bully/bully_horn: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1128512 - mio0: 224 - format: RGBA16 -bully/bully_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1128512 - mio0: 1128 - format: RGBA16 -bully/bully_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1128512 - mio0: 5224 - format: RGBA16 -burn_smoke/burn_smoke: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 137216 - format: IA16 -butterfly/butterfly_wing: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1974256 - mio0: 17320 - format: RGBA16 -cannon_barrel/cannon_barrel: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1912288 - mio0: 22696 - format: RGBA16 -cannon_base/cannon_base: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1912288 - mio0: 18872 - format: RGBA16 -cannon_lid/cannon_lid: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1912288 - mio0: 16472 - format: RGBA16 -capswitch/cap_switch_base: - type: TEXTURE - size: 128 - width: 16 - height: 4 - offset: 1336880 - mio0: 11336 - format: RGBA16 -capswitch/cap_switch_head: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1336880 - mio0: 7240 - format: IA16 -chain_ball/chain_ball: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1723920 - mio0: 133864 - format: RGBA16 -chain_chomp/chain_chomp_bright_shine: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1723920 - mio0: 136144 - format: RGBA16 -chain_chomp/chain_chomp_dull_shine: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1723920 - mio0: 138192 - format: RGBA16 -chain_chomp/chain_chomp_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1723920 - mio0: 144336 - format: RGBA16 -chain_chomp/chain_chomp_tongue: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1723920 - mio0: 140240 - format: RGBA16 -chain_chomp/chain_chomp_tooth: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1341504 - mio0: 27376 - format: RGBA16 -chair/chair_bottom: - type: TEXTURE - size: 1024 - width: 32 - height: 16 - offset: 1341504 - mio0: 16480 - format: RGBA16 -chair/chair_front: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1341504 - mio0: 12384 - format: RGBA16 -chair/chair_leg: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1341504 - mio0: 14432 - format: RGBA16 -chair/chair_surface_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1341504 - mio0: 17504 - format: RGBA16 -checkerboard_platform/checkerboard_platform: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1912288 - mio0: 52288 - format: RGBA16 -checkerboard_platform/checkerboard_platform_side: - type: TEXTURE - size: 1024 - width: 32 - height: 16 - offset: 1912288 - mio0: 51264 - format: RGBA16 -chillychief/chill_bully_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1128512 - mio0: 9320 - format: RGBA16 -chillychief/chill_bully_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1859024 - mio0: 96 - format: RGBA16 -chillychief/chill_bully_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1859024 - mio0: 4192 - format: RGBA16 -chuckya/chuckya_body_arm_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1912288 - mio0: 32632 - format: RGBA16 -chuckya/chuckya_body_arm_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1912288 - mio0: 36728 - format: RGBA16 -chuckya/chuckya_eyes: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1912288 - mio0: 26488 - format: RGBA16 -chuckya/chuckya_hand_antenna: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1912288 - mio0: 30584 - format: RGBA16 -clam_shell/clam_shell: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1164528 - mio0: 48 - format: RGBA16 -clam_shell/clam_shell_mouth: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1164528 - mio0: 2096 - format: RGBA16 -coin/coin_front: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 22400 - format: IA16 -coin/coin_side: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 26496 - format: IA16 -coin/coin_tilt_left: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 28544 - format: IA16 -coin/coin_tilt_right: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 24448 - format: IA16 -cyan_fish/cyan_fish: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1681568 - mio0: 54376 - format: RGBA16 -dirt/dirt_particle: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1974256 - mio0: 179704 - format: RGBA16 -door/bbh_door: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1974256 - mio0: 66832 - format: RGBA16 -door/bbh_door_overlay: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 70928 - format: RGBA16 -door/door_lock: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 1974256 - mio0: 79120 - format: RGBA16 -door/hmc_mural_door: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1974256 - mio0: 60688 - format: RGBA16 -door/hmc_mural_door_overlay: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 64784 - format: RGBA16 -door/metal_door: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1974256 - mio0: 54544 - format: RGBA16 -door/metal_door_overlay: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 58640 - format: RGBA16 -door/one_star_door_sign: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 75024 - format: RGBA16 -door/polished_wooden_door: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1974256 - mio0: 40208 - format: RGBA16 -door/polished_wooden_door_overlay: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1974256 - mio0: 44304 - format: RGBA16 -door/rough_wooden_door: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1974256 - mio0: 48400 - format: RGBA16 -door/rough_wooden_door_overlay: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 52496 - format: RGBA16 -door/three_star_door_sign: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 77072 - format: RGBA16 -door/zero_star_door_sign: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 72976 - format: RGBA16 -dorrie/dorrie_eye: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1870528 - mio0: 39840 - format: RGBA16 -dorrie/dorrie_skin: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1870528 - mio0: 40352 - format: RGBA16 -dorrie/dorrie_tongue: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1723920 - mio0: 140240 - format: RGBA16 -exclamation_box/exclamation_box_front: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1912288 - mio0: 95784 - format: RGBA16 -exclamation_box/exclamation_box_side: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1912288 - mio0: 97832 - format: RGBA16 -exclamation_box/metal_cap_box_front: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1912288 - mio0: 83496 - format: RGBA16 -exclamation_box/metal_cap_box_side: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1912288 - mio0: 85544 - format: RGBA16 -exclamation_box/vanish_cap_box_front: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1912288 - mio0: 77352 - format: RGBA16 -exclamation_box/vanish_cap_box_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1912288 - mio0: 79400 - format: RGBA16 -exclamation_box/wing_cap_box_front: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1912288 - mio0: 89640 - format: RGBA16 -exclamation_box/wing_cap_box_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1912288 - mio0: 91688 - format: RGBA16 -exclamation_box_outline/exclamation_box_outline: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1912288 - mio0: 151912 - format: RGBA16 -exclamation_box_outline/exclamation_point: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 1912288 - mio0: 154240 - format: RGBA16 -explosion/explosion_0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 2568 - format: RGBA16 -explosion/explosion_1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 4616 - format: RGBA16 -explosion/explosion_2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 6664 - format: RGBA16 -explosion/explosion_3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 8712 - format: RGBA16 -explosion/explosion_4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 10760 - format: RGBA16 -explosion/explosion_5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 12808 - format: RGBA16 -explosion/explosion_6: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 14856 - format: RGBA16 -eyerok/eyerok_bricks: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1206896 - mio0: 36160 - format: RGBA16 -eyerok/eyerok_eye_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1206896 - mio0: 44352 - format: RGBA16 -eyerok/eyerok_eye_mostly_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1206896 - mio0: 42304 - format: RGBA16 -eyerok/eyerok_eye_mostly_open: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1206896 - mio0: 40256 - format: RGBA16 -eyerok/eyerok_eye_open: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1206896 - mio0: 38208 - format: RGBA16 -flame/flame_0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 95008 - format: IA16 -flame/flame_1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 97056 - format: IA16 -flame/flame_2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 99104 - format: IA16 -flame/flame_3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 101152 - format: IA16 -flame/flame_4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 103200 - format: IA16 -flame/flame_5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 105248 - format: IA16 -flame/flame_6: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 107296 - format: IA16 -flame/flame_7: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 109344 - format: IA16 -flyguy/flyguy_cloth_wrinkle: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1912288 - mio0: 57480 - format: RGBA16 -flyguy/flyguy_face: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1912288 - mio0: 61576 - format: RGBA16 -flyguy/flyguy_propeller: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1912288 - mio0: 63624 - format: IA16 -fwoosh/fwoosh_face: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1256880 - mio0: 88072 - format: IA16 -goomba/goomba_body: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1912288 - mio0: 103728 - format: RGBA16 -goomba/goomba_face: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1912288 - mio0: 105776 - format: RGBA16 -goomba/goomba_face_blink: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1912288 - mio0: 107824 - format: RGBA16 -haunted_cage/bbh_cage_bars: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1341504 - mio0: 55944 - format: RGBA16 -haunted_cage/bbh_cage_double_ornament: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1341504 - mio0: 51848 - format: RGBA16 -haunted_cage/bbh_cage_floor: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1341504 - mio0: 49800 - format: RGBA16 -haunted_cage/bbh_cage_garbage: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1341504 - mio0: 57992 - format: RGBA16 -haunted_cage/bbh_cage_ornament: - type: TEXTURE - size: 1024 - width: 32 - height: 16 - offset: 1341504 - mio0: 53896 - format: RGBA16 -haunted_cage/bbh_cage_wooden_base: - type: TEXTURE - size: 1024 - width: 32 - height: 16 - offset: 1341504 - mio0: 54920 - format: RGBA16 -heart/spinning_heart: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1912288 - mio0: 55264 - format: RGBA16 -heave_ho/heave-ho_arm_ornament: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1094592 - mio0: 68040 - format: RGBA16 -heave_ho/heave-ho_face: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1094592 - mio0: 59848 - format: RGBA16 -heave_ho/heave-ho_logo: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1094592 - mio0: 63944 - format: RGBA16 -heave_ho/heave-ho_platform: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1094592 - mio0: 61896 - format: RGBA16 -heave_ho/heave-ho_roller: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1094592 - mio0: 70088 - format: RGBA16 -heave_ho/heave-ho_turnkey: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1094592 - mio0: 70600 - format: RGBA16 -hoot/hoot_eyes: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1094592 - mio0: 2592 - format: RGBA16 -hoot/hoot_wing: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1094592 - mio0: 7760 - format: RGBA16 -hoot/hoot_wing_tip: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1094592 - mio0: 9808 - format: RGBA16 -impact_ring/impact_ring_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1478688 - mio0: 117328 - format: IA16 -impact_ring/impact_ring_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1478688 - mio0: 121424 - format: IA16 -impact_smoke/impact_smoke_0: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1478688 - mio0: 371576 - format: IA16 -impact_smoke/impact_smoke_1: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1478688 - mio0: 379768 - format: IA16 -impact_smoke/impact_smoke_2: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1478688 - mio0: 387960 - format: IA16 -impact_smoke/impact_smoke_3: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1478688 - mio0: 396152 - format: IA16 -king_bobomb/bob-omb_buddy_body_unused: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1136896 - mio0: 25720 - format: RGBA16 -king_bobomb/bob-omb_buddy_left_side_unused: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1136896 - mio0: 120 - format: RGBA16 -king_bobomb/bob-omb_buddy_right_side_unused: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1136896 - mio0: 4216 - format: RGBA16 -king_bobomb/king_bob-omb_arm: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1136896 - mio0: 8312 - format: RGBA16 -king_bobomb/king_bob-omb_body_unused: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1136896 - mio0: 10360 - format: RGBA16 -king_bobomb/king_bob-omb_crown_rim: - type: TEXTURE - size: 1024 - width: 32 - height: 16 - offset: 1136896 - mio0: 24696 - format: RGBA16 -king_bobomb/king_bob-omb_eyes: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1136896 - mio0: 18552 - format: RGBA16 -king_bobomb/king_bob-omb_eyes_blink: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1136896 - mio0: 20600 - format: RGBA16 -king_bobomb/king_bob-omb_hand: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1136896 - mio0: 22648 - format: RGBA16 -king_bobomb/king_bob-omb_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1136896 - mio0: 33912 - format: RGBA16 -king_bobomb/king_bob-omb_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1136896 - mio0: 38008 - format: RGBA16 -klepto/klepto_beak: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1206896 - mio0: 4104 - format: RGBA16 -klepto/klepto_chest_tuft: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1206896 - mio0: 8 - format: RGBA16 -klepto/klepto_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1206896 - mio0: 2056 - format: RGBA16 -klepto/klepto_wing: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1206896 - mio0: 8200 - format: RGBA16 -klepto/klepto_wing_flap: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1206896 - mio0: 12296 - format: RGBA16 -koopa/koopa_eye_border: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1723920 - mio0: 22088 - format: RGBA16 -koopa/koopa_eyes_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1723920 - mio0: 20040 - format: RGBA16 -koopa/koopa_eyes_open: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1723920 - mio0: 17992 - format: RGBA16 -koopa/koopa_nostrils: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1723920 - mio0: 24136 - format: RGBA16 -koopa/koopa_shell_back: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1723920 - mio0: 11848 - format: RGBA16 -koopa/koopa_shell_front: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1723920 - mio0: 9800 - format: RGBA16 -koopa/koopa_shell_front_top: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1723920 - mio0: 15944 - format: RGBA16 -koopa/koopa_shoe: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1723920 - mio0: 13896 - format: RGBA16 -koopa_flag/koopa_flag_banner: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1723920 - mio0: 72 - format: RGBA16 -koopa_shell/koopa_shell_back: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1723920 - mio0: 11848 - format: RGBA16 -koopa_shell/koopa_shell_front: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1723920 - mio0: 9800 - format: RGBA16 -lakitu_cameraman/lakitu_camera_lens: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1806064 - mio0: 14336 - format: RGBA16 -lakitu_cameraman/lakitu_cameraman_cloud_face_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1447824 - mio0: 60640 - format: RGBA16 -lakitu_cameraman/lakitu_cameraman_eyes_closed: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1447824 - mio0: 66784 - format: RGBA16 -lakitu_cameraman/lakitu_cameraman_eyes_open: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1447824 - mio0: 62688 - format: RGBA16 -lakitu_cameraman/lakitu_cameraman_frown: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1447824 - mio0: 72928 - format: RGBA16 -lakitu_cameraman/lakitu_cameraman_shell: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1447824 - mio0: 70880 - format: RGBA16 -lakitu_enemy/lakitu_enemy_cloud_face_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1447824 - mio0: 60640 - format: RGBA16 -lakitu_enemy/lakitu_enemy_eyes_closed: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1447824 - mio0: 66784 - format: RGBA16 -lakitu_enemy/lakitu_enemy_eyes_open: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1447824 - mio0: 62688 - format: RGBA16 -lakitu_enemy/lakitu_enemy_frown: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1447824 - mio0: 72928 - format: RGBA16 -lakitu_enemy/lakitu_enemy_shell: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1447824 - mio0: 70880 - format: RGBA16 -leaves/leaf: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1974256 - mio0: 117728 - format: RGBA16 -mad_piano/mad_piano_body: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 1341504 - mio0: 29424 - format: RGBA16 -mad_piano/mad_piano_keys: - type: TEXTURE - size: 1024 - width: 32 - height: 16 - offset: 1341504 - mio0: 32496 - format: RGBA16 -mad_piano/mad_piano_keys_corner: - type: TEXTURE - size: 1024 - width: 32 - height: 16 - offset: 1341504 - mio0: 30448 - format: RGBA16 -mad_piano/mad_piano_keys_edge: - type: TEXTURE - size: 1024 - width: 32 - height: 16 - offset: 1341504 - mio0: 33520 - format: RGBA16 -mad_piano/mad_piano_mouth: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 1341504 - mio0: 31472 - format: RGBA16 -mad_piano/mad_piano_tooth: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1341504 - mio0: 27376 - format: RGBA16 -manta/manta_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1164528 - mio0: 12192 - format: RGBA16 -manta/manta_fin_corner: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1164528 - mio0: 6048 - format: RGBA16 -manta/manta_fin_edge: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1164528 - mio0: 14240 - format: RGBA16 -manta/manta_gills: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1164528 - mio0: 8096 - format: RGBA16 -mario/mario_eyes_center: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 12432 - format: RGBA16 -mario/mario_eyes_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 16528 - format: RGBA16 -mario/mario_eyes_closed_unused_0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 16528 - format: RGBA16 -mario/mario_eyes_closed_unused_1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 16528 - format: RGBA16 -mario/mario_eyes_dead: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 30864 - format: RGBA16 -mario/mario_eyes_down_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 28816 - format: RGBA16 -mario/mario_eyes_half_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 14480 - format: RGBA16 -mario/mario_eyes_left_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 22672 - format: RGBA16 -mario/mario_eyes_right_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 24720 - format: RGBA16 -mario/mario_eyes_up_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 26768 - format: RGBA16 -mario/mario_logo: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 6288 - format: RGBA16 -mario/mario_metal: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1004336 - mio0: 144 - format: RGBA16 -mario/mario_metal_wing_tip_unused: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1004336 - mio0: 45200 - format: RGBA16 -mario/mario_metal_wing_unused: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1004336 - mio0: 41104 - format: RGBA16 -mario/mario_mustache: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 10384 - format: RGBA16 -mario/mario_overalls_button: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 4240 - format: RGBA16 -mario/mario_sideburn: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 8336 - format: RGBA16 -mario/mario_wing: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1004336 - mio0: 32912 - format: RGBA16 -mario/mario_wing_tip: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1004336 - mio0: 37008 - format: RGBA16 -mario_cap/mario_cap_logo: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 6288 - format: RGBA16 -mario_cap/mario_cap_metal: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1004336 - mio0: 144 - format: RGBA16 -mario_cap/mario_cap_metal_wing_tip_unused: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1004336 - mio0: 45200 - format: RGBA16 -mario_cap/mario_cap_metal_wing_unused: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1004336 - mio0: 41104 - format: RGBA16 -mario_cap/mario_cap_wing: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1004336 - mio0: 32912 - format: RGBA16 -mario_cap/mario_cap_wing_tip: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1004336 - mio0: 37008 - format: RGBA16 -metal_box/metal_box_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1912288 - mio0: 145816 - format: RGBA16 -mips/mips_eyes: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1806064 - mio0: 64624 - format: RGBA16 -mist/mist: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 128 - format: IA16 -moneybag/moneybag_eyes: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1859024 - mio0: 18864 - format: RGBA16 -moneybag/moneybag_mouth: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1859024 - mio0: 14768 - format: RGBA16 -monty_mole/monty_mole_cheek: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1256880 - mio0: 2416 - format: RGBA16 -monty_mole/monty_mole_claw: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1256880 - mio0: 10608 - format: RGBA16 -monty_mole/monty_mole_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1256880 - mio0: 4464 - format: RGBA16 -monty_mole/monty_mole_nose: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1256880 - mio0: 6512 - format: RGBA16 -monty_mole/monty_mole_tooth: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1256880 - mio0: 8560 - format: RGBA16 -monty_mole_hole/monty_mole_hole: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1256880 - mio0: 64 - format: IA16 -mr_i_eyeball/mr_i_eyeball_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1870528 - mio0: 128 - format: RGBA16 -mr_i_eyeball/mr_i_eyeball_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1870528 - mio0: 4224 - format: RGBA16 -mr_i_iris/mr_i_iris_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1870528 - mio0: 14704 - format: RGBA16 -mr_i_iris/mr_i_iris_mostly_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1870528 - mio0: 12656 - format: RGBA16 -mr_i_iris/mr_i_iris_mostly_open: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1870528 - mio0: 10608 - format: RGBA16 -mr_i_iris/mr_i_iris_open: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1870528 - mio0: 8560 - format: RGBA16 -mushroom_1up/1-up_mushroom: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1974256 - mio0: 169512 - format: RGBA16 -peach/peach_chest_jewel: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1369168 - mio0: 11304 - format: RGBA16 -peach/peach_crown_jewel: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1369168 - mio0: 10792 - format: RGBA16 -peach/peach_dress: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1369168 - mio0: 16424 - format: RGBA16 -peach/peach_eye_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1369168 - mio0: 8744 - format: RGBA16 -peach/peach_eye_mostly_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1369168 - mio0: 6696 - format: RGBA16 -peach/peach_eye_mostly_open: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1369168 - mio0: 4648 - format: RGBA16 -peach/peach_eye_open: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1369168 - mio0: 2600 - format: RGBA16 -peach/peach_lips: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1369168 - mio0: 13864 - format: RGBA16 -peach/peach_lips_scrunched: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1369168 - mio0: 11816 - format: RGBA16 -peach/peach_nostril: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1369168 - mio0: 15912 - format: RGBA16 -pebble/pebble: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 115456 - format: RGBA16 -penguin/penguin_beak: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1315408 - mio0: 21984 - format: RGBA16 -penguin/penguin_eye_angry: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1315408 - mio0: 17888 - format: RGBA16 -penguin/penguin_eye_angry_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1315408 - mio0: 19936 - format: RGBA16 -penguin/penguin_eye_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1315408 - mio0: 15840 - format: RGBA16 -penguin/penguin_eye_half_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1315408 - mio0: 13792 - format: RGBA16 -penguin/penguin_eye_open: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1315408 - mio0: 11744 - format: RGBA16 -piranha_plant/piranha_plant_bottom_lip: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1723920 - mio0: 78840 - format: RGBA16 -piranha_plant/piranha_plant_leaf: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1723920 - mio0: 82936 - format: RGBA16 -piranha_plant/piranha_plant_skin: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1723920 - mio0: 74744 - format: RGBA16 -piranha_plant/piranha_plant_stem: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1723920 - mio0: 76792 - format: RGBA16 -piranha_plant/piranha_plant_tongue: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1478688 - mio0: 148536 - format: RGBA16 -piranha_plant/piranha_plant_tooth: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1723920 - mio0: 80888 - format: RGBA16 -pokey/pokey_body: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1206896 - mio0: 75896 - format: RGBA16 -pokey/pokey_face: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1206896 - mio0: 71504 - format: RGBA16 -pokey/pokey_face_blink: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1206896 - mio0: 73552 - format: RGBA16 -poundable_pole/poundable_pole_side: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1723920 - mio0: 6224 - format: RGBA16 -poundable_pole/poundable_pole_top: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1723920 - mio0: 4176 - format: RGBA16 -power_meter/power_meter_five_segments: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 158688 - format: RGBA16 -power_meter/power_meter_four_segments: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 160736 - format: RGBA16 -power_meter/power_meter_full: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 152544 - format: RGBA16 -power_meter/power_meter_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1974256 - mio0: 144352 - format: RGBA16 -power_meter/power_meter_one_segment: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 166880 - format: RGBA16 -power_meter/power_meter_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1974256 - mio0: 148448 - format: RGBA16 -power_meter/power_meter_seven_segments: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 154592 - format: RGBA16 -power_meter/power_meter_six_segments: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 156640 - format: RGBA16 -power_meter/power_meter_three_segments: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 162784 - format: RGBA16 -power_meter/power_meter_two_segments: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 164832 - format: RGBA16 -purple_switch/purple_switch_base: - type: TEXTURE - size: 128 - width: 16 - height: 4 - offset: 1912288 - mio0: 49320 - format: RGBA16 -purple_switch/purple_switch_exclamation_point: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 1912288 - mio0: 49448 - format: RGBA16 -sand/sand_particle: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1974256 - mio0: 178896 - format: RGBA16 -scuttlebug/scuttlebug_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1870528 - mio0: 65800 - format: RGBA16 -scuttlebug/scuttlebug_iris: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1870528 - mio0: 76040 - format: RGBA16 -scuttlebug/scuttlebug_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1870528 - mio0: 67848 - format: RGBA16 -scuttlebug/scuttlebug_leg: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1870528 - mio0: 78088 - format: RGBA16 -scuttlebug/scuttlebug_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1870528 - mio0: 71944 - format: RGBA16 -seaweed/seaweed_base: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1681568 - mio0: 38416 - format: RGBA16 -seaweed/seaweed_lower_center: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1681568 - mio0: 36368 - format: RGBA16 -seaweed/seaweed_tip: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1681568 - mio0: 32272 - format: RGBA16 -seaweed/seaweed_upper_center: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1681568 - mio0: 34320 - format: RGBA16 -skeeter/skeeter_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1681568 - mio0: 144 - format: RGBA16 -skeeter/skeeter_iris: - type: TEXTURE - size: 256 - width: 16 - height: 8 - offset: 1681568 - mio0: 2192 - format: RGBA16 -smoke/smoke: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1256880 - mio0: 29376 - format: IA16 -snowman/mr_blizzard_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1315408 - mio0: 46192 - format: RGBA16 -snowman/mr_blizzard_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1315408 - mio0: 38000 - format: RGBA16 -snowman/mr_blizzard_mitten: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1315408 - mio0: 35952 - format: RGBA16 -snowman/mr_blizzard_mouth: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1315408 - mio0: 48240 - format: RGBA16 -snowman/mr_blizzard_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1315408 - mio0: 42096 - format: RGBA16 -snufit/snufit_body: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1870528 - mio0: 28896 - format: RGBA16 -snufit/snufit_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1870528 - mio0: 30944 - format: RGBA16 -snufit/snufit_mask_strap: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 1870528 - mio0: 32992 - format: RGBA16 -snufit/snufit_mouth: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1870528 - mio0: 34016 - format: RGBA16 -sparkle/sparkle_0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 160912 - format: RGBA16 -sparkle/sparkle_1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 162960 - format: RGBA16 -sparkle/sparkle_2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 165008 - format: RGBA16 -sparkle/sparkle_3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 167056 - format: RGBA16 -sparkle/sparkle_4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 169104 - format: RGBA16 -sparkle/sparkle_5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 171152 - format: RGBA16 -sparkle_animation/sparkle_animation_0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 207496 - format: IA16 -sparkle_animation/sparkle_animation_1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 209544 - format: IA16 -sparkle_animation/sparkle_animation_2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 211592 - format: IA16 -sparkle_animation/sparkle_animation_3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 213640 - format: IA16 -sparkle_animation/sparkle_animation_4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 215688 - format: IA16 -spindrift/spindrift_face: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1315408 - mio0: 1744 - format: RGBA16 -spindrift/spindrift_head: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1315408 - mio0: 7888 - format: RGBA16 -spindrift/spindrift_leaf: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1315408 - mio0: 5840 - format: RGBA16 -spindrift/spindrift_petal: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1315408 - mio0: 3792 - format: RGBA16 -springboard/springboard_base_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1336880 - mio0: 2072 - format: RGBA16 -springboard/springboard_top_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1336880 - mio0: 24 - format: RGBA16 -star/star_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1447824 - mio0: 31280 - format: RGBA16 -star/star_surface: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 173808 - format: RGBA16 -stomp_smoke/stomp_smoke_0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 139592 - format: IA16 -stomp_smoke/stomp_smoke_1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 141640 - format: IA16 -stomp_smoke/stomp_smoke_2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 143688 - format: IA16 -stomp_smoke/stomp_smoke_3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 145736 - format: IA16 -stomp_smoke/stomp_smoke_4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 147784 - format: IA16 -stomp_smoke/stomp_smoke_5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 149832 - format: IA16 -sushi/sushi_eye: - type: TEXTURE - size: 1024 - width: 32 - height: 16 - offset: 1164528 - mio0: 38608 - format: RGBA16 -sushi/sushi_snout: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1164528 - mio0: 36560 - format: RGBA16 -sushi/sushi_tooth: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1164528 - mio0: 39632 - format: RGBA16 -swoop/swoop_body: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1870528 - mio0: 17008 - format: RGBA16 -swoop/swoop_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1870528 - mio0: 19056 - format: RGBA16 -swoop/swoop_nose: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1870528 - mio0: 21104 - format: RGBA16 -swoop/swoop_wing: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1870528 - mio0: 23152 - format: RGBA16 -thwomp/thwomp_face: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1094592 - mio0: 39168 - format: RGBA16 -thwomp/thwomp_surface: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1094592 - mio0: 43264 - format: RGBA16 -toad/toad_face: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1806064 - mio0: 22816 - format: RGBA16 -toad/toad_head: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1806064 - mio0: 24864 - format: RGBA16 -tornado/tornado: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1164528 - mio0: 75848 - format: IA16 -treasure_chest/treasure_chest_front: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1681568 - mio0: 87976 - format: RGBA16 -treasure_chest/treasure_chest_lock: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1681568 - mio0: 81832 - format: RGBA16 -treasure_chest/treasure_chest_lock_top: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1681568 - mio0: 85928 - format: RGBA16 -treasure_chest/treasure_chest_side: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1681568 - mio0: 83880 - format: RGBA16 -tree/palm_tree: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1974256 - mio0: 205336 - format: RGBA16 -tree/pine_tree: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1974256 - mio0: 196448 - format: RGBA16 -tree/snowy_pine_tree: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1974256 - mio0: 200776 - format: RGBA16 -tree/tree_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1974256 - mio0: 187944 - format: RGBA16 -tree/tree_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1974256 - mio0: 192040 - format: RGBA16 -ukiki/ukiki_butt: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1256880 - mio0: 39872 - format: RGBA16 -ukiki/ukiki_face: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1256880 - mio0: 31680 - format: RGBA16 -ukiki/ukiki_face_blink: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1256880 - mio0: 35776 - format: RGBA16 -ukiki/ukiki_fur: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1256880 - mio0: 41920 - format: RGBA16 -unagi/unagi_body: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1164528 - mio0: 44832 - format: RGBA16 -unagi/unagi_eye: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1164528 - mio0: 46880 - format: RGBA16 -unagi/unagi_head_base: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1164528 - mio0: 47392 - format: RGBA16 -unagi/unagi_mouth: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1164528 - mio0: 49952 - format: RGBA16 -unagi/unagi_tail: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1164528 - mio0: 50080 - format: RGBA16 -unagi/unagi_tooth: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1164528 - mio0: 49440 - format: RGBA16 -walk_smoke/walk_smoke_0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 122528 - format: IA16 -walk_smoke/walk_smoke_1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 124576 - format: IA16 -walk_smoke/walk_smoke_2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 126624 - format: IA16 -walk_smoke/walk_smoke_3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 128672 - format: IA16 -walk_smoke/walk_smoke_4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 130720 - format: IA16 -walk_smoke/walk_smoke_5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 132768 - format: IA16 -walk_smoke/walk_smoke_6: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 134816 - format: IA16 -warp_pipe/warp_pipe_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1974256 - mio0: 32320 - format: RGBA16 -warp_pipe/warp_pipe_top: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 37224 - format: RGBA16 -water_bubble/water_bubble: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1136896 - mio0: 65152 - format: RGBA16 -water_mine/water_mine_left_side_unused: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1478688 - mio0: 359440 - format: RGBA16 -water_mine/water_mine_right_side_unused: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1478688 - mio0: 363536 - format: RGBA16 -water_mine/water_mine_spike_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1478688 - mio0: 367632 - format: RGBA16 -water_ring/water_ring: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1681568 - mio0: 74624 - format: RGBA16 -water_splash/water_splash_0: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1004336 - mio0: 173512 - format: RGBA16 -water_splash/water_splash_1: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1004336 - mio0: 177608 - format: RGBA16 -water_splash/water_splash_2: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1004336 - mio0: 181704 - format: RGBA16 -water_splash/water_splash_3: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1004336 - mio0: 185800 - format: RGBA16 -water_splash/water_splash_4: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1004336 - mio0: 189896 - format: RGBA16 -water_splash/water_splash_5: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1004336 - mio0: 193992 - format: RGBA16 -water_splash/water_splash_6: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1004336 - mio0: 198088 - format: RGBA16 -water_splash/water_splash_7: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1004336 - mio0: 202184 - format: RGBA16 -water_wave/water_wave_0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 152408 - format: IA16 -water_wave/water_wave_1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 154456 - format: IA16 -water_wave/water_wave_2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 156504 - format: IA16 -water_wave/water_wave_3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1004336 - mio0: 158552 - format: IA16 -whirlpool/whirlpool: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1164528 - mio0: 75848 - format: IA16 -white_particle/snow_particle: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1974256 - mio0: 181920 - format: RGBA16 -white_particle_small/small_snow_particle: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1004336 - mio0: 206720 - format: RGBA16 -whomp/whomp_back: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1723920 - mio0: 115552 - format: RGBA16 -whomp/whomp_face: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1723920 - mio0: 119648 - format: RGBA16 -whomp/whomp_hand: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1723920 - mio0: 123744 - format: RGBA16 -whomp/whomp_surface: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1723920 - mio0: 125792 - format: RGBA16 -wiggler/wiggler_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1447824 - mio0: 31280 - format: RGBA16 -wiggler/wiggler_flower: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1447824 - mio0: 33328 - format: RGBA16 -wiggler/wiggler_frown: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1447824 - mio0: 35376 - format: RGBA16 -wiggler/wiggler_nose_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1447824 - mio0: 37424 - format: RGBA16 -wiggler/wiggler_nose_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1447824 - mio0: 41520 - format: RGBA16 -wiggler/wiggler_segment_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1447824 - mio0: 23088 - format: RGBA16 -wiggler/wiggler_segment_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1447824 - mio0: 27184 - format: RGBA16 -wooden_signpost/wooden_signpost_back: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 182728 - format: RGBA16 -wooden_signpost/wooden_signpost_front: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1974256 - mio0: 184776 - format: RGBA16 -yellow_sphere/yellow_sphere: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1094592 - mio0: 64 - format: RGBA16 -yellow_sphere_small/small_yellow_sphere: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1094592 - mio0: 64 - format: RGBA16 -yoshi/yoshi_eye: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1369168 - mio0: 116104 - format: RGBA16 -yoshi/yoshi_eye_blink: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1369168 - mio0: 116616 - format: RGBA16 -yoshi/yoshi_nostril: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1369168 - mio0: 117128 - format: RGBA16 -yoshi_egg/yoshi_egg_0_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1094592 - mio0: 22456 - format: RGBA16 -yoshi_egg/yoshi_egg_1_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1094592 - mio0: 24504 - format: RGBA16 -yoshi_egg/yoshi_egg_2_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1094592 - mio0: 26552 - format: RGBA16 -yoshi_egg/yoshi_egg_3_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1094592 - mio0: 28600 - format: RGBA16 -yoshi_egg/yoshi_egg_4_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1094592 - mio0: 30648 - format: RGBA16 -yoshi_egg/yoshi_egg_5_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1094592 - mio0: 32696 - format: RGBA16 -yoshi_egg/yoshi_egg_6_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1094592 - mio0: 34744 - format: RGBA16 -yoshi_egg/yoshi_egg_7_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1094592 - mio0: 36792 - format: RGBA16 diff --git a/assets/sm64/eu/assets.yml b/assets/sm64/eu/assets.yml deleted file mode 100644 index b8e13fd..0000000 --- a/assets/sm64/eu/assets.yml +++ /dev/null @@ -1,2327 +0,0 @@ -anims/anim_00: - type: SM64:ANIM - header: - offset: 5041568 - size: 24 - values: - offset: 5041844 - size: 2604 - indices: - offset: 5041592 - size: 252 -anims/anim_01: - type: SM64:ANIM - header: - offset: 5044448 - size: 24 - values: - offset: 5044748 - size: 6576 - indices: - offset: 5044496 - size: 252 -anims/anim_02: - type: SM64:ANIM - header: - offset: 5044472 - size: 24 - values: - offset: 5044748 - size: 6576 - indices: - offset: 5044496 - size: 252 -anims/anim_03: - type: SM64:ANIM - header: - offset: 5051324 - size: 24 - values: - offset: 5051600 - size: 4372 - indices: - offset: 5051348 - size: 252 -anims/anim_04: - type: SM64:ANIM - header: - offset: 5055972 - size: 24 - values: - offset: 5056248 - size: 2264 - indices: - offset: 5055996 - size: 252 -anims/anim_05: - type: SM64:ANIM - header: - offset: 5058512 - size: 24 - values: - offset: 5058788 - size: 5796 - indices: - offset: 5058536 - size: 252 -anims/anim_06: - type: SM64:ANIM - header: - offset: 5064584 - size: 24 - values: - offset: 5064860 - size: 892 - indices: - offset: 5064608 - size: 252 -anims/anim_07: - type: SM64:ANIM - header: - offset: 5044472 - size: 24 - values: - offset: 5066052 - size: 1468 - indices: - offset: 5065800 - size: 252 -anims/anim_08: - type: SM64:ANIM - header: - offset: 5065776 - size: 24 - values: - offset: 5066052 - size: 1468 - indices: - offset: 5065800 - size: 252 -anims/anim_09: - type: SM64:ANIM - header: - offset: 5067520 - size: 24 - values: - offset: 5067796 - size: 3052 - indices: - offset: 5067544 - size: 252 -anims/anim_0A: - type: SM64:ANIM - header: - offset: 5070848 - size: 24 - values: - offset: 5071124 - size: 2544 - indices: - offset: 5070872 - size: 252 -anims/anim_0B: - type: SM64:ANIM - header: - offset: 5073668 - size: 24 - values: - offset: 5073968 - size: 1348 - indices: - offset: 5073716 - size: 252 -anims/anim_0C: - type: SM64:ANIM - header: - offset: 5073692 - size: 24 - values: - offset: 5073968 - size: 1348 - indices: - offset: 5073716 - size: 252 -anims/anim_0D: - type: SM64:ANIM - header: - offset: 5075316 - size: 24 - values: - offset: 5075592 - size: 770 - indices: - offset: 5075340 - size: 252 -anims/anim_0E: - type: SM64:ANIM - header: - offset: 5044472 - size: 24 - values: - offset: 5076640 - size: 80 - indices: - offset: 5076388 - size: 252 -anims/anim_0F: - type: SM64:ANIM - header: - offset: 5044472 - size: 24 - values: - offset: 5077020 - size: 1502 - indices: - offset: 5076768 - size: 252 -anims/anim_10: - type: SM64:ANIM - header: - offset: 5076744 - size: 24 - values: - offset: 5077020 - size: 1502 - indices: - offset: 5076768 - size: 252 -anims/anim_11: - type: SM64:ANIM - header: - offset: 5078524 - size: 24 - values: - offset: 5078800 - size: 1174 - indices: - offset: 5078548 - size: 252 -anims/anim_12: - type: SM64:ANIM - header: - offset: 5079976 - size: 24 - values: - offset: 5080252 - size: 1318 - indices: - offset: 5080000 - size: 252 -anims/anim_13: - type: SM64:ANIM - header: - offset: 5081572 - size: 24 - values: - offset: 5081848 - size: 1678 - indices: - offset: 5081596 - size: 252 -anims/anim_14: - type: SM64:ANIM - header: - offset: 5083528 - size: 24 - values: - offset: 5083804 - size: 1102 - indices: - offset: 5083552 - size: 252 -anims/anim_15: - type: SM64:ANIM - header: - offset: 5084908 - size: 24 - values: - offset: 5085184 - size: 930 - indices: - offset: 5084932 - size: 252 -anims/anim_16: - type: SM64:ANIM - header: - offset: 5086116 - size: 24 - values: - offset: 5086392 - size: 4452 - indices: - offset: 5086140 - size: 252 -anims/anim_17: - type: SM64:ANIM - header: - offset: 5090844 - size: 24 - values: - offset: 5091120 - size: 2942 - indices: - offset: 5090868 - size: 252 -anims/anim_18: - type: SM64:ANIM - header: - offset: 5094064 - size: 24 - values: - offset: 5094340 - size: 4452 - indices: - offset: 5086140 - size: 252 -anims/anim_19: - type: SM64:ANIM - header: - offset: 5098792 - size: 24 - values: - offset: 5099068 - size: 5354 - indices: - offset: 5098816 - size: 252 -anims/anim_1A: - type: SM64:ANIM - header: - offset: 5104424 - size: 24 - values: - offset: 5104700 - size: 1146 - indices: - offset: 5104448 - size: 252 -anims/anim_1B: - type: SM64:ANIM - header: - offset: 5105848 - size: 24 - values: - offset: 5106124 - size: 2858 - indices: - offset: 5105872 - size: 252 -anims/anim_1C: - type: SM64:ANIM - header: - offset: 5108984 - size: 24 - values: - offset: 5109260 - size: 780 - indices: - offset: 5109008 - size: 252 -anims/anim_1D: - type: SM64:ANIM - header: - offset: 5110040 - size: 24 - values: - offset: 5110316 - size: 1380 - indices: - offset: 5110064 - size: 252 -anims/anim_1E: - type: SM64:ANIM - header: - offset: 5111696 - size: 24 - values: - offset: 5111972 - size: 1530 - indices: - offset: 5111720 - size: 252 -anims/anim_1F: - type: SM64:ANIM - header: - offset: 5113504 - size: 24 - values: - offset: 5113780 - size: 846 - indices: - offset: 5113528 - size: 252 -anims/anim_20: - type: SM64:ANIM - header: - offset: 5114628 - size: 24 - values: - offset: 5114904 - size: 7124 - indices: - offset: 5114652 - size: 252 -anims/anim_21: - type: SM64:ANIM - header: - offset: 5122028 - size: 24 - values: - offset: 5122304 - size: 2610 - indices: - offset: 5122052 - size: 252 -anims/anim_22: - type: SM64:ANIM - header: - offset: 5124916 - size: 24 - values: - offset: 5125192 - size: 1750 - indices: - offset: 5124940 - size: 252 -anims/anim_23: - type: SM64:ANIM - header: - offset: 5126944 - size: 24 - values: - offset: 5127220 - size: 8216 - indices: - offset: 5126968 - size: 252 -anims/anim_24: - type: SM64:ANIM - header: - offset: 5135436 - size: 24 - values: - offset: 5135712 - size: 9376 - indices: - offset: 5135460 - size: 252 -anims/anim_25: - type: SM64:ANIM - header: - offset: 5145088 - size: 24 - values: - offset: 5145364 - size: 8018 - indices: - offset: 5145112 - size: 252 -anims/anim_26: - type: SM64:ANIM - header: - offset: 5153384 - size: 24 - values: - offset: 5153660 - size: 7352 - indices: - offset: 5153408 - size: 252 -anims/anim_27: - type: SM64:ANIM - header: - offset: 5161012 - size: 24 - values: - offset: 5161288 - size: 8980 - indices: - offset: 5161036 - size: 252 -anims/anim_28: - type: SM64:ANIM - header: - offset: 5083528 - size: 24 - values: - offset: 5170544 - size: 1010 - indices: - offset: 5170292 - size: 252 -anims/anim_29: - type: SM64:ANIM - header: - offset: 5171556 - size: 24 - values: - offset: 5171832 - size: 582 - indices: - offset: 5171580 - size: 252 -anims/anim_2A: - type: SM64:ANIM - header: - offset: 5172416 - size: 24 - values: - offset: 5172692 - size: 1252 - indices: - offset: 5172440 - size: 252 -anims/anim_2B: - type: SM64:ANIM - header: - offset: 5172416 - size: 24 - values: - offset: 5174220 - size: 1582 - indices: - offset: 5173968 - size: 252 -anims/anim_2C: - type: SM64:ANIM - header: - offset: 5044448 - size: 24 - values: - offset: 5176104 - size: 5620 - indices: - offset: 5175852 - size: 252 -anims/anim_2D: - type: SM64:ANIM - header: - offset: 5044472 - size: 24 - values: - offset: 5176104 - size: 5620 - indices: - offset: 5175852 - size: 252 -anims/anim_2E: - type: SM64:ANIM - header: - offset: 5181724 - size: 24 - values: - offset: 5182000 - size: 3028 - indices: - offset: 5181748 - size: 252 -anims/anim_2F: - type: SM64:ANIM - header: - offset: 5126944 - size: 24 - values: - offset: 5185304 - size: 7420 - indices: - offset: 5185052 - size: 252 -anims/anim_30: - type: SM64:ANIM - header: - offset: 5058512 - size: 24 - values: - offset: 5193000 - size: 5428 - indices: - offset: 5192748 - size: 252 -anims/anim_31: - type: SM64:ANIM - header: - offset: 5198428 - size: 24 - values: - offset: 5198704 - size: 10660 - indices: - offset: 5198452 - size: 252 -anims/anim_32: - type: SM64:ANIM - header: - offset: 5114628 - size: 24 - values: - offset: 5209640 - size: 7890 - indices: - offset: 5209388 - size: 252 -anims/anim_33: - type: SM64:ANIM - header: - offset: 5217532 - size: 24 - values: - offset: 5217808 - size: 2840 - indices: - offset: 5217556 - size: 252 -anims/anim_34: - type: SM64:ANIM - header: - offset: 5078524 - size: 24 - values: - offset: 5220924 - size: 1300 - indices: - offset: 5220672 - size: 252 -anims/anim_35: - type: SM64:ANIM - header: - offset: 5222224 - size: 24 - values: - offset: 5222500 - size: 3704 - indices: - offset: 5222248 - size: 252 -anims/anim_36: - type: SM64:ANIM - header: - offset: 5226204 - size: 24 - values: - offset: 5226480 - size: 3700 - indices: - offset: 5226228 - size: 252 -anims/anim_37: - type: SM64:ANIM - header: - offset: 5126944 - size: 24 - values: - offset: 5230456 - size: 6828 - indices: - offset: 5230204 - size: 252 -anims/anim_38: - type: SM64:ANIM - header: - offset: 5064584 - size: 24 - values: - offset: 5237560 - size: 844 - indices: - offset: 5237308 - size: 252 -anims/anim_39: - type: SM64:ANIM - header: - offset: 5238404 - size: 24 - values: - offset: 5238680 - size: 12418 - indices: - offset: 5238428 - size: 252 -anims/anim_3A: - type: SM64:ANIM - header: - offset: 5251100 - size: 24 - values: - offset: 5251376 - size: 374 - indices: - offset: 5251124 - size: 252 -anims/anim_3B: - type: SM64:ANIM - header: - offset: 5078524 - size: 24 - values: - offset: 5252028 - size: 1204 - indices: - offset: 5251776 - size: 252 -anims/anim_3C: - type: SM64:ANIM - header: - offset: 5253232 - size: 24 - values: - offset: 5253532 - size: 774 - indices: - offset: 5253280 - size: 252 -anims/anim_3D: - type: SM64:ANIM - header: - offset: 5253256 - size: 24 - values: - offset: 5253532 - size: 774 - indices: - offset: 5253280 - size: 252 -anims/anim_3E: - type: SM64:ANIM - header: - offset: 5238404 - size: 24 - values: - offset: 5254584 - size: 11490 - indices: - offset: 5254332 - size: 252 -anims/anim_3F: - type: SM64:ANIM - header: - offset: 5266076 - size: 24 - values: - offset: 5266352 - size: 3094 - indices: - offset: 5266100 - size: 252 -anims/anim_40: - type: SM64:ANIM - header: - offset: 5269448 - size: 24 - values: - offset: 5269724 - size: 1094 - indices: - offset: 5269472 - size: 252 -anims/anim_41: - type: SM64:ANIM - header: - offset: 5108984 - size: 24 - values: - offset: 5271096 - size: 536 - indices: - offset: 5270844 - size: 252 -anims/anim_42: - type: SM64:ANIM - header: - offset: 5271632 - size: 24 - values: - offset: 5271908 - size: 956 - indices: - offset: 5271656 - size: 252 -anims/anim_43: - type: SM64:ANIM - header: - offset: 5272864 - size: 24 - values: - offset: 5273140 - size: 84 - indices: - offset: 5272888 - size: 252 -anims/anim_44: - type: SM64:ANIM - header: - offset: 5083528 - size: 24 - values: - offset: 5273500 - size: 650 - indices: - offset: 5273248 - size: 252 -anims/anim_45: - type: SM64:ANIM - header: - offset: 5044472 - size: 24 - values: - offset: 5274452 - size: 1190 - indices: - offset: 5274200 - size: 252 -anims/anim_46: - type: SM64:ANIM - header: - offset: 5274176 - size: 24 - values: - offset: 5274452 - size: 1190 - indices: - offset: 5274200 - size: 252 -anims/anim_47: - type: SM64:ANIM - header: - offset: 5253232 - size: 24 - values: - offset: 5275920 - size: 838 - indices: - offset: 5275668 - size: 252 -anims/anim_48: - type: SM64:ANIM - header: - offset: 5276760 - size: 24 - values: - offset: 5277036 - size: 5098 - indices: - offset: 5276784 - size: 252 -anims/anim_49: - type: SM64:ANIM - header: - offset: 5078524 - size: 24 - values: - offset: 5282412 - size: 1298 - indices: - offset: 5282160 - size: 252 -anims/anim_4A: - type: SM64:ANIM - header: - offset: 5283712 - size: 24 - values: - offset: 5283988 - size: 616 - indices: - offset: 5283736 - size: 252 -anims/anim_4B: - type: SM64:ANIM - header: - offset: 5079976 - size: 24 - values: - offset: 5284880 - size: 1386 - indices: - offset: 5284628 - size: 252 -anims/anim_4C: - type: SM64:ANIM - header: - offset: 5286268 - size: 24 - values: - offset: 5286544 - size: 670 - indices: - offset: 5286292 - size: 252 -anims/anim_4D: - type: SM64:ANIM - header: - offset: 5064584 - size: 24 - values: - offset: 5287516 - size: 2456 - indices: - offset: 5287264 - size: 252 -anims/anim_4E: - type: SM64:ANIM - header: - offset: 5287240 - size: 24 - values: - offset: 5287516 - size: 2456 - indices: - offset: 5287264 - size: 252 -anims/anim_4F: - type: SM64:ANIM - header: - offset: 5113504 - size: 24 - values: - offset: 5290248 - size: 1578 - indices: - offset: 5289996 - size: 252 -anims/anim_50: - type: SM64:ANIM - header: - offset: 5251100 - size: 24 - values: - offset: 5292104 - size: 420 - indices: - offset: 5291852 - size: 252 -anims/anim_51: - type: SM64:ANIM - header: - offset: 5292524 - size: 24 - values: - offset: 5292800 - size: 1002 - indices: - offset: 5292548 - size: 252 -anims/anim_52: - type: SM64:ANIM - header: - offset: 5253232 - size: 24 - values: - offset: 5294080 - size: 878 - indices: - offset: 5293828 - size: 252 -anims/anim_53: - type: SM64:ANIM - header: - offset: 5294960 - size: 24 - values: - offset: 5295236 - size: 1970 - indices: - offset: 5294984 - size: 252 -anims/anim_54: - type: SM64:ANIM - header: - offset: 5297208 - size: 24 - values: - offset: 5297484 - size: 1314 - indices: - offset: 5297232 - size: 252 -anims/anim_55: - type: SM64:ANIM - header: - offset: 5298800 - size: 24 - values: - offset: 5299076 - size: 11268 - indices: - offset: 5298824 - size: 252 -anims/anim_56: - type: SM64:ANIM - header: - offset: 5044472 - size: 24 - values: - offset: 5310644 - size: 1560 - indices: - offset: 5310392 - size: 252 -anims/anim_57: - type: SM64:ANIM - header: - offset: 5310368 - size: 24 - values: - offset: 5310644 - size: 1560 - indices: - offset: 5310392 - size: 252 -anims/anim_58: - type: SM64:ANIM - header: - offset: 5312204 - size: 24 - values: - offset: 5312480 - size: 1082 - indices: - offset: 5312228 - size: 252 -anims/anim_59: - type: SM64:ANIM - header: - offset: 5313564 - size: 24 - values: - offset: 5313840 - size: 3052 - indices: - offset: 5313588 - size: 252 -anims/anim_5A: - type: SM64:ANIM - header: - offset: 5316892 - size: 24 - values: - offset: 5317168 - size: 3278 - indices: - offset: 5316916 - size: 252 -anims/anim_5B: - type: SM64:ANIM - header: - offset: 5108984 - size: 24 - values: - offset: 5320724 - size: 720 - indices: - offset: 5320472 - size: 252 -anims/anim_5C: - type: SM64:ANIM - header: - offset: 5321444 - size: 24 - values: - offset: 5321720 - size: 1258 - indices: - offset: 5321468 - size: 252 -anims/anim_5D: - type: SM64:ANIM - header: - offset: 5269448 - size: 24 - values: - offset: 5323256 - size: 1142 - indices: - offset: 5323004 - size: 252 -anims/anim_5E: - type: SM64:ANIM - header: - offset: 5238404 - size: 24 - values: - offset: 5324676 - size: 12110 - indices: - offset: 5324424 - size: 252 -anims/anim_5F: - type: SM64:ANIM - header: - offset: 5336788 - size: 24 - values: - offset: 5337064 - size: 5058 - indices: - offset: 5336812 - size: 252 -anims/anim_60: - type: SM64:ANIM - header: - offset: 5342124 - size: 24 - values: - offset: 5342400 - size: 4020 - indices: - offset: 5342148 - size: 252 -anims/anim_61: - type: SM64:ANIM - header: - offset: 5346420 - size: 24 - values: - offset: 5346696 - size: 12660 - indices: - offset: 5346444 - size: 252 -anims/anim_62: - type: SM64:ANIM - header: - offset: 5108984 - size: 24 - values: - offset: 5359632 - size: 742 - indices: - offset: 5359380 - size: 252 -anims/anim_63: - type: SM64:ANIM - header: - offset: 5360376 - size: 24 - values: - offset: 5360652 - size: 1626 - indices: - offset: 5360400 - size: 252 -anims/anim_64: - type: SM64:ANIM - header: - offset: 5362280 - size: 24 - values: - offset: 5362556 - size: 1246 - indices: - offset: 5362304 - size: 252 -anims/anim_65: - type: SM64:ANIM - header: - offset: 5113504 - size: 24 - values: - offset: 5364080 - size: 1700 - indices: - offset: 5363828 - size: 252 -anims/anim_66: - type: SM64:ANIM - header: - offset: 5365780 - size: 24 - values: - offset: 5366056 - size: 1948 - indices: - offset: 5365804 - size: 252 -anims/anim_67: - type: SM64:ANIM - header: - offset: 5368004 - size: 24 - values: - offset: 5368280 - size: 386 - indices: - offset: 5368028 - size: 252 -anims/anim_68: - type: SM64:ANIM - header: - offset: 5368668 - size: 24 - values: - offset: 5368944 - size: 340 - indices: - offset: 5368692 - size: 252 -anims/anim_69: - type: SM64:ANIM - header: - offset: 5108984 - size: 24 - values: - offset: 5369560 - size: 764 - indices: - offset: 5369308 - size: 252 -anims/anim_6A: - type: SM64:ANIM - header: - offset: 5370324 - size: 24 - values: - offset: 5370600 - size: 1060 - indices: - offset: 5370348 - size: 252 -anims/anim_6B: - type: SM64:ANIM - header: - offset: 5253232 - size: 24 - values: - offset: 5371936 - size: 940 - indices: - offset: 5371684 - size: 252 -anims/anim_6C: - type: SM64:ANIM - header: - offset: 5372876 - size: 24 - values: - offset: 5373152 - size: 1284 - indices: - offset: 5372900 - size: 252 -anims/anim_6D: - type: SM64:ANIM - header: - offset: 5079976 - size: 24 - values: - offset: 5374712 - size: 1286 - indices: - offset: 5374460 - size: 252 -anims/anim_6E: - type: SM64:ANIM - header: - offset: 5078524 - size: 24 - values: - offset: 5376276 - size: 1136 - indices: - offset: 5376024 - size: 252 -anims/anim_6F: - type: SM64:ANIM - header: - offset: 5171556 - size: 24 - values: - offset: 5377712 - size: 98 - indices: - offset: 5377460 - size: 252 -anims/anim_70: - type: SM64:ANIM - header: - offset: 5377436 - size: 24 - values: - offset: 5377712 - size: 98 - indices: - offset: 5377460 - size: 252 -anims/anim_71: - type: SM64:ANIM - header: - offset: 5377812 - size: 24 - values: - offset: 5378088 - size: 2078 - indices: - offset: 5377836 - size: 252 -anims/anim_72: - type: SM64:ANIM - header: - offset: 5380168 - size: 24 - values: - offset: 5380468 - size: 4342 - indices: - offset: 5380216 - size: 252 -anims/anim_73: - type: SM64:ANIM - header: - offset: 5380168 - size: 24 - values: - offset: 5380468 - size: 4342 - indices: - offset: 5380216 - size: 252 -anims/anim_74: - type: SM64:ANIM - header: - offset: 5377812 - size: 24 - values: - offset: 5385088 - size: 1844 - indices: - offset: 5384836 - size: 252 -anims/anim_75: - type: SM64:ANIM - header: - offset: 5377812 - size: 24 - values: - offset: 5387208 - size: 1892 - indices: - offset: 5386956 - size: 252 -anims/anim_76: - type: SM64:ANIM - header: - offset: 5126944 - size: 24 - values: - offset: 5389376 - size: 4648 - indices: - offset: 5389124 - size: 252 -anims/anim_77: - type: SM64:ANIM - header: - offset: 5086116 - size: 24 - values: - offset: 5394300 - size: 2464 - indices: - offset: 5394048 - size: 252 -anims/anim_78: - type: SM64:ANIM - header: - offset: 5396764 - size: 24 - values: - offset: 5397040 - size: 10454 - indices: - offset: 5396788 - size: 252 -anims/anim_79: - type: SM64:ANIM - header: - offset: 5407496 - size: 24 - values: - offset: 5407772 - size: 3634 - indices: - offset: 5407520 - size: 252 -anims/anim_7A: - type: SM64:ANIM - header: - offset: 5411408 - size: 24 - values: - offset: 5411684 - size: 402 - indices: - offset: 5411432 - size: 252 -anims/anim_7B: - type: SM64:ANIM - header: - offset: 5297208 - size: 24 - values: - offset: 5412364 - size: 2360 - indices: - offset: 5412112 - size: 252 -anims/anim_7C: - type: SM64:ANIM - header: - offset: 5297208 - size: 24 - values: - offset: 5415000 - size: 2300 - indices: - offset: 5414748 - size: 252 -anims/anim_7D: - type: SM64:ANIM - header: - offset: 5172416 - size: 24 - values: - offset: 5417576 - size: 1114 - indices: - offset: 5417324 - size: 252 -anims/anim_7E: - type: SM64:ANIM - header: - offset: 5058512 - size: 24 - values: - offset: 5418968 - size: 4538 - indices: - offset: 5418716 - size: 252 -anims/anim_7F: - type: SM64:ANIM - header: - offset: 5105848 - size: 24 - values: - offset: 5423784 - size: 3622 - indices: - offset: 5423532 - size: 252 -anims/anim_80: - type: SM64:ANIM - header: - offset: 5105848 - size: 24 - values: - offset: 5427684 - size: 4248 - indices: - offset: 5427432 - size: 252 -anims/anim_81: - type: SM64:ANIM - header: - offset: 5431932 - size: 24 - values: - offset: 5432208 - size: 4308 - indices: - offset: 5431956 - size: 252 -anims/anim_82: - type: SM64:ANIM - header: - offset: 5436516 - size: 24 - values: - offset: 5436792 - size: 5770 - indices: - offset: 5436540 - size: 252 -anims/anim_83: - type: SM64:ANIM - header: - offset: 5442564 - size: 24 - values: - offset: 5442840 - size: 4734 - indices: - offset: 5442588 - size: 252 -anims/anim_84: - type: SM64:ANIM - header: - offset: 5051324 - size: 24 - values: - offset: 5447852 - size: 4756 - indices: - offset: 5447600 - size: 252 -anims/anim_85: - type: SM64:ANIM - header: - offset: 5172416 - size: 24 - values: - offset: 5452884 - size: 324 - indices: - offset: 5452632 - size: 252 -anims/anim_86: - type: SM64:ANIM - header: - offset: 5453208 - size: 24 - values: - offset: 5453484 - size: 2902 - indices: - offset: 5453232 - size: 252 -anims/anim_87: - type: SM64:ANIM - header: - offset: 5217532 - size: 24 - values: - offset: 5456664 - size: 1564 - indices: - offset: 5456412 - size: 252 -anims/anim_88: - type: SM64:ANIM - header: - offset: 5321444 - size: 24 - values: - offset: 5458528 - size: 1260 - indices: - offset: 5458276 - size: 252 -anims/anim_89: - type: SM64:ANIM - header: - offset: 5458252 - size: 24 - values: - offset: 5458528 - size: 1260 - indices: - offset: 5458276 - size: 252 -anims/anim_8A: - type: SM64:ANIM - header: - offset: 5453208 - size: 24 - values: - offset: 5460064 - size: 2980 - indices: - offset: 5459812 - size: 252 -anims/anim_8B: - type: SM64:ANIM - header: - offset: 5313564 - size: 24 - values: - offset: 5463320 - size: 2970 - indices: - offset: 5463068 - size: 252 -anims/anim_8C: - type: SM64:ANIM - header: - offset: 5283712 - size: 24 - values: - offset: 5466568 - size: 646 - indices: - offset: 5466316 - size: 252 -anims/anim_8D: - type: SM64:ANIM - header: - offset: 5292524 - size: 24 - values: - offset: 5467492 - size: 1086 - indices: - offset: 5467240 - size: 252 -anims/anim_8E: - type: SM64:ANIM - header: - offset: 5044472 - size: 24 - values: - offset: 5468880 - size: 1618 - indices: - offset: 5468628 - size: 252 -anims/anim_8F: - type: SM64:ANIM - header: - offset: 5065776 - size: 24 - values: - offset: 5468880 - size: 1618 - indices: - offset: 5468628 - size: 252 -anims/anim_90: - type: SM64:ANIM - header: - offset: 5083528 - size: 24 - values: - offset: 5470776 - size: 1012 - indices: - offset: 5470524 - size: 252 -anims/anim_91: - type: SM64:ANIM - header: - offset: 5471788 - size: 24 - values: - offset: 5472064 - size: 266 - indices: - offset: 5471812 - size: 252 -anims/anim_92: - type: SM64:ANIM - header: - offset: 5472332 - size: 24 - values: - offset: 5472608 - size: 5600 - indices: - offset: 5472356 - size: 252 -anims/anim_93: - type: SM64:ANIM - header: - offset: 5108984 - size: 24 - values: - offset: 5478484 - size: 602 - indices: - offset: 5478232 - size: 252 -anims/anim_94: - type: SM64:ANIM - header: - offset: 5044472 - size: 24 - values: - offset: 5479364 - size: 80 - indices: - offset: 5076388 - size: 252 -anims/anim_95: - type: SM64:ANIM - header: - offset: 5368004 - size: 24 - values: - offset: 5479720 - size: 280 - indices: - offset: 5479468 - size: 252 -anims/anim_96: - type: SM64:ANIM - header: - offset: 5108984 - size: 24 - values: - offset: 5480276 - size: 680 - indices: - offset: 5480024 - size: 252 -anims/anim_97: - type: SM64:ANIM - header: - offset: 5251100 - size: 24 - values: - offset: 5481232 - size: 416 - indices: - offset: 5480980 - size: 252 -anims/anim_98: - type: SM64:ANIM - header: - offset: 5058512 - size: 24 - values: - offset: 5481924 - size: 2758 - indices: - offset: 5481672 - size: 252 -anims/anim_99: - type: SM64:ANIM - header: - offset: 5484684 - size: 24 - values: - offset: 5484960 - size: 7014 - indices: - offset: 5484708 - size: 252 -anims/anim_9A: - type: SM64:ANIM - header: - offset: 5283712 - size: 24 - values: - offset: 5492252 - size: 644 - indices: - offset: 5492000 - size: 252 -anims/anim_9B: - type: SM64:ANIM - header: - offset: 5283712 - size: 24 - values: - offset: 5493172 - size: 630 - indices: - offset: 5492920 - size: 252 -anims/anim_9C: - type: SM64:ANIM - header: - offset: 5493804 - size: 24 - values: - offset: 5494080 - size: 4884 - indices: - offset: 5493828 - size: 252 -anims/anim_9D: - type: SM64:ANIM - header: - offset: 5498964 - size: 24 - values: - offset: 5499240 - size: 1944 - indices: - offset: 5498988 - size: 252 -anims/anim_9E: - type: SM64:ANIM - header: - offset: 5431932 - size: 24 - values: - offset: 5501460 - size: 4008 - indices: - offset: 5501208 - size: 252 -anims/anim_9F: - type: SM64:ANIM - header: - offset: 5078524 - size: 24 - values: - offset: 5505744 - size: 774 - indices: - offset: 5505492 - size: 252 -anims/anim_A0: - type: SM64:ANIM - header: - offset: 5108984 - size: 24 - values: - offset: 5506796 - size: 390 - indices: - offset: 5506544 - size: 252 -anims/anim_A1: - type: SM64:ANIM - header: - offset: 5507188 - size: 24 - values: - offset: 5507464 - size: 920 - indices: - offset: 5507212 - size: 252 -anims/anim_A2: - type: SM64:ANIM - header: - offset: 5081572 - size: 24 - values: - offset: 5508660 - size: 1448 - indices: - offset: 5508408 - size: 252 -anims/anim_A3: - type: SM64:ANIM - header: - offset: 5297208 - size: 24 - values: - offset: 5510384 - size: 2590 - indices: - offset: 5510132 - size: 252 -anims/anim_A4: - type: SM64:ANIM - header: - offset: 5111696 - size: 24 - values: - offset: 5513252 - size: 1650 - indices: - offset: 5513000 - size: 252 -anims/anim_A5: - type: SM64:ANIM - header: - offset: 5044448 - size: 24 - values: - offset: 5515180 - size: 5148 - indices: - offset: 5514928 - size: 252 -anims/anim_A6: - type: SM64:ANIM - header: - offset: 5520328 - size: 24 - values: - offset: 5520604 - size: 4646 - indices: - offset: 5520352 - size: 252 -anims/anim_A7: - type: SM64:ANIM - header: - offset: 5453208 - size: 24 - values: - offset: 5525528 - size: 3060 - indices: - offset: 5525276 - size: 252 -anims/anim_A8: - type: SM64:ANIM - header: - offset: 5431932 - size: 24 - values: - offset: 5528864 - size: 3910 - indices: - offset: 5528612 - size: 252 -anims/anim_A9: - type: SM64:ANIM - header: - offset: 5321444 - size: 24 - values: - offset: 5533052 - size: 1728 - indices: - offset: 5532800 - size: 252 -anims/anim_AA: - type: SM64:ANIM - header: - offset: 5370324 - size: 24 - values: - offset: 5535056 - size: 972 - indices: - offset: 5534804 - size: 252 -anims/anim_AB: - type: SM64:ANIM - header: - offset: 5108984 - size: 24 - values: - offset: 5536304 - size: 750 - indices: - offset: 5536052 - size: 252 -anims/anim_AC: - type: SM64:ANIM - header: - offset: 5537056 - size: 24 - values: - offset: 5537332 - size: 1706 - indices: - offset: 5537080 - size: 252 -anims/anim_AD: - type: SM64:ANIM - header: - offset: 5294960 - size: 24 - values: - offset: 5539316 - size: 1860 - indices: - offset: 5539064 - size: 252 -anims/anim_AE: - type: SM64:ANIM - header: - offset: 5253232 - size: 24 - values: - offset: 5541452 - size: 956 - indices: - offset: 5541200 - size: 252 -anims/anim_AF: - type: SM64:ANIM - header: - offset: 5294960 - size: 24 - values: - offset: 5542684 - size: 2160 - indices: - offset: 5542432 - size: 252 -anims/anim_B0: - type: SM64:ANIM - header: - offset: 5368004 - size: 24 - values: - offset: 5545120 - size: 440 - indices: - offset: 5544868 - size: 252 -anims/anim_B1: - type: SM64:ANIM - header: - offset: 5545560 - size: 24 - values: - offset: 5545836 - size: 2418 - indices: - offset: 5545584 - size: 252 -anims/anim_B2: - type: SM64:ANIM - header: - offset: 5111696 - size: 24 - values: - offset: 5548532 - size: 1824 - indices: - offset: 5548280 - size: 252 -anims/anim_B3: - type: SM64:ANIM - header: - offset: 5550356 - size: 24 - values: - offset: 5550632 - size: 6494 - indices: - offset: 5550380 - size: 252 -anims/anim_B4: - type: SM64:ANIM - header: - offset: 5377812 - size: 24 - values: - offset: 5557404 - size: 1846 - indices: - offset: 5557152 - size: 252 -anims/anim_B5: - type: SM64:ANIM - header: - offset: 5321444 - size: 24 - values: - offset: 5559552 - size: 1382 - indices: - offset: 5559300 - size: 252 -anims/anim_B6: - type: SM64:ANIM - header: - offset: 5559276 - size: 24 - values: - offset: 5559552 - size: 1382 - indices: - offset: 5559300 - size: 252 -anims/anim_B7: - type: SM64:ANIM - header: - offset: 5453208 - size: 24 - values: - offset: 5561212 - size: 2980 - indices: - offset: 5560960 - size: 252 -anims/anim_B8: - type: SM64:ANIM - header: - offset: 5217532 - size: 24 - values: - offset: 5564468 - size: 776 - indices: - offset: 5564216 - size: 252 -anims/anim_B9: - type: SM64:ANIM - header: - offset: 5294960 - size: 24 - values: - offset: 5565520 - size: 2068 - indices: - offset: 5565268 - size: 252 -anims/anim_BA: - type: SM64:ANIM - header: - offset: 5312204 - size: 24 - values: - offset: 5567864 - size: 986 - indices: - offset: 5567612 - size: 252 -anims/anim_BB: - type: SM64:ANIM - header: - offset: 5568852 - size: 24 - values: - offset: 5569128 - size: 4132 - indices: - offset: 5568876 - size: 252 -anims/anim_BC: - type: SM64:ANIM - header: - offset: 5044472 - size: 24 - values: - offset: 5573560 - size: 1528 - indices: - offset: 5573308 - size: 252 -anims/anim_BD: - type: SM64:ANIM - header: - offset: 5076744 - size: 24 - values: - offset: 5573560 - size: 1528 - indices: - offset: 5573308 - size: 252 -anims/anim_BE: - type: SM64:ANIM - header: - offset: 5108984 - size: 24 - values: - offset: 5575364 - size: 760 - indices: - offset: 5575112 - size: 252 -anims/anim_BF: - type: SM64:ANIM - header: - offset: 5377812 - size: 24 - values: - offset: 5576400 - size: 1936 - indices: - offset: 5576148 - size: 252 -anims/anim_C0: - type: SM64:ANIM - header: - offset: 5578336 - size: 24 - values: - offset: 5578612 - size: 2452 - indices: - offset: 5578360 - size: 252 -anims/anim_C1: - type: SM64:ANIM - header: - offset: 5070848 - size: 24 - values: - offset: 5581340 - size: 2468 - indices: - offset: 5581088 - size: 252 -anims/anim_C2: - type: SM64:ANIM - header: - offset: 5058512 - size: 24 - values: - offset: 5584084 - size: 5422 - indices: - offset: 5583832 - size: 252 -anims/anim_C3: - type: SM64:ANIM - header: - offset: 5297208 - size: 24 - values: - offset: 5589784 - size: 1942 - indices: - offset: 5589532 - size: 252 -anims/anim_C4: - type: SM64:ANIM - header: - offset: 5297208 - size: 24 - values: - offset: 5592004 - size: 1942 - indices: - offset: 5589532 - size: 252 -anims/anim_C5: - type: SM64:ANIM - header: - offset: 5297208 - size: 24 - values: - offset: 5594224 - size: 1942 - indices: - offset: 5589532 - size: 252 -anims/anim_C6: - type: SM64:ANIM - header: - offset: 5217532 - size: 24 - values: - offset: 5596444 - size: 1666 - indices: - offset: 5596192 - size: 252 -anims/anim_C7: - type: SM64:ANIM - header: - offset: 5217532 - size: 24 - values: - offset: 5598388 - size: 2844 - indices: - offset: 5598136 - size: 252 -anims/anim_C8: - type: SM64:ANIM - header: - offset: 5601232 - size: 24 - values: - offset: 5601508 - size: 1648 - indices: - offset: 5601256 - size: 252 -anims/anim_C9: - type: SM64:ANIM - header: - offset: 5113504 - size: 24 - values: - offset: 5603432 - size: 1940 - indices: - offset: 5603180 - size: 252 -anims/anim_CA: - type: SM64:ANIM - header: - offset: 5605372 - size: 24 - values: - offset: 5605648 - size: 1998 - indices: - offset: 5605396 - size: 252 -anims/anim_CB: - type: SM64:ANIM - header: - offset: 5104424 - size: 24 - values: - offset: 5607948 - size: 1382 - indices: - offset: 5607696 - size: 252 -anims/anim_CC: - type: SM64:ANIM - header: - offset: 5044472 - size: 24 - values: - offset: 5607948 - size: 1382 - indices: - offset: 5607696 - size: 252 -anims/anim_CD: - type: SM64:ANIM - header: - offset: 5609332 - size: 24 - values: - offset: 5609608 - size: 5184 - indices: - offset: 5609356 - size: 252 -anims/anim_CE: - type: SM64:ANIM - header: - offset: 5079976 - size: 24 - values: - offset: 5615068 - size: 1460 - indices: - offset: 5614816 - size: 252 -anims/anim_CF: - type: SM64:ANIM - header: - offset: 5616528 - size: 24 - values: - offset: 5616804 - size: 2708 - indices: - offset: 5616552 - size: 252 -anims/anim_D0: - type: SM64:ANIM - header: - offset: 5292524 - size: 24 - values: - offset: 5619788 - size: 730 - indices: - offset: 5619536 - size: 252 -demos/bbh: - type: BLOB - size: 988 - offset: 5620584 -demos/ccm: - type: BLOB - size: 1320 - offset: 5621572 -demos/hmc: - type: BLOB - size: 980 - offset: 5622892 -demos/jrb: - type: BLOB - size: 620 - offset: 5623872 -demos/pss: - type: BLOB - size: 748 - offset: 5625164 -demos/unused: - type: BLOB - size: 108 - offset: 5625912 -demos/wf: - type: BLOB - size: 672 - offset: 5624492 diff --git a/assets/sm64/eu/levels.yml b/assets/sm64/eu/levels.yml deleted file mode 100644 index 8a3fb3c..0000000 --- a/assets/sm64/eu/levels.yml +++ /dev/null @@ -1,2429 +0,0 @@ -bbh/0: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3485312 - mio0: 0 - format: RGBA16 -bbh/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3485312 - mio0: 4096 - format: RGBA16 -bbh/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3485312 - mio0: 6144 - format: RGBA16 -bbh/3: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3485312 - mio0: 8192 - format: RGBA16 -bbh/4: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 3485312 - mio0: 12288 - format: RGBA16 -bbh/5: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3485312 - mio0: 13312 - format: RGBA16 -bbh/6: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 3485312 - mio0: 17408 - format: RGBA16 -bitdw/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4415552 - mio0: 0 - format: RGBA16 -bitdw/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4415552 - mio0: 2048 - format: RGBA16 -bitdw/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4415552 - mio0: 4096 - format: RGBA16 -bitdw/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4415552 - mio0: 6144 - format: RGBA16 -bitfs/0: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4466448 - mio0: 0 - format: RGBA16 -bitfs/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4466448 - mio0: 4096 - format: RGBA16 -bitfs/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4466448 - mio0: 6144 - format: RGBA16 -bits/0: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4511200 - mio0: 0 - format: RGBA16 -bits/1: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 4511200 - mio0: 4096 - format: RGBA16 -bits/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4511200 - mio0: 8192 - format: RGBA16 -bob/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4052208 - mio0: 0 - format: RGBA16 -bob/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4052208 - mio0: 2048 - format: RGBA16 -bob/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4052208 - mio0: 4096 - format: RGBA16 -bob/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4052208 - mio0: 6144 - format: RGBA16 -bob/4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4052208 - mio0: 8192 - format: RGBA16 -bowser_1/0: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4870192 - mio0: 0 - format: RGBA16 -bowser_1/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4870192 - mio0: 4096 - format: RGBA16 -bowser_1/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4870192 - mio0: 6144 - format: RGBA16 -bowser_2/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4915936 - mio0: 0 - format: RGBA16 -bowser_3/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4920080 - mio0: 0 - format: RGBA16 -bowser_3/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4920080 - mio0: 2048 - format: RGBA16 -bowser_3/2: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4920080 - mio0: 4096 - format: RGBA16 -castle_grounds/0: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4374016 - mio0: 0 - format: RGBA16 -castle_grounds/1: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 4374016 - mio0: 4096 - format: RGBA16 -castle_grounds/2: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 4374016 - mio0: 8192 - format: RGBA16 -castle_grounds/3: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4374016 - mio0: 51688 - format: RGBA16 -castle_grounds/4: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4374016 - mio0: 55784 - format: RGBA16 -castle_grounds/5: - type: TEXTURE - size: 2048 - width: 64 - height: 32 - offset: 4374016 - mio0: 60136 - format: IA8 -castle_inside/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3634560 - mio0: 2048 - format: RGBA16 -castle_inside/10: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3634560 - mio0: 28672 - format: RGBA16 -castle_inside/11: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3634560 - mio0: 30720 - format: RGBA16 -castle_inside/12: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3634560 - mio0: 32768 - format: RGBA16 -castle_inside/13: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3634560 - mio0: 34816 - format: RGBA16 -castle_inside/14: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3634560 - mio0: 36864 - format: RGBA16 -castle_inside/15: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3634560 - mio0: 38912 - format: RGBA16 -castle_inside/16: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3634560 - mio0: 40960 - format: IA16 -castle_inside/17: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3634560 - mio0: 43008 - format: RGBA16 -castle_inside/18: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3634560 - mio0: 47104 - format: RGBA16 -castle_inside/19: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3634560 - mio0: 51200 - format: RGBA16 -castle_inside/2: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3178624 - mio0: 47104 - format: IA16 -castle_inside/20: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3634560 - mio0: 55296 - format: RGBA16 -castle_inside/21: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3634560 - mio0: 59392 - format: RGBA16 -castle_inside/22: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3634560 - mio0: 63488 - format: RGBA16 -castle_inside/23: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3634560 - mio0: 67584 - format: RGBA16 -castle_inside/24: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3634560 - mio0: 71680 - format: RGBA16 -castle_inside/25: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3634560 - mio0: 75776 - format: RGBA16 -castle_inside/26: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3634560 - mio0: 79872 - format: RGBA16 -castle_inside/27: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3634560 - mio0: 83968 - format: RGBA16 -castle_inside/28: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3634560 - mio0: 88064 - format: RGBA16 -castle_inside/29: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3634560 - mio0: 92160 - format: RGBA16 -castle_inside/3: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3634560 - mio0: 8192 - format: RGBA16 -castle_inside/30: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3634560 - mio0: 94208 - format: RGBA16 -castle_inside/31: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3634560 - mio0: 96256 - format: RGBA16 -castle_inside/32: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3634560 - mio0: 100352 - format: RGBA16 -castle_inside/33: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3634560 - mio0: 104448 - format: RGBA16 -castle_inside/34: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3634560 - mio0: 108544 - format: RGBA16 -castle_inside/35: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3634560 - mio0: 112640 - format: RGBA16 -castle_inside/36: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3634560 - mio0: 116736 - format: RGBA16 -castle_inside/37: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3634560 - mio0: 120832 - format: RGBA16 -castle_inside/38: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3634560 - mio0: 124928 - format: RGBA16 -castle_inside/39: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3634560 - mio0: 129024 - format: RGBA16 -castle_inside/4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3634560 - mio0: 12288 - format: RGBA16 -castle_inside/40: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3634560 - mio0: 133120 - format: RGBA16 -castle_inside/5: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3634560 - mio0: 14336 - format: RGBA16 -castle_inside/6: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3634560 - mio0: 18432 - format: RGBA16 -castle_inside/7: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3634560 - mio0: 22528 - format: RGBA16 -castle_inside/8: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3634560 - mio0: 24576 - format: RGBA16 -castle_inside/9: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3634560 - mio0: 26624 - format: RGBA16 -castle_inside/castle_light: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3312784 - mio0: 47104 - format: IA16 -ccm/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3558288 - mio0: 0 - format: RGBA16 -ccm/1: - type: TEXTURE - size: 256 - width: 32 - height: 4 - offset: 3558288 - mio0: 2048 - format: RGBA16 -ccm/10: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3558288 - mio0: 17152 - format: RGBA16 -ccm/11: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3558288 - mio0: 19200 - format: RGBA16 -ccm/12: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3558288 - mio0: 72024 - format: RGBA16 -ccm/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3558288 - mio0: 2304 - format: RGBA16 -ccm/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3558288 - mio0: 4352 - format: RGBA16 -ccm/4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3558288 - mio0: 6400 - format: RGBA16 -ccm/5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1315408 - mio0: 48240 - format: RGBA16 -ccm/6: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1315408 - mio0: 46192 - format: RGBA16 -ccm/7: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3558288 - mio0: 12544 - format: RGBA16 -ccm/8: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 3558288 - mio0: 14592 - format: IA16 -ccm/9: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3558288 - mio0: 15104 - format: IA16 -cotmc/0: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 4827104 - mio0: 0 - format: RGBA16 -cotmc/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4827104 - mio0: 4096 - format: RGBA16 -cotmc/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4827104 - mio0: 6144 - format: RGBA16 -cotmc/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4827104 - mio0: 8192 - format: RGBA16 -cotmc/4: - type: TEXTURE - size: 2048 - width: 64 - height: 16 - offset: 4827104 - mio0: 10240 - format: RGBA16 -ddd/0: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4647792 - mio0: 0 - format: RGBA16 -ddd/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3312784 - mio0: 4096 - format: RGBA16 -ddd/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4647792 - mio0: 6144 - format: RGBA16 -ddd/3: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 4647792 - mio0: 8192 - format: RGBA16 -ddd/4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4647792 - mio0: 12288 - format: RGBA16 -ending/cake: - type: BLOB - size: 143360 - offset: 4716880 - mio0: 0 -hmc/0: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3874816 - mio0: 0 - format: RGBA16 -hmc/1: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3874816 - mio0: 4096 - format: RGBA16 -hmc/2: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3874816 - mio0: 8192 - format: RGBA16 -hmc/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3874816 - mio0: 12288 - format: RGBA16 -hmc/4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3874816 - mio0: 14336 - format: RGBA16 -hmc/5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3874816 - mio0: 16384 - format: RGBA16 -hmc/6: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3874816 - mio0: 18432 - format: RGBA16 -hmc/7: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3634560 - mio0: 92160 - format: RGBA16 -intro/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2401056 - mio0: 32416 - format: RGBA16 -intro/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2401056 - mio0: 34464 - format: RGBA16 -intro/2_copyright: - type: TEXTURE - size: 4096 - width: 128 - height: 16 - offset: 2401056 - mio0: 46240 - format: RGBA16 -intro/3_tm: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2401056 - mio0: 50336 - format: RGBA16 -jrb/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3312784 - mio0: 4096 - format: RGBA16 -jrb/1: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 4176288 - mio0: 2048 - format: RGBA16 -jrb/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4176288 - mio0: 6144 - format: RGBA16 -jrb/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4176288 - mio0: 8192 - format: RGBA16 -lll/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4560608 - mio0: 0 - format: RGBA16 -lll/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4560608 - mio0: 2048 - format: RGBA16 -lll/10: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4560608 - mio0: 20480 - format: RGBA16 -lll/11: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4560608 - mio0: 22528 - format: RGBA16 -lll/12: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4560608 - mio0: 24576 - format: RGBA16 -lll/13: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4560608 - mio0: 26624 - format: RGBA16 -lll/14: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4560608 - mio0: 28672 - format: RGBA16 -lll/15: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4560608 - mio0: 30720 - format: RGBA16 -lll/16: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4560608 - mio0: 32768 - format: RGBA16 -lll/17: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4560608 - mio0: 34816 - format: RGBA16 -lll/18: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4560608 - mio0: 36864 - format: RGBA16 -lll/19: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4560608 - mio0: 38912 - format: RGBA16 -lll/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4560608 - mio0: 4096 - format: RGBA16 -lll/20: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4560608 - mio0: 40960 - format: RGBA16 -lll/21: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4560608 - mio0: 43008 - format: RGBA16 -lll/22: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4560608 - mio0: 45056 - format: RGBA16 -lll/23: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4560608 - mio0: 47104 - format: RGBA16 -lll/24: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4560608 - mio0: 49152 - format: RGBA16 -lll/25: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4560608 - mio0: 51200 - format: RGBA16 -lll/26: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 4560608 - mio0: 53248 - format: RGBA16 -lll/27: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 3558288 - mio0: 14592 - format: IA16 -lll/28: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4560608 - mio0: 54272 - format: RGBA16 -lll/29: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4560608 - mio0: 56320 - format: RGBA16 -lll/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4560608 - mio0: 6144 - format: RGBA16 -lll/30: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4560608 - mio0: 58368 - format: RGBA16 -lll/31: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4560608 - mio0: 60416 - format: RGBA16 -lll/32: - type: TEXTURE - size: 2048 - width: 64 - height: 16 - offset: 4560608 - mio0: 62464 - format: RGBA16 -lll/4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4560608 - mio0: 8192 - format: RGBA16 -lll/5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4560608 - mio0: 10240 - format: RGBA16 -lll/6: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4560608 - mio0: 12288 - format: RGBA16 -lll/7: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3142672 - mio0: 6144 - format: RGBA16 -lll/8: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4560608 - mio0: 16384 - format: RGBA16 -lll/9: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4560608 - mio0: 18432 - format: RGBA16 -menu/main_menu_seg7.00018: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2647072 - mio0: 24 - format: RGBA16 -menu/main_menu_seg7.00818: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2647072 - mio0: 2072 - format: RGBA16 -menu/main_menu_seg7.01018: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 2647072 - mio0: 4120 - format: RGBA16 -menu/main_menu_seg7.02018: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 2647072 - mio0: 8216 - format: RGBA16 -menu/main_menu_seg7.03468: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2647072 - mio0: 13416 - format: RGBA16 -menu/main_menu_seg7.03C68: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2647072 - mio0: 15464 - format: RGBA16 -menu/main_menu_seg7.04468: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2647072 - mio0: 17512 - format: RGBA16 -menu/main_menu_seg7.04C68: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2647072 - mio0: 19560 - format: RGBA16 -menu/main_menu_seg7.05468: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2647072 - mio0: 21608 - format: RGBA16 -menu/main_menu_seg7.06328: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2647072 - mio0: 25384 - format: RGBA16 -menu/main_menu_seg7.06B28: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2647072 - mio0: 27432 - format: RGBA16 -menu/main_menu_seg7.073D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2647072 - mio0: 29648 - format: RGBA16 -menu/main_menu_seg7.075D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2647072 - mio0: 30160 - format: RGBA16 -menu/main_menu_seg7.077D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2647072 - mio0: 30672 - format: RGBA16 -menu/main_menu_seg7.079D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2647072 - mio0: 31184 - format: RGBA16 -menu/main_menu_seg7.07BD0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2647072 - mio0: 31696 - format: RGBA16 -menu/main_menu_seg7.07DD0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2647072 - mio0: 32208 - format: RGBA16 -menu/main_menu_seg7.07FD0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2647072 - mio0: 32720 - format: RGBA16 -menu/main_menu_seg7.081D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2647072 - mio0: 33232 - format: RGBA16 -menu/main_menu_seg7.083D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2647072 - mio0: 33744 - format: RGBA16 -menu/main_menu_seg7.085D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2647072 - mio0: 34256 - format: RGBA16 -menu/main_menu_seg7.087D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2647072 - mio0: 34768 - format: RGBA16 -menu/main_menu_seg7.089D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2647072 - mio0: 35280 - format: RGBA16 -menu/main_menu_seg7.08BD0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2647072 - mio0: 35792 - format: RGBA16 -menu/main_menu_seg7.08DD0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2647072 - mio0: 36304 - format: RGBA16 -menu/main_menu_seg7.08FD0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2647072 - mio0: 36816 - format: RGBA16 -menu/main_menu_seg7.091D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2647072 - mio0: 37328 - format: RGBA16 -menu/main_menu_seg7.093D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2647072 - mio0: 37840 - format: RGBA16 -menu/main_menu_seg7.095D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2647072 - mio0: 38352 - format: RGBA16 -menu/main_menu_seg7.097D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2647072 - mio0: 38864 - format: RGBA16 -menu/main_menu_seg7.099D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2647072 - mio0: 39376 - format: RGBA16 -menu/main_menu_seg7.09BD0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2647072 - mio0: 39888 - format: RGBA16 -menu/main_menu_seg7.09DD0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2647072 - mio0: 40400 - format: RGBA16 -menu/main_menu_seg7.09FD0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2647072 - mio0: 40912 - format: RGBA16 -menu/main_menu_seg7.0A1D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2647072 - mio0: 41424 - format: RGBA16 -menu/main_menu_seg7.0A3D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2647072 - mio0: 41936 - format: RGBA16 -menu/main_menu_seg7.0A5D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2647072 - mio0: 42448 - format: RGBA16 -menu/main_menu_seg7.0A7D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2647072 - mio0: 42960 - format: RGBA16 -menu/main_menu_seg7.0A9D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2647072 - mio0: 43472 - format: RGBA16 -menu/main_menu_seg7.0AF80: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 44928 - format: IA8 -menu/main_menu_seg7.0B640: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 46656 - format: IA8 -menu/main_menu_seg7.0B680: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 46720 - format: IA8 -menu/main_menu_seg7.0B840: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 47168 - format: IA8 -menu/main_menu_seg7.0B880: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 47232 - format: IA8 -menu/main_menu_seg7.0B8C0: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 47296 - format: IA8 -menu/main_menu_seg7.0BDA0: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 2647072 - mio0: 48544 - format: RGBA16 -menu/main_menu_seg7.0CDA0: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 2647072 - mio0: 52640 - format: RGBA16 -menu/main_menu_seg7.0DDA0: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 2647072 - mio0: 56736 - format: RGBA16 -menu/main_menu_seg7.0EDA0: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 2647072 - mio0: 60832 - format: RGBA16 -menu/main_menu_seg7.0AC40: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 44096 - format: IA8 -menu/main_menu_seg7.0AC80: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 44160 - format: IA8 -menu/main_menu_seg7.0ACC0: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 44224 - format: IA8 -menu/main_menu_seg7.0AD00: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 44288 - format: IA8 -menu/main_menu_seg7.0AD40: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 44352 - format: IA8 -menu/main_menu_seg7.0AD80: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 44416 - format: IA8 -menu/main_menu_seg7.0ADC0: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 44480 - format: IA8 -menu/main_menu_seg7.0AE00: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 44544 - format: IA8 -menu/main_menu_seg7.0AE40: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 44608 - format: IA8 -menu/main_menu_seg7.0AE80: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 44672 - format: IA8 -menu/main_menu_seg7.0AEC0: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 44736 - format: IA8 -menu/main_menu_seg7.0AF00: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 44800 - format: IA8 -menu/main_menu_seg7.0AF40: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 44864 - format: IA8 -menu/main_menu_seg7.0AFC0: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 44992 - format: IA8 -menu/main_menu_seg7.0B000: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 45056 - format: IA8 -menu/main_menu_seg7.0B040: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 45120 - format: IA8 -menu/main_menu_seg7.0B080: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 45184 - format: IA8 -menu/main_menu_seg7.0B0C0: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 45248 - format: IA8 -menu/main_menu_seg7.0B100: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 45312 - format: IA8 -menu/main_menu_seg7.0B140: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 45376 - format: IA8 -menu/main_menu_seg7.0B180: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 45440 - format: IA8 -menu/main_menu_seg7.0B1C0: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 45504 - format: IA8 -menu/main_menu_seg7.0B200: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 45568 - format: IA8 -menu/main_menu_seg7.0B240: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 45632 - format: IA8 -menu/main_menu_seg7.0B280: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 45696 - format: IA8 -menu/main_menu_seg7.0B2C0: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 45760 - format: IA8 -menu/main_menu_seg7.0B300: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 45824 - format: IA8 -menu/main_menu_seg7.0B340: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 45888 - format: IA8 -menu/main_menu_seg7.0B380: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 45952 - format: IA8 -menu/main_menu_seg7.0B3C0: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 46016 - format: IA8 -menu/main_menu_seg7.0B400: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 46080 - format: IA8 -menu/main_menu_seg7.0B440: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 46144 - format: IA8 -menu/main_menu_seg7.0B480: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 46208 - format: IA8 -menu/main_menu_seg7.0B4C0: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 46272 - format: IA8 -menu/main_menu_seg7.0B500: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 46336 - format: IA8 -menu/main_menu_seg7.0B540: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 46400 - format: IA8 -menu/main_menu_seg7.0B580: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 46464 - format: IA8 -menu/main_menu_seg7.0B5C0: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 46528 - format: IA8 -menu/main_menu_seg7.0B600: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 46592 - format: IA8 -menu/main_menu_seg7.0B6C0: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 46784 - format: IA8 -menu/main_menu_seg7.0B700: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 46848 - format: IA8 -menu/main_menu_seg7.0B740: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 46912 - format: IA8 -menu/main_menu_seg7.0B780: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 46976 - format: IA8 -menu/main_menu_seg7.0B7C0: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 47040 - format: IA8 -menu/main_menu_seg7.0B800: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2647072 - mio0: 47104 - format: IA8 -pss/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4792384 - mio0: 0 - format: RGBA16 -pss/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4792384 - mio0: 2048 - format: IA16 -pss/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4792384 - mio0: 4096 - format: RGBA16 -rr/1: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 4295344 - mio0: 2048 - format: RGBA16 -rr/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4295344 - mio0: 6144 - format: RGBA16 -rr/quarter_flying_carpet: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4295344 - mio0: 0 - format: RGBA16 -sl/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4092400 - mio0: 0 - format: RGBA16 -sl/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4092400 - mio0: 2048 - format: RGBA16 -sl/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4092400 - mio0: 4096 - format: RGBA16 -sl/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4092400 - mio0: 6144 - format: RGBA16 -sl/4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4092400 - mio0: 8192 - format: RGBA16 -ssl/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3967216 - mio0: 0 - format: RGBA16 -ssl/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3967216 - mio0: 2048 - format: IA16 -ssl/10: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3967216 - mio0: 55208 - format: RGBA16 -ssl/11: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3967216 - mio0: 59304 - format: RGBA16 -ssl/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3967216 - mio0: 4096 - format: RGBA16 -ssl/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3967216 - mio0: 6144 - format: RGBA16 -ssl/4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3967216 - mio0: 8192 - format: RGBA16 -ssl/5: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3967216 - mio0: 10240 - format: RGBA16 -ssl/6: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3967216 - mio0: 14336 - format: RGBA16 -ssl/7: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3203760 - mio0: 32768 - format: RGBA16 -ssl/8: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3967216 - mio0: 49064 - format: RGBA16 -ssl/9: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3967216 - mio0: 51112 - format: RGBA16 -thi/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4217104 - mio0: 0 - format: RGBA16 -thi/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4217104 - mio0: 2048 - format: RGBA16 -totwc/0: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4854592 - mio0: 0 - format: RGBA16 -totwc/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4854592 - mio0: 4096 - format: RGBA16 -totwc/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4854592 - mio0: 6144 - format: RGBA16 -totwc/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4854592 - mio0: 8192 - format: IA16 -ttc/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4252000 - mio0: 0 - format: RGBA16 -ttc/1: - type: TEXTURE - size: 2048 - width: 16 - height: 64 - offset: 4252000 - mio0: 2048 - format: RGBA16 -ttc/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4252000 - mio0: 90000 - format: RGBA16 -ttm/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4931616 - mio0: 0 - format: IA16 -ttm/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4931616 - mio0: 2048 - format: RGBA16 -ttm/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4931616 - mio0: 4096 - format: RGBA16 -ttm/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4931616 - mio0: 6144 - format: RGBA16 -ttm/4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4931616 - mio0: 8192 - format: RGBA16 -ttm/5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4931616 - mio0: 10240 - format: RGBA16 -ttm/6: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 4931616 - mio0: 12288 - format: RGBA16 -ttm/7: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 4931616 - mio0: 16384 - format: RGBA16 -ttm/8: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3353504 - mio0: 43008 - format: RGBA16 -vcutm/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4446272 - mio0: 0 - format: RGBA16 -vcutm/1: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 4446272 - mio0: 2048 - format: RGBA16 -vcutm/2: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4446272 - mio0: 6144 - format: RGBA16 -vcutm/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4446272 - mio0: 10240 - format: RGBA16 -wdw/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4128688 - mio0: 0 - format: RGBA16 -wdw/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4128688 - mio0: 2048 - format: RGBA16 -wdw/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4128688 - mio0: 4096 - format: RGBA16 -wdw/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4128688 - mio0: 6144 - format: RGBA16 -wdw/4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4128688 - mio0: 8192 - format: RGBA16 -wf/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4682448 - mio0: 0 - format: RGBA16 -wf/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4682448 - mio0: 2048 - format: RGBA16 -wf/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4682448 - mio0: 4096 - format: RGBA16 -wf/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4682448 - mio0: 6144 - format: RGBA16 -wf/4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4682448 - mio0: 8192 - format: RGBA16 -wf/5: - type: TEXTURE - size: 256 - width: 16 - height: 16 - offset: 909712 - mio0: 30840 - format: IA8 -wmotr/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4876848 - mio0: 0 - format: RGBA16 -wmotr/1: - type: TEXTURE - size: 1024 - width: 32 - height: 16 - offset: 4876848 - mio0: 2048 - format: RGBA16 -wmotr/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4876848 - mio0: 3072 - format: RGBA16 -wmotr/3: - type: TEXTURE - size: 512 - width: 32 - height: 8 - offset: 4876848 - mio0: 5120 - format: RGBA16 -wmotr/4: - type: TEXTURE - size: 512 - width: 8 - height: 32 - offset: 4876848 - mio0: 5632 - format: RGBA16 diff --git a/assets/sm64/eu/sound.yml b/assets/sm64/eu/sound.yml deleted file mode 100644 index fde0b5c..0000000 --- a/assets/sm64/eu/sound.yml +++ /dev/null @@ -1,1000 +0,0 @@ -header: - type: AUDIO:HEADER - ctl: - offset: 5626032 - size: 97856 - tbl: - offset: 5723888 - size: 2216704 -banks/00_bank: - type: BANK - id: 0 -banks/01_bank: - type: BANK - id: 1 -banks/02_bank: - type: BANK - id: 2 -banks/03_bank: - type: BANK - id: 3 -banks/04_bank: - type: BANK - id: 4 -banks/05_bank: - type: BANK - id: 5 -banks/06_bank: - type: BANK - id: 6 -banks/07_bank: - type: BANK - id: 7 -banks/08_bank: - type: BANK - id: 8 -banks/09_bank: - type: BANK - id: 9 -banks/0A_bank: - type: BANK - id: 10 -banks/0B_bank: - type: BANK - id: 11 -banks/0C_bank: - type: BANK - id: 12 -banks/0D_bank: - type: BANK - id: 13 -banks/0E_bank: - type: BANK - id: 14 -banks/0F_bank: - type: BANK - id: 15 -banks/10_bank: - type: BANK - id: 16 -banks/11_bank: - type: BANK - id: 17 -banks/12_bank: - type: BANK - id: 18 -banks/13_bank: - type: BANK - id: 19 -banks/14_bank: - type: BANK - id: 20 -banks/15_bank: - type: BANK - id: 21 -banks/16_bank: - type: BANK - id: 22 -banks/17_bank: - type: BANK - id: 23 -banks/18_bank: - type: BANK - id: 24 -banks/19_bank: - type: BANK - id: 25 -banks/1A_bank: - type: BANK - id: 26 -banks/1B_bank: - type: BANK - id: 27 -banks/1C_bank: - type: BANK - id: 28 -banks/1D_bank: - type: BANK - id: 29 -banks/1E_bank: - type: BANK - id: 30 -banks/1F_bank: - type: BANK - id: 31 -banks/20_bank: - type: BANK - id: 32 -banks/21_bank: - type: BANK - id: 33 -banks/22_bank: - type: BANK - id: 34 -banks/23_bank: - type: BANK - id: 35 -banks/24_bank: - type: BANK - id: 36 -banks/25_bank: - type: BANK - id: 37 -samples/bowser_organ/00_organ_1: - type: SAMPLE - id: 216 -samples/bowser_organ/01_organ_1_lq: - type: SAMPLE - id: 217 -samples/bowser_organ/02_boys_choir: - type: SAMPLE - id: 218 -samples/course_start/00_la: - type: SAMPLE - id: 215 -samples/instruments/00: - type: SAMPLE - id: 141 -samples/instruments/01_banjo_1: - type: SAMPLE - id: 142 -samples/instruments/02: - type: SAMPLE - id: 143 -samples/instruments/03_human_whistle: - type: SAMPLE - id: 144 -samples/instruments/04_bright_piano: - type: SAMPLE - id: 145 -samples/instruments/05_acoustic_bass: - type: SAMPLE - id: 146 -samples/instruments/06_kick_drum_1: - type: SAMPLE - id: 147 -samples/instruments/07_rimshot: - type: SAMPLE - id: 148 -samples/instruments/08: - type: SAMPLE - id: 149 -samples/instruments/09: - type: SAMPLE - id: 150 -samples/instruments/0A_tambourine: - type: SAMPLE - id: 151 -samples/instruments/0B: - type: SAMPLE - id: 152 -samples/instruments/0C_conga_stick: - type: SAMPLE - id: 153 -samples/instruments/0D_clave: - type: SAMPLE - id: 154 -samples/instruments/0E_hihat_closed: - type: SAMPLE - id: 155 -samples/instruments/0F_hihat_open: - type: SAMPLE - id: 156 -samples/instruments/10_cymbal_bell: - type: SAMPLE - id: 157 -samples/instruments/11_splash_cymbal: - type: SAMPLE - id: 158 -samples/instruments/12_snare_drum_1: - type: SAMPLE - id: 159 -samples/instruments/13_snare_drum_2: - type: SAMPLE - id: 160 -samples/instruments/14_strings_5: - type: SAMPLE - id: 161 -samples/instruments/15_strings_4: - type: SAMPLE - id: 162 -samples/instruments/16_french_horns: - type: SAMPLE - id: 163 -samples/instruments/17_trumpet: - type: SAMPLE - id: 164 -samples/instruments/18_timpani: - type: SAMPLE - id: 165 -samples/instruments/19_brass: - type: SAMPLE - id: 166 -samples/instruments/1A_slap_bass: - type: SAMPLE - id: 167 -samples/instruments/1B_organ_2: - type: SAMPLE - id: 168 -samples/instruments/1C: - type: SAMPLE - id: 169 -samples/instruments/1D: - type: SAMPLE - id: 170 -samples/instruments/1E_closed_triangle: - type: SAMPLE - id: 171 -samples/instruments/1F_open_triangle: - type: SAMPLE - id: 172 -samples/instruments/20_cabasa: - type: SAMPLE - id: 173 -samples/instruments/21_sine_bass: - type: SAMPLE - id: 174 -samples/instruments/22_boys_choir: - type: SAMPLE - id: 175 -samples/instruments/23_strings_1: - type: SAMPLE - id: 176 -samples/instruments/24_strings_2: - type: SAMPLE - id: 177 -samples/instruments/25_strings_3: - type: SAMPLE - id: 178 -samples/instruments/26_crystal_rhodes: - type: SAMPLE - id: 179 -samples/instruments/27_harpsichord: - type: SAMPLE - id: 180 -samples/instruments/28_sitar_1: - type: SAMPLE - id: 181 -samples/instruments/29_orchestra_hit: - type: SAMPLE - id: 182 -samples/instruments/2A: - type: SAMPLE - id: 183 -samples/instruments/2B: - type: SAMPLE - id: 184 -samples/instruments/2C: - type: SAMPLE - id: 185 -samples/instruments/2D_trombone: - type: SAMPLE - id: 186 -samples/instruments/2E_accordion: - type: SAMPLE - id: 187 -samples/instruments/2F_sleigh_bells: - type: SAMPLE - id: 188 -samples/instruments/30_rarefaction-lahna: - type: SAMPLE - id: 189 -samples/instruments/31_rarefaction-convolution: - type: SAMPLE - id: 190 -samples/instruments/32_metal_rimshot: - type: SAMPLE - id: 191 -samples/instruments/33_kick_drum_2: - type: SAMPLE - id: 192 -samples/instruments/34_alto_flute: - type: SAMPLE - id: 193 -samples/instruments/35_gospel_organ: - type: SAMPLE - id: 194 -samples/instruments/36_sawtooth_synth: - type: SAMPLE - id: 195 -samples/instruments/37_square_synth: - type: SAMPLE - id: 196 -samples/instruments/38_electric_kick_drum: - type: SAMPLE - id: 197 -samples/instruments/39_sitar_2: - type: SAMPLE - id: 198 -samples/instruments/3A_music_box: - type: SAMPLE - id: 199 -samples/instruments/3B_banjo_2: - type: SAMPLE - id: 200 -samples/instruments/3C_acoustic_guitar: - type: SAMPLE - id: 201 -samples/instruments/3D: - type: SAMPLE - id: 202 -samples/instruments/3E_monk_choir: - type: SAMPLE - id: 203 -samples/instruments/3F: - type: SAMPLE - id: 204 -samples/instruments/40_bell: - type: SAMPLE - id: 205 -samples/instruments/41_pan_flute: - type: SAMPLE - id: 206 -samples/instruments/42_vibraphone: - type: SAMPLE - id: 207 -samples/instruments/43_harmonica: - type: SAMPLE - id: 208 -samples/instruments/44_grand_piano: - type: SAMPLE - id: 209 -samples/instruments/45_french_horns_lq: - type: SAMPLE - id: 210 -samples/instruments/46_pizzicato_strings_1: - type: SAMPLE - id: 211 -samples/instruments/47_pizzicato_strings_2: - type: SAMPLE - id: 212 -samples/instruments/48_steel_drum: - type: SAMPLE - id: 213 -samples/piranha_music_box/00_music_box: - type: SAMPLE - id: 214 -samples/sfx_1/00_twirl: - type: SAMPLE - id: 0 -samples/sfx_1/01_brushing: - type: SAMPLE - id: 1 -samples/sfx_1/02_hand_touch: - type: SAMPLE - id: 2 -samples/sfx_1/03_yoshi: - type: SAMPLE - id: 3 -samples/sfx_1/04_plop: - type: SAMPLE - id: 4 -samples/sfx_1/05_heavy_landing: - type: SAMPLE - id: 5 -samples/sfx_4/00: - type: SAMPLE - id: 17 -samples/sfx_4/01: - type: SAMPLE - id: 18 -samples/sfx_4/02: - type: SAMPLE - id: 19 -samples/sfx_4/03: - type: SAMPLE - id: 20 -samples/sfx_4/04: - type: SAMPLE - id: 21 -samples/sfx_4/05: - type: SAMPLE - id: 22 -samples/sfx_4/06: - type: SAMPLE - id: 23 -samples/sfx_4/07: - type: SAMPLE - id: 24 -samples/sfx_4/08: - type: SAMPLE - id: 25 -samples/sfx_4/09: - type: SAMPLE - id: 26 -samples/sfx_5/00: - type: SAMPLE - id: 27 -samples/sfx_5/01: - type: SAMPLE - id: 28 -samples/sfx_5/02: - type: SAMPLE - id: 29 -samples/sfx_5/03: - type: SAMPLE - id: 30 -samples/sfx_5/04: - type: SAMPLE - id: 31 -samples/sfx_5/05: - type: SAMPLE - id: 32 -samples/sfx_5/06: - type: SAMPLE - id: 33 -samples/sfx_5/07: - type: SAMPLE - id: 34 -samples/sfx_5/08: - type: SAMPLE - id: 35 -samples/sfx_5/09: - type: SAMPLE - id: 36 -samples/sfx_5/0A: - type: SAMPLE - id: 37 -samples/sfx_5/0B: - type: SAMPLE - id: 38 -samples/sfx_5/0C: - type: SAMPLE - id: 39 -samples/sfx_5/0D: - type: SAMPLE - id: 40 -samples/sfx_5/0E: - type: SAMPLE - id: 41 -samples/sfx_5/0F: - type: SAMPLE - id: 42 -samples/sfx_5/10: - type: SAMPLE - id: 43 -samples/sfx_5/11: - type: SAMPLE - id: 44 -samples/sfx_5/12: - type: SAMPLE - id: 45 -samples/sfx_5/13: - type: SAMPLE - id: 46 -samples/sfx_5/14: - type: SAMPLE - id: 47 -samples/sfx_5/15: - type: SAMPLE - id: 48 -samples/sfx_5/16: - type: SAMPLE - id: 49 -samples/sfx_5/17: - type: SAMPLE - id: 50 -samples/sfx_5/18: - type: SAMPLE - id: 51 -samples/sfx_5/19: - type: SAMPLE - id: 52 -samples/sfx_5/1A: - type: SAMPLE - id: 53 -samples/sfx_5/1B: - type: SAMPLE - id: 54 -samples/sfx_5/1C: - type: SAMPLE - id: 55 -samples/sfx_6/00: - type: SAMPLE - id: 56 -samples/sfx_6/01: - type: SAMPLE - id: 57 -samples/sfx_6/02: - type: SAMPLE - id: 58 -samples/sfx_6/03: - type: SAMPLE - id: 59 -samples/sfx_6/04: - type: SAMPLE - id: 60 -samples/sfx_6/05: - type: SAMPLE - id: 61 -samples/sfx_6/06: - type: SAMPLE - id: 62 -samples/sfx_6/07: - type: SAMPLE - id: 63 -samples/sfx_6/08: - type: SAMPLE - id: 64 -samples/sfx_6/09: - type: SAMPLE - id: 65 -samples/sfx_6/0A: - type: SAMPLE - id: 66 -samples/sfx_6/0B: - type: SAMPLE - id: 67 -samples/sfx_6/0C: - type: SAMPLE - id: 68 -samples/sfx_6/0D: - type: SAMPLE - id: 69 -samples/sfx_7/00: - type: SAMPLE - id: 70 -samples/sfx_7/01: - type: SAMPLE - id: 71 -samples/sfx_7/02: - type: SAMPLE - id: 72 -samples/sfx_7/03: - type: SAMPLE - id: 73 -samples/sfx_7/04: - type: SAMPLE - id: 74 -samples/sfx_7/05: - type: SAMPLE - id: 75 -samples/sfx_7/06: - type: SAMPLE - id: 76 -samples/sfx_7/07: - type: SAMPLE - id: 77 -samples/sfx_7/08: - type: SAMPLE - id: 78 -samples/sfx_7/09: - type: SAMPLE - id: 79 -samples/sfx_7/0A: - type: SAMPLE - id: 80 -samples/sfx_7/0B: - type: SAMPLE - id: 81 -samples/sfx_7/0C: - type: SAMPLE - id: 82 -samples/sfx_7/0D_chain_chomp_bark: - type: SAMPLE - id: 83 -samples/sfx_9/00: - type: SAMPLE - id: 111 -samples/sfx_9/01: - type: SAMPLE - id: 112 -samples/sfx_9/02: - type: SAMPLE - id: 113 -samples/sfx_9/03: - type: SAMPLE - id: 114 -samples/sfx_9/04_camera_buzz: - type: SAMPLE - id: 115 -samples/sfx_9/05_camera_shutter: - type: SAMPLE - id: 116 -samples/sfx_9/06: - type: SAMPLE - id: 117 -samples/sfx_mario/00_mario_jump_hoo: - type: SAMPLE - id: 84 -samples/sfx_mario/01_mario_jump_wah: - type: SAMPLE - id: 85 -samples/sfx_mario/02_mario_yah: - type: SAMPLE - id: 86 -samples/sfx_mario/03_mario_haha: - type: SAMPLE - id: 87 -samples/sfx_mario/04_mario_yahoo: - type: SAMPLE - id: 88 -samples/sfx_mario/05_mario_uh: - type: SAMPLE - id: 89 -samples/sfx_mario/06_mario_hrmm: - type: SAMPLE - id: 90 -samples/sfx_mario/07_mario_wah2: - type: SAMPLE - id: 91 -samples/sfx_mario/08_mario_whoa: - type: SAMPLE - id: 92 -samples/sfx_mario/09_mario_eeuh: - type: SAMPLE - id: 93 -samples/sfx_mario/0A_mario_attacked: - type: SAMPLE - id: 94 -samples/sfx_mario/0B_mario_ooof: - type: SAMPLE - id: 95 -samples/sfx_mario/0C_mario_here_we_go: - type: SAMPLE - id: 96 -samples/sfx_mario/0D_mario_yawning: - type: SAMPLE - id: 97 -samples/sfx_mario/0E_mario_snoring1: - type: SAMPLE - id: 98 -samples/sfx_mario/0F_mario_snoring2: - type: SAMPLE - id: 99 -samples/sfx_mario/10_mario_doh: - type: SAMPLE - id: 100 -samples/sfx_mario/11_mario_game_over: - type: SAMPLE - id: 101 -samples/sfx_mario/12_mario_hello: - type: SAMPLE - id: 102 -samples/sfx_mario/13_mario_press_start_to_play: - type: SAMPLE - id: 103 -samples/sfx_mario/14_mario_twirl_bounce: - type: SAMPLE - id: 104 -samples/sfx_mario/15_mario_snoring3: - type: SAMPLE - id: 105 -samples/sfx_mario/16_mario_so_longa_bowser: - type: SAMPLE - id: 106 -samples/sfx_mario/17_mario_ima_tired: - type: SAMPLE - id: 107 -samples/sfx_mario/18_mario_waha: - type: SAMPLE - id: 108 -samples/sfx_mario/19_mario_yippee: - type: SAMPLE - id: 109 -samples/sfx_mario/1A_mario_lets_a_go: - type: SAMPLE - id: 110 -samples/sfx_mario_peach/00_mario_waaaooow: - type: SAMPLE - id: 118 -samples/sfx_mario_peach/01_mario_hoohoo: - type: SAMPLE - id: 119 -samples/sfx_mario_peach/02_mario_panting: - type: SAMPLE - id: 120 -samples/sfx_mario_peach/03_mario_dying: - type: SAMPLE - id: 121 -samples/sfx_mario_peach/04_mario_on_fire: - type: SAMPLE - id: 122 -samples/sfx_mario_peach/05_mario_uh2: - type: SAMPLE - id: 123 -samples/sfx_mario_peach/06_mario_coughing: - type: SAMPLE - id: 124 -samples/sfx_mario_peach/07_mario_its_a_me_mario: - type: SAMPLE - id: 125 -samples/sfx_mario_peach/08_mario_punch_yah: - type: SAMPLE - id: 126 -samples/sfx_mario_peach/09_mario_punch_hoo: - type: SAMPLE - id: 127 -samples/sfx_mario_peach/0A_mario_mama_mia: - type: SAMPLE - id: 128 -samples/sfx_mario_peach/0B_mario_okey_dokey: - type: SAMPLE - id: 129 -samples/sfx_mario_peach/0C_mario_drowning: - type: SAMPLE - id: 130 -samples/sfx_mario_peach/0D_mario_thank_you_playing_my_game: - type: SAMPLE - id: 131 -samples/sfx_mario_peach/0E_peach_dear_mario: - type: SAMPLE - id: 132 -samples/sfx_mario_peach/0F_peach_mario: - type: SAMPLE - id: 133 -samples/sfx_mario_peach/10_peach_power_of_the_stars: - type: SAMPLE - id: 134 -samples/sfx_mario_peach/11_peach_thanks_to_you: - type: SAMPLE - id: 135 -samples/sfx_mario_peach/12_peach_thank_you_mario: - type: SAMPLE - id: 136 -samples/sfx_mario_peach/13_peach_something_special: - type: SAMPLE - id: 137 -samples/sfx_mario_peach/14_peach_bake_a_cake: - type: SAMPLE - id: 138 -samples/sfx_mario_peach/15_peach_for_mario: - type: SAMPLE - id: 139 -samples/sfx_mario_peach/16_peach_mario2: - type: SAMPLE - id: 140 -samples/sfx_terrain/00_step_default: - type: SAMPLE - id: 6 -samples/sfx_terrain/01_step_grass: - type: SAMPLE - id: 7 -samples/sfx_terrain/02_step_stone: - type: SAMPLE - id: 8 -samples/sfx_terrain/03_step_spooky: - type: SAMPLE - id: 9 -samples/sfx_terrain/04_step_snow: - type: SAMPLE - id: 10 -samples/sfx_terrain/05_step_ice: - type: SAMPLE - id: 11 -samples/sfx_terrain/06_step_metal: - type: SAMPLE - id: 12 -samples/sfx_terrain/07_step_sand: - type: SAMPLE - id: 13 -samples/sfx_water/00_plunge: - type: SAMPLE - id: 14 -samples/sfx_water/01_splash: - type: SAMPLE - id: 15 -samples/sfx_water/02_swim: - type: SAMPLE - id: 16 -sequences/00_sound_player: - type: SEQUENCE - offset: 7940880 - size: 13500 - banks: - - 0 - - 1 - - 2 - - 3 - - 4 - - 5 - - 6 - - 7 - - 8 - - 9 - - 10 -sequences/01_cutscene_collect_star: - type: SEQUENCE - offset: 7954384 - size: 626 - banks: - - 34 -sequences/02_menu_title_screen: - type: SEQUENCE - offset: 7955024 - size: 8282 - banks: - - 17 -sequences/03_level_grass: - type: SEQUENCE - offset: 7963312 - size: 5131 - banks: - - 34 -sequences/04_level_inside_castle: - type: SEQUENCE - offset: 7968448 - size: 2505 - banks: - - 14 -sequences/05_level_water: - type: SEQUENCE - offset: 7970960 - size: 4788 - banks: - - 19 -sequences/06_level_hot: - type: SEQUENCE - offset: 7975760 - size: 2455 - banks: - - 15 -sequences/07_level_boss_koopa: - type: SEQUENCE - offset: 7978224 - size: 3424 - banks: - - 18 -sequences/08_level_snow: - type: SEQUENCE - offset: 7981648 - size: 8150 - banks: - - 11 -sequences/09_level_slide: - type: SEQUENCE - offset: 7989808 - size: 7445 - banks: - - 13 -sequences/0A_level_spooky: - type: SEQUENCE - offset: 7997264 - size: 5681 - banks: - - 33 - - 16 -sequences/0B_event_piranha_plant: - type: SEQUENCE - offset: 8002960 - size: 1400 - banks: - - 20 -sequences/0C_level_underground: - type: SEQUENCE - offset: 8004368 - size: 4899 - banks: - - 21 -sequences/0D_menu_star_select: - type: SEQUENCE - offset: 8009280 - size: 138 - banks: - - 22 -sequences/0E_event_powerup: - type: SEQUENCE - offset: 8009424 - size: 3137 - banks: - - 23 -sequences/0F_event_metal_cap: - type: SEQUENCE - offset: 8012576 - size: 2779 - banks: - - 24 -sequences/10_event_koopa_message: - type: SEQUENCE - offset: 8015360 - size: 558 - banks: - - 18 -sequences/11_level_koopa_road: - type: SEQUENCE - offset: 8015920 - size: 4753 - banks: - - 25 -sequences/12_event_high_score: - type: SEQUENCE - offset: 8020688 - size: 275 - banks: - - 31 -sequences/13_event_merry_go_round: - type: SEQUENCE - offset: 8020976 - size: 1660 - banks: - - 33 -sequences/14_event_race: - type: SEQUENCE - offset: 8022640 - size: 200 - banks: - - 26 -sequences/15_cutscene_star_spawn: - type: SEQUENCE - offset: 8022848 - size: 649 - banks: - - 14 -sequences/16_event_boss: - type: SEQUENCE - offset: 8023504 - size: 3444 - banks: - - 27 -sequences/17_cutscene_collect_key: - type: SEQUENCE - offset: 8026960 - size: 677 - banks: - - 26 -sequences/18_event_endless_stairs: - type: SEQUENCE - offset: 8027648 - size: 1783 - banks: - - 28 -sequences/19_level_boss_koopa_final: - type: SEQUENCE - offset: 8029440 - size: 3521 - banks: - - 29 -sequences/1A_cutscene_credits: - type: SEQUENCE - offset: 8032976 - size: 14328 - banks: - - 37 -sequences/1B_event_solve_puzzle: - type: SEQUENCE - offset: 8047312 - size: 219 - banks: - - 20 -sequences/1C_event_toad_message: - type: SEQUENCE - offset: 8047536 - size: 211 - banks: - - 32 -sequences/1D_event_peach_message: - type: SEQUENCE - offset: 8047760 - size: 436 - banks: - - 30 -sequences/1E_cutscene_intro: - type: SEQUENCE - offset: 8048208 - size: 1770 - banks: - - 27 -sequences/1F_cutscene_victory: - type: SEQUENCE - offset: 8049984 - size: 2066 - banks: - - 26 -sequences/20_cutscene_ending: - type: SEQUENCE - offset: 8052064 - size: 1887 - banks: - - 35 -sequences/21_menu_file_select: - type: SEQUENCE - offset: 8053952 - size: 786 - banks: - - 36 -sequences/22_cutscene_lakitu: - type: SEQUENCE - offset: 8054752 - size: 317 - banks: - - 27 diff --git a/assets/sm64/eu/textures.yml b/assets/sm64/eu/textures.yml deleted file mode 100644 index 4c01e6d..0000000 --- a/assets/sm64/eu/textures.yml +++ /dev/null @@ -1,4102 +0,0 @@ -cave/hmc_textures.00000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3312784 - mio0: 0 - format: RGBA16 -cave/hmc_textures.01000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3312784 - mio0: 4096 - format: RGBA16 -cave/hmc_textures.01800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3312784 - mio0: 6144 - format: RGBA16 -cave/hmc_textures.02800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3312784 - mio0: 10240 - format: RGBA16 -cave/hmc_textures.03000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3312784 - mio0: 12288 - format: RGBA16 -cave/hmc_textures.03800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3312784 - mio0: 14336 - format: RGBA16 -cave/hmc_textures.04800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3312784 - mio0: 18432 - format: RGBA16 -cave/hmc_textures.05800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3312784 - mio0: 22528 - format: RGBA16 -cave/hmc_textures.06800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3312784 - mio0: 26624 - format: RGBA16 -cave/hmc_textures.07000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3312784 - mio0: 28672 - format: RGBA16 -cave/hmc_textures.07800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3312784 - mio0: 30720 - format: RGBA16 -cave/hmc_textures.08800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3312784 - mio0: 34816 - format: RGBA16 -cave/hmc_textures.09800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3312784 - mio0: 38912 - format: RGBA16 -cave/hmc_textures.0A000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3312784 - mio0: 40960 - format: RGBA16 -cave/hmc_textures.0A800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3312784 - mio0: 43008 - format: RGBA16 -cave/hmc_textures.0B800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3312784 - mio0: 47104 - format: IA16 -cave/hmc_textures.0C000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3178624 - mio0: 43008 - format: IA16 -crash_screen/crash_screen_font: - type: TEXTURE - size: 252 - width: 32 - height: 63 - offset: 757168 - format: IA1 -effect/bubble.06048: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3475312 - mio0: 24648 - format: RGBA16 -effect/flower.00008: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3475312 - mio0: 8 - format: RGBA16 -effect/flower.00808: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3475312 - mio0: 2056 - format: RGBA16 -effect/flower.01008: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3475312 - mio0: 4104 - format: RGBA16 -effect/flower.01808: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3475312 - mio0: 6152 - format: RGBA16 -effect/lava_bubble.02020: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3475312 - mio0: 8224 - format: RGBA16 -effect/lava_bubble.02820: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3475312 - mio0: 10272 - format: RGBA16 -effect/lava_bubble.03020: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3475312 - mio0: 12320 - format: RGBA16 -effect/lava_bubble.03820: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3475312 - mio0: 14368 - format: RGBA16 -effect/lava_bubble.04020: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3475312 - mio0: 16416 - format: RGBA16 -effect/lava_bubble.04820: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3475312 - mio0: 18464 - format: RGBA16 -effect/lava_bubble.05020: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3475312 - mio0: 20512 - format: RGBA16 -effect/lava_bubble.05820: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3475312 - mio0: 22560 - format: RGBA16 -effect/tiny_bubble.0684C: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 3475312 - mio0: 26700 - format: RGBA16 -effect/tiny_bubble.06AD8: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 3475312 - mio0: 27352 - format: RGBA16 -fire/lll_textures.00000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3142672 - mio0: 0 - format: RGBA16 -fire/lll_textures.00800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3142672 - mio0: 2048 - format: RGBA16 -fire/lll_textures.01000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3142672 - mio0: 4096 - format: RGBA16 -fire/lll_textures.01800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3142672 - mio0: 6144 - format: RGBA16 -fire/lll_textures.02000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3142672 - mio0: 8192 - format: RGBA16 -fire/lll_textures.02800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3142672 - mio0: 10240 - format: RGBA16 -fire/lll_textures.03000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3142672 - mio0: 12288 - format: RGBA16 -fire/lll_textures.03800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3142672 - mio0: 14336 - format: RGBA16 -fire/lll_textures.04000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3142672 - mio0: 16384 - format: RGBA16 -fire/lll_textures.04800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3142672 - mio0: 18432 - format: RGBA16 -fire/lll_textures.05000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3142672 - mio0: 20480 - format: RGBA16 -fire/lll_textures.05800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3142672 - mio0: 22528 - format: RGBA16 -fire/lll_textures.06000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3142672 - mio0: 24576 - format: RGBA16 -fire/lll_textures.06800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3142672 - mio0: 26624 - format: RGBA16 -fire/lll_textures.07000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3142672 - mio0: 28672 - format: RGBA16 -fire/lll_textures.07800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3142672 - mio0: 30720 - format: RGBA16 -fire/lll_textures.08000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3142672 - mio0: 32768 - format: RGBA16 -fire/lll_textures.08800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3142672 - mio0: 34816 - format: RGBA16 -fire/lll_textures.09000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 909712 - mio0: 49528 - format: RGBA16 -fire/lll_textures.09800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3142672 - mio0: 38912 - format: RGBA16 -fire/lll_textures.0A000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3142672 - mio0: 40960 - format: RGBA16 -fire/lll_textures.0A800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3142672 - mio0: 43008 - format: RGBA16 -fire/lll_textures.0B000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3142672 - mio0: 45056 - format: RGBA16 -fire/lll_textures.0B800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3142672 - mio0: 47104 - format: RGBA16 -generic/bob_textures.00000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3203760 - mio0: 0 - format: RGBA16 -generic/bob_textures.00800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1206896 - mio0: 36160 - format: RGBA16 -generic/bob_textures.01000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3203760 - mio0: 4096 - format: RGBA16 -generic/bob_textures.01800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3203760 - mio0: 6144 - format: RGBA16 -generic/bob_textures.02000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3203760 - mio0: 8192 - format: RGBA16 -generic/bob_textures.02800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3203760 - mio0: 10240 - format: RGBA16 -generic/bob_textures.03000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3203760 - mio0: 12288 - format: RGBA16 -generic/bob_textures.03800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3203760 - mio0: 14336 - format: RGBA16 -generic/bob_textures.04000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3203760 - mio0: 16384 - format: RGBA16 -generic/bob_textures.04800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3203760 - mio0: 18432 - format: RGBA16 -generic/bob_textures.05000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3203760 - mio0: 20480 - format: RGBA16 -generic/bob_textures.05800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3203760 - mio0: 22528 - format: RGBA16 -generic/bob_textures.06000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3203760 - mio0: 24576 - format: RGBA16 -generic/bob_textures.07000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3203760 - mio0: 28672 - format: RGBA16 -generic/bob_textures.07800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3203760 - mio0: 30720 - format: RGBA16 -generic/bob_textures.08000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3203760 - mio0: 32768 - format: RGBA16 -generic/bob_textures.08800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3203760 - mio0: 34816 - format: RGBA16 -generic/bob_textures.09000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3203760 - mio0: 36864 - format: RGBA16 -generic/bob_textures.09800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3203760 - mio0: 38912 - format: RGBA16 -generic/bob_textures.0A000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3203760 - mio0: 40960 - format: RGBA16 -generic/bob_textures.0A800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3203760 - mio0: 43008 - format: RGBA16 -generic/bob_textures.0B000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3203760 - mio0: 45056 - format: IA16 -grass/wf_textures.00000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3376528 - mio0: 0 - format: RGBA16 -grass/wf_textures.00800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3376528 - mio0: 2048 - format: RGBA16 -grass/wf_textures.01000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3376528 - mio0: 4096 - format: RGBA16 -grass/wf_textures.01800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3376528 - mio0: 6144 - format: RGBA16 -grass/wf_textures.02000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3376528 - mio0: 8192 - format: RGBA16 -grass/wf_textures.02800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3376528 - mio0: 10240 - format: RGBA16 -grass/wf_textures.03000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3376528 - mio0: 12288 - format: RGBA16 -grass/wf_textures.03800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3376528 - mio0: 14336 - format: RGBA16 -grass/wf_textures.04000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3376528 - mio0: 16384 - format: RGBA16 -grass/wf_textures.04800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3376528 - mio0: 18432 - format: RGBA16 -grass/wf_textures.05000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3376528 - mio0: 20480 - format: RGBA16 -grass/wf_textures.05800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3376528 - mio0: 22528 - format: RGBA16 -grass/wf_textures.06000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3270992 - mio0: 20480 - format: RGBA16 -grass/wf_textures.06800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3376528 - mio0: 26624 - format: RGBA16 -grass/wf_textures.07000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3376528 - mio0: 28672 - format: RGBA16 -grass/wf_textures.07800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3376528 - mio0: 30720 - format: RGBA16 -grass/wf_textures.08000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3376528 - mio0: 32768 - format: RGBA16 -grass/wf_textures.08800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3376528 - mio0: 34816 - format: RGBA16 -grass/wf_textures.09000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3376528 - mio0: 36864 - format: RGBA16 -grass/wf_textures.09800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3376528 - mio0: 38912 - format: RGBA16 -grass/wf_textures.0A000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3376528 - mio0: 40960 - format: RGBA16 -grass/wf_textures.0A800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3376528 - mio0: 43008 - format: RGBA16 -grass/wf_textures.0B000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3203760 - mio0: 45056 - format: IA16 -grass/wf_textures.0B800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3376528 - mio0: 47104 - format: IA16 -inside/inside_castle_textures.00000: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3435456 - mio0: 0 - format: RGBA16 -inside/inside_castle_textures.01000: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3435456 - mio0: 4096 - format: RGBA16 -inside/inside_castle_textures.02000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3435456 - mio0: 8192 - format: RGBA16 -inside/inside_castle_textures.03000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3435456 - mio0: 12288 - format: RGBA16 -inside/inside_castle_textures.03800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3435456 - mio0: 14336 - format: RGBA16 -inside/inside_castle_textures.04000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3435456 - mio0: 16384 - format: RGBA16 -inside/inside_castle_textures.04800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3340704 - mio0: 2048 - format: RGBA16 -inside/inside_castle_textures.05000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3435456 - mio0: 20480 - format: RGBA16 -inside/inside_castle_textures.05800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3435456 - mio0: 22528 - format: RGBA16 -inside/inside_castle_textures.06000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3435456 - mio0: 24576 - format: RGBA16 -inside/inside_castle_textures.07000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3435456 - mio0: 28672 - format: RGBA16 -inside/inside_castle_textures.08000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3435456 - mio0: 32768 - format: RGBA16 -inside/inside_castle_textures.08800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3435456 - mio0: 34816 - format: RGBA16 -inside/inside_castle_textures.09000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3435456 - mio0: 36864 - format: RGBA16 -inside/inside_castle_textures.0A000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3435456 - mio0: 40960 - format: RGBA16 -inside/inside_castle_textures.0B000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3435456 - mio0: 45056 - format: RGBA16 -inside/inside_castle_textures.0B800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3435456 - mio0: 47104 - format: RGBA16 -intro_raw/hand_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2331912 - format: RGBA16 -intro_raw/hand_open: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2329856 - format: RGBA16 -intro_raw/mario_face_shine: - type: TEXTURE - size: 1024 - width: 32 - height: 32 - offset: 2380496 - format: IA8 -intro_raw/red_star_0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2333960 - format: RGBA16 -intro_raw/red_star_1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2336008 - format: RGBA16 -intro_raw/red_star_2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2338056 - format: RGBA16 -intro_raw/red_star_3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2340104 - format: RGBA16 -intro_raw/red_star_4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2342152 - format: RGBA16 -intro_raw/red_star_5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2344200 - format: RGBA16 -intro_raw/red_star_6: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2346248 - format: RGBA16 -intro_raw/red_star_7: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2348296 - format: RGBA16 -intro_raw/sparkle_0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2367496 - format: RGBA16 -intro_raw/sparkle_1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2369544 - format: RGBA16 -intro_raw/sparkle_2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2371592 - format: RGBA16 -intro_raw/sparkle_3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2373640 - format: RGBA16 -intro_raw/sparkle_4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2375688 - format: RGBA16 -intro_raw/sparkle_5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2377736 - format: RGBA16 -intro_raw/white_star_0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2350344 - format: RGBA16 -intro_raw/white_star_1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2352392 - format: RGBA16 -intro_raw/white_star_2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2354440 - format: RGBA16 -intro_raw/white_star_3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2356488 - format: RGBA16 -intro_raw/white_star_4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2358536 - format: RGBA16 -intro_raw/white_star_5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2360584 - format: RGBA16 -intro_raw/white_star_6: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2362632 - format: RGBA16 -intro_raw/white_star_7: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2364680 - format: RGBA16 -ipl3_raw/ipl3_font_00: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 2928 - format: IA1 -ipl3_raw/ipl3_font_01: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 2951 - format: IA1 -ipl3_raw/ipl3_font_02: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 2974 - format: IA1 -ipl3_raw/ipl3_font_03: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 2997 - format: IA1 -ipl3_raw/ipl3_font_04: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3020 - format: IA1 -ipl3_raw/ipl3_font_05: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3043 - format: IA1 -ipl3_raw/ipl3_font_06: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3066 - format: IA1 -ipl3_raw/ipl3_font_07: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3089 - format: IA1 -ipl3_raw/ipl3_font_08: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3112 - format: IA1 -ipl3_raw/ipl3_font_09: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3135 - format: IA1 -ipl3_raw/ipl3_font_10: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3158 - format: IA1 -ipl3_raw/ipl3_font_11: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3181 - format: IA1 -ipl3_raw/ipl3_font_12: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3204 - format: IA1 -ipl3_raw/ipl3_font_13: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3227 - format: IA1 -ipl3_raw/ipl3_font_14: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3250 - format: IA1 -ipl3_raw/ipl3_font_15: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3273 - format: IA1 -ipl3_raw/ipl3_font_16: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3296 - format: IA1 -ipl3_raw/ipl3_font_17: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3319 - format: IA1 -ipl3_raw/ipl3_font_18: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3342 - format: IA1 -ipl3_raw/ipl3_font_19: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3365 - format: IA1 -ipl3_raw/ipl3_font_20: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3388 - format: IA1 -ipl3_raw/ipl3_font_21: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3411 - format: IA1 -ipl3_raw/ipl3_font_22: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3434 - format: IA1 -ipl3_raw/ipl3_font_23: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3457 - format: IA1 -ipl3_raw/ipl3_font_24: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3480 - format: IA1 -ipl3_raw/ipl3_font_25: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3503 - format: IA1 -ipl3_raw/ipl3_font_26: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3526 - format: IA1 -ipl3_raw/ipl3_font_27: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3549 - format: IA1 -ipl3_raw/ipl3_font_28: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3572 - format: IA1 -ipl3_raw/ipl3_font_29: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3595 - format: IA1 -ipl3_raw/ipl3_font_30: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3618 - format: IA1 -ipl3_raw/ipl3_font_31: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3641 - format: IA1 -ipl3_raw/ipl3_font_32: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3664 - format: IA1 -ipl3_raw/ipl3_font_33: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3687 - format: IA1 -ipl3_raw/ipl3_font_34: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3710 - format: IA1 -ipl3_raw/ipl3_font_35: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3733 - format: IA1 -ipl3_raw/ipl3_font_36: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3756 - format: IA1 -ipl3_raw/ipl3_font_37: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3779 - format: IA1 -ipl3_raw/ipl3_font_38: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3802 - format: IA1 -ipl3_raw/ipl3_font_39: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3825 - format: IA1 -ipl3_raw/ipl3_font_40: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3848 - format: IA1 -ipl3_raw/ipl3_font_41: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3871 - format: IA1 -ipl3_raw/ipl3_font_42: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3894 - format: IA1 -ipl3_raw/ipl3_font_43: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3917 - format: IA1 -ipl3_raw/ipl3_font_44: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3940 - format: IA1 -ipl3_raw/ipl3_font_45: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3963 - format: IA1 -ipl3_raw/ipl3_font_46: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3986 - format: IA1 -ipl3_raw/ipl3_font_47: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 4009 - format: IA1 -ipl3_raw/ipl3_font_48: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 4032 - format: IA1 -ipl3_raw/ipl3_font_49: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 4055 - format: IA1 -machine/ttc_textures.00000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3340704 - mio0: 0 - format: RGBA16 -machine/ttc_textures.00800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3340704 - mio0: 2048 - format: RGBA16 -machine/ttc_textures.01000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3340704 - mio0: 4096 - format: RGBA16 -machine/ttc_textures.01800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3340704 - mio0: 6144 - format: RGBA16 -machine/ttc_textures.02000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3340704 - mio0: 8192 - format: RGBA16 -machine/ttc_textures.02800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3340704 - mio0: 10240 - format: RGBA16 -machine/ttc_textures.03000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3340704 - mio0: 12288 - format: RGBA16 -machine/ttc_textures.03800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3340704 - mio0: 14336 - format: RGBA16 -machine/ttc_textures.04000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3340704 - mio0: 16384 - format: RGBA16 -machine/ttc_textures.05000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3340704 - mio0: 20480 - format: RGBA16 -machine/ttc_textures.05800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3340704 - mio0: 22528 - format: RGBA16 -machine/ttc_textures.06000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3340704 - mio0: 24576 - format: RGBA16 -machine/ttc_textures.06800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3340704 - mio0: 26624 - format: RGBA16 -machine/ttc_textures.07000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3340704 - mio0: 28672 - format: RGBA16 -machine/ttc_textures.07800: - type: TEXTURE - size: 2048 - width: 16 - height: 64 - offset: 3340704 - mio0: 30720 - format: RGBA16 -machine/ttc_textures.08000: - type: TEXTURE - size: 1024 - width: 64 - height: 8 - offset: 3340704 - mio0: 32768 - format: RGBA16 -machine/ttc_textures.08400: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3340704 - mio0: 33792 - format: RGBA16 -mountain/ttm_textures.00000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3353504 - mio0: 0 - format: RGBA16 -mountain/ttm_textures.00800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3353504 - mio0: 2048 - format: RGBA16 -mountain/ttm_textures.01800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3353504 - mio0: 6144 - format: RGBA16 -mountain/ttm_textures.02800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3353504 - mio0: 10240 - format: RGBA16 -mountain/ttm_textures.03000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3353504 - mio0: 12288 - format: RGBA16 -mountain/ttm_textures.03800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3353504 - mio0: 14336 - format: RGBA16 -mountain/ttm_textures.04000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3353504 - mio0: 16384 - format: RGBA16 -mountain/ttm_textures.04800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3353504 - mio0: 18432 - format: RGBA16 -mountain/ttm_textures.05000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3353504 - mio0: 20480 - format: RGBA16 -mountain/ttm_textures.05800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3353504 - mio0: 22528 - format: RGBA16 -mountain/ttm_textures.06800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3353504 - mio0: 26624 - format: RGBA16 -mountain/ttm_textures.07000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3353504 - mio0: 28672 - format: RGBA16 -mountain/ttm_textures.07800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3353504 - mio0: 30720 - format: RGBA16 -mountain/ttm_textures.08000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3353504 - mio0: 32768 - format: RGBA16 -mountain/ttm_textures.08800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3353504 - mio0: 34816 - format: RGBA16 -mountain/ttm_textures.09800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3353504 - mio0: 38912 - format: RGBA16 -mountain/ttm_textures.0A000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3270992 - mio0: 24576 - format: RGBA16 -mountain/ttm_textures.0A800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3353504 - mio0: 43008 - format: RGBA16 -mountain/ttm_textures.0B000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3353504 - mio0: 45056 - format: RGBA16 -mountain/ttm_textures.0B800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3353504 - mio0: 47104 - format: RGBA16 -mountain/ttm_textures.0C000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3353504 - mio0: 49152 - format: RGBA16 -outside/castle_grounds_textures.00000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3407696 - mio0: 0 - format: RGBA16 -outside/castle_grounds_textures.00800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3407696 - mio0: 2048 - format: RGBA16 -outside/castle_grounds_textures.01000: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3407696 - mio0: 4096 - format: RGBA16 -outside/castle_grounds_textures.02000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3407696 - mio0: 8192 - format: RGBA16 -outside/castle_grounds_textures.03000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3407696 - mio0: 12288 - format: RGBA16 -outside/castle_grounds_textures.03800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3407696 - mio0: 14336 - format: RGBA16 -outside/castle_grounds_textures.04000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3407696 - mio0: 16384 - format: RGBA16 -outside/castle_grounds_textures.04800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3407696 - mio0: 18432 - format: RGBA16 -outside/castle_grounds_textures.05800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3407696 - mio0: 22528 - format: RGBA16 -outside/castle_grounds_textures.06000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3407696 - mio0: 24576 - format: RGBA16 -outside/castle_grounds_textures.06800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3407696 - mio0: 26624 - format: RGBA16 -outside/castle_grounds_textures.07800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3407696 - mio0: 30720 - format: RGBA16 -outside/castle_grounds_textures.08000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3407696 - mio0: 32768 - format: RGBA16 -outside/castle_grounds_textures.08800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3407696 - mio0: 34816 - format: RGBA16 -outside/castle_grounds_textures.09000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3407696 - mio0: 36864 - format: RGBA16 -outside/castle_grounds_textures.09800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3407696 - mio0: 38912 - format: RGBA16 -outside/castle_grounds_textures.0A000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3407696 - mio0: 40960 - format: RGBA16 -outside/castle_grounds_textures.0A800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3407696 - mio0: 43008 - format: RGBA16 -outside/castle_grounds_textures.0B000: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 3407696 - mio0: 45056 - format: RGBA16 -outside/castle_grounds_textures.0B400: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3407696 - mio0: 46080 - format: RGBA16 -outside/castle_grounds_textures.0BC00: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3203760 - mio0: 45056 - format: IA16 -segment2/font_graphics.05F00: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24320 - format: IA1 -segment2/font_graphics.05F10: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24336 - format: IA1 -segment2/font_graphics.05F20: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24352 - format: IA1 -segment2/font_graphics.05F30: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24368 - format: IA1 -segment2/font_graphics.05F40: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24384 - format: IA1 -segment2/font_graphics.05F50: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24400 - format: IA1 -segment2/font_graphics.05F60: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24416 - format: IA1 -segment2/font_graphics.05F70: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24432 - format: IA1 -segment2/font_graphics.05F80: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24448 - format: IA1 -segment2/font_graphics.05F90: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24464 - format: IA1 -segment2/font_graphics.05FA0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24480 - format: IA1 -segment2/font_graphics.05FB0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24496 - format: IA1 -segment2/font_graphics.05FC0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24512 - format: IA1 -segment2/font_graphics.05FD0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24528 - format: IA1 -segment2/font_graphics.05FE0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24544 - format: IA1 -segment2/font_graphics.05FF0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24560 - format: IA1 -segment2/font_graphics.06000: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24576 - format: IA1 -segment2/font_graphics.06010: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24592 - format: IA1 -segment2/font_graphics.06020: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24608 - format: IA1 -segment2/font_graphics.06030: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24624 - format: IA1 -segment2/font_graphics.06040: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24640 - format: IA1 -segment2/font_graphics.06050: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24656 - format: IA1 -segment2/font_graphics.06060: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24672 - format: IA1 -segment2/font_graphics.06070: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24688 - format: IA1 -segment2/font_graphics.06080: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24704 - format: IA1 -segment2/font_graphics.06090: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24720 - format: IA1 -segment2/font_graphics.060A0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24736 - format: IA1 -segment2/font_graphics.060B0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24752 - format: IA1 -segment2/font_graphics.060C0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24768 - format: IA1 -segment2/font_graphics.060D0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24784 - format: IA1 -segment2/font_graphics.060E0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24800 - format: IA1 -segment2/font_graphics.060F0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24816 - format: IA1 -segment2/font_graphics.06100: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24832 - format: IA1 -segment2/font_graphics.06110: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24848 - format: IA1 -segment2/font_graphics.06120: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24864 - format: IA1 -segment2/font_graphics.06130: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24880 - format: IA1 -segment2/font_graphics.06140: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24896 - format: IA1 -segment2/font_graphics.06150: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24912 - format: IA1 -segment2/font_graphics.06160: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24928 - format: IA1 -segment2/font_graphics.06170: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24944 - format: IA1 -segment2/font_graphics.06180: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24960 - format: IA1 -segment2/font_graphics.06190: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24976 - format: IA1 -segment2/font_graphics.061A0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 24992 - format: IA1 -segment2/font_graphics.061B0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25008 - format: IA1 -segment2/font_graphics.061C0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25024 - format: IA1 -segment2/font_graphics.061D0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25040 - format: IA1 -segment2/font_graphics.061E0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25056 - format: IA1 -segment2/font_graphics.061F0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25072 - format: IA1 -segment2/font_graphics.06200: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25088 - format: IA1 -segment2/font_graphics.06210: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25104 - format: IA1 -segment2/font_graphics.06220: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25120 - format: IA1 -segment2/font_graphics.06230: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25136 - format: IA1 -segment2/font_graphics.06240: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25152 - format: IA1 -segment2/font_graphics.06250: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25168 - format: IA1 -segment2/font_graphics.06260: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25184 - format: IA1 -segment2/font_graphics.06270: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25200 - format: IA1 -segment2/font_graphics.06280: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25216 - format: IA1 -segment2/font_graphics.06290: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25232 - format: IA1 -segment2/font_graphics.062A0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25248 - format: IA1 -segment2/font_graphics.062B0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25264 - format: IA1 -segment2/font_graphics.062C0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25280 - format: IA1 -segment2/font_graphics.062D0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25296 - format: IA1 -segment2/font_graphics.062E0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25312 - format: IA1 -segment2/font_graphics.062F0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25328 - format: IA1 -segment2/font_graphics.06300: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25344 - format: IA1 -segment2/font_graphics.06310: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25360 - format: IA1 -segment2/font_graphics.06320: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25376 - format: IA1 -segment2/font_graphics.06330: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25392 - format: IA1 -segment2/font_graphics.06340: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25408 - format: IA1 -segment2/font_graphics.06350: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25424 - format: IA1 -segment2/font_graphics.06360: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25440 - format: IA1 -segment2/font_graphics.06370: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25456 - format: IA1 -segment2/font_graphics.06380: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25472 - format: IA1 -segment2/font_graphics.06390: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25488 - format: IA1 -segment2/font_graphics.063A0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25504 - format: IA1 -segment2/font_graphics.063B0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25520 - format: IA1 -segment2/font_graphics.063C0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25536 - format: IA1 -segment2/font_graphics.063D0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25552 - format: IA1 -segment2/font_graphics.063E0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25568 - format: IA1 -segment2/font_graphics.063F0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25584 - format: IA1 -segment2/font_graphics.06400: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25600 - format: IA1 -segment2/font_graphics.06410: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25616 - format: IA1 -segment2/font_graphics.06420: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25632 - format: IA1 -segment2/font_graphics.06430: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25648 - format: IA1 -segment2/font_graphics.06440: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25664 - format: IA1 -segment2/font_graphics.06450: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25680 - format: IA1 -segment2/font_graphics.06460: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25696 - format: IA1 -segment2/font_graphics.06470: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25712 - format: IA1 -segment2/font_graphics.06480: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25728 - format: IA1 -segment2/font_graphics.06490: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25744 - format: IA1 -segment2/font_graphics.064A0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25760 - format: IA1 -segment2/font_graphics.064B0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25776 - format: IA1 -segment2/font_graphics.064C0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25792 - format: IA1 -segment2/font_graphics.064D0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25808 - format: IA1 -segment2/font_graphics.064E0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25824 - format: IA1 -segment2/font_graphics.064F0: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25840 - format: IA1 -segment2/font_graphics.06500: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25856 - format: IA1 -segment2/font_graphics.06510: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25872 - format: IA1 -segment2/font_graphics.06520: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25888 - format: IA1 -segment2/font_graphics.06530: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 909712 - mio0: 25904 - format: IA1 -segment2/segment2.00000: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 0 - format: RGBA16 -segment2/segment2.00200: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 512 - format: RGBA16 -segment2/segment2.00400: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 1024 - format: RGBA16 -segment2/segment2.00600: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 1536 - format: RGBA16 -segment2/segment2.00800: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 2048 - format: RGBA16 -segment2/segment2.00A00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 2560 - format: RGBA16 -segment2/segment2.00C00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 3072 - format: RGBA16 -segment2/segment2.00E00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 3584 - format: RGBA16 -segment2/segment2.01000: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 4096 - format: RGBA16 -segment2/segment2.01200: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 4608 - format: RGBA16 -segment2/segment2.01400: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 5120 - format: RGBA16 -segment2/segment2.01600: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 5632 - format: RGBA16 -segment2/segment2.01800: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 6144 - format: RGBA16 -segment2/segment2.01A00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 6656 - format: RGBA16 -segment2/segment2.01C00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 7168 - format: RGBA16 -segment2/segment2.01E00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 7680 - format: RGBA16 -segment2/segment2.02000: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 8192 - format: RGBA16 -segment2/segment2.02200: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 8704 - format: RGBA16 -segment2/segment2.02400: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 9216 - format: RGBA16 -segment2/segment2.02800: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 9728 - format: RGBA16 -segment2/segment2.02A00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 10240 - format: RGBA16 -segment2/segment2.02C00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 10752 - format: RGBA16 -segment2/segment2.02E00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 11264 - format: RGBA16 -segment2/segment2.03000: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 11776 - format: RGBA16 -segment2/segment2.03200: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 12288 - format: RGBA16 -segment2/segment2.03600: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 12800 - format: RGBA16 -segment2/segment2.03800: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 13312 - format: RGBA16 -segment2/segment2.03A00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 13824 - format: RGBA16 -segment2/segment2.03C00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 14336 - format: RGBA16 -segment2/segment2.03E00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 14848 - format: RGBA16 -segment2/segment2.04000: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 15360 - format: RGBA16 -segment2/segment2.04400: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 15872 - format: RGBA16 -segment2/segment2.04600: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 16384 - format: RGBA16 -segment2/segment2.04800: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 16896 - format: RGBA16 -segment2/segment2.04A00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 17408 - format: RGBA16 -segment2/segment2.05000: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2647072 - mio0: 41424 - format: RGBA16 -segment2/segment2.05600: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 18432 - format: RGBA16 -segment2/segment2.05800: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 18944 - format: RGBA16 -segment2/segment2.05A00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 19456 - format: RGBA16 -segment2/segment2.05C00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 19968 - format: RGBA16 -segment2/segment2.06200: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 909712 - mio0: 20480 - format: RGBA16 -segment2/segment2.06280: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 909712 - mio0: 20608 - format: RGBA16 -segment2/segment2.06300: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 909712 - mio0: 20736 - format: RGBA16 -segment2/segment2.06380: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 909712 - mio0: 20864 - format: RGBA16 -segment2/segment2.06400: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 909712 - mio0: 20992 - format: RGBA16 -segment2/segment2.06480: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 909712 - mio0: 21120 - format: RGBA16 -segment2/segment2.06500: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 909712 - mio0: 21248 - format: RGBA16 -segment2/segment2.06580: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 909712 - mio0: 21376 - format: RGBA16 -segment2/segment2.06600: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 909712 - mio0: 21504 - format: RGBA16 -segment2/segment2.06680: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 909712 - mio0: 21632 - format: RGBA16 -segment2/segment2.06700: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 909712 - mio0: 21760 - format: RGBA16 -segment2/segment2.06780: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 909712 - mio0: 21888 - format: RGBA16 -segment2/segment2.06800: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 909712 - mio0: 22016 - format: RGBA16 -segment2/segment2.06880: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 909712 - mio0: 22144 - format: RGBA16 -segment2/segment2.06900: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 909712 - mio0: 22272 - format: RGBA16 -segment2/segment2.06980: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 909712 - mio0: 22400 - format: RGBA16 -segment2/segment2.06A00: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 909712 - mio0: 22528 - format: RGBA16 -segment2/segment2.06A80: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 909712 - mio0: 22656 - format: RGBA16 -segment2/segment2.06B00: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 909712 - mio0: 22784 - format: RGBA16 -segment2/segment2.06B80: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 909712 - mio0: 22912 - format: RGBA16 -segment2/segment2.06C00: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 909712 - mio0: 23040 - format: RGBA16 -segment2/segment2.06C80: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 909712 - mio0: 23168 - format: RGBA16 -segment2/segment2.06D00: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 909712 - mio0: 23296 - format: RGBA16 -segment2/segment2.06D80: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 909712 - mio0: 23424 - format: RGBA16 -segment2/segment2.06E00: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 909712 - mio0: 23552 - format: RGBA16 -segment2/segment2.06E80: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 909712 - mio0: 23680 - format: RGBA16 -segment2/segment2.06F00: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 909712 - mio0: 23808 - format: RGBA16 -segment2/segment2.06F80: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 909712 - mio0: 23936 - format: RGBA16 -segment2/segment2.07000: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 909712 - mio0: 24064 - format: RGBA16 -segment2/segment2.07080: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 909712 - mio0: 24192 - format: RGBA16 -segment2/segment2.07340: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 2647072 - mio0: 44317 - format: IA1 -segment2/segment2.07B50: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 25920 - format: RGBA16 -segment2/segment2.07D50: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 26432 - format: RGBA16 -segment2/segment2.07F50: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 26944 - format: RGBA16 -segment2/segment2.08150: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 909712 - mio0: 27456 - format: RGBA16 -segment2/segment2.081D0: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 909712 - mio0: 27584 - format: RGBA16 -segment2/segment2.0F458: - type: TEXTURE - size: 2048 - width: 32 - height: 64 - offset: 909712 - mio0: 31096 - format: IA8 -segment2/segment2.0FC58: - type: TEXTURE - size: 2048 - width: 32 - height: 64 - offset: 909712 - mio0: 33144 - format: IA8 -segment2/segment2.10458: - type: TEXTURE - size: 4096 - width: 64 - height: 64 - offset: 909712 - mio0: 35192 - format: IA8 -segment2/segment2.11458: - type: TEXTURE - size: 2048 - width: 32 - height: 64 - offset: 909712 - mio0: 39288 - format: IA8 -segment2/segment2.11C58: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 909712 - mio0: 41336 - format: RGBA16 -segment2/segment2.12458: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 909712 - mio0: 43384 - format: RGBA16 -segment2/segment2.12C58: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 909712 - mio0: 45432 - format: RGBA16 -segment2/segment2.13458: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 909712 - mio0: 47480 - format: IA16 -segment2/segment2.13C58: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 909712 - mio0: 49528 - format: RGBA16 -segment2/segment2.14838: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 909712 - mio0: 52568 - format: IA8 -segment2/segment2.umlaut: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 909712 - mio0: 17920 - format: RGBA16 -segment2/shadow_quarter_circle: - type: TEXTURE - size: 256 - width: 16 - height: 16 - offset: 909712 - mio0: 30584 - format: IA8 -segment2/shadow_quarter_square: - type: TEXTURE - size: 256 - width: 16 - height: 16 - offset: 909712 - mio0: 30840 - format: IA8 -sky/metal_hole: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3270992 - mio0: 26624 - format: RGBA16 -sky/rr_textures.00000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3270992 - mio0: 0 - format: RGBA16 -sky/rr_textures.00800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3270992 - mio0: 2048 - format: RGBA16 -sky/rr_textures.01000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3270992 - mio0: 4096 - format: RGBA16 -sky/rr_textures.01800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3270992 - mio0: 6144 - format: RGBA16 -sky/rr_textures.02000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3270992 - mio0: 8192 - format: RGBA16 -sky/rr_textures.03000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3270992 - mio0: 12288 - format: RGBA16 -sky/rr_textures.03800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3270992 - mio0: 14336 - format: RGBA16 -sky/rr_textures.04800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3270992 - mio0: 18432 - format: RGBA16 -sky/rr_textures.05000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3270992 - mio0: 20480 - format: RGBA16 -sky/rr_textures.05800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3270992 - mio0: 22528 - format: RGBA16 -sky/rr_textures.06000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3270992 - mio0: 24576 - format: RGBA16 -sky/rr_textures.07000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3270992 - mio0: 28672 - format: RGBA16 -sky/rr_textures.07800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3270992 - mio0: 30720 - format: RGBA16 -sky/rr_textures.08000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3270992 - mio0: 32768 - format: RGBA16 -skyboxes/bbh: - type: BLOB - size: 84288 - offset: 2999280 - mio0: 0 -skyboxes/bidw: - type: BLOB - size: 131392 - offset: 3026704 - mio0: 0 -skyboxes/bitfs: - type: BLOB - size: 102720 - offset: 2822784 - mio0: 0 -skyboxes/bits: - type: BLOB - size: 131392 - offset: 3072256 - mio0: 0 -skyboxes/ccm: - type: BLOB - size: 131392 - offset: 2728272 - mio0: 0 -skyboxes/cloud_floor: - type: BLOB - size: 131392 - offset: 2919104 - mio0: 0 -skyboxes/clouds: - type: BLOB - size: 84288 - offset: 2786832 - mio0: 0 -skyboxes/ssl: - type: BLOB - size: 131392 - offset: 2959136 - mio0: 0 -skyboxes/water: - type: BLOB - size: 131392 - offset: 2676976 - mio0: 0 -skyboxes/wdw: - type: BLOB - size: 131392 - offset: 2848560 - mio0: 0 -snow/ccm_textures.00000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3285888 - mio0: 0 - format: RGBA16 -snow/ccm_textures.00800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3285888 - mio0: 2048 - format: RGBA16 -snow/ccm_textures.01000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3285888 - mio0: 4096 - format: RGBA16 -snow/ccm_textures.02000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3285888 - mio0: 8192 - format: RGBA16 -snow/ccm_textures.02800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3285888 - mio0: 10240 - format: RGBA16 -snow/ccm_textures.03000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3285888 - mio0: 12288 - format: RGBA16 -snow/ccm_textures.03800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3285888 - mio0: 14336 - format: RGBA16 -snow/ccm_textures.04000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3285888 - mio0: 16384 - format: RGBA16 -snow/ccm_textures.04800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3285888 - mio0: 18432 - format: RGBA16 -snow/ccm_textures.05000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3285888 - mio0: 20480 - format: RGBA16 -snow/ccm_textures.05800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3285888 - mio0: 22528 - format: RGBA16 -snow/ccm_textures.06000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3285888 - mio0: 24576 - format: RGBA16 -snow/ccm_textures.06800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3285888 - mio0: 26624 - format: RGBA16 -snow/ccm_textures.07000: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3285888 - mio0: 28672 - format: RGBA16 -snow/ccm_textures.08000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3285888 - mio0: 32768 - format: RGBA16 -snow/ccm_textures.08800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3285888 - mio0: 34816 - format: RGBA16 -snow/ccm_textures.09000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3285888 - mio0: 36864 - format: IA16 -snow/ccm_textures.09800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3285888 - mio0: 38912 - format: IA16 -spooky/bbh_textures.00000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3178624 - mio0: 0 - format: RGBA16 -spooky/bbh_textures.00800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3178624 - mio0: 2048 - format: RGBA16 -spooky/bbh_textures.01800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3178624 - mio0: 6144 - format: RGBA16 -spooky/bbh_textures.02800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3178624 - mio0: 10240 - format: RGBA16 -spooky/bbh_textures.03800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3178624 - mio0: 14336 - format: RGBA16 -spooky/bbh_textures.04800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3178624 - mio0: 18432 - format: RGBA16 -spooky/bbh_textures.05000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3178624 - mio0: 20480 - format: RGBA16 -spooky/bbh_textures.06000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3178624 - mio0: 24576 - format: RGBA16 -spooky/bbh_textures.06800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3178624 - mio0: 26624 - format: RGBA16 -spooky/bbh_textures.07000: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3178624 - mio0: 28672 - format: RGBA16 -spooky/bbh_textures.08000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3178624 - mio0: 32768 - format: RGBA16 -spooky/bbh_textures.08800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3178624 - mio0: 34816 - format: RGBA16 -spooky/bbh_textures.09000: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3178624 - mio0: 36864 - format: RGBA16 -spooky/bbh_textures.0A000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1341504 - mio0: 49800 - format: RGBA16 -spooky/bbh_textures.0A800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3178624 - mio0: 43008 - format: IA16 -spooky/bbh_textures.0B000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3178624 - mio0: 45056 - format: IA16 -spooky/bbh_textures.0B800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3178624 - mio0: 47104 - format: IA16 -title_screen_bg/title_screen_bg.001C0: - type: TEXTURE - size: 3200 - width: 80 - height: 20 - offset: 2426672 - mio0: 448 - format: RGBA16 -title_screen_bg/title_screen_bg.00E40: - type: TEXTURE - size: 3200 - width: 80 - height: 20 - offset: 2426672 - mio0: 3648 - format: RGBA16 -title_screen_bg/title_screen_bg.01AC0: - type: TEXTURE - size: 3200 - width: 80 - height: 20 - offset: 2426672 - mio0: 6848 - format: RGBA16 -title_screen_bg/title_screen_bg.02740: - type: TEXTURE - size: 3200 - width: 80 - height: 20 - offset: 2426672 - mio0: 10048 - format: RGBA16 -title_screen_bg/title_screen_bg.033C0: - type: TEXTURE - size: 3200 - width: 80 - height: 20 - offset: 2426672 - mio0: 13248 - format: RGBA16 -title_screen_bg/title_screen_bg.04040: - type: TEXTURE - size: 3200 - width: 80 - height: 20 - offset: 2426672 - mio0: 16448 - format: RGBA16 -title_screen_bg/title_screen_bg.04CC0: - type: TEXTURE - size: 3200 - width: 80 - height: 20 - offset: 2426672 - mio0: 19648 - format: RGBA16 -title_screen_bg/title_screen_bg.05940: - type: TEXTURE - size: 3200 - width: 80 - height: 20 - offset: 2426672 - mio0: 22848 - format: RGBA16 -water/jrb_textures.00000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3235184 - mio0: 0 - format: RGBA16 -water/jrb_textures.00800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3235184 - mio0: 2048 - format: RGBA16 -water/jrb_textures.01800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3235184 - mio0: 6144 - format: RGBA16 -water/jrb_textures.02800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3235184 - mio0: 10240 - format: RGBA16 -water/jrb_textures.03800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3235184 - mio0: 14336 - format: RGBA16 -water/jrb_textures.04800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3235184 - mio0: 18432 - format: RGBA16 -water/jrb_textures.05800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3235184 - mio0: 22528 - format: RGBA16 -water/jrb_textures.06000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3235184 - mio0: 24576 - format: RGBA16 -water/jrb_textures.06800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3235184 - mio0: 26624 - format: RGBA16 -water/jrb_textures.07800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3235184 - mio0: 30720 - format: RGBA16 -water/jrb_textures.08800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3235184 - mio0: 34816 - format: RGBA16 -water/jrb_textures.09000: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3235184 - mio0: 36864 - format: RGBA16 -water/jrb_textures.0A000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3235184 - mio0: 40960 - format: RGBA16 -water/jrb_textures.0A800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3235184 - mio0: 43008 - format: RGBA16 -water/jrb_textures.0B800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3235184 - mio0: 47104 - format: RGBA16 diff --git a/assets/sm64/jp/actors.yml b/assets/sm64/jp/actors.yml deleted file mode 100644 index 68ae8d9..0000000 --- a/assets/sm64/jp/actors.yml +++ /dev/null @@ -1,3704 +0,0 @@ -amp/amp_body: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2032944 - mio0: 6936 - format: RGBA16 -amp/amp_electricity: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 2032944 - mio0: 3864 - format: RGBA16 -amp/amp_eyes: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2032944 - mio0: 4888 - format: RGBA16 -amp/amp_mouth: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2032944 - mio0: 8984 - format: RGBA16 -blue_coin_switch/blue_coin_switch_side: - type: TEXTURE - size: 1024 - width: 32 - height: 16 - offset: 2032944 - mio0: 24 - format: RGBA16 -blue_coin_switch/blue_coin_switch_top: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2032944 - mio0: 1048 - format: RGBA16 -blue_fish/blue_fish: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 112096 - format: RGBA16 -bobomb/bob-omb_buddy_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1257760 - mio0: 120 - format: RGBA16 -bobomb/bob-omb_buddy_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1257760 - mio0: 4216 - format: RGBA16 -bobomb/bob-omb_eyes: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1257760 - mio0: 18552 - format: RGBA16 -bobomb/bob-omb_eyes_blink: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1257760 - mio0: 20600 - format: RGBA16 -bobomb/bob-omb_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2032944 - mio0: 121440 - format: RGBA16 -bobomb/bob-omb_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2032944 - mio0: 125536 - format: RGBA16 -bomb/bomb_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1599504 - mio0: 359104 - format: RGBA16 -bomb/bomb_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1599504 - mio0: 363200 - format: RGBA16 -bomb/bomb_spike: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1599504 - mio0: 367296 - format: RGBA16 -boo/boo_eyes: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1462368 - mio0: 39744 - format: RGBA16 -boo/boo_mouth: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1462368 - mio0: 43840 - format: RGBA16 -boo_castle/bbh_boo_eyes: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1462368 - mio0: 39744 - format: RGBA16 -boo_castle/bbh_boo_mouth: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1462368 - mio0: 43840 - format: RGBA16 -book/book_cover: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1462368 - mio0: 4192 - format: RGBA16 -bookend/bookend_cover: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1462368 - mio0: 4192 - format: RGBA16 -bookend/bookend_mouth: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 1462368 - mio0: 2144 - format: RGBA16 -bookend/bookend_pages: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 1462368 - mio0: 3168 - format: RGBA16 -bookend/bookend_spine: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 1462368 - mio0: 96 - format: RGBA16 -bookend/bookend_tooth: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 1462368 - mio0: 1120 - format: RGBA16 -bowser/bowser_armband: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1599504 - mio0: 146488 - format: RGBA16 -bowser/bowser_armband_spike: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1599504 - mio0: 142392 - format: RGBA16 -bowser/bowser_blue_eye_unused: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1599504 - mio0: 156728 - format: RGBA16 -bowser/bowser_body: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1599504 - mio0: 140344 - format: RGBA16 -bowser/bowser_chest: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1599504 - mio0: 152632 - format: RGBA16 -bowser/bowser_claw_edge: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1599504 - mio0: 171064 - format: RGBA16 -bowser/bowser_claw_horn_angle: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1599504 - mio0: 179256 - format: RGBA16 -bowser/bowser_claw_horn_tooth: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1599504 - mio0: 175160 - format: RGBA16 -bowser/bowser_eye_center_0: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1599504 - mio0: 195640 - format: RGBA16 -bowser/bowser_eye_center_1: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1599504 - mio0: 195640 - format: RGBA16 -bowser/bowser_eye_closed_0: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1599504 - mio0: 191544 - format: RGBA16 -bowser/bowser_eye_closed_1: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1599504 - mio0: 191544 - format: RGBA16 -bowser/bowser_eye_far_left_0: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1599504 - mio0: 203832 - format: RGBA16 -bowser/bowser_eye_far_left_1: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1599504 - mio0: 203832 - format: RGBA16 -bowser/bowser_eye_half_closed_0: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1599504 - mio0: 187448 - format: RGBA16 -bowser/bowser_eye_half_closed_1: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1599504 - mio0: 187448 - format: RGBA16 -bowser/bowser_eye_left_0: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1599504 - mio0: 183352 - format: RGBA16 -bowser/bowser_eye_left_1: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1599504 - mio0: 183352 - format: RGBA16 -bowser/bowser_eye_right_0: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1599504 - mio0: 199736 - format: RGBA16 -bowser/bowser_eye_right_1: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1599504 - mio0: 199736 - format: RGBA16 -bowser/bowser_eyebrow: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1599504 - mio0: 130104 - format: RGBA16 -bowser/bowser_hair: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1599504 - mio0: 166968 - format: RGBA16 -bowser/bowser_mouth_unused: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1599504 - mio0: 160824 - format: RGBA16 -bowser/bowser_muzzle: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1599504 - mio0: 134200 - format: RGBA16 -bowser/bowser_nostrils: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1599504 - mio0: 136248 - format: RGBA16 -bowser/bowser_shell: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1599504 - mio0: 128056 - format: RGBA16 -bowser/bowser_shell_edge: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1599504 - mio0: 154680 - format: RGBA16 -bowser/bowser_tongue: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1599504 - mio0: 148536 - format: RGBA16 -bowser/bowser_upper_face: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1599504 - mio0: 164920 - format: RGBA16 -bowser_flame/bowser_flame_0: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1599504 - mio0: 0 - format: RGBA16 -bowser_flame/bowser_flame_1: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1599504 - mio0: 8192 - format: RGBA16 -bowser_flame/bowser_flame_10: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1599504 - mio0: 81920 - format: RGBA16 -bowser_flame/bowser_flame_11: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1599504 - mio0: 90112 - format: RGBA16 -bowser_flame/bowser_flame_12: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1599504 - mio0: 98304 - format: RGBA16 -bowser_flame/bowser_flame_13: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1599504 - mio0: 106496 - format: RGBA16 -bowser_flame/bowser_flame_2: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1599504 - mio0: 16384 - format: RGBA16 -bowser_flame/bowser_flame_3: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1599504 - mio0: 24576 - format: RGBA16 -bowser_flame/bowser_flame_4: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1599504 - mio0: 32768 - format: RGBA16 -bowser_flame/bowser_flame_5: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1599504 - mio0: 40960 - format: RGBA16 -bowser_flame/bowser_flame_6: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1599504 - mio0: 49152 - format: RGBA16 -bowser_flame/bowser_flame_7: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1599504 - mio0: 57344 - format: RGBA16 -bowser_flame/bowser_flame_8: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1599504 - mio0: 65536 - format: RGBA16 -bowser_flame/bowser_flame_9: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1599504 - mio0: 73728 - format: RGBA16 -breakable_box/cork_box_surface: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2032944 - mio0: 74384 - format: RGBA16 -breakable_box/crazy_box_surface: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2032944 - mio0: 72336 - format: RGBA16 -bub/bub_eye_border: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1568640 - mio0: 5128 - format: RGBA16 -bub/bub_eyes: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1568640 - mio0: 1032 - format: RGBA16 -bub/bub_fins: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1568640 - mio0: 7176 - format: RGBA16 -bub/bub_scales: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1568640 - mio0: 9224 - format: RGBA16 -bubba/bubba_eye_border: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1568640 - mio0: 5128 - format: RGBA16 -bubba/bubba_eyes_unused: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1568640 - mio0: 1032 - format: RGBA16 -bubba/bubba_fins: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1568640 - mio0: 7176 - format: RGBA16 -bubba/bubba_scales: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1568640 - mio0: 9224 - format: RGBA16 -bubba/bubba_sunglasses: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 1568640 - mio0: 8 - format: RGBA16 -bubble/bubble: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 118112 - format: RGBA16 -bubble/mr_i_bubble: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 120160 - format: RGBA16 -bullet_bill/bullet_bill_eye: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1215456 - mio0: 47784 - format: RGBA16 -bullet_bill/bullet_bill_mouth: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1215456 - mio0: 51880 - format: RGBA16 -bully/bully_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1249376 - mio0: 9320 - format: RGBA16 -bully/bully_horn: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1249376 - mio0: 224 - format: RGBA16 -bully/bully_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1249376 - mio0: 1128 - format: RGBA16 -bully/bully_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1249376 - mio0: 5224 - format: RGBA16 -burn_smoke/burn_smoke: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 137216 - format: IA16 -butterfly/butterfly_wing: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2094912 - mio0: 17320 - format: RGBA16 -cannon_barrel/cannon_barrel: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2032944 - mio0: 22696 - format: RGBA16 -cannon_base/cannon_base: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2032944 - mio0: 18872 - format: RGBA16 -cannon_lid/cannon_lid: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2032944 - mio0: 16472 - format: RGBA16 -capswitch/cap_switch_base: - type: TEXTURE - size: 128 - width: 16 - height: 4 - offset: 1457744 - mio0: 11336 - format: RGBA16 -capswitch/cap_switch_head: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1457744 - mio0: 7240 - format: IA16 -chain_ball/chain_ball: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1844608 - mio0: 133864 - format: RGBA16 -chain_chomp/chain_chomp_bright_shine: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1844608 - mio0: 136144 - format: RGBA16 -chain_chomp/chain_chomp_dull_shine: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1844608 - mio0: 138192 - format: RGBA16 -chain_chomp/chain_chomp_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1844608 - mio0: 144336 - format: RGBA16 -chain_chomp/chain_chomp_tongue: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1844608 - mio0: 140240 - format: RGBA16 -chain_chomp/chain_chomp_tooth: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1462368 - mio0: 27376 - format: RGBA16 -chair/chair_bottom: - type: TEXTURE - size: 1024 - width: 32 - height: 16 - offset: 1462368 - mio0: 16480 - format: RGBA16 -chair/chair_front: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1462368 - mio0: 12384 - format: RGBA16 -chair/chair_leg: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1462368 - mio0: 14432 - format: RGBA16 -chair/chair_surface_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1462368 - mio0: 17504 - format: RGBA16 -checkerboard_platform/checkerboard_platform: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2032944 - mio0: 52288 - format: RGBA16 -checkerboard_platform/checkerboard_platform_side: - type: TEXTURE - size: 1024 - width: 32 - height: 16 - offset: 2032944 - mio0: 51264 - format: RGBA16 -chillychief/chill_bully_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1249376 - mio0: 9320 - format: RGBA16 -chillychief/chill_bully_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1979680 - mio0: 96 - format: RGBA16 -chillychief/chill_bully_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1979680 - mio0: 4192 - format: RGBA16 -chuckya/chuckya_body_arm_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2032944 - mio0: 32632 - format: RGBA16 -chuckya/chuckya_body_arm_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2032944 - mio0: 36728 - format: RGBA16 -chuckya/chuckya_eyes: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2032944 - mio0: 26488 - format: RGBA16 -chuckya/chuckya_hand_antenna: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2032944 - mio0: 30584 - format: RGBA16 -clam_shell/clam_shell: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1285392 - mio0: 48 - format: RGBA16 -clam_shell/clam_shell_mouth: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1285392 - mio0: 2096 - format: RGBA16 -coin/coin_front: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 22400 - format: IA16 -coin/coin_side: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 26496 - format: IA16 -coin/coin_tilt_left: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 28544 - format: IA16 -coin/coin_tilt_right: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 24448 - format: IA16 -cyan_fish/cyan_fish: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1802256 - mio0: 54376 - format: RGBA16 -dirt/dirt_particle: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2094912 - mio0: 179704 - format: RGBA16 -door/bbh_door: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2094912 - mio0: 66832 - format: RGBA16 -door/bbh_door_overlay: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 70928 - format: RGBA16 -door/door_lock: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 2094912 - mio0: 79120 - format: RGBA16 -door/hmc_mural_door: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2094912 - mio0: 60688 - format: RGBA16 -door/hmc_mural_door_overlay: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 64784 - format: RGBA16 -door/metal_door: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2094912 - mio0: 54544 - format: RGBA16 -door/metal_door_overlay: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 58640 - format: RGBA16 -door/one_star_door_sign: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 75024 - format: RGBA16 -door/polished_wooden_door: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2094912 - mio0: 40208 - format: RGBA16 -door/polished_wooden_door_overlay: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2094912 - mio0: 44304 - format: RGBA16 -door/rough_wooden_door: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2094912 - mio0: 48400 - format: RGBA16 -door/rough_wooden_door_overlay: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 52496 - format: RGBA16 -door/three_star_door_sign: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 77072 - format: RGBA16 -door/zero_star_door_sign: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 72976 - format: RGBA16 -dorrie/dorrie_eye: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1991184 - mio0: 39840 - format: RGBA16 -dorrie/dorrie_skin: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1991184 - mio0: 40352 - format: RGBA16 -dorrie/dorrie_tongue: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1844608 - mio0: 140240 - format: RGBA16 -exclamation_box/exclamation_box_front: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2032944 - mio0: 95784 - format: RGBA16 -exclamation_box/exclamation_box_side: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 2032944 - mio0: 97832 - format: RGBA16 -exclamation_box/metal_cap_box_front: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2032944 - mio0: 83496 - format: RGBA16 -exclamation_box/metal_cap_box_side: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 2032944 - mio0: 85544 - format: RGBA16 -exclamation_box/vanish_cap_box_front: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2032944 - mio0: 77352 - format: RGBA16 -exclamation_box/vanish_cap_box_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2032944 - mio0: 79400 - format: RGBA16 -exclamation_box/wing_cap_box_front: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2032944 - mio0: 89640 - format: RGBA16 -exclamation_box/wing_cap_box_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2032944 - mio0: 91688 - format: RGBA16 -exclamation_box_outline/exclamation_box_outline: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2032944 - mio0: 151912 - format: RGBA16 -exclamation_box_outline/exclamation_point: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 2032944 - mio0: 154240 - format: RGBA16 -explosion/explosion_0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 2568 - format: RGBA16 -explosion/explosion_1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 4616 - format: RGBA16 -explosion/explosion_2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 6664 - format: RGBA16 -explosion/explosion_3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 8712 - format: RGBA16 -explosion/explosion_4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 10760 - format: RGBA16 -explosion/explosion_5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 12808 - format: RGBA16 -explosion/explosion_6: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 14856 - format: RGBA16 -eyerok/eyerok_bricks: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1327760 - mio0: 36160 - format: RGBA16 -eyerok/eyerok_eye_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1327760 - mio0: 44352 - format: RGBA16 -eyerok/eyerok_eye_mostly_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1327760 - mio0: 42304 - format: RGBA16 -eyerok/eyerok_eye_mostly_open: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1327760 - mio0: 40256 - format: RGBA16 -eyerok/eyerok_eye_open: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1327760 - mio0: 38208 - format: RGBA16 -flame/flame_0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 95008 - format: IA16 -flame/flame_1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 97056 - format: IA16 -flame/flame_2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 99104 - format: IA16 -flame/flame_3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 101152 - format: IA16 -flame/flame_4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 103200 - format: IA16 -flame/flame_5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 105248 - format: IA16 -flame/flame_6: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 107296 - format: IA16 -flame/flame_7: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 109344 - format: IA16 -flyguy/flyguy_cloth_wrinkle: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 2032944 - mio0: 57480 - format: RGBA16 -flyguy/flyguy_face: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2032944 - mio0: 61576 - format: RGBA16 -flyguy/flyguy_propeller: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2032944 - mio0: 63624 - format: IA16 -fwoosh/fwoosh_face: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1377744 - mio0: 88072 - format: IA16 -goomba/goomba_body: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2032944 - mio0: 103728 - format: RGBA16 -goomba/goomba_face: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2032944 - mio0: 105776 - format: RGBA16 -goomba/goomba_face_blink: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2032944 - mio0: 107824 - format: RGBA16 -haunted_cage/bbh_cage_bars: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1462368 - mio0: 55944 - format: RGBA16 -haunted_cage/bbh_cage_double_ornament: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1462368 - mio0: 51848 - format: RGBA16 -haunted_cage/bbh_cage_floor: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1462368 - mio0: 49800 - format: RGBA16 -haunted_cage/bbh_cage_garbage: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1462368 - mio0: 57992 - format: RGBA16 -haunted_cage/bbh_cage_ornament: - type: TEXTURE - size: 1024 - width: 32 - height: 16 - offset: 1462368 - mio0: 53896 - format: RGBA16 -haunted_cage/bbh_cage_wooden_base: - type: TEXTURE - size: 1024 - width: 32 - height: 16 - offset: 1462368 - mio0: 54920 - format: RGBA16 -heart/spinning_heart: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2032944 - mio0: 55264 - format: RGBA16 -heave_ho/heave-ho_arm_ornament: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1215456 - mio0: 68040 - format: RGBA16 -heave_ho/heave-ho_face: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1215456 - mio0: 59848 - format: RGBA16 -heave_ho/heave-ho_logo: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1215456 - mio0: 63944 - format: RGBA16 -heave_ho/heave-ho_platform: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1215456 - mio0: 61896 - format: RGBA16 -heave_ho/heave-ho_roller: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1215456 - mio0: 70088 - format: RGBA16 -heave_ho/heave-ho_turnkey: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1215456 - mio0: 70600 - format: RGBA16 -hoot/hoot_eyes: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1215456 - mio0: 2592 - format: RGBA16 -hoot/hoot_wing: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1215456 - mio0: 7760 - format: RGBA16 -hoot/hoot_wing_tip: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1215456 - mio0: 9808 - format: RGBA16 -impact_ring/impact_ring_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1599504 - mio0: 117328 - format: IA16 -impact_ring/impact_ring_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1599504 - mio0: 121424 - format: IA16 -impact_smoke/impact_smoke_0: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1599504 - mio0: 371240 - format: IA16 -impact_smoke/impact_smoke_1: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1599504 - mio0: 379432 - format: IA16 -impact_smoke/impact_smoke_2: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1599504 - mio0: 387624 - format: IA16 -impact_smoke/impact_smoke_3: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1599504 - mio0: 395816 - format: IA16 -king_bobomb/bob-omb_buddy_body_unused: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1257760 - mio0: 25720 - format: RGBA16 -king_bobomb/bob-omb_buddy_left_side_unused: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1257760 - mio0: 120 - format: RGBA16 -king_bobomb/bob-omb_buddy_right_side_unused: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1257760 - mio0: 4216 - format: RGBA16 -king_bobomb/king_bob-omb_arm: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1257760 - mio0: 8312 - format: RGBA16 -king_bobomb/king_bob-omb_body_unused: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1257760 - mio0: 10360 - format: RGBA16 -king_bobomb/king_bob-omb_crown_rim: - type: TEXTURE - size: 1024 - width: 32 - height: 16 - offset: 1257760 - mio0: 24696 - format: RGBA16 -king_bobomb/king_bob-omb_eyes: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1257760 - mio0: 18552 - format: RGBA16 -king_bobomb/king_bob-omb_eyes_blink: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1257760 - mio0: 20600 - format: RGBA16 -king_bobomb/king_bob-omb_hand: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1257760 - mio0: 22648 - format: RGBA16 -king_bobomb/king_bob-omb_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1257760 - mio0: 33912 - format: RGBA16 -king_bobomb/king_bob-omb_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1257760 - mio0: 38008 - format: RGBA16 -klepto/klepto_beak: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1327760 - mio0: 4104 - format: RGBA16 -klepto/klepto_chest_tuft: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1327760 - mio0: 8 - format: RGBA16 -klepto/klepto_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1327760 - mio0: 2056 - format: RGBA16 -klepto/klepto_wing: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1327760 - mio0: 8200 - format: RGBA16 -klepto/klepto_wing_flap: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1327760 - mio0: 12296 - format: RGBA16 -koopa/koopa_eye_border: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1844608 - mio0: 22088 - format: RGBA16 -koopa/koopa_eyes_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1844608 - mio0: 20040 - format: RGBA16 -koopa/koopa_eyes_open: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1844608 - mio0: 17992 - format: RGBA16 -koopa/koopa_nostrils: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1844608 - mio0: 24136 - format: RGBA16 -koopa/koopa_shell_back: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1844608 - mio0: 11848 - format: RGBA16 -koopa/koopa_shell_front: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1844608 - mio0: 9800 - format: RGBA16 -koopa/koopa_shell_front_top: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1844608 - mio0: 15944 - format: RGBA16 -koopa/koopa_shoe: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1844608 - mio0: 13896 - format: RGBA16 -koopa_flag/koopa_flag_banner: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1844608 - mio0: 72 - format: RGBA16 -koopa_shell/koopa_shell_back: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1844608 - mio0: 11848 - format: RGBA16 -koopa_shell/koopa_shell_front: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1844608 - mio0: 9800 - format: RGBA16 -lakitu_cameraman/lakitu_camera_lens: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1926752 - mio0: 14336 - format: RGBA16 -lakitu_cameraman/lakitu_cameraman_cloud_face_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1568640 - mio0: 60640 - format: RGBA16 -lakitu_cameraman/lakitu_cameraman_eyes_closed: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1568640 - mio0: 66784 - format: RGBA16 -lakitu_cameraman/lakitu_cameraman_eyes_open: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1568640 - mio0: 62688 - format: RGBA16 -lakitu_cameraman/lakitu_cameraman_frown: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1568640 - mio0: 72928 - format: RGBA16 -lakitu_cameraman/lakitu_cameraman_shell: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1568640 - mio0: 70880 - format: RGBA16 -lakitu_enemy/lakitu_enemy_cloud_face_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1568640 - mio0: 60640 - format: RGBA16 -lakitu_enemy/lakitu_enemy_eyes_closed: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1568640 - mio0: 66784 - format: RGBA16 -lakitu_enemy/lakitu_enemy_eyes_open: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1568640 - mio0: 62688 - format: RGBA16 -lakitu_enemy/lakitu_enemy_frown: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1568640 - mio0: 72928 - format: RGBA16 -lakitu_enemy/lakitu_enemy_shell: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1568640 - mio0: 70880 - format: RGBA16 -leaves/leaf: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2094912 - mio0: 117728 - format: RGBA16 -mad_piano/mad_piano_body: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 1462368 - mio0: 29424 - format: RGBA16 -mad_piano/mad_piano_keys: - type: TEXTURE - size: 1024 - width: 32 - height: 16 - offset: 1462368 - mio0: 32496 - format: RGBA16 -mad_piano/mad_piano_keys_corner: - type: TEXTURE - size: 1024 - width: 32 - height: 16 - offset: 1462368 - mio0: 30448 - format: RGBA16 -mad_piano/mad_piano_keys_edge: - type: TEXTURE - size: 1024 - width: 32 - height: 16 - offset: 1462368 - mio0: 33520 - format: RGBA16 -mad_piano/mad_piano_mouth: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 1462368 - mio0: 31472 - format: RGBA16 -mad_piano/mad_piano_tooth: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1462368 - mio0: 27376 - format: RGBA16 -manta/manta_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1285392 - mio0: 12192 - format: RGBA16 -manta/manta_fin_corner: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1285392 - mio0: 6048 - format: RGBA16 -manta/manta_fin_edge: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1285392 - mio0: 14240 - format: RGBA16 -manta/manta_gills: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1285392 - mio0: 8096 - format: RGBA16 -mario/mario_eyes_center: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 12432 - format: RGBA16 -mario/mario_eyes_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 16528 - format: RGBA16 -mario/mario_eyes_closed_unused_0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 16528 - format: RGBA16 -mario/mario_eyes_closed_unused_1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 16528 - format: RGBA16 -mario/mario_eyes_dead: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 30864 - format: RGBA16 -mario/mario_eyes_down_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 28816 - format: RGBA16 -mario/mario_eyes_half_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 14480 - format: RGBA16 -mario/mario_eyes_left_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 22672 - format: RGBA16 -mario/mario_eyes_right_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 24720 - format: RGBA16 -mario/mario_eyes_up_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 26768 - format: RGBA16 -mario/mario_logo: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 6288 - format: RGBA16 -mario/mario_metal: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1125200 - mio0: 144 - format: RGBA16 -mario/mario_metal_wing_tip_unused: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1125200 - mio0: 45200 - format: RGBA16 -mario/mario_metal_wing_unused: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1125200 - mio0: 41104 - format: RGBA16 -mario/mario_mustache: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 10384 - format: RGBA16 -mario/mario_overalls_button: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 4240 - format: RGBA16 -mario/mario_sideburn: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 8336 - format: RGBA16 -mario/mario_wing: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1125200 - mio0: 32912 - format: RGBA16 -mario/mario_wing_tip: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1125200 - mio0: 37008 - format: RGBA16 -mario_cap/mario_cap_logo: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 6288 - format: RGBA16 -mario_cap/mario_cap_metal: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1125200 - mio0: 144 - format: RGBA16 -mario_cap/mario_cap_metal_wing_tip_unused: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1125200 - mio0: 45200 - format: RGBA16 -mario_cap/mario_cap_metal_wing_unused: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1125200 - mio0: 41104 - format: RGBA16 -mario_cap/mario_cap_wing: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1125200 - mio0: 32912 - format: RGBA16 -mario_cap/mario_cap_wing_tip: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1125200 - mio0: 37008 - format: RGBA16 -metal_box/metal_box_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2032944 - mio0: 145816 - format: RGBA16 -mips/mips_eyes: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1926752 - mio0: 64384 - format: RGBA16 -mist/mist: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 128 - format: IA16 -moneybag/moneybag_eyes: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1979680 - mio0: 18864 - format: RGBA16 -moneybag/moneybag_mouth: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1979680 - mio0: 14768 - format: RGBA16 -monty_mole/monty_mole_cheek: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1377744 - mio0: 2416 - format: RGBA16 -monty_mole/monty_mole_claw: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1377744 - mio0: 10608 - format: RGBA16 -monty_mole/monty_mole_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1377744 - mio0: 4464 - format: RGBA16 -monty_mole/monty_mole_nose: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1377744 - mio0: 6512 - format: RGBA16 -monty_mole/monty_mole_tooth: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1377744 - mio0: 8560 - format: RGBA16 -monty_mole_hole/monty_mole_hole: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1377744 - mio0: 64 - format: IA16 -mr_i_eyeball/mr_i_eyeball_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1991184 - mio0: 128 - format: RGBA16 -mr_i_eyeball/mr_i_eyeball_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1991184 - mio0: 4224 - format: RGBA16 -mr_i_iris/mr_i_iris_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1991184 - mio0: 14704 - format: RGBA16 -mr_i_iris/mr_i_iris_mostly_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1991184 - mio0: 12656 - format: RGBA16 -mr_i_iris/mr_i_iris_mostly_open: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1991184 - mio0: 10608 - format: RGBA16 -mr_i_iris/mr_i_iris_open: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1991184 - mio0: 8560 - format: RGBA16 -mushroom_1up/1-up_mushroom: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2094912 - mio0: 169512 - format: RGBA16 -peach/peach_chest_jewel: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1490032 - mio0: 11304 - format: RGBA16 -peach/peach_crown_jewel: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1490032 - mio0: 10792 - format: RGBA16 -peach/peach_dress: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1490032 - mio0: 16424 - format: RGBA16 -peach/peach_eye_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1490032 - mio0: 8744 - format: RGBA16 -peach/peach_eye_mostly_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1490032 - mio0: 6696 - format: RGBA16 -peach/peach_eye_mostly_open: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1490032 - mio0: 4648 - format: RGBA16 -peach/peach_eye_open: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1490032 - mio0: 2600 - format: RGBA16 -peach/peach_lips: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1490032 - mio0: 13864 - format: RGBA16 -peach/peach_lips_scrunched: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1490032 - mio0: 11816 - format: RGBA16 -peach/peach_nostril: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1490032 - mio0: 15912 - format: RGBA16 -pebble/pebble: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 115456 - format: RGBA16 -penguin/penguin_beak: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1436272 - mio0: 21984 - format: RGBA16 -penguin/penguin_eye_angry: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1436272 - mio0: 17888 - format: RGBA16 -penguin/penguin_eye_angry_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1436272 - mio0: 19936 - format: RGBA16 -penguin/penguin_eye_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1436272 - mio0: 15840 - format: RGBA16 -penguin/penguin_eye_half_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1436272 - mio0: 13792 - format: RGBA16 -penguin/penguin_eye_open: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1436272 - mio0: 11744 - format: RGBA16 -piranha_plant/piranha_plant_bottom_lip: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1844608 - mio0: 78840 - format: RGBA16 -piranha_plant/piranha_plant_leaf: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1844608 - mio0: 82936 - format: RGBA16 -piranha_plant/piranha_plant_skin: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1844608 - mio0: 74744 - format: RGBA16 -piranha_plant/piranha_plant_stem: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1844608 - mio0: 76792 - format: RGBA16 -piranha_plant/piranha_plant_tongue: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1599504 - mio0: 148536 - format: RGBA16 -piranha_plant/piranha_plant_tooth: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1844608 - mio0: 80888 - format: RGBA16 -pokey/pokey_body: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1327760 - mio0: 75896 - format: RGBA16 -pokey/pokey_face: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1327760 - mio0: 71504 - format: RGBA16 -pokey/pokey_face_blink: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1327760 - mio0: 73552 - format: RGBA16 -poundable_pole/poundable_pole_side: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1844608 - mio0: 6224 - format: RGBA16 -poundable_pole/poundable_pole_top: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1844608 - mio0: 4176 - format: RGBA16 -power_meter/power_meter_five_segments: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 158688 - format: RGBA16 -power_meter/power_meter_four_segments: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 160736 - format: RGBA16 -power_meter/power_meter_full: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 152544 - format: RGBA16 -power_meter/power_meter_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2094912 - mio0: 144352 - format: RGBA16 -power_meter/power_meter_one_segment: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 166880 - format: RGBA16 -power_meter/power_meter_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2094912 - mio0: 148448 - format: RGBA16 -power_meter/power_meter_seven_segments: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 154592 - format: RGBA16 -power_meter/power_meter_six_segments: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 156640 - format: RGBA16 -power_meter/power_meter_three_segments: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 162784 - format: RGBA16 -power_meter/power_meter_two_segments: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 164832 - format: RGBA16 -purple_switch/purple_switch_base: - type: TEXTURE - size: 128 - width: 16 - height: 4 - offset: 2032944 - mio0: 49320 - format: RGBA16 -purple_switch/purple_switch_exclamation_point: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 2032944 - mio0: 49448 - format: RGBA16 -sand/sand_particle: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2094912 - mio0: 178896 - format: RGBA16 -scuttlebug/scuttlebug_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1991184 - mio0: 65800 - format: RGBA16 -scuttlebug/scuttlebug_iris: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1991184 - mio0: 76040 - format: RGBA16 -scuttlebug/scuttlebug_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1991184 - mio0: 67848 - format: RGBA16 -scuttlebug/scuttlebug_leg: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1991184 - mio0: 78088 - format: RGBA16 -scuttlebug/scuttlebug_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1991184 - mio0: 71944 - format: RGBA16 -seaweed/seaweed_base: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1802256 - mio0: 38416 - format: RGBA16 -seaweed/seaweed_lower_center: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1802256 - mio0: 36368 - format: RGBA16 -seaweed/seaweed_tip: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1802256 - mio0: 32272 - format: RGBA16 -seaweed/seaweed_upper_center: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1802256 - mio0: 34320 - format: RGBA16 -skeeter/skeeter_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1802256 - mio0: 144 - format: RGBA16 -skeeter/skeeter_iris: - type: TEXTURE - size: 256 - width: 16 - height: 8 - offset: 1802256 - mio0: 2192 - format: RGBA16 -smoke/smoke: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1377744 - mio0: 29376 - format: IA16 -snowman/mr_blizzard_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1436272 - mio0: 46192 - format: RGBA16 -snowman/mr_blizzard_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1436272 - mio0: 38000 - format: RGBA16 -snowman/mr_blizzard_mitten: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1436272 - mio0: 35952 - format: RGBA16 -snowman/mr_blizzard_mouth: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1436272 - mio0: 48240 - format: RGBA16 -snowman/mr_blizzard_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1436272 - mio0: 42096 - format: RGBA16 -snufit/snufit_body: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1991184 - mio0: 28896 - format: RGBA16 -snufit/snufit_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1991184 - mio0: 30944 - format: RGBA16 -snufit/snufit_mask_strap: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 1991184 - mio0: 32992 - format: RGBA16 -snufit/snufit_mouth: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1991184 - mio0: 34016 - format: RGBA16 -sparkle/sparkle_0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 160912 - format: RGBA16 -sparkle/sparkle_1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 162960 - format: RGBA16 -sparkle/sparkle_2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 165008 - format: RGBA16 -sparkle/sparkle_3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 167056 - format: RGBA16 -sparkle/sparkle_4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 169104 - format: RGBA16 -sparkle/sparkle_5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 171152 - format: RGBA16 -sparkle_animation/sparkle_animation_0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 207496 - format: IA16 -sparkle_animation/sparkle_animation_1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 209544 - format: IA16 -sparkle_animation/sparkle_animation_2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 211592 - format: IA16 -sparkle_animation/sparkle_animation_3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 213640 - format: IA16 -sparkle_animation/sparkle_animation_4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 215688 - format: IA16 -spindrift/spindrift_face: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1436272 - mio0: 1744 - format: RGBA16 -spindrift/spindrift_head: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1436272 - mio0: 7888 - format: RGBA16 -spindrift/spindrift_leaf: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1436272 - mio0: 5840 - format: RGBA16 -spindrift/spindrift_petal: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1436272 - mio0: 3792 - format: RGBA16 -springboard/springboard_base_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1457744 - mio0: 2072 - format: RGBA16 -springboard/springboard_top_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1457744 - mio0: 24 - format: RGBA16 -star/star_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1568640 - mio0: 31280 - format: RGBA16 -star/star_surface: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 173808 - format: RGBA16 -stomp_smoke/stomp_smoke_0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 139592 - format: IA16 -stomp_smoke/stomp_smoke_1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 141640 - format: IA16 -stomp_smoke/stomp_smoke_2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 143688 - format: IA16 -stomp_smoke/stomp_smoke_3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 145736 - format: IA16 -stomp_smoke/stomp_smoke_4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 147784 - format: IA16 -stomp_smoke/stomp_smoke_5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 149832 - format: IA16 -sushi/sushi_eye: - type: TEXTURE - size: 1024 - width: 32 - height: 16 - offset: 1285392 - mio0: 38608 - format: RGBA16 -sushi/sushi_snout: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1285392 - mio0: 36560 - format: RGBA16 -sushi/sushi_tooth: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1285392 - mio0: 39632 - format: RGBA16 -swoop/swoop_body: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1991184 - mio0: 17008 - format: RGBA16 -swoop/swoop_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1991184 - mio0: 19056 - format: RGBA16 -swoop/swoop_nose: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1991184 - mio0: 21104 - format: RGBA16 -swoop/swoop_wing: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1991184 - mio0: 23152 - format: RGBA16 -thwomp/thwomp_face: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1215456 - mio0: 39168 - format: RGBA16 -thwomp/thwomp_surface: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1215456 - mio0: 43264 - format: RGBA16 -toad/toad_face: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1926752 - mio0: 22816 - format: RGBA16 -toad/toad_head: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1926752 - mio0: 24864 - format: RGBA16 -tornado/tornado: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1285392 - mio0: 75848 - format: IA16 -treasure_chest/treasure_chest_front: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1802256 - mio0: 87976 - format: RGBA16 -treasure_chest/treasure_chest_lock: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1802256 - mio0: 81832 - format: RGBA16 -treasure_chest/treasure_chest_lock_top: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1802256 - mio0: 85928 - format: RGBA16 -treasure_chest/treasure_chest_side: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1802256 - mio0: 83880 - format: RGBA16 -tree/palm_tree: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2094912 - mio0: 205336 - format: RGBA16 -tree/pine_tree: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2094912 - mio0: 196448 - format: RGBA16 -tree/snowy_pine_tree: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2094912 - mio0: 200776 - format: RGBA16 -tree/tree_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2094912 - mio0: 187944 - format: RGBA16 -tree/tree_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2094912 - mio0: 192040 - format: RGBA16 -ukiki/ukiki_butt: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1377744 - mio0: 39872 - format: RGBA16 -ukiki/ukiki_face: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1377744 - mio0: 31680 - format: RGBA16 -ukiki/ukiki_face_blink: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1377744 - mio0: 35776 - format: RGBA16 -ukiki/ukiki_fur: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1377744 - mio0: 41920 - format: RGBA16 -unagi/unagi_body: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1285392 - mio0: 44832 - format: RGBA16 -unagi/unagi_eye: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1285392 - mio0: 46880 - format: RGBA16 -unagi/unagi_head_base: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1285392 - mio0: 47392 - format: RGBA16 -unagi/unagi_mouth: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1285392 - mio0: 49952 - format: RGBA16 -unagi/unagi_tail: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1285392 - mio0: 50080 - format: RGBA16 -unagi/unagi_tooth: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1285392 - mio0: 49440 - format: RGBA16 -walk_smoke/walk_smoke_0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 122528 - format: IA16 -walk_smoke/walk_smoke_1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 124576 - format: IA16 -walk_smoke/walk_smoke_2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 126624 - format: IA16 -walk_smoke/walk_smoke_3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 128672 - format: IA16 -walk_smoke/walk_smoke_4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 130720 - format: IA16 -walk_smoke/walk_smoke_5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 132768 - format: IA16 -walk_smoke/walk_smoke_6: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 134816 - format: IA16 -warp_pipe/warp_pipe_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2094912 - mio0: 32320 - format: RGBA16 -warp_pipe/warp_pipe_top: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 37224 - format: RGBA16 -water_bubble/water_bubble: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1257760 - mio0: 65152 - format: RGBA16 -water_mine/water_mine_left_side_unused: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1599504 - mio0: 359104 - format: RGBA16 -water_mine/water_mine_right_side_unused: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1599504 - mio0: 363200 - format: RGBA16 -water_mine/water_mine_spike_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1599504 - mio0: 367296 - format: RGBA16 -water_ring/water_ring: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1802256 - mio0: 74624 - format: RGBA16 -water_splash/water_splash_0: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1125200 - mio0: 173512 - format: RGBA16 -water_splash/water_splash_1: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1125200 - mio0: 177608 - format: RGBA16 -water_splash/water_splash_2: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1125200 - mio0: 181704 - format: RGBA16 -water_splash/water_splash_3: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1125200 - mio0: 185800 - format: RGBA16 -water_splash/water_splash_4: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1125200 - mio0: 189896 - format: RGBA16 -water_splash/water_splash_5: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1125200 - mio0: 193992 - format: RGBA16 -water_splash/water_splash_6: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1125200 - mio0: 198088 - format: RGBA16 -water_splash/water_splash_7: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1125200 - mio0: 202184 - format: RGBA16 -water_wave/water_wave_0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 152408 - format: IA16 -water_wave/water_wave_1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 154456 - format: IA16 -water_wave/water_wave_2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 156504 - format: IA16 -water_wave/water_wave_3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1125200 - mio0: 158552 - format: IA16 -whirlpool/whirlpool: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1285392 - mio0: 75848 - format: IA16 -white_particle/snow_particle: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2094912 - mio0: 181920 - format: RGBA16 -white_particle_small/small_snow_particle: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1125200 - mio0: 206720 - format: RGBA16 -whomp/whomp_back: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1844608 - mio0: 115552 - format: RGBA16 -whomp/whomp_face: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1844608 - mio0: 119648 - format: RGBA16 -whomp/whomp_hand: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1844608 - mio0: 123744 - format: RGBA16 -whomp/whomp_surface: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1844608 - mio0: 125792 - format: RGBA16 -wiggler/wiggler_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1568640 - mio0: 31280 - format: RGBA16 -wiggler/wiggler_flower: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1568640 - mio0: 33328 - format: RGBA16 -wiggler/wiggler_frown: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1568640 - mio0: 35376 - format: RGBA16 -wiggler/wiggler_nose_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1568640 - mio0: 37424 - format: RGBA16 -wiggler/wiggler_nose_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1568640 - mio0: 41520 - format: RGBA16 -wiggler/wiggler_segment_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1568640 - mio0: 23088 - format: RGBA16 -wiggler/wiggler_segment_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1568640 - mio0: 27184 - format: RGBA16 -wooden_signpost/wooden_signpost_back: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 182728 - format: RGBA16 -wooden_signpost/wooden_signpost_front: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2094912 - mio0: 184776 - format: RGBA16 -yellow_sphere/yellow_sphere: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1215456 - mio0: 64 - format: RGBA16 -yellow_sphere_small/small_yellow_sphere: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1215456 - mio0: 64 - format: RGBA16 -yoshi/yoshi_eye: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1490032 - mio0: 115872 - format: RGBA16 -yoshi/yoshi_eye_blink: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1490032 - mio0: 116384 - format: RGBA16 -yoshi/yoshi_nostril: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1490032 - mio0: 116896 - format: RGBA16 -yoshi_egg/yoshi_egg_0_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1215456 - mio0: 22456 - format: RGBA16 -yoshi_egg/yoshi_egg_1_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1215456 - mio0: 24504 - format: RGBA16 -yoshi_egg/yoshi_egg_2_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1215456 - mio0: 26552 - format: RGBA16 -yoshi_egg/yoshi_egg_3_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1215456 - mio0: 28600 - format: RGBA16 -yoshi_egg/yoshi_egg_4_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1215456 - mio0: 30648 - format: RGBA16 -yoshi_egg/yoshi_egg_5_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1215456 - mio0: 32696 - format: RGBA16 -yoshi_egg/yoshi_egg_6_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1215456 - mio0: 34744 - format: RGBA16 -yoshi_egg/yoshi_egg_7_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1215456 - mio0: 36792 - format: RGBA16 diff --git a/assets/sm64/jp/assets.yml b/assets/sm64/jp/assets.yml deleted file mode 100644 index 6938fdc..0000000 --- a/assets/sm64/jp/assets.yml +++ /dev/null @@ -1,2327 +0,0 @@ -anims/anim_00: - type: SM64:ANIM - header: - offset: 5154352 - size: 24 - values: - offset: 5154628 - size: 2604 - indices: - offset: 5154376 - size: 252 -anims/anim_01: - type: SM64:ANIM - header: - offset: 5157232 - size: 24 - values: - offset: 5157532 - size: 6576 - indices: - offset: 5157280 - size: 252 -anims/anim_02: - type: SM64:ANIM - header: - offset: 5157256 - size: 24 - values: - offset: 5157532 - size: 6576 - indices: - offset: 5157280 - size: 252 -anims/anim_03: - type: SM64:ANIM - header: - offset: 5164108 - size: 24 - values: - offset: 5164384 - size: 4372 - indices: - offset: 5164132 - size: 252 -anims/anim_04: - type: SM64:ANIM - header: - offset: 5168756 - size: 24 - values: - offset: 5169032 - size: 2264 - indices: - offset: 5168780 - size: 252 -anims/anim_05: - type: SM64:ANIM - header: - offset: 5171296 - size: 24 - values: - offset: 5171572 - size: 5796 - indices: - offset: 5171320 - size: 252 -anims/anim_06: - type: SM64:ANIM - header: - offset: 5177368 - size: 24 - values: - offset: 5177644 - size: 892 - indices: - offset: 5177392 - size: 252 -anims/anim_07: - type: SM64:ANIM - header: - offset: 5157256 - size: 24 - values: - offset: 5178836 - size: 1468 - indices: - offset: 5178584 - size: 252 -anims/anim_08: - type: SM64:ANIM - header: - offset: 5178560 - size: 24 - values: - offset: 5178836 - size: 1468 - indices: - offset: 5178584 - size: 252 -anims/anim_09: - type: SM64:ANIM - header: - offset: 5180304 - size: 24 - values: - offset: 5180580 - size: 3052 - indices: - offset: 5180328 - size: 252 -anims/anim_0A: - type: SM64:ANIM - header: - offset: 5183632 - size: 24 - values: - offset: 5183908 - size: 2544 - indices: - offset: 5183656 - size: 252 -anims/anim_0B: - type: SM64:ANIM - header: - offset: 5186452 - size: 24 - values: - offset: 5186752 - size: 1348 - indices: - offset: 5186500 - size: 252 -anims/anim_0C: - type: SM64:ANIM - header: - offset: 5186476 - size: 24 - values: - offset: 5186752 - size: 1348 - indices: - offset: 5186500 - size: 252 -anims/anim_0D: - type: SM64:ANIM - header: - offset: 5188100 - size: 24 - values: - offset: 5188376 - size: 770 - indices: - offset: 5188124 - size: 252 -anims/anim_0E: - type: SM64:ANIM - header: - offset: 5157256 - size: 24 - values: - offset: 5189424 - size: 80 - indices: - offset: 5189172 - size: 252 -anims/anim_0F: - type: SM64:ANIM - header: - offset: 5157256 - size: 24 - values: - offset: 5189804 - size: 1502 - indices: - offset: 5189552 - size: 252 -anims/anim_10: - type: SM64:ANIM - header: - offset: 5189528 - size: 24 - values: - offset: 5189804 - size: 1502 - indices: - offset: 5189552 - size: 252 -anims/anim_11: - type: SM64:ANIM - header: - offset: 5191308 - size: 24 - values: - offset: 5191584 - size: 1174 - indices: - offset: 5191332 - size: 252 -anims/anim_12: - type: SM64:ANIM - header: - offset: 5192760 - size: 24 - values: - offset: 5193036 - size: 1318 - indices: - offset: 5192784 - size: 252 -anims/anim_13: - type: SM64:ANIM - header: - offset: 5194356 - size: 24 - values: - offset: 5194632 - size: 1678 - indices: - offset: 5194380 - size: 252 -anims/anim_14: - type: SM64:ANIM - header: - offset: 5196312 - size: 24 - values: - offset: 5196588 - size: 1102 - indices: - offset: 5196336 - size: 252 -anims/anim_15: - type: SM64:ANIM - header: - offset: 5197692 - size: 24 - values: - offset: 5197968 - size: 930 - indices: - offset: 5197716 - size: 252 -anims/anim_16: - type: SM64:ANIM - header: - offset: 5198900 - size: 24 - values: - offset: 5199176 - size: 4452 - indices: - offset: 5198924 - size: 252 -anims/anim_17: - type: SM64:ANIM - header: - offset: 5203628 - size: 24 - values: - offset: 5203904 - size: 2942 - indices: - offset: 5203652 - size: 252 -anims/anim_18: - type: SM64:ANIM - header: - offset: 5206848 - size: 24 - values: - offset: 5207124 - size: 4452 - indices: - offset: 5198924 - size: 252 -anims/anim_19: - type: SM64:ANIM - header: - offset: 5211576 - size: 24 - values: - offset: 5211852 - size: 5354 - indices: - offset: 5211600 - size: 252 -anims/anim_1A: - type: SM64:ANIM - header: - offset: 5217208 - size: 24 - values: - offset: 5217484 - size: 1146 - indices: - offset: 5217232 - size: 252 -anims/anim_1B: - type: SM64:ANIM - header: - offset: 5218632 - size: 24 - values: - offset: 5218908 - size: 2858 - indices: - offset: 5218656 - size: 252 -anims/anim_1C: - type: SM64:ANIM - header: - offset: 5221768 - size: 24 - values: - offset: 5222044 - size: 780 - indices: - offset: 5221792 - size: 252 -anims/anim_1D: - type: SM64:ANIM - header: - offset: 5222824 - size: 24 - values: - offset: 5223100 - size: 1380 - indices: - offset: 5222848 - size: 252 -anims/anim_1E: - type: SM64:ANIM - header: - offset: 5224480 - size: 24 - values: - offset: 5224756 - size: 1530 - indices: - offset: 5224504 - size: 252 -anims/anim_1F: - type: SM64:ANIM - header: - offset: 5226288 - size: 24 - values: - offset: 5226564 - size: 846 - indices: - offset: 5226312 - size: 252 -anims/anim_20: - type: SM64:ANIM - header: - offset: 5227412 - size: 24 - values: - offset: 5227688 - size: 7124 - indices: - offset: 5227436 - size: 252 -anims/anim_21: - type: SM64:ANIM - header: - offset: 5234812 - size: 24 - values: - offset: 5235088 - size: 2610 - indices: - offset: 5234836 - size: 252 -anims/anim_22: - type: SM64:ANIM - header: - offset: 5237700 - size: 24 - values: - offset: 5237976 - size: 1750 - indices: - offset: 5237724 - size: 252 -anims/anim_23: - type: SM64:ANIM - header: - offset: 5239728 - size: 24 - values: - offset: 5240004 - size: 8216 - indices: - offset: 5239752 - size: 252 -anims/anim_24: - type: SM64:ANIM - header: - offset: 5248220 - size: 24 - values: - offset: 5248496 - size: 9376 - indices: - offset: 5248244 - size: 252 -anims/anim_25: - type: SM64:ANIM - header: - offset: 5257872 - size: 24 - values: - offset: 5258148 - size: 8018 - indices: - offset: 5257896 - size: 252 -anims/anim_26: - type: SM64:ANIM - header: - offset: 5266168 - size: 24 - values: - offset: 5266444 - size: 7352 - indices: - offset: 5266192 - size: 252 -anims/anim_27: - type: SM64:ANIM - header: - offset: 5273796 - size: 24 - values: - offset: 5274072 - size: 8980 - indices: - offset: 5273820 - size: 252 -anims/anim_28: - type: SM64:ANIM - header: - offset: 5196312 - size: 24 - values: - offset: 5283328 - size: 1010 - indices: - offset: 5283076 - size: 252 -anims/anim_29: - type: SM64:ANIM - header: - offset: 5284340 - size: 24 - values: - offset: 5284616 - size: 582 - indices: - offset: 5284364 - size: 252 -anims/anim_2A: - type: SM64:ANIM - header: - offset: 5285200 - size: 24 - values: - offset: 5285476 - size: 1252 - indices: - offset: 5285224 - size: 252 -anims/anim_2B: - type: SM64:ANIM - header: - offset: 5285200 - size: 24 - values: - offset: 5287004 - size: 1582 - indices: - offset: 5286752 - size: 252 -anims/anim_2C: - type: SM64:ANIM - header: - offset: 5157232 - size: 24 - values: - offset: 5288888 - size: 5620 - indices: - offset: 5288636 - size: 252 -anims/anim_2D: - type: SM64:ANIM - header: - offset: 5157256 - size: 24 - values: - offset: 5288888 - size: 5620 - indices: - offset: 5288636 - size: 252 -anims/anim_2E: - type: SM64:ANIM - header: - offset: 5294508 - size: 24 - values: - offset: 5294784 - size: 3028 - indices: - offset: 5294532 - size: 252 -anims/anim_2F: - type: SM64:ANIM - header: - offset: 5239728 - size: 24 - values: - offset: 5298088 - size: 7420 - indices: - offset: 5297836 - size: 252 -anims/anim_30: - type: SM64:ANIM - header: - offset: 5171296 - size: 24 - values: - offset: 5305784 - size: 5428 - indices: - offset: 5305532 - size: 252 -anims/anim_31: - type: SM64:ANIM - header: - offset: 5311212 - size: 24 - values: - offset: 5311488 - size: 10660 - indices: - offset: 5311236 - size: 252 -anims/anim_32: - type: SM64:ANIM - header: - offset: 5227412 - size: 24 - values: - offset: 5322424 - size: 7890 - indices: - offset: 5322172 - size: 252 -anims/anim_33: - type: SM64:ANIM - header: - offset: 5330316 - size: 24 - values: - offset: 5330592 - size: 2840 - indices: - offset: 5330340 - size: 252 -anims/anim_34: - type: SM64:ANIM - header: - offset: 5191308 - size: 24 - values: - offset: 5333708 - size: 1300 - indices: - offset: 5333456 - size: 252 -anims/anim_35: - type: SM64:ANIM - header: - offset: 5335008 - size: 24 - values: - offset: 5335284 - size: 3704 - indices: - offset: 5335032 - size: 252 -anims/anim_36: - type: SM64:ANIM - header: - offset: 5338988 - size: 24 - values: - offset: 5339264 - size: 3700 - indices: - offset: 5339012 - size: 252 -anims/anim_37: - type: SM64:ANIM - header: - offset: 5239728 - size: 24 - values: - offset: 5343240 - size: 6828 - indices: - offset: 5342988 - size: 252 -anims/anim_38: - type: SM64:ANIM - header: - offset: 5177368 - size: 24 - values: - offset: 5350344 - size: 844 - indices: - offset: 5350092 - size: 252 -anims/anim_39: - type: SM64:ANIM - header: - offset: 5351188 - size: 24 - values: - offset: 5351464 - size: 12418 - indices: - offset: 5351212 - size: 252 -anims/anim_3A: - type: SM64:ANIM - header: - offset: 5363884 - size: 24 - values: - offset: 5364160 - size: 374 - indices: - offset: 5363908 - size: 252 -anims/anim_3B: - type: SM64:ANIM - header: - offset: 5191308 - size: 24 - values: - offset: 5364812 - size: 1204 - indices: - offset: 5364560 - size: 252 -anims/anim_3C: - type: SM64:ANIM - header: - offset: 5366016 - size: 24 - values: - offset: 5366316 - size: 774 - indices: - offset: 5366064 - size: 252 -anims/anim_3D: - type: SM64:ANIM - header: - offset: 5366040 - size: 24 - values: - offset: 5366316 - size: 774 - indices: - offset: 5366064 - size: 252 -anims/anim_3E: - type: SM64:ANIM - header: - offset: 5351188 - size: 24 - values: - offset: 5367368 - size: 11490 - indices: - offset: 5367116 - size: 252 -anims/anim_3F: - type: SM64:ANIM - header: - offset: 5378860 - size: 24 - values: - offset: 5379136 - size: 3094 - indices: - offset: 5378884 - size: 252 -anims/anim_40: - type: SM64:ANIM - header: - offset: 5382232 - size: 24 - values: - offset: 5382508 - size: 1094 - indices: - offset: 5382256 - size: 252 -anims/anim_41: - type: SM64:ANIM - header: - offset: 5221768 - size: 24 - values: - offset: 5383880 - size: 536 - indices: - offset: 5383628 - size: 252 -anims/anim_42: - type: SM64:ANIM - header: - offset: 5384416 - size: 24 - values: - offset: 5384692 - size: 956 - indices: - offset: 5384440 - size: 252 -anims/anim_43: - type: SM64:ANIM - header: - offset: 5385648 - size: 24 - values: - offset: 5385924 - size: 84 - indices: - offset: 5385672 - size: 252 -anims/anim_44: - type: SM64:ANIM - header: - offset: 5196312 - size: 24 - values: - offset: 5386284 - size: 650 - indices: - offset: 5386032 - size: 252 -anims/anim_45: - type: SM64:ANIM - header: - offset: 5157256 - size: 24 - values: - offset: 5387236 - size: 1190 - indices: - offset: 5386984 - size: 252 -anims/anim_46: - type: SM64:ANIM - header: - offset: 5386960 - size: 24 - values: - offset: 5387236 - size: 1190 - indices: - offset: 5386984 - size: 252 -anims/anim_47: - type: SM64:ANIM - header: - offset: 5366016 - size: 24 - values: - offset: 5388704 - size: 838 - indices: - offset: 5388452 - size: 252 -anims/anim_48: - type: SM64:ANIM - header: - offset: 5389544 - size: 24 - values: - offset: 5389820 - size: 5098 - indices: - offset: 5389568 - size: 252 -anims/anim_49: - type: SM64:ANIM - header: - offset: 5191308 - size: 24 - values: - offset: 5395196 - size: 1298 - indices: - offset: 5394944 - size: 252 -anims/anim_4A: - type: SM64:ANIM - header: - offset: 5396496 - size: 24 - values: - offset: 5396772 - size: 616 - indices: - offset: 5396520 - size: 252 -anims/anim_4B: - type: SM64:ANIM - header: - offset: 5192760 - size: 24 - values: - offset: 5397664 - size: 1386 - indices: - offset: 5397412 - size: 252 -anims/anim_4C: - type: SM64:ANIM - header: - offset: 5399052 - size: 24 - values: - offset: 5399328 - size: 670 - indices: - offset: 5399076 - size: 252 -anims/anim_4D: - type: SM64:ANIM - header: - offset: 5177368 - size: 24 - values: - offset: 5400300 - size: 2456 - indices: - offset: 5400048 - size: 252 -anims/anim_4E: - type: SM64:ANIM - header: - offset: 5400024 - size: 24 - values: - offset: 5400300 - size: 2456 - indices: - offset: 5400048 - size: 252 -anims/anim_4F: - type: SM64:ANIM - header: - offset: 5226288 - size: 24 - values: - offset: 5403032 - size: 1578 - indices: - offset: 5402780 - size: 252 -anims/anim_50: - type: SM64:ANIM - header: - offset: 5363884 - size: 24 - values: - offset: 5404888 - size: 420 - indices: - offset: 5404636 - size: 252 -anims/anim_51: - type: SM64:ANIM - header: - offset: 5405308 - size: 24 - values: - offset: 5405584 - size: 1002 - indices: - offset: 5405332 - size: 252 -anims/anim_52: - type: SM64:ANIM - header: - offset: 5366016 - size: 24 - values: - offset: 5406864 - size: 878 - indices: - offset: 5406612 - size: 252 -anims/anim_53: - type: SM64:ANIM - header: - offset: 5407744 - size: 24 - values: - offset: 5408020 - size: 1970 - indices: - offset: 5407768 - size: 252 -anims/anim_54: - type: SM64:ANIM - header: - offset: 5409992 - size: 24 - values: - offset: 5410268 - size: 1314 - indices: - offset: 5410016 - size: 252 -anims/anim_55: - type: SM64:ANIM - header: - offset: 5411584 - size: 24 - values: - offset: 5411860 - size: 11268 - indices: - offset: 5411608 - size: 252 -anims/anim_56: - type: SM64:ANIM - header: - offset: 5157256 - size: 24 - values: - offset: 5423428 - size: 1560 - indices: - offset: 5423176 - size: 252 -anims/anim_57: - type: SM64:ANIM - header: - offset: 5423152 - size: 24 - values: - offset: 5423428 - size: 1560 - indices: - offset: 5423176 - size: 252 -anims/anim_58: - type: SM64:ANIM - header: - offset: 5424988 - size: 24 - values: - offset: 5425264 - size: 1082 - indices: - offset: 5425012 - size: 252 -anims/anim_59: - type: SM64:ANIM - header: - offset: 5426348 - size: 24 - values: - offset: 5426624 - size: 3052 - indices: - offset: 5426372 - size: 252 -anims/anim_5A: - type: SM64:ANIM - header: - offset: 5429676 - size: 24 - values: - offset: 5429952 - size: 3278 - indices: - offset: 5429700 - size: 252 -anims/anim_5B: - type: SM64:ANIM - header: - offset: 5221768 - size: 24 - values: - offset: 5433508 - size: 720 - indices: - offset: 5433256 - size: 252 -anims/anim_5C: - type: SM64:ANIM - header: - offset: 5434228 - size: 24 - values: - offset: 5434504 - size: 1258 - indices: - offset: 5434252 - size: 252 -anims/anim_5D: - type: SM64:ANIM - header: - offset: 5382232 - size: 24 - values: - offset: 5436040 - size: 1142 - indices: - offset: 5435788 - size: 252 -anims/anim_5E: - type: SM64:ANIM - header: - offset: 5351188 - size: 24 - values: - offset: 5437460 - size: 12110 - indices: - offset: 5437208 - size: 252 -anims/anim_5F: - type: SM64:ANIM - header: - offset: 5449572 - size: 24 - values: - offset: 5449848 - size: 5058 - indices: - offset: 5449596 - size: 252 -anims/anim_60: - type: SM64:ANIM - header: - offset: 5454908 - size: 24 - values: - offset: 5455184 - size: 4020 - indices: - offset: 5454932 - size: 252 -anims/anim_61: - type: SM64:ANIM - header: - offset: 5459204 - size: 24 - values: - offset: 5459480 - size: 12660 - indices: - offset: 5459228 - size: 252 -anims/anim_62: - type: SM64:ANIM - header: - offset: 5221768 - size: 24 - values: - offset: 5472416 - size: 742 - indices: - offset: 5472164 - size: 252 -anims/anim_63: - type: SM64:ANIM - header: - offset: 5473160 - size: 24 - values: - offset: 5473436 - size: 1626 - indices: - offset: 5473184 - size: 252 -anims/anim_64: - type: SM64:ANIM - header: - offset: 5475064 - size: 24 - values: - offset: 5475340 - size: 1246 - indices: - offset: 5475088 - size: 252 -anims/anim_65: - type: SM64:ANIM - header: - offset: 5226288 - size: 24 - values: - offset: 5476864 - size: 1700 - indices: - offset: 5476612 - size: 252 -anims/anim_66: - type: SM64:ANIM - header: - offset: 5478564 - size: 24 - values: - offset: 5478840 - size: 1948 - indices: - offset: 5478588 - size: 252 -anims/anim_67: - type: SM64:ANIM - header: - offset: 5480788 - size: 24 - values: - offset: 5481064 - size: 386 - indices: - offset: 5480812 - size: 252 -anims/anim_68: - type: SM64:ANIM - header: - offset: 5481452 - size: 24 - values: - offset: 5481728 - size: 340 - indices: - offset: 5481476 - size: 252 -anims/anim_69: - type: SM64:ANIM - header: - offset: 5221768 - size: 24 - values: - offset: 5482344 - size: 764 - indices: - offset: 5482092 - size: 252 -anims/anim_6A: - type: SM64:ANIM - header: - offset: 5483108 - size: 24 - values: - offset: 5483384 - size: 1060 - indices: - offset: 5483132 - size: 252 -anims/anim_6B: - type: SM64:ANIM - header: - offset: 5366016 - size: 24 - values: - offset: 5484720 - size: 940 - indices: - offset: 5484468 - size: 252 -anims/anim_6C: - type: SM64:ANIM - header: - offset: 5485660 - size: 24 - values: - offset: 5485936 - size: 1284 - indices: - offset: 5485684 - size: 252 -anims/anim_6D: - type: SM64:ANIM - header: - offset: 5192760 - size: 24 - values: - offset: 5487496 - size: 1286 - indices: - offset: 5487244 - size: 252 -anims/anim_6E: - type: SM64:ANIM - header: - offset: 5191308 - size: 24 - values: - offset: 5489060 - size: 1136 - indices: - offset: 5488808 - size: 252 -anims/anim_6F: - type: SM64:ANIM - header: - offset: 5284340 - size: 24 - values: - offset: 5490496 - size: 98 - indices: - offset: 5490244 - size: 252 -anims/anim_70: - type: SM64:ANIM - header: - offset: 5490220 - size: 24 - values: - offset: 5490496 - size: 98 - indices: - offset: 5490244 - size: 252 -anims/anim_71: - type: SM64:ANIM - header: - offset: 5490596 - size: 24 - values: - offset: 5490872 - size: 2078 - indices: - offset: 5490620 - size: 252 -anims/anim_72: - type: SM64:ANIM - header: - offset: 5492952 - size: 24 - values: - offset: 5493252 - size: 4342 - indices: - offset: 5493000 - size: 252 -anims/anim_73: - type: SM64:ANIM - header: - offset: 5492952 - size: 24 - values: - offset: 5493252 - size: 4342 - indices: - offset: 5493000 - size: 252 -anims/anim_74: - type: SM64:ANIM - header: - offset: 5490596 - size: 24 - values: - offset: 5497872 - size: 1844 - indices: - offset: 5497620 - size: 252 -anims/anim_75: - type: SM64:ANIM - header: - offset: 5490596 - size: 24 - values: - offset: 5499992 - size: 1892 - indices: - offset: 5499740 - size: 252 -anims/anim_76: - type: SM64:ANIM - header: - offset: 5239728 - size: 24 - values: - offset: 5502160 - size: 4648 - indices: - offset: 5501908 - size: 252 -anims/anim_77: - type: SM64:ANIM - header: - offset: 5198900 - size: 24 - values: - offset: 5507084 - size: 2464 - indices: - offset: 5506832 - size: 252 -anims/anim_78: - type: SM64:ANIM - header: - offset: 5509548 - size: 24 - values: - offset: 5509824 - size: 10454 - indices: - offset: 5509572 - size: 252 -anims/anim_79: - type: SM64:ANIM - header: - offset: 5520280 - size: 24 - values: - offset: 5520556 - size: 3634 - indices: - offset: 5520304 - size: 252 -anims/anim_7A: - type: SM64:ANIM - header: - offset: 5524192 - size: 24 - values: - offset: 5524468 - size: 402 - indices: - offset: 5524216 - size: 252 -anims/anim_7B: - type: SM64:ANIM - header: - offset: 5409992 - size: 24 - values: - offset: 5525148 - size: 2360 - indices: - offset: 5524896 - size: 252 -anims/anim_7C: - type: SM64:ANIM - header: - offset: 5409992 - size: 24 - values: - offset: 5527784 - size: 2300 - indices: - offset: 5527532 - size: 252 -anims/anim_7D: - type: SM64:ANIM - header: - offset: 5285200 - size: 24 - values: - offset: 5530360 - size: 1114 - indices: - offset: 5530108 - size: 252 -anims/anim_7E: - type: SM64:ANIM - header: - offset: 5171296 - size: 24 - values: - offset: 5531752 - size: 4538 - indices: - offset: 5531500 - size: 252 -anims/anim_7F: - type: SM64:ANIM - header: - offset: 5218632 - size: 24 - values: - offset: 5536568 - size: 3622 - indices: - offset: 5536316 - size: 252 -anims/anim_80: - type: SM64:ANIM - header: - offset: 5218632 - size: 24 - values: - offset: 5540468 - size: 4248 - indices: - offset: 5540216 - size: 252 -anims/anim_81: - type: SM64:ANIM - header: - offset: 5544716 - size: 24 - values: - offset: 5544992 - size: 4308 - indices: - offset: 5544740 - size: 252 -anims/anim_82: - type: SM64:ANIM - header: - offset: 5549300 - size: 24 - values: - offset: 5549576 - size: 5770 - indices: - offset: 5549324 - size: 252 -anims/anim_83: - type: SM64:ANIM - header: - offset: 5555348 - size: 24 - values: - offset: 5555624 - size: 4734 - indices: - offset: 5555372 - size: 252 -anims/anim_84: - type: SM64:ANIM - header: - offset: 5164108 - size: 24 - values: - offset: 5560636 - size: 4756 - indices: - offset: 5560384 - size: 252 -anims/anim_85: - type: SM64:ANIM - header: - offset: 5285200 - size: 24 - values: - offset: 5565668 - size: 324 - indices: - offset: 5565416 - size: 252 -anims/anim_86: - type: SM64:ANIM - header: - offset: 5565992 - size: 24 - values: - offset: 5566268 - size: 2902 - indices: - offset: 5566016 - size: 252 -anims/anim_87: - type: SM64:ANIM - header: - offset: 5330316 - size: 24 - values: - offset: 5569448 - size: 1564 - indices: - offset: 5569196 - size: 252 -anims/anim_88: - type: SM64:ANIM - header: - offset: 5434228 - size: 24 - values: - offset: 5571312 - size: 1260 - indices: - offset: 5571060 - size: 252 -anims/anim_89: - type: SM64:ANIM - header: - offset: 5571036 - size: 24 - values: - offset: 5571312 - size: 1260 - indices: - offset: 5571060 - size: 252 -anims/anim_8A: - type: SM64:ANIM - header: - offset: 5565992 - size: 24 - values: - offset: 5572848 - size: 2980 - indices: - offset: 5572596 - size: 252 -anims/anim_8B: - type: SM64:ANIM - header: - offset: 5426348 - size: 24 - values: - offset: 5576104 - size: 2970 - indices: - offset: 5575852 - size: 252 -anims/anim_8C: - type: SM64:ANIM - header: - offset: 5396496 - size: 24 - values: - offset: 5579352 - size: 646 - indices: - offset: 5579100 - size: 252 -anims/anim_8D: - type: SM64:ANIM - header: - offset: 5405308 - size: 24 - values: - offset: 5580276 - size: 1086 - indices: - offset: 5580024 - size: 252 -anims/anim_8E: - type: SM64:ANIM - header: - offset: 5157256 - size: 24 - values: - offset: 5581664 - size: 1618 - indices: - offset: 5581412 - size: 252 -anims/anim_8F: - type: SM64:ANIM - header: - offset: 5178560 - size: 24 - values: - offset: 5581664 - size: 1618 - indices: - offset: 5581412 - size: 252 -anims/anim_90: - type: SM64:ANIM - header: - offset: 5196312 - size: 24 - values: - offset: 5583560 - size: 1012 - indices: - offset: 5583308 - size: 252 -anims/anim_91: - type: SM64:ANIM - header: - offset: 5584572 - size: 24 - values: - offset: 5584848 - size: 266 - indices: - offset: 5584596 - size: 252 -anims/anim_92: - type: SM64:ANIM - header: - offset: 5585116 - size: 24 - values: - offset: 5585392 - size: 5600 - indices: - offset: 5585140 - size: 252 -anims/anim_93: - type: SM64:ANIM - header: - offset: 5221768 - size: 24 - values: - offset: 5591268 - size: 602 - indices: - offset: 5591016 - size: 252 -anims/anim_94: - type: SM64:ANIM - header: - offset: 5157256 - size: 24 - values: - offset: 5592148 - size: 80 - indices: - offset: 5189172 - size: 252 -anims/anim_95: - type: SM64:ANIM - header: - offset: 5480788 - size: 24 - values: - offset: 5592504 - size: 280 - indices: - offset: 5592252 - size: 252 -anims/anim_96: - type: SM64:ANIM - header: - offset: 5221768 - size: 24 - values: - offset: 5593060 - size: 680 - indices: - offset: 5592808 - size: 252 -anims/anim_97: - type: SM64:ANIM - header: - offset: 5363884 - size: 24 - values: - offset: 5594016 - size: 416 - indices: - offset: 5593764 - size: 252 -anims/anim_98: - type: SM64:ANIM - header: - offset: 5171296 - size: 24 - values: - offset: 5594708 - size: 2758 - indices: - offset: 5594456 - size: 252 -anims/anim_99: - type: SM64:ANIM - header: - offset: 5597468 - size: 24 - values: - offset: 5597744 - size: 7014 - indices: - offset: 5597492 - size: 252 -anims/anim_9A: - type: SM64:ANIM - header: - offset: 5396496 - size: 24 - values: - offset: 5605036 - size: 644 - indices: - offset: 5604784 - size: 252 -anims/anim_9B: - type: SM64:ANIM - header: - offset: 5396496 - size: 24 - values: - offset: 5605956 - size: 630 - indices: - offset: 5605704 - size: 252 -anims/anim_9C: - type: SM64:ANIM - header: - offset: 5606588 - size: 24 - values: - offset: 5606864 - size: 4884 - indices: - offset: 5606612 - size: 252 -anims/anim_9D: - type: SM64:ANIM - header: - offset: 5611748 - size: 24 - values: - offset: 5612024 - size: 1944 - indices: - offset: 5611772 - size: 252 -anims/anim_9E: - type: SM64:ANIM - header: - offset: 5544716 - size: 24 - values: - offset: 5614244 - size: 4008 - indices: - offset: 5613992 - size: 252 -anims/anim_9F: - type: SM64:ANIM - header: - offset: 5191308 - size: 24 - values: - offset: 5618528 - size: 774 - indices: - offset: 5618276 - size: 252 -anims/anim_A0: - type: SM64:ANIM - header: - offset: 5221768 - size: 24 - values: - offset: 5619580 - size: 390 - indices: - offset: 5619328 - size: 252 -anims/anim_A1: - type: SM64:ANIM - header: - offset: 5619972 - size: 24 - values: - offset: 5620248 - size: 920 - indices: - offset: 5619996 - size: 252 -anims/anim_A2: - type: SM64:ANIM - header: - offset: 5194356 - size: 24 - values: - offset: 5621444 - size: 1448 - indices: - offset: 5621192 - size: 252 -anims/anim_A3: - type: SM64:ANIM - header: - offset: 5409992 - size: 24 - values: - offset: 5623168 - size: 2590 - indices: - offset: 5622916 - size: 252 -anims/anim_A4: - type: SM64:ANIM - header: - offset: 5224480 - size: 24 - values: - offset: 5626036 - size: 1650 - indices: - offset: 5625784 - size: 252 -anims/anim_A5: - type: SM64:ANIM - header: - offset: 5157232 - size: 24 - values: - offset: 5627964 - size: 5148 - indices: - offset: 5627712 - size: 252 -anims/anim_A6: - type: SM64:ANIM - header: - offset: 5633112 - size: 24 - values: - offset: 5633388 - size: 4646 - indices: - offset: 5633136 - size: 252 -anims/anim_A7: - type: SM64:ANIM - header: - offset: 5565992 - size: 24 - values: - offset: 5638312 - size: 3060 - indices: - offset: 5638060 - size: 252 -anims/anim_A8: - type: SM64:ANIM - header: - offset: 5544716 - size: 24 - values: - offset: 5641648 - size: 3910 - indices: - offset: 5641396 - size: 252 -anims/anim_A9: - type: SM64:ANIM - header: - offset: 5434228 - size: 24 - values: - offset: 5645836 - size: 1728 - indices: - offset: 5645584 - size: 252 -anims/anim_AA: - type: SM64:ANIM - header: - offset: 5483108 - size: 24 - values: - offset: 5647840 - size: 972 - indices: - offset: 5647588 - size: 252 -anims/anim_AB: - type: SM64:ANIM - header: - offset: 5221768 - size: 24 - values: - offset: 5649088 - size: 750 - indices: - offset: 5648836 - size: 252 -anims/anim_AC: - type: SM64:ANIM - header: - offset: 5649840 - size: 24 - values: - offset: 5650116 - size: 1706 - indices: - offset: 5649864 - size: 252 -anims/anim_AD: - type: SM64:ANIM - header: - offset: 5407744 - size: 24 - values: - offset: 5652100 - size: 1860 - indices: - offset: 5651848 - size: 252 -anims/anim_AE: - type: SM64:ANIM - header: - offset: 5366016 - size: 24 - values: - offset: 5654236 - size: 956 - indices: - offset: 5653984 - size: 252 -anims/anim_AF: - type: SM64:ANIM - header: - offset: 5407744 - size: 24 - values: - offset: 5655468 - size: 2160 - indices: - offset: 5655216 - size: 252 -anims/anim_B0: - type: SM64:ANIM - header: - offset: 5480788 - size: 24 - values: - offset: 5657904 - size: 440 - indices: - offset: 5657652 - size: 252 -anims/anim_B1: - type: SM64:ANIM - header: - offset: 5658344 - size: 24 - values: - offset: 5658620 - size: 2418 - indices: - offset: 5658368 - size: 252 -anims/anim_B2: - type: SM64:ANIM - header: - offset: 5224480 - size: 24 - values: - offset: 5661316 - size: 1824 - indices: - offset: 5661064 - size: 252 -anims/anim_B3: - type: SM64:ANIM - header: - offset: 5663140 - size: 24 - values: - offset: 5663416 - size: 6494 - indices: - offset: 5663164 - size: 252 -anims/anim_B4: - type: SM64:ANIM - header: - offset: 5490596 - size: 24 - values: - offset: 5670188 - size: 1846 - indices: - offset: 5669936 - size: 252 -anims/anim_B5: - type: SM64:ANIM - header: - offset: 5434228 - size: 24 - values: - offset: 5672336 - size: 1382 - indices: - offset: 5672084 - size: 252 -anims/anim_B6: - type: SM64:ANIM - header: - offset: 5672060 - size: 24 - values: - offset: 5672336 - size: 1382 - indices: - offset: 5672084 - size: 252 -anims/anim_B7: - type: SM64:ANIM - header: - offset: 5565992 - size: 24 - values: - offset: 5673996 - size: 2980 - indices: - offset: 5673744 - size: 252 -anims/anim_B8: - type: SM64:ANIM - header: - offset: 5330316 - size: 24 - values: - offset: 5677252 - size: 776 - indices: - offset: 5677000 - size: 252 -anims/anim_B9: - type: SM64:ANIM - header: - offset: 5407744 - size: 24 - values: - offset: 5678304 - size: 2068 - indices: - offset: 5678052 - size: 252 -anims/anim_BA: - type: SM64:ANIM - header: - offset: 5424988 - size: 24 - values: - offset: 5680648 - size: 986 - indices: - offset: 5680396 - size: 252 -anims/anim_BB: - type: SM64:ANIM - header: - offset: 5681636 - size: 24 - values: - offset: 5681912 - size: 4132 - indices: - offset: 5681660 - size: 252 -anims/anim_BC: - type: SM64:ANIM - header: - offset: 5157256 - size: 24 - values: - offset: 5686344 - size: 1528 - indices: - offset: 5686092 - size: 252 -anims/anim_BD: - type: SM64:ANIM - header: - offset: 5189528 - size: 24 - values: - offset: 5686344 - size: 1528 - indices: - offset: 5686092 - size: 252 -anims/anim_BE: - type: SM64:ANIM - header: - offset: 5221768 - size: 24 - values: - offset: 5688148 - size: 760 - indices: - offset: 5687896 - size: 252 -anims/anim_BF: - type: SM64:ANIM - header: - offset: 5490596 - size: 24 - values: - offset: 5689184 - size: 1936 - indices: - offset: 5688932 - size: 252 -anims/anim_C0: - type: SM64:ANIM - header: - offset: 5691120 - size: 24 - values: - offset: 5691396 - size: 2452 - indices: - offset: 5691144 - size: 252 -anims/anim_C1: - type: SM64:ANIM - header: - offset: 5183632 - size: 24 - values: - offset: 5694124 - size: 2468 - indices: - offset: 5693872 - size: 252 -anims/anim_C2: - type: SM64:ANIM - header: - offset: 5171296 - size: 24 - values: - offset: 5696868 - size: 5422 - indices: - offset: 5696616 - size: 252 -anims/anim_C3: - type: SM64:ANIM - header: - offset: 5409992 - size: 24 - values: - offset: 5702568 - size: 1942 - indices: - offset: 5702316 - size: 252 -anims/anim_C4: - type: SM64:ANIM - header: - offset: 5409992 - size: 24 - values: - offset: 5704788 - size: 1942 - indices: - offset: 5702316 - size: 252 -anims/anim_C5: - type: SM64:ANIM - header: - offset: 5409992 - size: 24 - values: - offset: 5707008 - size: 1942 - indices: - offset: 5702316 - size: 252 -anims/anim_C6: - type: SM64:ANIM - header: - offset: 5330316 - size: 24 - values: - offset: 5709228 - size: 1666 - indices: - offset: 5708976 - size: 252 -anims/anim_C7: - type: SM64:ANIM - header: - offset: 5330316 - size: 24 - values: - offset: 5711172 - size: 2844 - indices: - offset: 5710920 - size: 252 -anims/anim_C8: - type: SM64:ANIM - header: - offset: 5714016 - size: 24 - values: - offset: 5714292 - size: 1648 - indices: - offset: 5714040 - size: 252 -anims/anim_C9: - type: SM64:ANIM - header: - offset: 5226288 - size: 24 - values: - offset: 5716216 - size: 1940 - indices: - offset: 5715964 - size: 252 -anims/anim_CA: - type: SM64:ANIM - header: - offset: 5718156 - size: 24 - values: - offset: 5718432 - size: 1998 - indices: - offset: 5718180 - size: 252 -anims/anim_CB: - type: SM64:ANIM - header: - offset: 5217208 - size: 24 - values: - offset: 5720732 - size: 1382 - indices: - offset: 5720480 - size: 252 -anims/anim_CC: - type: SM64:ANIM - header: - offset: 5157256 - size: 24 - values: - offset: 5720732 - size: 1382 - indices: - offset: 5720480 - size: 252 -anims/anim_CD: - type: SM64:ANIM - header: - offset: 5722116 - size: 24 - values: - offset: 5722392 - size: 5184 - indices: - offset: 5722140 - size: 252 -anims/anim_CE: - type: SM64:ANIM - header: - offset: 5192760 - size: 24 - values: - offset: 5727852 - size: 1460 - indices: - offset: 5727600 - size: 252 -anims/anim_CF: - type: SM64:ANIM - header: - offset: 5729312 - size: 24 - values: - offset: 5729588 - size: 2708 - indices: - offset: 5729336 - size: 252 -anims/anim_D0: - type: SM64:ANIM - header: - offset: 5405308 - size: 24 - values: - offset: 5732572 - size: 730 - indices: - offset: 5732320 - size: 252 -demos/bbh: - type: BLOB - size: 988 - offset: 5733368 -demos/ccm: - type: BLOB - size: 1320 - offset: 5734356 -demos/hmc: - type: BLOB - size: 980 - offset: 5735676 -demos/jrb: - type: BLOB - size: 620 - offset: 5736656 -demos/pss: - type: BLOB - size: 748 - offset: 5737948 -demos/unused: - type: BLOB - size: 108 - offset: 5738696 -demos/wf: - type: BLOB - size: 672 - offset: 5737276 diff --git a/assets/sm64/jp/levels.yml b/assets/sm64/jp/levels.yml deleted file mode 100644 index 8ba20f1..0000000 --- a/assets/sm64/jp/levels.yml +++ /dev/null @@ -1,3045 +0,0 @@ -bbh/0: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3604960 - mio0: 0 - format: RGBA16 -bbh/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3604960 - mio0: 4096 - format: RGBA16 -bbh/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3604960 - mio0: 6144 - format: RGBA16 -bbh/3: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3604960 - mio0: 8192 - format: RGBA16 -bbh/4: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 3604960 - mio0: 12288 - format: RGBA16 -bbh/5: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3604960 - mio0: 13312 - format: RGBA16 -bbh/6: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 3604960 - mio0: 17408 - format: RGBA16 -bitdw/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4533568 - mio0: 0 - format: RGBA16 -bitdw/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4533568 - mio0: 2048 - format: RGBA16 -bitdw/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4533568 - mio0: 4096 - format: RGBA16 -bitdw/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4533568 - mio0: 6144 - format: RGBA16 -bitfs/0: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4584464 - mio0: 0 - format: RGBA16 -bitfs/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4584464 - mio0: 4096 - format: RGBA16 -bitfs/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4584464 - mio0: 6144 - format: RGBA16 -bits/0: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4629216 - mio0: 0 - format: RGBA16 -bits/1: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 4629216 - mio0: 4096 - format: RGBA16 -bits/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4629216 - mio0: 8192 - format: RGBA16 -bob/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4170512 - mio0: 0 - format: RGBA16 -bob/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4170512 - mio0: 2048 - format: RGBA16 -bob/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4170512 - mio0: 4096 - format: RGBA16 -bob/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4170512 - mio0: 6144 - format: RGBA16 -bob/4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4170512 - mio0: 8192 - format: RGBA16 -bowser_1/0: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4982976 - mio0: 0 - format: RGBA16 -bowser_1/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4982976 - mio0: 4096 - format: RGBA16 -bowser_1/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4982976 - mio0: 6144 - format: RGBA16 -bowser_2/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 5028720 - mio0: 0 - format: RGBA16 -bowser_3/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 5032864 - mio0: 0 - format: RGBA16 -bowser_3/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 5032864 - mio0: 2048 - format: RGBA16 -bowser_3/2: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 5032864 - mio0: 4096 - format: RGBA16 -castle_grounds/0: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4492416 - mio0: 0 - format: RGBA16 -castle_grounds/1: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 4492416 - mio0: 4096 - format: RGBA16 -castle_grounds/2: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 4492416 - mio0: 8192 - format: RGBA16 -castle_grounds/3: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4492416 - mio0: 51688 - format: RGBA16 -castle_grounds/4: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4492416 - mio0: 55784 - format: RGBA16 -castle_inside/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3754192 - mio0: 2048 - format: RGBA16 -castle_inside/10: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3754192 - mio0: 28672 - format: RGBA16 -castle_inside/11: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3754192 - mio0: 30720 - format: RGBA16 -castle_inside/12: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3754192 - mio0: 32768 - format: RGBA16 -castle_inside/13: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3754192 - mio0: 34816 - format: RGBA16 -castle_inside/14: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3754192 - mio0: 36864 - format: RGBA16 -castle_inside/15: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3754192 - mio0: 38912 - format: RGBA16 -castle_inside/16: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3754192 - mio0: 40960 - format: IA16 -castle_inside/17: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3754192 - mio0: 43008 - format: RGBA16 -castle_inside/18: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3754192 - mio0: 47104 - format: RGBA16 -castle_inside/19: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3754192 - mio0: 51200 - format: RGBA16 -castle_inside/2: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3298272 - mio0: 47104 - format: IA16 -castle_inside/20: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3754192 - mio0: 55296 - format: RGBA16 -castle_inside/21: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3754192 - mio0: 59392 - format: RGBA16 -castle_inside/22: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3754192 - mio0: 63488 - format: RGBA16 -castle_inside/23: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3754192 - mio0: 67584 - format: RGBA16 -castle_inside/24: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3754192 - mio0: 71680 - format: RGBA16 -castle_inside/25: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3754192 - mio0: 75776 - format: RGBA16 -castle_inside/26: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3754192 - mio0: 79872 - format: RGBA16 -castle_inside/27: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3754192 - mio0: 83968 - format: RGBA16 -castle_inside/28: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3754192 - mio0: 88064 - format: RGBA16 -castle_inside/29: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3754192 - mio0: 92160 - format: RGBA16 -castle_inside/3: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3754192 - mio0: 8192 - format: RGBA16 -castle_inside/30: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3754192 - mio0: 94208 - format: RGBA16 -castle_inside/31: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3754192 - mio0: 96256 - format: RGBA16 -castle_inside/32: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3754192 - mio0: 100352 - format: RGBA16 -castle_inside/33: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3754192 - mio0: 104448 - format: RGBA16 -castle_inside/34: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3754192 - mio0: 108544 - format: RGBA16 -castle_inside/35: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3754192 - mio0: 112640 - format: RGBA16 -castle_inside/36: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3754192 - mio0: 116736 - format: RGBA16 -castle_inside/37: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3754192 - mio0: 120832 - format: RGBA16 -castle_inside/38: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3754192 - mio0: 124928 - format: RGBA16 -castle_inside/39: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3754192 - mio0: 129024 - format: RGBA16 -castle_inside/4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3754192 - mio0: 12288 - format: RGBA16 -castle_inside/40: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3754192 - mio0: 133120 - format: RGBA16 -castle_inside/5: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3754192 - mio0: 14336 - format: RGBA16 -castle_inside/6: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3754192 - mio0: 18432 - format: RGBA16 -castle_inside/7: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3754192 - mio0: 22528 - format: RGBA16 -castle_inside/8: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3754192 - mio0: 24576 - format: RGBA16 -castle_inside/9: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3754192 - mio0: 26624 - format: RGBA16 -castle_inside/castle_light: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3432432 - mio0: 47104 - format: IA16 -ccm/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3677936 - mio0: 0 - format: RGBA16 -ccm/1: - type: TEXTURE - size: 256 - width: 32 - height: 4 - offset: 3677936 - mio0: 2048 - format: RGBA16 -ccm/10: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3677936 - mio0: 17152 - format: RGBA16 -ccm/11: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3677936 - mio0: 19200 - format: RGBA16 -ccm/12: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3677936 - mio0: 72024 - format: RGBA16 -ccm/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3677936 - mio0: 2304 - format: RGBA16 -ccm/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3677936 - mio0: 4352 - format: RGBA16 -ccm/4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3677936 - mio0: 6400 - format: RGBA16 -ccm/5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1436272 - mio0: 48240 - format: RGBA16 -ccm/6: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1436272 - mio0: 46192 - format: RGBA16 -ccm/7: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3677936 - mio0: 12544 - format: RGBA16 -ccm/8: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 3677936 - mio0: 14592 - format: IA16 -ccm/9: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3677936 - mio0: 15104 - format: IA16 -cotmc/0: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 4939888 - mio0: 0 - format: RGBA16 -cotmc/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4939888 - mio0: 4096 - format: RGBA16 -cotmc/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4939888 - mio0: 6144 - format: RGBA16 -cotmc/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4939888 - mio0: 8192 - format: RGBA16 -cotmc/4: - type: TEXTURE - size: 2048 - width: 64 - height: 16 - offset: 4939888 - mio0: 10240 - format: RGBA16 -ddd/0: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4765904 - mio0: 0 - format: RGBA16 -ddd/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3432432 - mio0: 4096 - format: RGBA16 -ddd/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4765904 - mio0: 6144 - format: RGBA16 -ddd/3: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 4765904 - mio0: 8192 - format: RGBA16 -ddd/4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4765904 - mio0: 12288 - format: RGBA16 -ending/cake: - type: BLOB - size: 153600 - offset: 4834992 - mio0: 0 -hmc/0: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3993136 - mio0: 0 - format: RGBA16 -hmc/1: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3993136 - mio0: 4096 - format: RGBA16 -hmc/2: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3993136 - mio0: 8192 - format: RGBA16 -hmc/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3993136 - mio0: 12288 - format: RGBA16 -hmc/4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3993136 - mio0: 14336 - format: RGBA16 -hmc/5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3993136 - mio0: 16384 - format: RGBA16 -hmc/6: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3993136 - mio0: 18432 - format: RGBA16 -hmc/7: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3754192 - mio0: 92160 - format: RGBA16 -intro/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2524448 - mio0: 32416 - format: RGBA16 -intro/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2524448 - mio0: 34464 - format: RGBA16 -intro/2_copyright: - type: TEXTURE - size: 4096 - width: 128 - height: 16 - offset: 2524448 - mio0: 46240 - format: RGBA16 -intro/3_tm: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2524448 - mio0: 50336 - format: RGBA16 -jrb/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3432432 - mio0: 4096 - format: RGBA16 -jrb/1: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 4294592 - mio0: 2048 - format: RGBA16 -jrb/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4294592 - mio0: 6144 - format: RGBA16 -jrb/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4294592 - mio0: 8192 - format: RGBA16 -lll/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4678592 - mio0: 0 - format: RGBA16 -lll/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4678592 - mio0: 2048 - format: RGBA16 -lll/10: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4678592 - mio0: 20480 - format: RGBA16 -lll/11: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4678592 - mio0: 22528 - format: RGBA16 -lll/12: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4678592 - mio0: 24576 - format: RGBA16 -lll/13: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4678592 - mio0: 26624 - format: RGBA16 -lll/14: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4678592 - mio0: 28672 - format: RGBA16 -lll/15: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4678592 - mio0: 30720 - format: RGBA16 -lll/16: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4678592 - mio0: 32768 - format: RGBA16 -lll/17: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4678592 - mio0: 34816 - format: RGBA16 -lll/18: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4678592 - mio0: 36864 - format: RGBA16 -lll/19: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4678592 - mio0: 38912 - format: RGBA16 -lll/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4678592 - mio0: 4096 - format: RGBA16 -lll/20: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4678592 - mio0: 40960 - format: RGBA16 -lll/21: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4678592 - mio0: 43008 - format: RGBA16 -lll/22: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4678592 - mio0: 45056 - format: RGBA16 -lll/23: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4678592 - mio0: 47104 - format: RGBA16 -lll/24: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4678592 - mio0: 49152 - format: RGBA16 -lll/25: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4678592 - mio0: 51200 - format: RGBA16 -lll/26: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 4678592 - mio0: 53248 - format: RGBA16 -lll/27: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 3677936 - mio0: 14592 - format: IA16 -lll/28: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4678592 - mio0: 54272 - format: RGBA16 -lll/29: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4678592 - mio0: 56320 - format: RGBA16 -lll/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4678592 - mio0: 6144 - format: RGBA16 -lll/30: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4678592 - mio0: 58368 - format: RGBA16 -lll/31: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4678592 - mio0: 60416 - format: RGBA16 -lll/32: - type: TEXTURE - size: 2048 - width: 64 - height: 16 - offset: 4678592 - mio0: 62464 - format: RGBA16 -lll/4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4678592 - mio0: 8192 - format: RGBA16 -lll/5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4678592 - mio0: 10240 - format: RGBA16 -lll/6: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4678592 - mio0: 12288 - format: RGBA16 -lll/7: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3262320 - mio0: 6144 - format: RGBA16 -lll/8: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4678592 - mio0: 16384 - format: RGBA16 -lll/9: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4678592 - mio0: 18432 - format: RGBA16 -menu/main_menu_seg7.00018: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2770736 - mio0: 24 - format: RGBA16 -menu/main_menu_seg7.00818: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2770736 - mio0: 2072 - format: RGBA16 -menu/main_menu_seg7.01018: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 2770736 - mio0: 4120 - format: RGBA16 -menu/main_menu_seg7.02018: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 2770736 - mio0: 8216 - format: RGBA16 -menu/main_menu_seg7.03468: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2770736 - mio0: 13416 - format: RGBA16 -menu/main_menu_seg7.03C68: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2770736 - mio0: 15464 - format: RGBA16 -menu/main_menu_seg7.04468: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2770736 - mio0: 17512 - format: RGBA16 -menu/main_menu_seg7.04C68: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2770736 - mio0: 19560 - format: RGBA16 -menu/main_menu_seg7.05468: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2770736 - mio0: 21608 - format: RGBA16 -menu/main_menu_seg7.06328: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2770736 - mio0: 25384 - format: RGBA16 -menu/main_menu_seg7.06B28: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2770736 - mio0: 27432 - format: RGBA16 -menu/main_menu_seg7.073D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2770736 - mio0: 29648 - format: RGBA16 -menu/main_menu_seg7.075D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2770736 - mio0: 30160 - format: RGBA16 -menu/main_menu_seg7.077D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2770736 - mio0: 30672 - format: RGBA16 -menu/main_menu_seg7.079D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2770736 - mio0: 31184 - format: RGBA16 -menu/main_menu_seg7.07BD0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2770736 - mio0: 31696 - format: RGBA16 -menu/main_menu_seg7.07DD0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2770736 - mio0: 32208 - format: RGBA16 -menu/main_menu_seg7.07FD0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2770736 - mio0: 32720 - format: RGBA16 -menu/main_menu_seg7.081D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2770736 - mio0: 33232 - format: RGBA16 -menu/main_menu_seg7.083D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2770736 - mio0: 33744 - format: RGBA16 -menu/main_menu_seg7.085D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2770736 - mio0: 34256 - format: RGBA16 -menu/main_menu_seg7.087D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2770736 - mio0: 34768 - format: RGBA16 -menu/main_menu_seg7.089D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2770736 - mio0: 35280 - format: RGBA16 -menu/main_menu_seg7.08BD0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2770736 - mio0: 35792 - format: RGBA16 -menu/main_menu_seg7.08DD0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2770736 - mio0: 36304 - format: RGBA16 -menu/main_menu_seg7.08FD0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2770736 - mio0: 36816 - format: RGBA16 -menu/main_menu_seg7.091D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2770736 - mio0: 37328 - format: RGBA16 -menu/main_menu_seg7.093D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2770736 - mio0: 37840 - format: RGBA16 -menu/main_menu_seg7.095D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2770736 - mio0: 38352 - format: RGBA16 -menu/main_menu_seg7.097D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2770736 - mio0: 38864 - format: RGBA16 -menu/main_menu_seg7.099D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2770736 - mio0: 39376 - format: RGBA16 -menu/main_menu_seg7.09BD0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2770736 - mio0: 39888 - format: RGBA16 -menu/main_menu_seg7.09DD0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2770736 - mio0: 40400 - format: RGBA16 -menu/main_menu_seg7.09FD0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2770736 - mio0: 40912 - format: RGBA16 -menu/main_menu_seg7.0A1D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 20480 - format: RGBA16 -menu/main_menu_seg7.0A3D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2770736 - mio0: 41936 - format: RGBA16 -menu/main_menu_seg7.0A5D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2770736 - mio0: 42448 - format: RGBA16 -menu/main_menu_seg7.0A7D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2770736 - mio0: 42960 - format: RGBA16 -menu/main_menu_seg7.0A9D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2770736 - mio0: 43472 - format: RGBA16 -menu/main_menu_seg7.0AC48: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 44104 - format: IA8 -menu/main_menu_seg7.0AC88: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 44168 - format: IA8 -menu/main_menu_seg7.0ACC8: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 44232 - format: IA8 -menu/main_menu_seg7.0AD08: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 44296 - format: IA8 -menu/main_menu_seg7.0AD48: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 44360 - format: IA8 -menu/main_menu_seg7.0AD88: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 44424 - format: IA8 -menu/main_menu_seg7.0ADC8: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 44488 - format: IA8 -menu/main_menu_seg7.0AE08: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 44552 - format: IA8 -menu/main_menu_seg7.0AE48: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 44616 - format: IA8 -menu/main_menu_seg7.0AE88: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 44680 - format: IA8 -menu/main_menu_seg7.0AEC8: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 44744 - format: IA8 -menu/main_menu_seg7.0AF08: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 44808 - format: IA8 -menu/main_menu_seg7.0AF48: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 44872 - format: IA8 -menu/main_menu_seg7.0AF88: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 44936 - format: IA8 -menu/main_menu_seg7.0AFC8: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 45000 - format: IA8 -menu/main_menu_seg7.0B008: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 45064 - format: IA8 -menu/main_menu_seg7.0B048: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 45128 - format: IA8 -menu/main_menu_seg7.0B088: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 45192 - format: IA8 -menu/main_menu_seg7.0B0C8: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 45256 - format: IA8 -menu/main_menu_seg7.0B108: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 45320 - format: IA8 -menu/main_menu_seg7.0B148: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 45384 - format: IA8 -menu/main_menu_seg7.0B188: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 45448 - format: IA8 -menu/main_menu_seg7.0B1C8: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 45512 - format: IA8 -menu/main_menu_seg7.0B208: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 45576 - format: IA8 -menu/main_menu_seg7.0B248: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 45640 - format: IA8 -menu/main_menu_seg7.0B288: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 45704 - format: IA8 -menu/main_menu_seg7.0B2C8: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 45768 - format: IA8 -menu/main_menu_seg7.0B308: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 45832 - format: IA8 -menu/main_menu_seg7.0B348: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 45896 - format: IA8 -menu/main_menu_seg7.0B388: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 45960 - format: IA8 -menu/main_menu_seg7.0B3C8: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 46024 - format: IA8 -menu/main_menu_seg7.0B408: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 46088 - format: IA8 -menu/main_menu_seg7.0B448: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 46152 - format: IA8 -menu/main_menu_seg7.0B488: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 46216 - format: IA8 -menu/main_menu_seg7.0B4C8: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 46280 - format: IA8 -menu/main_menu_seg7.0B508: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 46344 - format: IA8 -menu/main_menu_seg7.0B548: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 46408 - format: IA8 -menu/main_menu_seg7.0B588: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 46472 - format: IA8 -menu/main_menu_seg7.0B5C8: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 46536 - format: IA8 -menu/main_menu_seg7.0B608: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 46600 - format: IA8 -menu/main_menu_seg7.0B648: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 46664 - format: IA8 -menu/main_menu_seg7.0B688: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 46728 - format: IA8 -menu/main_menu_seg7.0B6C8: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 46792 - format: IA8 -menu/main_menu_seg7.0B708: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 46856 - format: IA8 -menu/main_menu_seg7.0B748: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 46920 - format: IA8 -menu/main_menu_seg7.0B788: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 46984 - format: IA8 -menu/main_menu_seg7.0B7C8: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 47048 - format: IA8 -menu/main_menu_seg7.0B808: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 47112 - format: IA8 -menu/main_menu_seg7.0B848: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 47176 - format: IA8 -menu/main_menu_seg7.0B888: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 47240 - format: IA8 -menu/main_menu_seg7.0B8C8: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 47304 - format: IA8 -menu/main_menu_seg7.0B908: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 47368 - format: IA8 -menu/main_menu_seg7.0B948: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 47432 - format: IA8 -menu/main_menu_seg7.0B988: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 47496 - format: IA8 -menu/main_menu_seg7.0B9C8: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 47560 - format: IA8 -menu/main_menu_seg7.0BA08: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 47624 - format: IA8 -menu/main_menu_seg7.0BA48: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 47688 - format: IA8 -menu/main_menu_seg7.0BA88: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 47752 - format: IA8 -menu/main_menu_seg7.0BAC8: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 47816 - format: IA8 -menu/main_menu_seg7.0BB08: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 47880 - format: IA8 -menu/main_menu_seg7.0BB48: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 47944 - format: IA8 -menu/main_menu_seg7.0BB88: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 48008 - format: IA8 -menu/main_menu_seg7.0BBC8: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 48072 - format: IA8 -menu/main_menu_seg7.0BC08: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 48136 - format: IA8 -menu/main_menu_seg7.0BC48: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 48200 - format: IA8 -menu/main_menu_seg7.0BC88: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 48264 - format: IA8 -menu/main_menu_seg7.0BCC8: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 48328 - format: IA8 -menu/main_menu_seg7.0BD08: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 48392 - format: IA8 -menu/main_menu_seg7.0BD48: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 48456 - format: IA8 -menu/main_menu_seg7.0BD88: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 48520 - format: IA8 -menu/main_menu_seg7.0BDC8: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 48584 - format: IA8 -menu/main_menu_seg7.0BE08: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 48648 - format: IA8 -menu/main_menu_seg7.0BE48: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 48712 - format: IA8 -menu/main_menu_seg7.0BE88: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 48776 - format: IA8 -menu/main_menu_seg7.0BEC8: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 48840 - format: IA8 -menu/main_menu_seg7.0BF08: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 48904 - format: IA8 -menu/main_menu_seg7.0BF48: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 48968 - format: IA8 -menu/main_menu_seg7.0BF88: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 49032 - format: IA8 -menu/main_menu_seg7.0BFC8: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 49096 - format: IA8 -menu/main_menu_seg7.0C008: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 49160 - format: IA8 -menu/main_menu_seg7.0C048: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 49224 - format: IA8 -menu/main_menu_seg7.0C088: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 49288 - format: IA8 -menu/main_menu_seg7.0C0C8: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 49352 - format: IA8 -menu/main_menu_seg7.0C108: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 49416 - format: IA8 -menu/main_menu_seg7.0C148: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 49480 - format: IA8 -menu/main_menu_seg7.0C188: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 49544 - format: IA8 -menu/main_menu_seg7.0C1C8: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 49608 - format: IA8 -menu/main_menu_seg7.0C208: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 49672 - format: IA8 -menu/main_menu_seg7.0C248: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 49736 - format: IA8 -menu/main_menu_seg7.0C288: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 49800 - format: IA8 -menu/main_menu_seg7.0C2C8: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 49864 - format: IA8 -menu/main_menu_seg7.0C308: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 49928 - format: IA8 -menu/main_menu_seg7.0C348: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 49992 - format: IA8 -menu/main_menu_seg7.0C388: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 50056 - format: IA8 -menu/main_menu_seg7.0C3C8: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 50120 - format: IA8 -menu/main_menu_seg7.0C408: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 50184 - format: IA8 -menu/main_menu_seg7.0C448: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 46536 - format: IA8 -menu/main_menu_seg7.0C488: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 50312 - format: IA8 -menu/main_menu_seg7.0C4C8: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 50376 - format: IA8 -menu/main_menu_seg7.0C508: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 50440 - format: IA8 -menu/main_menu_seg7.0C548: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 50504 - format: IA8 -menu/main_menu_seg7.0C588: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 50568 - format: IA8 -menu/main_menu_seg7.0C5C8: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 50632 - format: IA8 -menu/main_menu_seg7.0C608: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 50696 - format: IA8 -menu/main_menu_seg7.0C648: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 50760 - format: IA8 -menu/main_menu_seg7.0C688: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 50824 - format: IA8 -menu/main_menu_seg7.0C6C8: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 50888 - format: IA8 -menu/main_menu_seg7.0C708: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 50952 - format: IA8 -menu/main_menu_seg7.0C748: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 51016 - format: IA8 -menu/main_menu_seg7.0C788: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 51080 - format: IA8 -menu/main_menu_seg7.0C7C8: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 51144 - format: IA8 -menu/main_menu_seg7.0C808: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 51208 - format: IA8 -menu/main_menu_seg7.0C848: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 51272 - format: IA8 -menu/main_menu_seg7.0C888: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 51336 - format: IA8 -menu/main_menu_seg7.0C8C8: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 51400 - format: IA8 -menu/main_menu_seg7.0C908: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 51464 - format: IA8 -menu/main_menu_seg7.0C948: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 51528 - format: IA8 -menu/main_menu_seg7.0C988: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 51592 - format: IA8 -menu/main_menu_seg7.0C9C8: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 51656 - format: IA8 -menu/main_menu_seg7.0CA08: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 51720 - format: IA8 -menu/main_menu_seg7.0CA48: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 51784 - format: IA8 -menu/main_menu_seg7.0CA88: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 51848 - format: IA8 -menu/main_menu_seg7.0CAC8: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 51912 - format: IA8 -menu/main_menu_seg7.0CB08: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 51976 - format: IA8 -menu/main_menu_seg7.0CB48: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 52040 - format: IA8 -menu/main_menu_seg7.0CB88: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 52104 - format: IA8 -menu/main_menu_seg7.0CBC8: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 52168 - format: IA8 -menu/main_menu_seg7.0CC08: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 52232 - format: IA8 -menu/main_menu_seg7.0CC48: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 52296 - format: IA8 -menu/main_menu_seg7.0CC88: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 52360 - format: IA8 -menu/main_menu_seg7.0CCC8: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2770736 - mio0: 52424 - format: IA8 -menu/main_menu_seg7.0D1A8: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 2770736 - mio0: 53672 - format: RGBA16 -menu/main_menu_seg7.0E1A8: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 2770736 - mio0: 57768 - format: RGBA16 -pss/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4905168 - mio0: 0 - format: RGBA16 -pss/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4905168 - mio0: 2048 - format: IA16 -pss/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4905168 - mio0: 4096 - format: RGBA16 -rr/1: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 4413648 - mio0: 2048 - format: RGBA16 -rr/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4413648 - mio0: 6144 - format: RGBA16 -rr/quarter_flying_carpet: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4413648 - mio0: 0 - format: RGBA16 -sl/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4210704 - mio0: 0 - format: RGBA16 -sl/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4210704 - mio0: 2048 - format: RGBA16 -sl/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4210704 - mio0: 4096 - format: RGBA16 -sl/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4210704 - mio0: 6144 - format: RGBA16 -sl/4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4210704 - mio0: 8192 - format: RGBA16 -ssl/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4085520 - mio0: 0 - format: RGBA16 -ssl/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4085520 - mio0: 2048 - format: IA16 -ssl/10: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4085520 - mio0: 55208 - format: RGBA16 -ssl/11: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4085520 - mio0: 59304 - format: RGBA16 -ssl/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4085520 - mio0: 4096 - format: RGBA16 -ssl/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4085520 - mio0: 6144 - format: RGBA16 -ssl/4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4085520 - mio0: 8192 - format: RGBA16 -ssl/5: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4085520 - mio0: 10240 - format: RGBA16 -ssl/6: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4085520 - mio0: 14336 - format: RGBA16 -ssl/7: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3323408 - mio0: 32768 - format: RGBA16 -ssl/8: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4085520 - mio0: 49064 - format: RGBA16 -ssl/9: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4085520 - mio0: 51112 - format: RGBA16 -thi/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4335408 - mio0: 0 - format: RGBA16 -thi/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4335408 - mio0: 2048 - format: RGBA16 -totwc/0: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4967376 - mio0: 0 - format: RGBA16 -totwc/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4967376 - mio0: 4096 - format: RGBA16 -totwc/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4967376 - mio0: 6144 - format: RGBA16 -totwc/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4967376 - mio0: 8192 - format: IA16 -ttc/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4370304 - mio0: 0 - format: RGBA16 -ttc/1: - type: TEXTURE - size: 2048 - width: 16 - height: 64 - offset: 4370304 - mio0: 2048 - format: RGBA16 -ttc/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4370304 - mio0: 90000 - format: RGBA16 -ttm/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 5044400 - mio0: 0 - format: IA16 -ttm/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 5044400 - mio0: 2048 - format: RGBA16 -ttm/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 5044400 - mio0: 4096 - format: RGBA16 -ttm/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 5044400 - mio0: 6144 - format: RGBA16 -ttm/4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 5044400 - mio0: 8192 - format: RGBA16 -ttm/5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 5044400 - mio0: 10240 - format: RGBA16 -ttm/6: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 5044400 - mio0: 12288 - format: RGBA16 -ttm/7: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 5044400 - mio0: 16384 - format: RGBA16 -ttm/8: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3473152 - mio0: 43008 - format: RGBA16 -vcutm/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4564288 - mio0: 0 - format: RGBA16 -vcutm/1: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 4564288 - mio0: 2048 - format: RGBA16 -vcutm/2: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4564288 - mio0: 6144 - format: RGBA16 -vcutm/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4564288 - mio0: 10240 - format: RGBA16 -wdw/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4246992 - mio0: 0 - format: RGBA16 -wdw/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4246992 - mio0: 2048 - format: RGBA16 -wdw/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4246992 - mio0: 4096 - format: RGBA16 -wdw/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4246992 - mio0: 6144 - format: RGBA16 -wdw/4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4246992 - mio0: 8192 - format: RGBA16 -wf/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4800560 - mio0: 0 - format: RGBA16 -wf/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4800560 - mio0: 2048 - format: RGBA16 -wf/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4800560 - mio0: 4096 - format: RGBA16 -wf/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4800560 - mio0: 6144 - format: RGBA16 -wf/4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4800560 - mio0: 8192 - format: RGBA16 -wf/5: - type: TEXTURE - size: 256 - width: 16 - height: 16 - offset: 1078992 - mio0: 62296 - format: IA8 -wmotr/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4989632 - mio0: 0 - format: RGBA16 -wmotr/1: - type: TEXTURE - size: 1024 - width: 32 - height: 16 - offset: 4989632 - mio0: 2048 - format: RGBA16 -wmotr/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4989632 - mio0: 3072 - format: RGBA16 -wmotr/3: - type: TEXTURE - size: 512 - width: 32 - height: 8 - offset: 4989632 - mio0: 5120 - format: RGBA16 -wmotr/4: - type: TEXTURE - size: 512 - width: 8 - height: 32 - offset: 4989632 - mio0: 5632 - format: RGBA16 diff --git a/assets/sm64/jp/sound.yml b/assets/sm64/jp/sound.yml deleted file mode 100644 index 70fed81..0000000 --- a/assets/sm64/jp/sound.yml +++ /dev/null @@ -1,965 +0,0 @@ -header: - type: AUDIO:HEADER - ctl: - offset: 5738816 - size: 94400 - tbl: - offset: 5833216 - size: 1793408 -banks/00: - type: BANK - id: 0 -banks/01_terrain: - type: BANK - id: 1 -banks/02_water: - type: BANK - id: 2 -banks/03: - type: BANK - id: 3 -banks/04: - type: BANK - id: 4 -banks/05: - type: BANK - id: 5 -banks/06: - type: BANK - id: 6 -banks/07: - type: BANK - id: 7 -banks/08_mario: - type: BANK - id: 8 -banks/09: - type: BANK - id: 9 -banks/0A_mario_peach: - type: BANK - id: 10 -banks/0B: - type: BANK - id: 11 -banks/0C: - type: BANK - id: 12 -banks/0D: - type: BANK - id: 13 -banks/0E: - type: BANK - id: 14 -banks/0F: - type: BANK - id: 15 -banks/10: - type: BANK - id: 16 -banks/11: - type: BANK - id: 17 -banks/12: - type: BANK - id: 18 -banks/13: - type: BANK - id: 19 -banks/14_piranha_music_box: - type: BANK - id: 20 -banks/15: - type: BANK - id: 21 -banks/16_course_start: - type: BANK - id: 22 -banks/17: - type: BANK - id: 23 -banks/18: - type: BANK - id: 24 -banks/19: - type: BANK - id: 25 -banks/1A: - type: BANK - id: 26 -banks/1B: - type: BANK - id: 27 -banks/1C_endless_stairs: - type: BANK - id: 28 -banks/1D_bowser_organ: - type: BANK - id: 29 -banks/1E: - type: BANK - id: 30 -banks/1F: - type: BANK - id: 31 -banks/20: - type: BANK - id: 32 -banks/21: - type: BANK - id: 33 -banks/22: - type: BANK - id: 34 -banks/23: - type: BANK - id: 35 -banks/24: - type: BANK - id: 36 -banks/25: - type: BANK - id: 37 -samples/bowser_organ/00_organ_1: - type: SAMPLE - id: 195 -samples/bowser_organ/01_organ_1_lq: - type: SAMPLE - id: 196 -samples/bowser_organ/02_boys_choir: - type: SAMPLE - id: 197 -samples/course_start/00_la: - type: SAMPLE - id: 194 -samples/instruments/00: - type: SAMPLE - id: 120 -samples/instruments/01_banjo_1: - type: SAMPLE - id: 121 -samples/instruments/02: - type: SAMPLE - id: 122 -samples/instruments/03_human_whistle: - type: SAMPLE - id: 123 -samples/instruments/04_bright_piano: - type: SAMPLE - id: 124 -samples/instruments/05_acoustic_bass: - type: SAMPLE - id: 125 -samples/instruments/06_kick_drum_1: - type: SAMPLE - id: 126 -samples/instruments/07_rimshot: - type: SAMPLE - id: 127 -samples/instruments/08: - type: SAMPLE - id: 128 -samples/instruments/09: - type: SAMPLE - id: 129 -samples/instruments/0A_tambourine: - type: SAMPLE - id: 130 -samples/instruments/0B: - type: SAMPLE - id: 131 -samples/instruments/0C_conga_stick: - type: SAMPLE - id: 132 -samples/instruments/0D_clave: - type: SAMPLE - id: 133 -samples/instruments/0E_hihat_closed: - type: SAMPLE - id: 134 -samples/instruments/0F_hihat_open: - type: SAMPLE - id: 135 -samples/instruments/10_cymbal_bell: - type: SAMPLE - id: 136 -samples/instruments/11_splash_cymbal: - type: SAMPLE - id: 137 -samples/instruments/12_snare_drum_1: - type: SAMPLE - id: 138 -samples/instruments/13_snare_drum_2: - type: SAMPLE - id: 139 -samples/instruments/14_strings_5: - type: SAMPLE - id: 140 -samples/instruments/15_strings_4: - type: SAMPLE - id: 141 -samples/instruments/16_french_horns: - type: SAMPLE - id: 142 -samples/instruments/17_trumpet: - type: SAMPLE - id: 143 -samples/instruments/18_timpani: - type: SAMPLE - id: 144 -samples/instruments/19_brass: - type: SAMPLE - id: 145 -samples/instruments/1A_slap_bass: - type: SAMPLE - id: 146 -samples/instruments/1B_organ_2: - type: SAMPLE - id: 147 -samples/instruments/1C: - type: SAMPLE - id: 148 -samples/instruments/1D: - type: SAMPLE - id: 149 -samples/instruments/1E_closed_triangle: - type: SAMPLE - id: 150 -samples/instruments/1F_open_triangle: - type: SAMPLE - id: 151 -samples/instruments/20_cabasa: - type: SAMPLE - id: 152 -samples/instruments/21_sine_bass: - type: SAMPLE - id: 153 -samples/instruments/22_boys_choir: - type: SAMPLE - id: 154 -samples/instruments/23_strings_1: - type: SAMPLE - id: 155 -samples/instruments/24_strings_2: - type: SAMPLE - id: 156 -samples/instruments/25_strings_3: - type: SAMPLE - id: 157 -samples/instruments/26_crystal_rhodes: - type: SAMPLE - id: 158 -samples/instruments/27_harpsichord: - type: SAMPLE - id: 159 -samples/instruments/28_sitar_1: - type: SAMPLE - id: 160 -samples/instruments/29_orchestra_hit: - type: SAMPLE - id: 161 -samples/instruments/2A: - type: SAMPLE - id: 162 -samples/instruments/2B: - type: SAMPLE - id: 163 -samples/instruments/2C: - type: SAMPLE - id: 164 -samples/instruments/2D_trombone: - type: SAMPLE - id: 165 -samples/instruments/2E_accordion: - type: SAMPLE - id: 166 -samples/instruments/2F_sleigh_bells: - type: SAMPLE - id: 167 -samples/instruments/30_rarefaction-lahna: - type: SAMPLE - id: 168 -samples/instruments/31_rarefaction-convolution: - type: SAMPLE - id: 169 -samples/instruments/32_metal_rimshot: - type: SAMPLE - id: 170 -samples/instruments/33_kick_drum_2: - type: SAMPLE - id: 171 -samples/instruments/34_alto_flute: - type: SAMPLE - id: 172 -samples/instruments/35_gospel_organ: - type: SAMPLE - id: 173 -samples/instruments/36_sawtooth_synth: - type: SAMPLE - id: 174 -samples/instruments/37_square_synth: - type: SAMPLE - id: 175 -samples/instruments/38_electric_kick_drum: - type: SAMPLE - id: 176 -samples/instruments/39_sitar_2: - type: SAMPLE - id: 177 -samples/instruments/3A_music_box: - type: SAMPLE - id: 178 -samples/instruments/3B_banjo_2: - type: SAMPLE - id: 179 -samples/instruments/3C_acoustic_guitar: - type: SAMPLE - id: 180 -samples/instruments/3D: - type: SAMPLE - id: 181 -samples/instruments/3E_monk_choir: - type: SAMPLE - id: 182 -samples/instruments/3F: - type: SAMPLE - id: 183 -samples/instruments/40_bell: - type: SAMPLE - id: 184 -samples/instruments/41_pan_flute: - type: SAMPLE - id: 185 -samples/instruments/42_vibraphone: - type: SAMPLE - id: 186 -samples/instruments/43_harmonica: - type: SAMPLE - id: 187 -samples/instruments/44_grand_piano: - type: SAMPLE - id: 188 -samples/instruments/45_french_horns_lq: - type: SAMPLE - id: 189 -samples/instruments/46_pizzicato_strings_1: - type: SAMPLE - id: 190 -samples/instruments/47_pizzicato_strings_2: - type: SAMPLE - id: 191 -samples/instruments/48_steel_drum: - type: SAMPLE - id: 192 -samples/piranha_music_box/00_music_box: - type: SAMPLE - id: 193 -samples/sfx_1/00_twirl: - type: SAMPLE - id: 0 -samples/sfx_1/01_brushing: - type: SAMPLE - id: 1 -samples/sfx_1/02_hand_touch: - type: SAMPLE - id: 2 -samples/sfx_1/03_yoshi: - type: SAMPLE - id: 3 -samples/sfx_1/04_plop: - type: SAMPLE - id: 4 -samples/sfx_1/05_heavy_landing: - type: SAMPLE - id: 5 -samples/sfx_4/00: - type: SAMPLE - id: 17 -samples/sfx_4/01: - type: SAMPLE - id: 18 -samples/sfx_4/02: - type: SAMPLE - id: 19 -samples/sfx_4/03: - type: SAMPLE - id: 20 -samples/sfx_4/04: - type: SAMPLE - id: 21 -samples/sfx_4/05: - type: SAMPLE - id: 22 -samples/sfx_4/06: - type: SAMPLE - id: 23 -samples/sfx_4/07: - type: SAMPLE - id: 24 -samples/sfx_4/08: - type: SAMPLE - id: 25 -samples/sfx_4/09: - type: SAMPLE - id: 26 -samples/sfx_5/00: - type: SAMPLE - id: 27 -samples/sfx_5/01: - type: SAMPLE - id: 28 -samples/sfx_5/02: - type: SAMPLE - id: 29 -samples/sfx_5/03: - type: SAMPLE - id: 30 -samples/sfx_5/04: - type: SAMPLE - id: 31 -samples/sfx_5/05: - type: SAMPLE - id: 32 -samples/sfx_5/06: - type: SAMPLE - id: 33 -samples/sfx_5/07: - type: SAMPLE - id: 34 -samples/sfx_5/08: - type: SAMPLE - id: 35 -samples/sfx_5/09: - type: SAMPLE - id: 36 -samples/sfx_5/0A: - type: SAMPLE - id: 37 -samples/sfx_5/0B: - type: SAMPLE - id: 38 -samples/sfx_5/0C: - type: SAMPLE - id: 39 -samples/sfx_5/0D: - type: SAMPLE - id: 40 -samples/sfx_5/0E: - type: SAMPLE - id: 41 -samples/sfx_5/0F: - type: SAMPLE - id: 42 -samples/sfx_5/10: - type: SAMPLE - id: 43 -samples/sfx_5/11: - type: SAMPLE - id: 44 -samples/sfx_5/12: - type: SAMPLE - id: 45 -samples/sfx_5/13: - type: SAMPLE - id: 46 -samples/sfx_5/14: - type: SAMPLE - id: 47 -samples/sfx_5/15: - type: SAMPLE - id: 48 -samples/sfx_5/16: - type: SAMPLE - id: 49 -samples/sfx_5/17: - type: SAMPLE - id: 50 -samples/sfx_5/18: - type: SAMPLE - id: 51 -samples/sfx_5/19: - type: SAMPLE - id: 52 -samples/sfx_5/1A: - type: SAMPLE - id: 53 -samples/sfx_5/1B: - type: SAMPLE - id: 54 -samples/sfx_5/1C: - type: SAMPLE - id: 55 -samples/sfx_6/00: - type: SAMPLE - id: 56 -samples/sfx_6/01: - type: SAMPLE - id: 57 -samples/sfx_6/02: - type: SAMPLE - id: 58 -samples/sfx_6/03: - type: SAMPLE - id: 59 -samples/sfx_6/04: - type: SAMPLE - id: 60 -samples/sfx_6/05: - type: SAMPLE - id: 61 -samples/sfx_6/06: - type: SAMPLE - id: 62 -samples/sfx_6/07: - type: SAMPLE - id: 63 -samples/sfx_6/08: - type: SAMPLE - id: 64 -samples/sfx_6/09: - type: SAMPLE - id: 65 -samples/sfx_6/0A: - type: SAMPLE - id: 66 -samples/sfx_6/0B: - type: SAMPLE - id: 67 -samples/sfx_6/0C: - type: SAMPLE - id: 68 -samples/sfx_6/0D: - type: SAMPLE - id: 69 -samples/sfx_7/00: - type: SAMPLE - id: 70 -samples/sfx_7/01: - type: SAMPLE - id: 71 -samples/sfx_7/02: - type: SAMPLE - id: 72 -samples/sfx_7/03: - type: SAMPLE - id: 73 -samples/sfx_7/04: - type: SAMPLE - id: 74 -samples/sfx_7/05: - type: SAMPLE - id: 75 -samples/sfx_7/06: - type: SAMPLE - id: 76 -samples/sfx_7/07: - type: SAMPLE - id: 77 -samples/sfx_7/08: - type: SAMPLE - id: 78 -samples/sfx_7/09: - type: SAMPLE - id: 79 -samples/sfx_7/0A: - type: SAMPLE - id: 80 -samples/sfx_7/0B: - type: SAMPLE - id: 81 -samples/sfx_7/0C: - type: SAMPLE - id: 82 -samples/sfx_9/00: - type: SAMPLE - id: 99 -samples/sfx_9/01: - type: SAMPLE - id: 100 -samples/sfx_9/02: - type: SAMPLE - id: 101 -samples/sfx_9/03: - type: SAMPLE - id: 102 -samples/sfx_9/04_camera_buzz: - type: SAMPLE - id: 103 -samples/sfx_9/05_camera_shutter: - type: SAMPLE - id: 104 -samples/sfx_9/06: - type: SAMPLE - id: 105 -samples/sfx_mario/00_mario_jump_hoo: - type: SAMPLE - id: 83 -samples/sfx_mario/01_mario_jump_wah: - type: SAMPLE - id: 84 -samples/sfx_mario/02_mario_yah: - type: SAMPLE - id: 85 -samples/sfx_mario/03_mario_haha: - type: SAMPLE - id: 86 -samples/sfx_mario/04_mario_yahoo: - type: SAMPLE - id: 87 -samples/sfx_mario/05_mario_uh: - type: SAMPLE - id: 88 -samples/sfx_mario/06_mario_hrmm: - type: SAMPLE - id: 89 -samples/sfx_mario/07_mario_wah2: - type: SAMPLE - id: 90 -samples/sfx_mario/08_mario_whoa: - type: SAMPLE - id: 91 -samples/sfx_mario/09_mario_eeuh: - type: SAMPLE - id: 92 -samples/sfx_mario/0A_mario_attacked: - type: SAMPLE - id: 93 -samples/sfx_mario/0B_mario_ooof: - type: SAMPLE - id: 94 -samples/sfx_mario/0C_mario_here_we_go: - type: SAMPLE - id: 95 -samples/sfx_mario/0D_mario_yawning: - type: SAMPLE - id: 96 -samples/sfx_mario/0E_mario_snoring1: - type: SAMPLE - id: 97 -samples/sfx_mario/0F_mario_snoring2: - type: SAMPLE - id: 98 -samples/sfx_mario_peach/00_mario_waaaooow: - type: SAMPLE - id: 106 -samples/sfx_mario_peach/01_mario_hoohoo: - type: SAMPLE - id: 107 -samples/sfx_mario_peach/02_mario_panting: - type: SAMPLE - id: 108 -samples/sfx_mario_peach/03_mario_dying: - type: SAMPLE - id: 109 -samples/sfx_mario_peach/04_mario_on_fire: - type: SAMPLE - id: 110 -samples/sfx_mario_peach/05_mario_uh2: - type: SAMPLE - id: 111 -samples/sfx_mario_peach/06_mario_coughing: - type: SAMPLE - id: 112 -samples/sfx_mario_peach/07_mario_its_a_me_mario: - type: SAMPLE - id: 113 -samples/sfx_mario_peach/08_mario_punch_yah: - type: SAMPLE - id: 114 -samples/sfx_mario_peach/09_mario_punch_hoo: - type: SAMPLE - id: 115 -samples/sfx_mario_peach/0A_mario_mama_mia: - type: SAMPLE - id: 116 -samples/sfx_mario_peach/0B_mario_okey_dokey: - type: SAMPLE - id: 117 -samples/sfx_mario_peach/0C_mario_drowning: - type: SAMPLE - id: 118 -samples/sfx_mario_peach/0D_mario_thank_you_playing_my_game: - type: SAMPLE - id: 119 -samples/sfx_terrain/00_step_default: - type: SAMPLE - id: 6 -samples/sfx_terrain/01_step_grass: - type: SAMPLE - id: 7 -samples/sfx_terrain/02_step_stone: - type: SAMPLE - id: 8 -samples/sfx_terrain/03_step_spooky: - type: SAMPLE - id: 9 -samples/sfx_terrain/04_step_snow: - type: SAMPLE - id: 10 -samples/sfx_terrain/05_step_ice: - type: SAMPLE - id: 11 -samples/sfx_terrain/06_step_metal: - type: SAMPLE - id: 12 -samples/sfx_terrain/07_step_sand: - type: SAMPLE - id: 13 -samples/sfx_water/00_plunge: - type: SAMPLE - id: 14 -samples/sfx_water/01_splash: - type: SAMPLE - id: 15 -samples/sfx_water/02_swim: - type: SAMPLE - id: 16 -sequences/sound_player: - type: SEQUENCE - id: 0x00 - offset: 0x7460A0 - size: 12800 - banks: - - sound/banks/00 - - sound/banks/01_terrain - - sound/banks/02_water - - sound/banks/03 - - sound/banks/04 - - sound/banks/05 - - sound/banks/06 - - sound/banks/07 - - sound/banks/08_mario - - sound/banks/09 - - sound/banks/0A_mario_peach -sequences/cutscene_collect_star: - type: SEQUENCE - id: 0x01 - offset: 0x7492A0 - size: 633 - banks: - - sound/banks/22 -sequences/menu_title_screen: - type: SEQUENCE - id: 0x02 - offset: 0x749520 - size: 8276 - banks: - - sound/banks/11 -sequences/level_grass: - type: SEQUENCE - id: 0x03 - offset: 0x74B580 - size: 5134 - banks: - - sound/banks/22 -sequences/level_inside_castle: - type: SEQUENCE - id: 0x04 - offset: 0x74C990 - size: 2504 - banks: - - sound/banks/0E -sequences/level_water: - type: SEQUENCE - id: 0x05 - offset: 0x74D360 - size: 4816 - banks: - - sound/banks/13 -sequences/level_hot: - type: SEQUENCE - id: 0x06 - offset: 0x74E630 - size: 2459 - banks: - - sound/banks/0F -sequences/level_boss_koopa: - type: SEQUENCE - id: 0x07 - offset: 0x74EFD0 - size: 3430 - banks: - - sound/banks/12 -sequences/level_snow: - type: SEQUENCE - id: 0x08 - offset: 0x74FD40 - size: 8157 - banks: - - sound/banks/0B -sequences/level_slide: - type: SEQUENCE - id: 0x09 - offset: 0x751D20 - size: 7452 - banks: - - sound/banks/0D -sequences/level_spooky: - type: SEQUENCE - id: 0x0A - offset: 0x753A40 - size: 5686 - banks: - - sound/banks/21 - - sound/banks/10 -sequences/event_piranha_plant: - type: SEQUENCE - id: 0x0B - offset: 0x755080 - size: 1405 - banks: - - sound/banks/14_piranha_music_box -sequences/level_underground: - type: SEQUENCE - id: 0x0C - offset: 0x755600 - size: 4905 - banks: - - sound/banks/15 -sequences/menu_star_select: - type: SEQUENCE - id: 0x0D - offset: 0x756930 - size: 138 - banks: - - sound/banks/16_course_start -sequences/event_powerup: - type: SEQUENCE - id: 0x0E - offset: 0x7569C0 - size: 3143 - banks: - - sound/banks/17 -sequences/event_metal_cap: - type: SEQUENCE - id: 0x0F - offset: 0x757610 - size: 2786 - banks: - - sound/banks/18 -sequences/event_koopa_message: - type: SEQUENCE - id: 0x10 - offset: 0x758100 - size: 564 - banks: - - sound/banks/12 -sequences/level_koopa_road: - type: SEQUENCE - id: 0x11 - offset: 0x758340 - size: 4763 - banks: - - sound/banks/19 -sequences/event_high_score: - type: SEQUENCE - id: 0x12 - offset: 0x7595E0 - size: 279 - banks: - - sound/banks/1F -sequences/event_merry_go_round: - type: SEQUENCE - id: 0x13 - offset: 0x759700 - size: 1663 - banks: - - sound/banks/21 -sequences/event_race: - type: SEQUENCE - id: 0x14 - offset: 0x759D80 - size: 203 - banks: - - sound/banks/1A -sequences/cutscene_star_spawn: - type: SEQUENCE - id: 0x15 - offset: 0x759E50 - size: 654 - banks: - - sound/banks/0E -sequences/event_boss: - type: SEQUENCE - id: 0x16 - offset: 0x75A0E0 - size: 3451 - banks: - - sound/banks/1B -sequences/cutscene_collect_key: - type: SEQUENCE - id: 0x17 - offset: 0x75AE60 - size: 683 - banks: - - sound/banks/1A -sequences/event_endless_stairs: - type: SEQUENCE - id: 0x18 - offset: 0x75B110 - size: 1789 - banks: - - sound/banks/1C_endless_stairs -sequences/level_boss_koopa_final: - type: SEQUENCE - id: 0x19 - offset: 0x75B810 - size: 3527 - banks: - - sound/banks/1D_bowser_organ -sequences/cutscene_credits: - type: SEQUENCE - id: 0x1A - offset: 0x75C5E0 - size: 14341 - banks: - - sound/banks/25 -sequences/event_solve_puzzle: - type: SEQUENCE - id: 0x1B - offset: 0x75FDF0 - size: 222 - banks: - - sound/banks/14_piranha_music_box -sequences/event_toad_message: - type: SEQUENCE - id: 0x1C - offset: 0x75FED0 - size: 214 - banks: - - sound/banks/20 -sequences/event_peach_message: - type: SEQUENCE - id: 0x1D - offset: 0x75FFB0 - size: 440 - banks: - - sound/banks/1E -sequences/cutscene_intro: - type: SEQUENCE - id: 0x1E - offset: 0x760170 - size: 1774 - banks: - - sound/banks/1B -sequences/cutscene_victory: - type: SEQUENCE - id: 0x1F - offset: 0x760860 - size: 2074 - banks: - - sound/banks/1A -sequences/cutscene_ending: - type: SEQUENCE - id: 0x20 - offset: 0x761080 - size: 1892 - banks: - - sound/banks/23 -sequences/menu_file_select: - type: SEQUENCE - id: 0x21 - offset: 0x7617F0 - size: 789 - banks: - - sound/banks/24 \ No newline at end of file diff --git a/assets/sm64/jp/texts.yml b/assets/sm64/jp/texts.yml deleted file mode 100644 index 1521626..0000000 --- a/assets/sm64/jp/texts.yml +++ /dev/null @@ -1,1239 +0,0 @@ -dialogs/dialog_00: - type: SM64:DIALOG - offset: 1078992 - mio0: 54600 -dialogs/dialog_01: - type: SM64:DIALOG - offset: 1078992 - mio0: 54616 -dialogs/dialog_02: - type: SM64:DIALOG - offset: 1078992 - mio0: 54632 -dialogs/dialog_03: - type: SM64:DIALOG - offset: 1078992 - mio0: 54648 -dialogs/dialog_04: - type: SM64:DIALOG - offset: 1078992 - mio0: 54664 -dialogs/dialog_05: - type: SM64:DIALOG - offset: 1078992 - mio0: 54680 -dialogs/dialog_06: - type: SM64:DIALOG - offset: 1078992 - mio0: 54696 -dialogs/dialog_07: - type: SM64:DIALOG - offset: 1078992 - mio0: 54712 -dialogs/dialog_08: - type: SM64:DIALOG - offset: 1078992 - mio0: 54728 -dialogs/dialog_09: - type: SM64:DIALOG - offset: 1078992 - mio0: 54744 -dialogs/dialog_0A: - type: SM64:DIALOG - offset: 1078992 - mio0: 54760 -dialogs/dialog_0B: - type: SM64:DIALOG - offset: 1078992 - mio0: 54776 -dialogs/dialog_0C: - type: SM64:DIALOG - offset: 1078992 - mio0: 54792 -dialogs/dialog_0D: - type: SM64:DIALOG - offset: 1078992 - mio0: 54808 -dialogs/dialog_0E: - type: SM64:DIALOG - offset: 1078992 - mio0: 54824 -dialogs/dialog_0F: - type: SM64:DIALOG - offset: 1078992 - mio0: 54840 -dialogs/dialog_10: - type: SM64:DIALOG - offset: 1078992 - mio0: 54856 -dialogs/dialog_11: - type: SM64:DIALOG - offset: 1078992 - mio0: 54872 -dialogs/dialog_12: - type: SM64:DIALOG - offset: 1078992 - mio0: 54888 -dialogs/dialog_13: - type: SM64:DIALOG - offset: 1078992 - mio0: 54904 -dialogs/dialog_14: - type: SM64:DIALOG - offset: 1078992 - mio0: 54920 -dialogs/dialog_15: - type: SM64:DIALOG - offset: 1078992 - mio0: 54936 -dialogs/dialog_16: - type: SM64:DIALOG - offset: 1078992 - mio0: 54952 -dialogs/dialog_17: - type: SM64:DIALOG - offset: 1078992 - mio0: 54968 -dialogs/dialog_18: - type: SM64:DIALOG - offset: 1078992 - mio0: 54984 -dialogs/dialog_19: - type: SM64:DIALOG - offset: 1078992 - mio0: 55000 -dialogs/dialog_1A: - type: SM64:DIALOG - offset: 1078992 - mio0: 55016 -dialogs/dialog_1B: - type: SM64:DIALOG - offset: 1078992 - mio0: 55032 -dialogs/dialog_1C: - type: SM64:DIALOG - offset: 1078992 - mio0: 55048 -dialogs/dialog_1D: - type: SM64:DIALOG - offset: 1078992 - mio0: 55064 -dialogs/dialog_1E: - type: SM64:DIALOG - offset: 1078992 - mio0: 55080 -dialogs/dialog_1F: - type: SM64:DIALOG - offset: 1078992 - mio0: 55096 -dialogs/dialog_20: - type: SM64:DIALOG - offset: 1078992 - mio0: 55112 -dialogs/dialog_21: - type: SM64:DIALOG - offset: 1078992 - mio0: 55128 -dialogs/dialog_22: - type: SM64:DIALOG - offset: 1078992 - mio0: 55144 -dialogs/dialog_23: - type: SM64:DIALOG - offset: 1078992 - mio0: 55160 -dialogs/dialog_24: - type: SM64:DIALOG - offset: 1078992 - mio0: 55176 -dialogs/dialog_25: - type: SM64:DIALOG - offset: 1078992 - mio0: 55192 -dialogs/dialog_26: - type: SM64:DIALOG - offset: 1078992 - mio0: 55208 -dialogs/dialog_27: - type: SM64:DIALOG - offset: 1078992 - mio0: 55224 -dialogs/dialog_28: - type: SM64:DIALOG - offset: 1078992 - mio0: 55240 -dialogs/dialog_29: - type: SM64:DIALOG - offset: 1078992 - mio0: 55256 -dialogs/dialog_2A: - type: SM64:DIALOG - offset: 1078992 - mio0: 55272 -dialogs/dialog_2B: - type: SM64:DIALOG - offset: 1078992 - mio0: 55288 -dialogs/dialog_2C: - type: SM64:DIALOG - offset: 1078992 - mio0: 55304 -dialogs/dialog_2D: - type: SM64:DIALOG - offset: 1078992 - mio0: 55320 -dialogs/dialog_2E: - type: SM64:DIALOG - offset: 1078992 - mio0: 55336 -dialogs/dialog_2F: - type: SM64:DIALOG - offset: 1078992 - mio0: 55352 -dialogs/dialog_30: - type: SM64:DIALOG - offset: 1078992 - mio0: 55368 -dialogs/dialog_31: - type: SM64:DIALOG - offset: 1078992 - mio0: 55384 -dialogs/dialog_32: - type: SM64:DIALOG - offset: 1078992 - mio0: 55400 -dialogs/dialog_33: - type: SM64:DIALOG - offset: 1078992 - mio0: 55416 -dialogs/dialog_34: - type: SM64:DIALOG - offset: 1078992 - mio0: 55432 -dialogs/dialog_35: - type: SM64:DIALOG - offset: 1078992 - mio0: 55448 -dialogs/dialog_36: - type: SM64:DIALOG - offset: 1078992 - mio0: 55464 -dialogs/dialog_37: - type: SM64:DIALOG - offset: 1078992 - mio0: 55480 -dialogs/dialog_38: - type: SM64:DIALOG - offset: 1078992 - mio0: 55496 -dialogs/dialog_39: - type: SM64:DIALOG - offset: 1078992 - mio0: 55512 -dialogs/dialog_3A: - type: SM64:DIALOG - offset: 1078992 - mio0: 55528 -dialogs/dialog_3B: - type: SM64:DIALOG - offset: 1078992 - mio0: 55544 -dialogs/dialog_3C: - type: SM64:DIALOG - offset: 1078992 - mio0: 55560 -dialogs/dialog_3D: - type: SM64:DIALOG - offset: 1078992 - mio0: 55576 -dialogs/dialog_3E: - type: SM64:DIALOG - offset: 1078992 - mio0: 55592 -dialogs/dialog_3F: - type: SM64:DIALOG - offset: 1078992 - mio0: 55608 -dialogs/dialog_40: - type: SM64:DIALOG - offset: 1078992 - mio0: 55624 -dialogs/dialog_41: - type: SM64:DIALOG - offset: 1078992 - mio0: 55640 -dialogs/dialog_42: - type: SM64:DIALOG - offset: 1078992 - mio0: 55656 -dialogs/dialog_43: - type: SM64:DIALOG - offset: 1078992 - mio0: 55672 -dialogs/dialog_44: - type: SM64:DIALOG - offset: 1078992 - mio0: 55688 -dialogs/dialog_45: - type: SM64:DIALOG - offset: 1078992 - mio0: 55704 -dialogs/dialog_46: - type: SM64:DIALOG - offset: 1078992 - mio0: 55720 -dialogs/dialog_47: - type: SM64:DIALOG - offset: 1078992 - mio0: 55736 -dialogs/dialog_48: - type: SM64:DIALOG - offset: 1078992 - mio0: 55752 -dialogs/dialog_49: - type: SM64:DIALOG - offset: 1078992 - mio0: 55768 -dialogs/dialog_4A: - type: SM64:DIALOG - offset: 1078992 - mio0: 55784 -dialogs/dialog_4B: - type: SM64:DIALOG - offset: 1078992 - mio0: 55800 -dialogs/dialog_4C: - type: SM64:DIALOG - offset: 1078992 - mio0: 55816 -dialogs/dialog_4D: - type: SM64:DIALOG - offset: 1078992 - mio0: 55832 -dialogs/dialog_4E: - type: SM64:DIALOG - offset: 1078992 - mio0: 55848 -dialogs/dialog_4F: - type: SM64:DIALOG - offset: 1078992 - mio0: 55864 -dialogs/dialog_50: - type: SM64:DIALOG - offset: 1078992 - mio0: 55880 -dialogs/dialog_51: - type: SM64:DIALOG - offset: 1078992 - mio0: 55896 -dialogs/dialog_52: - type: SM64:DIALOG - offset: 1078992 - mio0: 55912 -dialogs/dialog_53: - type: SM64:DIALOG - offset: 1078992 - mio0: 55928 -dialogs/dialog_54: - type: SM64:DIALOG - offset: 1078992 - mio0: 55944 -dialogs/dialog_55: - type: SM64:DIALOG - offset: 1078992 - mio0: 55960 -dialogs/dialog_56: - type: SM64:DIALOG - offset: 1078992 - mio0: 55976 -dialogs/dialog_57: - type: SM64:DIALOG - offset: 1078992 - mio0: 55992 -dialogs/dialog_58: - type: SM64:DIALOG - offset: 1078992 - mio0: 56008 -dialogs/dialog_59: - type: SM64:DIALOG - offset: 1078992 - mio0: 56024 -dialogs/dialog_5A: - type: SM64:DIALOG - offset: 1078992 - mio0: 56040 -dialogs/dialog_5B: - type: SM64:DIALOG - offset: 1078992 - mio0: 56056 -dialogs/dialog_5C: - type: SM64:DIALOG - offset: 1078992 - mio0: 56072 -dialogs/dialog_5D: - type: SM64:DIALOG - offset: 1078992 - mio0: 56088 -dialogs/dialog_5E: - type: SM64:DIALOG - offset: 1078992 - mio0: 56104 -dialogs/dialog_5F: - type: SM64:DIALOG - offset: 1078992 - mio0: 56120 -dialogs/dialog_60: - type: SM64:DIALOG - offset: 1078992 - mio0: 56136 -dialogs/dialog_61: - type: SM64:DIALOG - offset: 1078992 - mio0: 56152 -dialogs/dialog_62: - type: SM64:DIALOG - offset: 1078992 - mio0: 56168 -dialogs/dialog_63: - type: SM64:DIALOG - offset: 1078992 - mio0: 56184 -dialogs/dialog_64: - type: SM64:DIALOG - offset: 1078992 - mio0: 56200 -dialogs/dialog_65: - type: SM64:DIALOG - offset: 1078992 - mio0: 56216 -dialogs/dialog_66: - type: SM64:DIALOG - offset: 1078992 - mio0: 56232 -dialogs/dialog_67: - type: SM64:DIALOG - offset: 1078992 - mio0: 56248 -dialogs/dialog_68: - type: SM64:DIALOG - offset: 1078992 - mio0: 56264 -dialogs/dialog_69: - type: SM64:DIALOG - offset: 1078992 - mio0: 56280 -dialogs/dialog_6A: - type: SM64:DIALOG - offset: 1078992 - mio0: 56296 -dialogs/dialog_6B: - type: SM64:DIALOG - offset: 1078992 - mio0: 56312 -dialogs/dialog_6C: - type: SM64:DIALOG - offset: 1078992 - mio0: 56328 -dialogs/dialog_6D: - type: SM64:DIALOG - offset: 1078992 - mio0: 56344 -dialogs/dialog_6E: - type: SM64:DIALOG - offset: 1078992 - mio0: 56360 -dialogs/dialog_6F: - type: SM64:DIALOG - offset: 1078992 - mio0: 56376 -dialogs/dialog_70: - type: SM64:DIALOG - offset: 1078992 - mio0: 56392 -dialogs/dialog_71: - type: SM64:DIALOG - offset: 1078992 - mio0: 56408 -dialogs/dialog_72: - type: SM64:DIALOG - offset: 1078992 - mio0: 56424 -dialogs/dialog_73: - type: SM64:DIALOG - offset: 1078992 - mio0: 56440 -dialogs/dialog_74: - type: SM64:DIALOG - offset: 1078992 - mio0: 56456 -dialogs/dialog_75: - type: SM64:DIALOG - offset: 1078992 - mio0: 56472 -dialogs/dialog_76: - type: SM64:DIALOG - offset: 1078992 - mio0: 56488 -dialogs/dialog_77: - type: SM64:DIALOG - offset: 1078992 - mio0: 56504 -dialogs/dialog_78: - type: SM64:DIALOG - offset: 1078992 - mio0: 56520 -dialogs/dialog_79: - type: SM64:DIALOG - offset: 1078992 - mio0: 56536 -dialogs/dialog_7A: - type: SM64:DIALOG - offset: 1078992 - mio0: 56552 -dialogs/dialog_7B: - type: SM64:DIALOG - offset: 1078992 - mio0: 56568 -dialogs/dialog_7C: - type: SM64:DIALOG - offset: 1078992 - mio0: 56584 -dialogs/dialog_7D: - type: SM64:DIALOG - offset: 1078992 - mio0: 56600 -dialogs/dialog_7E: - type: SM64:DIALOG - offset: 1078992 - mio0: 56616 -dialogs/dialog_7F: - type: SM64:DIALOG - offset: 1078992 - mio0: 56632 -dialogs/dialog_80: - type: SM64:DIALOG - offset: 1078992 - mio0: 56648 -dialogs/dialog_81: - type: SM64:DIALOG - offset: 1078992 - mio0: 56664 -dialogs/dialog_82: - type: SM64:DIALOG - offset: 1078992 - mio0: 56680 -dialogs/dialog_83: - type: SM64:DIALOG - offset: 1078992 - mio0: 56696 -dialogs/dialog_84: - type: SM64:DIALOG - offset: 1078992 - mio0: 56712 -dialogs/dialog_85: - type: SM64:DIALOG - offset: 1078992 - mio0: 56728 -dialogs/dialog_86: - type: SM64:DIALOG - offset: 1078992 - mio0: 56744 -dialogs/dialog_87: - type: SM64:DIALOG - offset: 1078992 - mio0: 56760 -dialogs/dialog_88: - type: SM64:DIALOG - offset: 1078992 - mio0: 56776 -dialogs/dialog_89: - type: SM64:DIALOG - offset: 1078992 - mio0: 56792 -dialogs/dialog_8A: - type: SM64:DIALOG - offset: 1078992 - mio0: 56808 -dialogs/dialog_8B: - type: SM64:DIALOG - offset: 1078992 - mio0: 56824 -dialogs/dialog_8C: - type: SM64:DIALOG - offset: 1078992 - mio0: 56840 -dialogs/dialog_8D: - type: SM64:DIALOG - offset: 1078992 - mio0: 56856 -dialogs/dialog_8E: - type: SM64:DIALOG - offset: 1078992 - mio0: 56872 -dialogs/dialog_8F: - type: SM64:DIALOG - offset: 1078992 - mio0: 56888 -dialogs/dialog_90: - type: SM64:DIALOG - offset: 1078992 - mio0: 56904 -dialogs/dialog_91: - type: SM64:DIALOG - offset: 1078992 - mio0: 56920 -dialogs/dialog_92: - type: SM64:DIALOG - offset: 1078992 - mio0: 56936 -dialogs/dialog_93: - type: SM64:DIALOG - offset: 1078992 - mio0: 56952 -dialogs/dialog_94: - type: SM64:DIALOG - offset: 1078992 - mio0: 56968 -dialogs/dialog_95: - type: SM64:DIALOG - offset: 1078992 - mio0: 56984 -dialogs/dialog_96: - type: SM64:DIALOG - offset: 1078992 - mio0: 57000 -dialogs/dialog_97: - type: SM64:DIALOG - offset: 1078992 - mio0: 57016 -dialogs/dialog_98: - type: SM64:DIALOG - offset: 1078992 - mio0: 57032 -dialogs/dialog_99: - type: SM64:DIALOG - offset: 1078992 - mio0: 57048 -dialogs/dialog_9A: - type: SM64:DIALOG - offset: 1078992 - mio0: 57064 -dialogs/dialog_9B: - type: SM64:DIALOG - offset: 1078992 - mio0: 57080 -dialogs/dialog_9C: - type: SM64:DIALOG - offset: 1078992 - mio0: 57096 -dialogs/dialog_9D: - type: SM64:DIALOG - offset: 1078992 - mio0: 57112 -dialogs/dialog_9E: - type: SM64:DIALOG - offset: 1078992 - mio0: 57128 -dialogs/dialog_9F: - type: SM64:DIALOG - offset: 1078992 - mio0: 57144 -dialogs/dialog_A0: - type: SM64:DIALOG - offset: 1078992 - mio0: 57160 -dialogs/dialog_A1: - type: SM64:DIALOG - offset: 1078992 - mio0: 57176 -dialogs/dialog_A2: - type: SM64:DIALOG - offset: 1078992 - mio0: 57192 -dialogs/dialog_A3: - type: SM64:DIALOG - offset: 1078992 - mio0: 57208 -dialogs/dialog_A4: - type: SM64:DIALOG - offset: 1078992 - mio0: 57224 -dialogs/dialog_A5: - type: SM64:DIALOG - offset: 1078992 - mio0: 57240 -dialogs/dialog_A6: - type: SM64:DIALOG - offset: 1078992 - mio0: 57256 -dialogs/dialog_A7: - type: SM64:DIALOG - offset: 1078992 - mio0: 57272 -dialogs/dialog_A8: - type: SM64:DIALOG - offset: 1078992 - mio0: 57288 -dialogs/dialog_A9: - type: SM64:DIALOG - offset: 1078992 - mio0: 57304 -courses/course_00: - type: SM64:TEXT - offset: 1078992 - mio0: 58004 -courses/course_01: - type: SM64:TEXT - offset: 1078992 - mio0: 58024 -courses/course_02: - type: SM64:TEXT - offset: 1078992 - mio0: 58044 -courses/course_03: - type: SM64:TEXT - offset: 1078992 - mio0: 58060 -courses/course_04: - type: SM64:TEXT - offset: 1078992 - mio0: 58076 -courses/course_05: - type: SM64:TEXT - offset: 1078992 - mio0: 58092 -courses/course_06: - type: SM64:TEXT - offset: 1078992 - mio0: 58108 -courses/course_07: - type: SM64:TEXT - offset: 1078992 - mio0: 58128 -courses/course_08: - type: SM64:TEXT - offset: 1078992 - mio0: 58144 -courses/course_09: - type: SM64:TEXT - offset: 1078992 - mio0: 58160 -courses/course_0A: - type: SM64:TEXT - offset: 1078992 - mio0: 58176 -courses/course_0B: - type: SM64:TEXT - offset: 1078992 - mio0: 58192 -courses/course_0C: - type: SM64:TEXT - offset: 1078992 - mio0: 58208 -courses/course_0D: - type: SM64:TEXT - offset: 1078992 - mio0: 58228 -courses/course_0E: - type: SM64:TEXT - offset: 1078992 - mio0: 58244 -courses/course_0F: - type: SM64:TEXT - offset: 1078992 - mio0: 58260 -courses/course_10: - type: SM64:TEXT - offset: 1078992 - mio0: 58280 -courses/course_11: - type: SM64:TEXT - offset: 1078992 - mio0: 58300 -courses/course_12: - type: SM64:TEXT - offset: 1078992 - mio0: 58316 -courses/course_13: - type: SM64:TEXT - offset: 1078992 - mio0: 58336 -courses/course_14: - type: SM64:TEXT - offset: 1078992 - mio0: 58352 -courses/course_15: - type: SM64:TEXT - offset: 1078992 - mio0: 58372 -courses/course_16: - type: SM64:TEXT - offset: 1078992 - mio0: 58388 -courses/course_17: - type: SM64:TEXT - offset: 1078992 - mio0: 58408 -courses/course_18: - type: SM64:TEXT - offset: 1078992 - mio0: 58424 -courses/course_19: - type: SM64:TEXT - offset: 1078992 - mio0: 58436 -acts/act_00: - type: SM64:TEXT - offset: 1078992 - mio0: 58560 -acts/act_01: - type: SM64:TEXT - offset: 1078992 - mio0: 58576 -acts/act_02: - type: SM64:TEXT - offset: 1078992 - mio0: 58592 -acts/act_03: - type: SM64:TEXT - offset: 1078992 - mio0: 58608 -acts/act_04: - type: SM64:TEXT - offset: 1078992 - mio0: 58620 -acts/act_05: - type: SM64:TEXT - offset: 1078992 - mio0: 58636 -acts/act_06: - type: SM64:TEXT - offset: 1078992 - mio0: 58652 -acts/act_07: - type: SM64:TEXT - offset: 1078992 - mio0: 58668 -acts/act_08: - type: SM64:TEXT - offset: 1078992 - mio0: 58684 -acts/act_09: - type: SM64:TEXT - offset: 1078992 - mio0: 58700 -acts/act_0A: - type: SM64:TEXT - offset: 1078992 - mio0: 58716 -acts/act_0B: - type: SM64:TEXT - offset: 1078992 - mio0: 58728 -acts/act_0C: - type: SM64:TEXT - offset: 1078992 - mio0: 58744 -acts/act_0D: - type: SM64:TEXT - offset: 1078992 - mio0: 58760 -acts/act_0E: - type: SM64:TEXT - offset: 1078992 - mio0: 58776 -acts/act_0F: - type: SM64:TEXT - offset: 1078992 - mio0: 58792 -acts/act_10: - type: SM64:TEXT - offset: 1078992 - mio0: 58808 -acts/act_11: - type: SM64:TEXT - offset: 1078992 - mio0: 58824 -acts/act_12: - type: SM64:TEXT - offset: 1078992 - mio0: 58840 -acts/act_13: - type: SM64:TEXT - offset: 1078992 - mio0: 58856 -acts/act_14: - type: SM64:TEXT - offset: 1078992 - mio0: 58872 -acts/act_15: - type: SM64:TEXT - offset: 1078992 - mio0: 58892 -acts/act_16: - type: SM64:TEXT - offset: 1078992 - mio0: 58908 -acts/act_17: - type: SM64:TEXT - offset: 1078992 - mio0: 58924 -acts/act_18: - type: SM64:TEXT - offset: 1078992 - mio0: 58944 -acts/act_19: - type: SM64:TEXT - offset: 1078992 - mio0: 58960 -acts/act_1A: - type: SM64:TEXT - offset: 1078992 - mio0: 58976 -acts/act_1B: - type: SM64:TEXT - offset: 1078992 - mio0: 58992 -acts/act_1C: - type: SM64:TEXT - offset: 1078992 - mio0: 59008 -acts/act_1D: - type: SM64:TEXT - offset: 1078992 - mio0: 59024 -acts/act_1E: - type: SM64:TEXT - offset: 1078992 - mio0: 59040 -acts/act_1F: - type: SM64:TEXT - offset: 1078992 - mio0: 59056 -acts/act_20: - type: SM64:TEXT - offset: 1078992 - mio0: 59072 -acts/act_21: - type: SM64:TEXT - offset: 1078992 - mio0: 59084 -acts/act_22: - type: SM64:TEXT - offset: 1078992 - mio0: 59096 -acts/act_23: - type: SM64:TEXT - offset: 1078992 - mio0: 59116 -acts/act_24: - type: SM64:TEXT - offset: 1078992 - mio0: 59132 -acts/act_25: - type: SM64:TEXT - offset: 1078992 - mio0: 59148 -acts/act_26: - type: SM64:TEXT - offset: 1078992 - mio0: 59164 -acts/act_27: - type: SM64:TEXT - offset: 1078992 - mio0: 59180 -acts/act_28: - type: SM64:TEXT - offset: 1078992 - mio0: 59192 -acts/act_29: - type: SM64:TEXT - offset: 1078992 - mio0: 59208 -acts/act_2A: - type: SM64:TEXT - offset: 1078992 - mio0: 59224 -acts/act_2B: - type: SM64:TEXT - offset: 1078992 - mio0: 59244 -acts/act_2C: - type: SM64:TEXT - offset: 1078992 - mio0: 59264 -acts/act_2D: - type: SM64:TEXT - offset: 1078992 - mio0: 59284 -acts/act_2E: - type: SM64:TEXT - offset: 1078992 - mio0: 59300 -acts/act_2F: - type: SM64:TEXT - offset: 1078992 - mio0: 59316 -acts/act_30: - type: SM64:TEXT - offset: 1078992 - mio0: 59336 -acts/act_31: - type: SM64:TEXT - offset: 1078992 - mio0: 59352 -acts/act_32: - type: SM64:TEXT - offset: 1078992 - mio0: 59368 -acts/act_33: - type: SM64:TEXT - offset: 1078992 - mio0: 59384 -acts/act_34: - type: SM64:TEXT - offset: 1078992 - mio0: 59400 -acts/act_35: - type: SM64:TEXT - offset: 1078992 - mio0: 59412 -acts/act_36: - type: SM64:TEXT - offset: 1078992 - mio0: 59428 -acts/act_37: - type: SM64:TEXT - offset: 1078992 - mio0: 59444 -acts/act_38: - type: SM64:TEXT - offset: 1078992 - mio0: 59460 -acts/act_39: - type: SM64:TEXT - offset: 1078992 - mio0: 59472 -acts/act_3A: - type: SM64:TEXT - offset: 1078992 - mio0: 59488 -acts/act_3B: - type: SM64:TEXT - offset: 1078992 - mio0: 59504 -acts/act_3C: - type: SM64:TEXT - offset: 1078992 - mio0: 59516 -acts/act_3D: - type: SM64:TEXT - offset: 1078992 - mio0: 59532 -acts/act_3E: - type: SM64:TEXT - offset: 1078992 - mio0: 59548 -acts/act_3F: - type: SM64:TEXT - offset: 1078992 - mio0: 59564 -acts/act_40: - type: SM64:TEXT - offset: 1078992 - mio0: 59584 -acts/act_41: - type: SM64:TEXT - offset: 1078992 - mio0: 59600 -acts/act_42: - type: SM64:TEXT - offset: 1078992 - mio0: 59616 -acts/act_43: - type: SM64:TEXT - offset: 1078992 - mio0: 59632 -acts/act_44: - type: SM64:TEXT - offset: 1078992 - mio0: 59652 -acts/act_45: - type: SM64:TEXT - offset: 1078992 - mio0: 59668 -acts/act_46: - type: SM64:TEXT - offset: 1078992 - mio0: 59684 -acts/act_47: - type: SM64:TEXT - offset: 1078992 - mio0: 59700 -acts/act_48: - type: SM64:TEXT - offset: 1078992 - mio0: 59716 -acts/act_49: - type: SM64:TEXT - offset: 1078992 - mio0: 59732 -acts/act_4A: - type: SM64:TEXT - offset: 1078992 - mio0: 59748 -acts/act_4B: - type: SM64:TEXT - offset: 1078992 - mio0: 59764 -acts/act_4C: - type: SM64:TEXT - offset: 1078992 - mio0: 59780 -acts/act_4D: - type: SM64:TEXT - offset: 1078992 - mio0: 59796 -acts/act_4E: - type: SM64:TEXT - offset: 1078992 - mio0: 59808 -acts/act_4F: - type: SM64:TEXT - offset: 1078992 - mio0: 59824 -acts/act_50: - type: SM64:TEXT - offset: 1078992 - mio0: 59832 -acts/act_51: - type: SM64:TEXT - offset: 1078992 - mio0: 59848 -acts/act_52: - type: SM64:TEXT - offset: 1078992 - mio0: 59868 -acts/act_53: - type: SM64:TEXT - offset: 1078992 - mio0: 59884 -acts/act_54: - type: SM64:TEXT - offset: 1078992 - mio0: 59896 -acts/act_55: - type: SM64:TEXT - offset: 1078992 - mio0: 59908 -acts/act_56: - type: SM64:TEXT - offset: 1078992 - mio0: 59920 -acts/act_57: - type: SM64:TEXT - offset: 1078992 - mio0: 59936 -acts/act_58: - type: SM64:TEXT - offset: 1078992 - mio0: 59956 -acts/act_59: - type: SM64:TEXT - offset: 1078992 - mio0: 59972 -acts/act_5A: - type: SM64:TEXT - offset: 1078992 - mio0: 59988 -acts/act_5B: - type: SM64:TEXT - offset: 1078992 - mio0: 60000 -acts/act_5C: - type: SM64:TEXT - offset: 1078992 - mio0: 60016 -acts/act_5D: - type: SM64:TEXT - offset: 1078992 - mio0: 60032 -acts/act_5E: - type: SM64:TEXT - offset: 1078992 - mio0: 60052 -acts/act_5F: - type: SM64:TEXT - offset: 1078992 - mio0: 60072 -strings/global: - type: SM64:DICTIONARY - keys: - TEXT_ZERO: 7740383 - TEXT_COIN: 7718702 - TEXT_STAR: 7706064 - TEXT_COIN_X: 5049335 - TEXT_STAR_X: 5315828 - TEXT_VARIABLE_X: 7688154 - TEXT_UNFILLED_STAR: 7708418 - TEXT_NEW: 2450496 - TEXT_4DASHES: 2450764 - TEXT_MARIO: 6620681 - TEXT_SELECT_FILE: 2450508 - TEXT_CHECK_FILE: 2450536 - TEXT_COPY_FILE: 2450568 - TEXT_ERASE_FILE: 2450672 - TEXT_SOUND_SELECT: 2450740 - TEXT_FILE_MARIO_A: 2450769 - TEXT_FILE_MARIO_B: 2450774 - TEXT_FILE_MARIO_C: 2450779 - TEXT_FILE_MARIO_D: 2450784 - TEXT_SCORE: 2451438 - TEXT_COPY: 2450524 - TEXT_ERASE: 2450532 - TEXT_STEREO: 2450440 - TEXT_MONO: 2450448 - TEXT_HEADSET: 2450456 - TEXT_SAVED_DATA_EXISTS: 2450720 - TEXT_NO_SAVED_DATA_EXISTS: 2450688 - TEXT_RETURN: 2450404 - TEXT_CHECK_SCORE: 2450412 - TEXT_COPY_FILE_BUTTON: 2450420 - TEXT_ERASE_FILE_BUTTON: 2450432 - TEXT_HI_SCORE: 2450800 - TEXT_MY_SCORE: 2451436 - TEXT_SCORE_MARIO_A: 2450769 - TEXT_SCORE_MARIO_B: 2450774 - TEXT_SCORE_MARIO_C: 2450779 - TEXT_SCORE_MARIO_D: 2450784 - TEXT_COPY_IT_TO_WHERE: 2450580 - TEXT_COPYING_COMPLETED: 2450616 - TEXT_NO_FILE_TO_COPY_FROM: 2450648 - TEXT_SURE: 2450680 - TEXT_YES: 4135790 - TEXT_NO: 2450668 - TEXT_FILE_MARIO_A_JUST_ERASED: 2450708 - TEXT_COURSE: 964084 - TEXT_MYSCORE: 2451436 - TEXT_CONTINUE: 963968 - TEXT_EXIT_COURSE: 963984 - TEXT_CAMERA_ANGLE_R: 963996 - TEXT_LAKITU_MARIO: 963916 - TEXT_LAKITU_STOP: 963928 - TEXT_NORMAL_UPCLOSE: 963944 - TEXT_NORMAL_FIXED: 963956 - TEXT_CATCH: 964088 - TEXT_CLEAR: 964096 - TEXT_HUD_HI_SCORE: 964048 - TEXT_SAVE_AND_CONTINUE: 964104 - TEXT_SAVE_AND_QUIT: 964120 - TEXT_CONTINUE_WITHOUT_SAVING: 964132 - TEXT_FILE_MARIO_EXCLAMATION: 963712 - TEXT_POWER_STARS_RESTORED: 963720 - TEXT_THANKS_TO_YOU: 963740 - TEXT_THANK_YOU_MARIO: 963760 - TEXT_SOMETHING_SPECIAL: 963772 - TEXT_LISTEN_EVERYBODY: 963788 - TEXT_LETS_HAVE_CAKE: 963796 - TEXT_FOR_MARIO: 963812 - TEXT_FILE_MARIO_QUESTION: 963824 diff --git a/assets/sm64/jp/textures.yml b/assets/sm64/jp/textures.yml deleted file mode 100644 index 4b2e9b9..0000000 --- a/assets/sm64/jp/textures.yml +++ /dev/null @@ -1,4687 +0,0 @@ -cave/hmc_textures.00000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3432432 - mio0: 0 - format: RGBA16 -cave/hmc_textures.01000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3432432 - mio0: 4096 - format: RGBA16 -cave/hmc_textures.01800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3432432 - mio0: 6144 - format: RGBA16 -cave/hmc_textures.02800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3432432 - mio0: 10240 - format: RGBA16 -cave/hmc_textures.03000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3432432 - mio0: 12288 - format: RGBA16 -cave/hmc_textures.03800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3432432 - mio0: 14336 - format: RGBA16 -cave/hmc_textures.04800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3432432 - mio0: 18432 - format: RGBA16 -cave/hmc_textures.05800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3432432 - mio0: 22528 - format: RGBA16 -cave/hmc_textures.06800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3432432 - mio0: 26624 - format: RGBA16 -cave/hmc_textures.07000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3432432 - mio0: 28672 - format: RGBA16 -cave/hmc_textures.07800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3432432 - mio0: 30720 - format: RGBA16 -cave/hmc_textures.08800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3432432 - mio0: 34816 - format: RGBA16 -cave/hmc_textures.09800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3432432 - mio0: 38912 - format: RGBA16 -cave/hmc_textures.0A000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3432432 - mio0: 40960 - format: RGBA16 -cave/hmc_textures.0A800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3432432 - mio0: 43008 - format: RGBA16 -cave/hmc_textures.0B800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3432432 - mio0: 47104 - format: IA16 -cave/hmc_textures.0C000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3298272 - mio0: 43008 - format: IA16 -effect/bubble.06048: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3594960 - mio0: 24648 - format: RGBA16 -effect/flower.00008: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3594960 - mio0: 8 - format: RGBA16 -effect/flower.00808: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3594960 - mio0: 2056 - format: RGBA16 -effect/flower.01008: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3594960 - mio0: 4104 - format: RGBA16 -effect/flower.01808: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3594960 - mio0: 6152 - format: RGBA16 -effect/lava_bubble.02020: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3594960 - mio0: 8224 - format: RGBA16 -effect/lava_bubble.02820: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3594960 - mio0: 10272 - format: RGBA16 -effect/lava_bubble.03020: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3594960 - mio0: 12320 - format: RGBA16 -effect/lava_bubble.03820: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3594960 - mio0: 14368 - format: RGBA16 -effect/lava_bubble.04020: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3594960 - mio0: 16416 - format: RGBA16 -effect/lava_bubble.04820: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3594960 - mio0: 18464 - format: RGBA16 -effect/lava_bubble.05020: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3594960 - mio0: 20512 - format: RGBA16 -effect/lava_bubble.05820: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3594960 - mio0: 22560 - format: RGBA16 -effect/tiny_bubble.0684C: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 3594960 - mio0: 26700 - format: RGBA16 -effect/tiny_bubble.06AD8: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 3594960 - mio0: 27352 - format: RGBA16 -fire/lll_textures.00000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3262320 - mio0: 0 - format: RGBA16 -fire/lll_textures.00800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3262320 - mio0: 2048 - format: RGBA16 -fire/lll_textures.01000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3262320 - mio0: 4096 - format: RGBA16 -fire/lll_textures.01800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3262320 - mio0: 6144 - format: RGBA16 -fire/lll_textures.02000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3262320 - mio0: 8192 - format: RGBA16 -fire/lll_textures.02800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3262320 - mio0: 10240 - format: RGBA16 -fire/lll_textures.03000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3262320 - mio0: 12288 - format: RGBA16 -fire/lll_textures.03800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3262320 - mio0: 14336 - format: RGBA16 -fire/lll_textures.04000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3262320 - mio0: 16384 - format: RGBA16 -fire/lll_textures.04800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3262320 - mio0: 18432 - format: RGBA16 -fire/lll_textures.05000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3262320 - mio0: 20480 - format: RGBA16 -fire/lll_textures.05800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3262320 - mio0: 22528 - format: RGBA16 -fire/lll_textures.06000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3262320 - mio0: 24576 - format: RGBA16 -fire/lll_textures.06800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3262320 - mio0: 26624 - format: RGBA16 -fire/lll_textures.07000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3262320 - mio0: 28672 - format: RGBA16 -fire/lll_textures.07800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3262320 - mio0: 30720 - format: RGBA16 -fire/lll_textures.08000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3262320 - mio0: 32768 - format: RGBA16 -fire/lll_textures.08800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3262320 - mio0: 34816 - format: RGBA16 -fire/lll_textures.09000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1078992 - mio0: 80984 - format: RGBA16 -fire/lll_textures.09800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3262320 - mio0: 38912 - format: RGBA16 -fire/lll_textures.0A000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3262320 - mio0: 40960 - format: RGBA16 -fire/lll_textures.0A800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3262320 - mio0: 43008 - format: RGBA16 -fire/lll_textures.0B000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3262320 - mio0: 45056 - format: RGBA16 -fire/lll_textures.0B800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3262320 - mio0: 47104 - format: RGBA16 -generic/bob_textures.00000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3323408 - mio0: 0 - format: RGBA16 -generic/bob_textures.00800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1327760 - mio0: 36160 - format: RGBA16 -generic/bob_textures.01000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3323408 - mio0: 4096 - format: RGBA16 -generic/bob_textures.01800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3323408 - mio0: 6144 - format: RGBA16 -generic/bob_textures.02000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3323408 - mio0: 8192 - format: RGBA16 -generic/bob_textures.02800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3323408 - mio0: 10240 - format: RGBA16 -generic/bob_textures.03000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3323408 - mio0: 12288 - format: RGBA16 -generic/bob_textures.03800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3323408 - mio0: 14336 - format: RGBA16 -generic/bob_textures.04000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3323408 - mio0: 16384 - format: RGBA16 -generic/bob_textures.04800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3323408 - mio0: 18432 - format: RGBA16 -generic/bob_textures.05000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3323408 - mio0: 20480 - format: RGBA16 -generic/bob_textures.05800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3323408 - mio0: 22528 - format: RGBA16 -generic/bob_textures.06000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3323408 - mio0: 24576 - format: RGBA16 -generic/bob_textures.07000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3323408 - mio0: 28672 - format: RGBA16 -generic/bob_textures.07800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3323408 - mio0: 30720 - format: RGBA16 -generic/bob_textures.08000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3323408 - mio0: 32768 - format: RGBA16 -generic/bob_textures.08800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3323408 - mio0: 34816 - format: RGBA16 -generic/bob_textures.09000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3323408 - mio0: 36864 - format: RGBA16 -generic/bob_textures.09800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3323408 - mio0: 38912 - format: RGBA16 -generic/bob_textures.0A000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3323408 - mio0: 40960 - format: RGBA16 -generic/bob_textures.0A800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3323408 - mio0: 43008 - format: RGBA16 -generic/bob_textures.0B000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3323408 - mio0: 45056 - format: IA16 -grass/wf_textures.00000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3496176 - mio0: 0 - format: RGBA16 -grass/wf_textures.00800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3496176 - mio0: 2048 - format: RGBA16 -grass/wf_textures.01000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3496176 - mio0: 4096 - format: RGBA16 -grass/wf_textures.01800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3496176 - mio0: 6144 - format: RGBA16 -grass/wf_textures.02000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3496176 - mio0: 8192 - format: RGBA16 -grass/wf_textures.02800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3496176 - mio0: 10240 - format: RGBA16 -grass/wf_textures.03000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3496176 - mio0: 12288 - format: RGBA16 -grass/wf_textures.03800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3496176 - mio0: 14336 - format: RGBA16 -grass/wf_textures.04000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3496176 - mio0: 16384 - format: RGBA16 -grass/wf_textures.04800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3496176 - mio0: 18432 - format: RGBA16 -grass/wf_textures.05000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3496176 - mio0: 20480 - format: RGBA16 -grass/wf_textures.05800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3496176 - mio0: 22528 - format: RGBA16 -grass/wf_textures.06000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3390640 - mio0: 20480 - format: RGBA16 -grass/wf_textures.06800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3496176 - mio0: 26624 - format: RGBA16 -grass/wf_textures.07000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3496176 - mio0: 28672 - format: RGBA16 -grass/wf_textures.07800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3496176 - mio0: 30720 - format: RGBA16 -grass/wf_textures.08000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3496176 - mio0: 32768 - format: RGBA16 -grass/wf_textures.08800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3496176 - mio0: 34816 - format: RGBA16 -grass/wf_textures.09000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3496176 - mio0: 36864 - format: RGBA16 -grass/wf_textures.09800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3496176 - mio0: 38912 - format: RGBA16 -grass/wf_textures.0A000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3496176 - mio0: 40960 - format: RGBA16 -grass/wf_textures.0A800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3496176 - mio0: 43008 - format: RGBA16 -grass/wf_textures.0B000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3323408 - mio0: 45056 - format: IA16 -grass/wf_textures.0B800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3496176 - mio0: 47104 - format: IA16 -inside/inside_castle_textures.00000: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3555104 - mio0: 0 - format: RGBA16 -inside/inside_castle_textures.01000: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3555104 - mio0: 4096 - format: RGBA16 -inside/inside_castle_textures.02000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3555104 - mio0: 8192 - format: RGBA16 -inside/inside_castle_textures.03000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3555104 - mio0: 12288 - format: RGBA16 -inside/inside_castle_textures.03800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3555104 - mio0: 14336 - format: RGBA16 -inside/inside_castle_textures.04000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3555104 - mio0: 16384 - format: RGBA16 -inside/inside_castle_textures.04800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3460352 - mio0: 2048 - format: RGBA16 -inside/inside_castle_textures.05000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3555104 - mio0: 20480 - format: RGBA16 -inside/inside_castle_textures.05800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3555104 - mio0: 22528 - format: RGBA16 -inside/inside_castle_textures.06000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3555104 - mio0: 24576 - format: RGBA16 -inside/inside_castle_textures.07000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3555104 - mio0: 28672 - format: RGBA16 -inside/inside_castle_textures.08000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3555104 - mio0: 32768 - format: RGBA16 -inside/inside_castle_textures.08800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3555104 - mio0: 34816 - format: RGBA16 -inside/inside_castle_textures.09000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3555104 - mio0: 36864 - format: RGBA16 -inside/inside_castle_textures.0A000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3555104 - mio0: 40960 - format: RGBA16 -inside/inside_castle_textures.0B000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3555104 - mio0: 45056 - format: RGBA16 -inside/inside_castle_textures.0B800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3555104 - mio0: 47104 - format: RGBA16 -intro_raw/hand_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2455304 - format: RGBA16 -intro_raw/hand_open: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2453248 - format: RGBA16 -intro_raw/mario_face_shine: - type: TEXTURE - size: 1024 - width: 32 - height: 32 - offset: 2503888 - format: IA8 -intro_raw/red_star_0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2457352 - format: RGBA16 -intro_raw/red_star_1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2459400 - format: RGBA16 -intro_raw/red_star_2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2461448 - format: RGBA16 -intro_raw/red_star_3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2463496 - format: RGBA16 -intro_raw/red_star_4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2465544 - format: RGBA16 -intro_raw/red_star_5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2467592 - format: RGBA16 -intro_raw/red_star_6: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2469640 - format: RGBA16 -intro_raw/red_star_7: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2471688 - format: RGBA16 -intro_raw/sparkle_0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2490888 - format: RGBA16 -intro_raw/sparkle_1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2492936 - format: RGBA16 -intro_raw/sparkle_2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2494984 - format: RGBA16 -intro_raw/sparkle_3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2497032 - format: RGBA16 -intro_raw/sparkle_4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2499080 - format: RGBA16 -intro_raw/sparkle_5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2501128 - format: RGBA16 -intro_raw/white_star_0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2473736 - format: RGBA16 -intro_raw/white_star_1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2475784 - format: RGBA16 -intro_raw/white_star_2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2477832 - format: RGBA16 -intro_raw/white_star_3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2479880 - format: RGBA16 -intro_raw/white_star_4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2481928 - format: RGBA16 -intro_raw/white_star_5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2483976 - format: RGBA16 -intro_raw/white_star_6: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2486024 - format: RGBA16 -intro_raw/white_star_7: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2488072 - format: RGBA16 -ipl3_raw/ipl3_font_00: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 2928 - format: IA1 -ipl3_raw/ipl3_font_01: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 2951 - format: IA1 -ipl3_raw/ipl3_font_02: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 2974 - format: IA1 -ipl3_raw/ipl3_font_03: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 2997 - format: IA1 -ipl3_raw/ipl3_font_04: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3020 - format: IA1 -ipl3_raw/ipl3_font_05: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3043 - format: IA1 -ipl3_raw/ipl3_font_06: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3066 - format: IA1 -ipl3_raw/ipl3_font_07: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3089 - format: IA1 -ipl3_raw/ipl3_font_08: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3112 - format: IA1 -ipl3_raw/ipl3_font_09: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3135 - format: IA1 -ipl3_raw/ipl3_font_10: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3158 - format: IA1 -ipl3_raw/ipl3_font_11: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3181 - format: IA1 -ipl3_raw/ipl3_font_12: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3204 - format: IA1 -ipl3_raw/ipl3_font_13: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3227 - format: IA1 -ipl3_raw/ipl3_font_14: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3250 - format: IA1 -ipl3_raw/ipl3_font_15: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3273 - format: IA1 -ipl3_raw/ipl3_font_16: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3296 - format: IA1 -ipl3_raw/ipl3_font_17: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3319 - format: IA1 -ipl3_raw/ipl3_font_18: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3342 - format: IA1 -ipl3_raw/ipl3_font_19: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3365 - format: IA1 -ipl3_raw/ipl3_font_20: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3388 - format: IA1 -ipl3_raw/ipl3_font_21: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3411 - format: IA1 -ipl3_raw/ipl3_font_22: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3434 - format: IA1 -ipl3_raw/ipl3_font_23: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3457 - format: IA1 -ipl3_raw/ipl3_font_24: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3480 - format: IA1 -ipl3_raw/ipl3_font_25: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3503 - format: IA1 -ipl3_raw/ipl3_font_26: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3526 - format: IA1 -ipl3_raw/ipl3_font_27: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3549 - format: IA1 -ipl3_raw/ipl3_font_28: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3572 - format: IA1 -ipl3_raw/ipl3_font_29: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3595 - format: IA1 -ipl3_raw/ipl3_font_30: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3618 - format: IA1 -ipl3_raw/ipl3_font_31: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3641 - format: IA1 -ipl3_raw/ipl3_font_32: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3664 - format: IA1 -ipl3_raw/ipl3_font_33: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3687 - format: IA1 -ipl3_raw/ipl3_font_34: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3710 - format: IA1 -ipl3_raw/ipl3_font_35: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3733 - format: IA1 -ipl3_raw/ipl3_font_36: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3756 - format: IA1 -ipl3_raw/ipl3_font_37: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3779 - format: IA1 -ipl3_raw/ipl3_font_38: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3802 - format: IA1 -ipl3_raw/ipl3_font_39: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3825 - format: IA1 -ipl3_raw/ipl3_font_40: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3848 - format: IA1 -ipl3_raw/ipl3_font_41: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3871 - format: IA1 -ipl3_raw/ipl3_font_42: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3894 - format: IA1 -ipl3_raw/ipl3_font_43: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3917 - format: IA1 -ipl3_raw/ipl3_font_44: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3940 - format: IA1 -ipl3_raw/ipl3_font_45: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3963 - format: IA1 -ipl3_raw/ipl3_font_46: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3986 - format: IA1 -ipl3_raw/ipl3_font_47: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 4009 - format: IA1 -ipl3_raw/ipl3_font_48: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 4032 - format: IA1 -ipl3_raw/ipl3_font_49: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 4055 - format: IA1 -machine/ttc_textures.00000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3460352 - mio0: 0 - format: RGBA16 -machine/ttc_textures.00800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3460352 - mio0: 2048 - format: RGBA16 -machine/ttc_textures.01000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3460352 - mio0: 4096 - format: RGBA16 -machine/ttc_textures.01800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3460352 - mio0: 6144 - format: RGBA16 -machine/ttc_textures.02000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3460352 - mio0: 8192 - format: RGBA16 -machine/ttc_textures.02800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3460352 - mio0: 10240 - format: RGBA16 -machine/ttc_textures.03000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3460352 - mio0: 12288 - format: RGBA16 -machine/ttc_textures.03800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3460352 - mio0: 14336 - format: RGBA16 -machine/ttc_textures.04000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3460352 - mio0: 16384 - format: RGBA16 -machine/ttc_textures.05000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3460352 - mio0: 20480 - format: RGBA16 -machine/ttc_textures.05800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3460352 - mio0: 22528 - format: RGBA16 -machine/ttc_textures.06000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3460352 - mio0: 24576 - format: RGBA16 -machine/ttc_textures.06800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3460352 - mio0: 26624 - format: RGBA16 -machine/ttc_textures.07000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3460352 - mio0: 28672 - format: RGBA16 -machine/ttc_textures.07800: - type: TEXTURE - size: 2048 - width: 16 - height: 64 - offset: 3460352 - mio0: 30720 - format: RGBA16 -machine/ttc_textures.08000: - type: TEXTURE - size: 1024 - width: 64 - height: 8 - offset: 3460352 - mio0: 32768 - format: RGBA16 -machine/ttc_textures.08400: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3460352 - mio0: 33792 - format: RGBA16 -mountain/ttm_textures.00000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3473152 - mio0: 0 - format: RGBA16 -mountain/ttm_textures.00800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3473152 - mio0: 2048 - format: RGBA16 -mountain/ttm_textures.01800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3473152 - mio0: 6144 - format: RGBA16 -mountain/ttm_textures.02800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3473152 - mio0: 10240 - format: RGBA16 -mountain/ttm_textures.03000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3473152 - mio0: 12288 - format: RGBA16 -mountain/ttm_textures.03800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3473152 - mio0: 14336 - format: RGBA16 -mountain/ttm_textures.04000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3473152 - mio0: 16384 - format: RGBA16 -mountain/ttm_textures.04800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3473152 - mio0: 18432 - format: RGBA16 -mountain/ttm_textures.05000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3473152 - mio0: 20480 - format: RGBA16 -mountain/ttm_textures.05800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3473152 - mio0: 22528 - format: RGBA16 -mountain/ttm_textures.06800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3473152 - mio0: 26624 - format: RGBA16 -mountain/ttm_textures.07000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3473152 - mio0: 28672 - format: RGBA16 -mountain/ttm_textures.07800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3473152 - mio0: 30720 - format: RGBA16 -mountain/ttm_textures.08000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3473152 - mio0: 32768 - format: RGBA16 -mountain/ttm_textures.08800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3473152 - mio0: 34816 - format: RGBA16 -mountain/ttm_textures.09800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3473152 - mio0: 38912 - format: RGBA16 -mountain/ttm_textures.0A000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3390640 - mio0: 24576 - format: RGBA16 -mountain/ttm_textures.0A800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3473152 - mio0: 43008 - format: RGBA16 -mountain/ttm_textures.0B000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3473152 - mio0: 45056 - format: RGBA16 -mountain/ttm_textures.0B800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3473152 - mio0: 47104 - format: RGBA16 -mountain/ttm_textures.0C000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3473152 - mio0: 49152 - format: RGBA16 -outside/castle_grounds_textures.00000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3527344 - mio0: 0 - format: RGBA16 -outside/castle_grounds_textures.00800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3527344 - mio0: 2048 - format: RGBA16 -outside/castle_grounds_textures.01000: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3527344 - mio0: 4096 - format: RGBA16 -outside/castle_grounds_textures.02000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3527344 - mio0: 8192 - format: RGBA16 -outside/castle_grounds_textures.03000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3527344 - mio0: 12288 - format: RGBA16 -outside/castle_grounds_textures.03800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3527344 - mio0: 14336 - format: RGBA16 -outside/castle_grounds_textures.04000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3527344 - mio0: 16384 - format: RGBA16 -outside/castle_grounds_textures.04800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3527344 - mio0: 18432 - format: RGBA16 -outside/castle_grounds_textures.05800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3527344 - mio0: 22528 - format: RGBA16 -outside/castle_grounds_textures.06000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3527344 - mio0: 24576 - format: RGBA16 -outside/castle_grounds_textures.06800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3527344 - mio0: 26624 - format: RGBA16 -outside/castle_grounds_textures.07800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3527344 - mio0: 30720 - format: RGBA16 -outside/castle_grounds_textures.08000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3527344 - mio0: 32768 - format: RGBA16 -outside/castle_grounds_textures.08800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3527344 - mio0: 34816 - format: RGBA16 -outside/castle_grounds_textures.09000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3527344 - mio0: 36864 - format: RGBA16 -outside/castle_grounds_textures.09800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3527344 - mio0: 38912 - format: RGBA16 -outside/castle_grounds_textures.0A000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3527344 - mio0: 40960 - format: RGBA16 -outside/castle_grounds_textures.0A800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3527344 - mio0: 43008 - format: RGBA16 -outside/castle_grounds_textures.0B000: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 3527344 - mio0: 45056 - format: RGBA16 -outside/castle_grounds_textures.0B400: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3527344 - mio0: 46080 - format: RGBA16 -outside/castle_grounds_textures.0BC00: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3323408 - mio0: 45056 - format: IA16 -segment2/font_graphics.06410: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 1599504 - mio0: 83574 - format: IA1 -segment2/font_graphics.06420: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 1844608 - mio0: 133979 - format: IA1 -segment2/segment2.00000: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 0 - format: RGBA16 -segment2/segment2.00200: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 512 - format: RGBA16 -segment2/segment2.00400: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 1024 - format: RGBA16 -segment2/segment2.00600: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 1536 - format: RGBA16 -segment2/segment2.00800: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 2048 - format: RGBA16 -segment2/segment2.00A00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 2560 - format: RGBA16 -segment2/segment2.00C00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 3072 - format: RGBA16 -segment2/segment2.00E00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 3584 - format: RGBA16 -segment2/segment2.01000: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 4096 - format: RGBA16 -segment2/segment2.01200: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 4608 - format: RGBA16 -segment2/segment2.01400: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 5120 - format: RGBA16 -segment2/segment2.01600: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 5632 - format: RGBA16 -segment2/segment2.01800: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 6144 - format: RGBA16 -segment2/segment2.01A00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 6656 - format: RGBA16 -segment2/segment2.01C00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 7168 - format: RGBA16 -segment2/segment2.01E00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 7680 - format: RGBA16 -segment2/segment2.02000: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 8192 - format: RGBA16 -segment2/segment2.02200: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 8704 - format: RGBA16 -segment2/segment2.02400: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 9216 - format: RGBA16 -segment2/segment2.02600: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 9728 - format: RGBA16 -segment2/segment2.02800: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 10240 - format: RGBA16 -segment2/segment2.02A00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 10752 - format: RGBA16 -segment2/segment2.02C00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 11264 - format: RGBA16 -segment2/segment2.02E00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 11776 - format: RGBA16 -segment2/segment2.03000: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 12288 - format: RGBA16 -segment2/segment2.03200: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 12800 - format: RGBA16 -segment2/segment2.03400: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 13312 - format: RGBA16 -segment2/segment2.03600: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 13824 - format: RGBA16 -segment2/segment2.03800: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 14336 - format: RGBA16 -segment2/segment2.03A00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 14848 - format: RGBA16 -segment2/segment2.03C00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 15360 - format: RGBA16 -segment2/segment2.03E00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 15872 - format: RGBA16 -segment2/segment2.04000: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 16384 - format: RGBA16 -segment2/segment2.04200: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 16896 - format: RGBA16 -segment2/segment2.04400: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 17408 - format: RGBA16 -segment2/segment2.04600: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 17920 - format: RGBA16 -segment2/segment2.04800: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 18432 - format: RGBA16 -segment2/segment2.04A00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 18944 - format: RGBA16 -segment2/segment2.04C00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 19456 - format: RGBA16 -segment2/segment2.04E00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 19968 - format: RGBA16 -segment2/segment2.05000: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 20480 - format: RGBA16 -segment2/segment2.05200: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 20992 - format: RGBA16 -segment2/segment2.05400: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 21504 - format: RGBA16 -segment2/segment2.05600: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 22016 - format: RGBA16 -segment2/segment2.05800: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 22528 - format: RGBA16 -segment2/segment2.05A00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 23040 - format: RGBA16 -segment2/segment2.05C00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 23552 - format: RGBA16 -segment2/segment2.05E00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 24064 - format: RGBA16 -segment2/segment2.06000: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 24576 - format: RGBA16 -segment2/segment2.06200: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1078992 - mio0: 25088 - format: RGBA16 -segment2/segment2.06280: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1078992 - mio0: 25216 - format: RGBA16 -segment2/segment2.06300: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1078992 - mio0: 25344 - format: RGBA16 -segment2/segment2.06380: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1078992 - mio0: 25472 - format: RGBA16 -segment2/segment2.06400: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1078992 - mio0: 25600 - format: RGBA16 -segment2/segment2.06480: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1078992 - mio0: 25728 - format: RGBA16 -segment2/segment2.06500: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1078992 - mio0: 25856 - format: RGBA16 -segment2/segment2.06580: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1078992 - mio0: 25984 - format: RGBA16 -segment2/segment2.06600: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1078992 - mio0: 26112 - format: RGBA16 -segment2/segment2.06680: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1078992 - mio0: 26240 - format: RGBA16 -segment2/segment2.06700: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1078992 - mio0: 26368 - format: RGBA16 -segment2/segment2.06780: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1078992 - mio0: 26496 - format: RGBA16 -segment2/segment2.06800: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1078992 - mio0: 26624 - format: RGBA16 -segment2/segment2.06880: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1078992 - mio0: 26752 - format: RGBA16 -segment2/segment2.06900: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1078992 - mio0: 26880 - format: RGBA16 -segment2/segment2.06980: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1078992 - mio0: 27008 - format: RGBA16 -segment2/segment2.06A00: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1078992 - mio0: 27136 - format: RGBA16 -segment2/segment2.06A80: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1078992 - mio0: 27264 - format: RGBA16 -segment2/segment2.06B00: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1078992 - mio0: 27392 - format: RGBA16 -segment2/segment2.06B80: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1078992 - mio0: 27520 - format: RGBA16 -segment2/segment2.06C00: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1078992 - mio0: 27648 - format: RGBA16 -segment2/segment2.06C80: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1078992 - mio0: 27776 - format: RGBA16 -segment2/segment2.06D00: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1078992 - mio0: 27904 - format: RGBA16 -segment2/segment2.06D80: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1078992 - mio0: 28032 - format: RGBA16 -segment2/segment2.06E00: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1078992 - mio0: 28160 - format: RGBA16 -segment2/segment2.06E80: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1078992 - mio0: 28288 - format: RGBA16 -segment2/segment2.06F00: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1078992 - mio0: 28416 - format: RGBA16 -segment2/segment2.06F80: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1078992 - mio0: 28544 - format: RGBA16 -segment2/segment2.07000: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1078992 - mio0: 28672 - format: RGBA16 -segment2/segment2.07080: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1078992 - mio0: 28800 - format: RGBA16 -segment2/segment2.07100: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 28928 - format: IA1 -segment2/segment2.07110: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 28944 - format: IA1 -segment2/segment2.07120: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 28960 - format: IA1 -segment2/segment2.07130: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 28976 - format: IA1 -segment2/segment2.07140: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 28992 - format: IA1 -segment2/segment2.07150: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29008 - format: IA1 -segment2/segment2.07160: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29024 - format: IA1 -segment2/segment2.07170: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29040 - format: IA1 -segment2/segment2.07180: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29056 - format: IA1 -segment2/segment2.07190: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29072 - format: IA1 -segment2/segment2.071A0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29088 - format: IA1 -segment2/segment2.071B0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29104 - format: IA1 -segment2/segment2.071C0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29120 - format: IA1 -segment2/segment2.071D0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29136 - format: IA1 -segment2/segment2.071E0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29152 - format: IA1 -segment2/segment2.071F0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29168 - format: IA1 -segment2/segment2.07200: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29184 - format: IA1 -segment2/segment2.07210: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29200 - format: IA1 -segment2/segment2.07220: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29216 - format: IA1 -segment2/segment2.07230: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29232 - format: IA1 -segment2/segment2.07240: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29248 - format: IA1 -segment2/segment2.07250: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29264 - format: IA1 -segment2/segment2.07260: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29280 - format: IA1 -segment2/segment2.07270: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29296 - format: IA1 -segment2/segment2.07280: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29312 - format: IA1 -segment2/segment2.07290: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29328 - format: IA1 -segment2/segment2.072A0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29344 - format: IA1 -segment2/segment2.072B0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29360 - format: IA1 -segment2/segment2.072C0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29376 - format: IA1 -segment2/segment2.072D0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29392 - format: IA1 -segment2/segment2.072E0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29408 - format: IA1 -segment2/segment2.072F0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29424 - format: IA1 -segment2/segment2.07300: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29440 - format: IA1 -segment2/segment2.07310: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29456 - format: IA1 -segment2/segment2.07320: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29472 - format: IA1 -segment2/segment2.07330: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29488 - format: IA1 -segment2/segment2.07340: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29504 - format: IA1 -segment2/segment2.07350: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29520 - format: IA1 -segment2/segment2.07360: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29536 - format: IA1 -segment2/segment2.07370: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29552 - format: IA1 -segment2/segment2.07380: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29568 - format: IA1 -segment2/segment2.07390: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29584 - format: IA1 -segment2/segment2.073A0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29600 - format: IA1 -segment2/segment2.073B0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29616 - format: IA1 -segment2/segment2.073C0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29632 - format: IA1 -segment2/segment2.073D0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29648 - format: IA1 -segment2/segment2.073E0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29664 - format: IA1 -segment2/segment2.073F0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29680 - format: IA1 -segment2/segment2.07400: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29696 - format: IA1 -segment2/segment2.07410: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29712 - format: IA1 -segment2/segment2.07420: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29728 - format: IA1 -segment2/segment2.07430: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29744 - format: IA1 -segment2/segment2.07440: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29760 - format: IA1 -segment2/segment2.07450: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29776 - format: IA1 -segment2/segment2.07460: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29792 - format: IA1 -segment2/segment2.07470: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29808 - format: IA1 -segment2/segment2.07480: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29824 - format: IA1 -segment2/segment2.07490: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29840 - format: IA1 -segment2/segment2.074A0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29856 - format: IA1 -segment2/segment2.074B0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29872 - format: IA1 -segment2/segment2.074C0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29888 - format: IA1 -segment2/segment2.074D0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29904 - format: IA1 -segment2/segment2.074E0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29920 - format: IA1 -segment2/segment2.074F0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29936 - format: IA1 -segment2/segment2.07500: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29952 - format: IA1 -segment2/segment2.07510: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29968 - format: IA1 -segment2/segment2.07520: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 29984 - format: IA1 -segment2/segment2.07530: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30000 - format: IA1 -segment2/segment2.07540: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30016 - format: IA1 -segment2/segment2.07550: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30032 - format: IA1 -segment2/segment2.07560: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30048 - format: IA1 -segment2/segment2.07570: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30064 - format: IA1 -segment2/segment2.07580: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30080 - format: IA1 -segment2/segment2.07590: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30096 - format: IA1 -segment2/segment2.075A0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30112 - format: IA1 -segment2/segment2.075B0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30128 - format: IA1 -segment2/segment2.075C0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30144 - format: IA1 -segment2/segment2.075D0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30160 - format: IA1 -segment2/segment2.075E0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30176 - format: IA1 -segment2/segment2.075F0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30192 - format: IA1 -segment2/segment2.07600: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30208 - format: IA1 -segment2/segment2.07610: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30224 - format: IA1 -segment2/segment2.07620: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30240 - format: IA1 -segment2/segment2.07630: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30256 - format: IA1 -segment2/segment2.07640: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30272 - format: IA1 -segment2/segment2.07650: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30288 - format: IA1 -segment2/segment2.07660: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30304 - format: IA1 -segment2/segment2.07670: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30320 - format: IA1 -segment2/segment2.07680: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30336 - format: IA1 -segment2/segment2.07690: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30352 - format: IA1 -segment2/segment2.076A0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30368 - format: IA1 -segment2/segment2.076B0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30384 - format: IA1 -segment2/segment2.076C0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30400 - format: IA1 -segment2/segment2.076D0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30416 - format: IA1 -segment2/segment2.076E0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30432 - format: IA1 -segment2/segment2.076F0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30448 - format: IA1 -segment2/segment2.07700: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30464 - format: IA1 -segment2/segment2.07710: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30480 - format: IA1 -segment2/segment2.07720: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30496 - format: IA1 -segment2/segment2.07730: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30512 - format: IA1 -segment2/segment2.07740: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30528 - format: IA1 -segment2/segment2.07750: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30544 - format: IA1 -segment2/segment2.07760: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30560 - format: IA1 -segment2/segment2.07770: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30576 - format: IA1 -segment2/segment2.07780: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30592 - format: IA1 -segment2/segment2.07790: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30608 - format: IA1 -segment2/segment2.077A0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30624 - format: IA1 -segment2/segment2.077B0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30640 - format: IA1 -segment2/segment2.077C0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30656 - format: IA1 -segment2/segment2.077D0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30672 - format: IA1 -segment2/segment2.077E0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30688 - format: IA1 -segment2/segment2.077F0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30704 - format: IA1 -segment2/segment2.07800: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30720 - format: IA1 -segment2/segment2.07810: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30736 - format: IA1 -segment2/segment2.07820: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30752 - format: IA1 -segment2/segment2.07830: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30768 - format: IA1 -segment2/segment2.07840: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30784 - format: IA1 -segment2/segment2.07850: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30800 - format: IA1 -segment2/segment2.07860: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30816 - format: IA1 -segment2/segment2.07870: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30832 - format: IA1 -segment2/segment2.07880: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30848 - format: IA1 -segment2/segment2.07890: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30864 - format: IA1 -segment2/segment2.078A0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30880 - format: IA1 -segment2/segment2.078B0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30896 - format: IA1 -segment2/segment2.078C0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30912 - format: IA1 -segment2/segment2.078D0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30928 - format: IA1 -segment2/segment2.078E0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30944 - format: IA1 -segment2/segment2.078F0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30960 - format: IA1 -segment2/segment2.07900: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30976 - format: IA1 -segment2/segment2.07910: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 30992 - format: IA1 -segment2/segment2.07920: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31008 - format: IA1 -segment2/segment2.07930: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31024 - format: IA1 -segment2/segment2.07940: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31040 - format: IA1 -segment2/segment2.07950: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31056 - format: IA1 -segment2/segment2.07960: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31072 - format: IA1 -segment2/segment2.07970: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31088 - format: IA1 -segment2/segment2.07980: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31104 - format: IA1 -segment2/segment2.07990: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31120 - format: IA1 -segment2/segment2.079A0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31136 - format: IA1 -segment2/segment2.079B0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31152 - format: IA1 -segment2/segment2.079C0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31168 - format: IA1 -segment2/segment2.079D0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31184 - format: IA1 -segment2/segment2.079E0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31200 - format: IA1 -segment2/segment2.079F0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31216 - format: IA1 -segment2/segment2.07A00: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31232 - format: IA1 -segment2/segment2.07A10: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31248 - format: IA1 -segment2/segment2.07A20: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31264 - format: IA1 -segment2/segment2.07A30: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31280 - format: IA1 -segment2/segment2.07A40: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31296 - format: IA1 -segment2/segment2.07A50: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31312 - format: IA1 -segment2/segment2.07A60: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31328 - format: IA1 -segment2/segment2.07A70: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31344 - format: IA1 -segment2/segment2.07A80: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31360 - format: IA1 -segment2/segment2.07A90: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31376 - format: IA1 -segment2/segment2.07AA0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31392 - format: IA1 -segment2/segment2.07AB0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31408 - format: IA1 -segment2/segment2.07AC0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31424 - format: IA1 -segment2/segment2.07AD0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31440 - format: IA1 -segment2/segment2.07AE0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31456 - format: IA1 -segment2/segment2.07AF0: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31472 - format: IA1 -segment2/segment2.07B00: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31488 - format: IA1 -segment2/segment2.07B10: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31504 - format: IA1 -segment2/segment2.07B20: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31520 - format: IA1 -segment2/segment2.07B30: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31536 - format: IA1 -segment2/segment2.07B40: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1078992 - mio0: 31552 - format: IA1 -segment2/segment2.07B50: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 31568 - format: RGBA16 -segment2/segment2.07D50: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 32080 - format: RGBA16 -segment2/segment2.07F50: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1078992 - mio0: 32592 - format: RGBA16 -segment2/segment2.08150: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1078992 - mio0: 33104 - format: RGBA16 -segment2/segment2.081D0: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1078992 - mio0: 33232 - format: RGBA16 -segment2/segment2.0F458: - type: TEXTURE - size: 2048 - width: 32 - height: 64 - offset: 1078992 - mio0: 62552 - format: IA8 -segment2/segment2.0FC58: - type: TEXTURE - size: 2048 - width: 32 - height: 64 - offset: 1078992 - mio0: 64600 - format: IA8 -segment2/segment2.10458: - type: TEXTURE - size: 4096 - width: 64 - height: 64 - offset: 1078992 - mio0: 66648 - format: IA8 -segment2/segment2.11458: - type: TEXTURE - size: 2048 - width: 32 - height: 64 - offset: 1078992 - mio0: 70744 - format: IA8 -segment2/segment2.11C58: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1078992 - mio0: 72792 - format: RGBA16 -segment2/segment2.12458: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1078992 - mio0: 74840 - format: RGBA16 -segment2/segment2.12C58: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1078992 - mio0: 76888 - format: RGBA16 -segment2/segment2.13458: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1078992 - mio0: 78936 - format: IA16 -segment2/segment2.13C58: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1078992 - mio0: 80984 - format: RGBA16 -segment2/segment2.14838: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 1078992 - mio0: 84024 - format: IA8 -segment2/shadow_quarter_circle: - type: TEXTURE - size: 256 - width: 16 - height: 16 - offset: 1078992 - mio0: 62040 - format: IA8 -segment2/shadow_quarter_square: - type: TEXTURE - size: 256 - width: 16 - height: 16 - offset: 1078992 - mio0: 62296 - format: IA8 -sky/metal_hole: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3390640 - mio0: 26624 - format: RGBA16 -sky/rr_textures.00000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3390640 - mio0: 0 - format: RGBA16 -sky/rr_textures.00800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3390640 - mio0: 2048 - format: RGBA16 -sky/rr_textures.01000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3390640 - mio0: 4096 - format: RGBA16 -sky/rr_textures.01800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3390640 - mio0: 6144 - format: RGBA16 -sky/rr_textures.02000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3390640 - mio0: 8192 - format: RGBA16 -sky/rr_textures.03000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3390640 - mio0: 12288 - format: RGBA16 -sky/rr_textures.03800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3390640 - mio0: 14336 - format: RGBA16 -sky/rr_textures.04800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3390640 - mio0: 18432 - format: RGBA16 -sky/rr_textures.05000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3390640 - mio0: 20480 - format: RGBA16 -sky/rr_textures.05800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3390640 - mio0: 22528 - format: RGBA16 -sky/rr_textures.06000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3390640 - mio0: 24576 - format: RGBA16 -sky/rr_textures.07000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3390640 - mio0: 28672 - format: RGBA16 -sky/rr_textures.07800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3390640 - mio0: 30720 - format: RGBA16 -sky/rr_textures.08000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3390640 - mio0: 32768 - format: RGBA16 -skyboxes/bbh: - type: BLOB - size: 84288 - offset: 3118928 - mio0: 0 -skyboxes/bidw: - type: BLOB - size: 131392 - offset: 3146352 - mio0: 0 -skyboxes/bitfs: - type: BLOB - size: 102720 - offset: 2942432 - mio0: 0 -skyboxes/bits: - type: BLOB - size: 131392 - offset: 3191904 - mio0: 0 -skyboxes/ccm: - type: BLOB - size: 131392 - offset: 2847920 - mio0: 0 -skyboxes/cloud_floor: - type: BLOB - size: 131392 - offset: 3038752 - mio0: 0 -skyboxes/clouds: - type: BLOB - size: 84288 - offset: 2906480 - mio0: 0 -skyboxes/ssl: - type: BLOB - size: 131392 - offset: 3078784 - mio0: 0 -skyboxes/water: - type: BLOB - size: 131392 - offset: 2796624 - mio0: 0 -skyboxes/wdw: - type: BLOB - size: 131392 - offset: 2968208 - mio0: 0 -snow/ccm_textures.00000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3405536 - mio0: 0 - format: RGBA16 -snow/ccm_textures.00800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3405536 - mio0: 2048 - format: RGBA16 -snow/ccm_textures.01000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3405536 - mio0: 4096 - format: RGBA16 -snow/ccm_textures.02000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3405536 - mio0: 8192 - format: RGBA16 -snow/ccm_textures.02800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3405536 - mio0: 10240 - format: RGBA16 -snow/ccm_textures.03000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3405536 - mio0: 12288 - format: RGBA16 -snow/ccm_textures.03800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3405536 - mio0: 14336 - format: RGBA16 -snow/ccm_textures.04000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3405536 - mio0: 16384 - format: RGBA16 -snow/ccm_textures.04800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3405536 - mio0: 18432 - format: RGBA16 -snow/ccm_textures.05000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3405536 - mio0: 20480 - format: RGBA16 -snow/ccm_textures.05800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3405536 - mio0: 22528 - format: RGBA16 -snow/ccm_textures.06000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3405536 - mio0: 24576 - format: RGBA16 -snow/ccm_textures.06800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3405536 - mio0: 26624 - format: RGBA16 -snow/ccm_textures.07000: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3405536 - mio0: 28672 - format: RGBA16 -snow/ccm_textures.08000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3405536 - mio0: 32768 - format: RGBA16 -snow/ccm_textures.08800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3405536 - mio0: 34816 - format: RGBA16 -snow/ccm_textures.09000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3405536 - mio0: 36864 - format: IA16 -snow/ccm_textures.09800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3405536 - mio0: 38912 - format: IA16 -spooky/bbh_textures.00000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3298272 - mio0: 0 - format: RGBA16 -spooky/bbh_textures.00800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3298272 - mio0: 2048 - format: RGBA16 -spooky/bbh_textures.01800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3298272 - mio0: 6144 - format: RGBA16 -spooky/bbh_textures.02800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3298272 - mio0: 10240 - format: RGBA16 -spooky/bbh_textures.03800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3298272 - mio0: 14336 - format: RGBA16 -spooky/bbh_textures.04800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3298272 - mio0: 18432 - format: RGBA16 -spooky/bbh_textures.05000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3298272 - mio0: 20480 - format: RGBA16 -spooky/bbh_textures.06000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3298272 - mio0: 24576 - format: RGBA16 -spooky/bbh_textures.06800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3298272 - mio0: 26624 - format: RGBA16 -spooky/bbh_textures.07000: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3298272 - mio0: 28672 - format: RGBA16 -spooky/bbh_textures.08000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3298272 - mio0: 32768 - format: RGBA16 -spooky/bbh_textures.08800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3298272 - mio0: 34816 - format: RGBA16 -spooky/bbh_textures.09000: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3298272 - mio0: 36864 - format: RGBA16 -spooky/bbh_textures.0A000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1462368 - mio0: 49800 - format: RGBA16 -spooky/bbh_textures.0A800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3298272 - mio0: 43008 - format: IA16 -spooky/bbh_textures.0B000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3298272 - mio0: 45056 - format: IA16 -spooky/bbh_textures.0B800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3298272 - mio0: 47104 - format: IA16 -title_screen_bg/title_screen_bg.001C0: - type: TEXTURE - size: 3200 - width: 80 - height: 20 - offset: 2550336 - mio0: 448 - format: RGBA16 -title_screen_bg/title_screen_bg.00E40: - type: TEXTURE - size: 3200 - width: 80 - height: 20 - offset: 2550336 - mio0: 3648 - format: RGBA16 -title_screen_bg/title_screen_bg.01AC0: - type: TEXTURE - size: 3200 - width: 80 - height: 20 - offset: 2550336 - mio0: 6848 - format: RGBA16 -title_screen_bg/title_screen_bg.02740: - type: TEXTURE - size: 3200 - width: 80 - height: 20 - offset: 2550336 - mio0: 10048 - format: RGBA16 -title_screen_bg/title_screen_bg.033C0: - type: TEXTURE - size: 3200 - width: 80 - height: 20 - offset: 2550336 - mio0: 13248 - format: RGBA16 -title_screen_bg/title_screen_bg.04040: - type: TEXTURE - size: 3200 - width: 80 - height: 20 - offset: 2550336 - mio0: 16448 - format: RGBA16 -title_screen_bg/title_screen_bg.04CC0: - type: TEXTURE - size: 3200 - width: 80 - height: 20 - offset: 2550336 - mio0: 19648 - format: RGBA16 -title_screen_bg/title_screen_bg.05940: - type: TEXTURE - size: 3200 - width: 80 - height: 20 - offset: 2550336 - mio0: 22848 - format: RGBA16 -water/jrb_textures.00000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3354832 - mio0: 0 - format: RGBA16 -water/jrb_textures.00800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3354832 - mio0: 2048 - format: RGBA16 -water/jrb_textures.01800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3354832 - mio0: 6144 - format: RGBA16 -water/jrb_textures.02800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3354832 - mio0: 10240 - format: RGBA16 -water/jrb_textures.03800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3354832 - mio0: 14336 - format: RGBA16 -water/jrb_textures.04800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3354832 - mio0: 18432 - format: RGBA16 -water/jrb_textures.05800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3354832 - mio0: 22528 - format: RGBA16 -water/jrb_textures.06000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3354832 - mio0: 24576 - format: RGBA16 -water/jrb_textures.06800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3354832 - mio0: 26624 - format: RGBA16 -water/jrb_textures.07800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3354832 - mio0: 30720 - format: RGBA16 -water/jrb_textures.08800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3354832 - mio0: 34816 - format: RGBA16 -water/jrb_textures.09000: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3354832 - mio0: 36864 - format: RGBA16 -water/jrb_textures.0A000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3354832 - mio0: 40960 - format: RGBA16 -water/jrb_textures.0A800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3354832 - mio0: 43008 - format: RGBA16 -water/jrb_textures.0B800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3354832 - mio0: 47104 - format: RGBA16 diff --git a/assets/sm64/us/actors.yml b/assets/sm64/us/actors.yml deleted file mode 100644 index 3519fe0..0000000 --- a/assets/sm64/us/actors.yml +++ /dev/null @@ -1,3704 +0,0 @@ -amp/amp_body: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2040320 - mio0: 6936 - format: RGBA16 -amp/amp_electricity: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 2040320 - mio0: 3864 - format: RGBA16 -amp/amp_eyes: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2040320 - mio0: 4888 - format: RGBA16 -amp/amp_mouth: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2040320 - mio0: 8984 - format: RGBA16 -blue_coin_switch/blue_coin_switch_side: - type: TEXTURE - size: 1024 - width: 32 - height: 16 - offset: 2040320 - mio0: 24 - format: RGBA16 -blue_coin_switch/blue_coin_switch_top: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2040320 - mio0: 1048 - format: RGBA16 -blue_fish/blue_fish: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 112096 - format: RGBA16 -bobomb/bob-omb_buddy_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1264928 - mio0: 120 - format: RGBA16 -bobomb/bob-omb_buddy_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1264928 - mio0: 4216 - format: RGBA16 -bobomb/bob-omb_eyes: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1264928 - mio0: 18552 - format: RGBA16 -bobomb/bob-omb_eyes_blink: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1264928 - mio0: 20600 - format: RGBA16 -bobomb/bob-omb_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2040320 - mio0: 121440 - format: RGBA16 -bobomb/bob-omb_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2040320 - mio0: 125536 - format: RGBA16 -bomb/bomb_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1606720 - mio0: 359440 - format: RGBA16 -bomb/bomb_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1606720 - mio0: 363536 - format: RGBA16 -bomb/bomb_spike: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1606720 - mio0: 367632 - format: RGBA16 -boo/boo_eyes: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1469536 - mio0: 39744 - format: RGBA16 -boo/boo_mouth: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1469536 - mio0: 43840 - format: RGBA16 -boo_castle/bbh_boo_eyes: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1469536 - mio0: 39744 - format: RGBA16 -boo_castle/bbh_boo_mouth: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1469536 - mio0: 43840 - format: RGBA16 -book/book_cover: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1469536 - mio0: 4192 - format: RGBA16 -bookend/bookend_cover: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1469536 - mio0: 4192 - format: RGBA16 -bookend/bookend_mouth: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 1469536 - mio0: 2144 - format: RGBA16 -bookend/bookend_pages: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 1469536 - mio0: 3168 - format: RGBA16 -bookend/bookend_spine: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 1469536 - mio0: 96 - format: RGBA16 -bookend/bookend_tooth: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 1469536 - mio0: 1120 - format: RGBA16 -bowser/bowser_armband: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1606720 - mio0: 146488 - format: RGBA16 -bowser/bowser_armband_spike: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1606720 - mio0: 142392 - format: RGBA16 -bowser/bowser_blue_eye_unused: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1606720 - mio0: 156728 - format: RGBA16 -bowser/bowser_body: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1606720 - mio0: 140344 - format: RGBA16 -bowser/bowser_chest: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1606720 - mio0: 152632 - format: RGBA16 -bowser/bowser_claw_edge: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1606720 - mio0: 171064 - format: RGBA16 -bowser/bowser_claw_horn_angle: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1606720 - mio0: 179256 - format: RGBA16 -bowser/bowser_claw_horn_tooth: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1606720 - mio0: 175160 - format: RGBA16 -bowser/bowser_eye_center_0: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1606720 - mio0: 195640 - format: RGBA16 -bowser/bowser_eye_center_1: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1606720 - mio0: 195640 - format: RGBA16 -bowser/bowser_eye_closed_0: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1606720 - mio0: 191544 - format: RGBA16 -bowser/bowser_eye_closed_1: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1606720 - mio0: 191544 - format: RGBA16 -bowser/bowser_eye_far_left_0: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1606720 - mio0: 203832 - format: RGBA16 -bowser/bowser_eye_far_left_1: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1606720 - mio0: 203832 - format: RGBA16 -bowser/bowser_eye_half_closed_0: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1606720 - mio0: 187448 - format: RGBA16 -bowser/bowser_eye_half_closed_1: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1606720 - mio0: 187448 - format: RGBA16 -bowser/bowser_eye_left_0: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1606720 - mio0: 183352 - format: RGBA16 -bowser/bowser_eye_left_1: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1606720 - mio0: 183352 - format: RGBA16 -bowser/bowser_eye_right_0: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1606720 - mio0: 199736 - format: RGBA16 -bowser/bowser_eye_right_1: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1606720 - mio0: 199736 - format: RGBA16 -bowser/bowser_eyebrow: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1606720 - mio0: 130104 - format: RGBA16 -bowser/bowser_hair: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1606720 - mio0: 166968 - format: RGBA16 -bowser/bowser_mouth_unused: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1606720 - mio0: 160824 - format: RGBA16 -bowser/bowser_muzzle: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1606720 - mio0: 134200 - format: RGBA16 -bowser/bowser_nostrils: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1606720 - mio0: 136248 - format: RGBA16 -bowser/bowser_shell: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1606720 - mio0: 128056 - format: RGBA16 -bowser/bowser_shell_edge: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1606720 - mio0: 154680 - format: RGBA16 -bowser/bowser_tongue: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1606720 - mio0: 148536 - format: RGBA16 -bowser/bowser_upper_face: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1606720 - mio0: 164920 - format: RGBA16 -bowser_flame/bowser_flame_0: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1606720 - mio0: 0 - format: RGBA16 -bowser_flame/bowser_flame_1: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1606720 - mio0: 8192 - format: RGBA16 -bowser_flame/bowser_flame_10: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1606720 - mio0: 81920 - format: RGBA16 -bowser_flame/bowser_flame_11: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1606720 - mio0: 90112 - format: RGBA16 -bowser_flame/bowser_flame_12: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1606720 - mio0: 98304 - format: RGBA16 -bowser_flame/bowser_flame_13: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1606720 - mio0: 106496 - format: RGBA16 -bowser_flame/bowser_flame_2: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1606720 - mio0: 16384 - format: RGBA16 -bowser_flame/bowser_flame_3: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1606720 - mio0: 24576 - format: RGBA16 -bowser_flame/bowser_flame_4: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1606720 - mio0: 32768 - format: RGBA16 -bowser_flame/bowser_flame_5: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1606720 - mio0: 40960 - format: RGBA16 -bowser_flame/bowser_flame_6: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1606720 - mio0: 49152 - format: RGBA16 -bowser_flame/bowser_flame_7: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1606720 - mio0: 57344 - format: RGBA16 -bowser_flame/bowser_flame_8: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1606720 - mio0: 65536 - format: RGBA16 -bowser_flame/bowser_flame_9: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1606720 - mio0: 73728 - format: RGBA16 -breakable_box/cork_box_surface: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2040320 - mio0: 74384 - format: RGBA16 -breakable_box/crazy_box_surface: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2040320 - mio0: 72336 - format: RGBA16 -bub/bub_eye_border: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1575856 - mio0: 5128 - format: RGBA16 -bub/bub_eyes: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1575856 - mio0: 1032 - format: RGBA16 -bub/bub_fins: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1575856 - mio0: 7176 - format: RGBA16 -bub/bub_scales: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1575856 - mio0: 9224 - format: RGBA16 -bubba/bubba_eye_border: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1575856 - mio0: 5128 - format: RGBA16 -bubba/bubba_eyes_unused: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1575856 - mio0: 1032 - format: RGBA16 -bubba/bubba_fins: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1575856 - mio0: 7176 - format: RGBA16 -bubba/bubba_scales: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1575856 - mio0: 9224 - format: RGBA16 -bubba/bubba_sunglasses: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 1575856 - mio0: 8 - format: RGBA16 -bubble/bubble: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 118112 - format: RGBA16 -bubble/mr_i_bubble: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 120160 - format: RGBA16 -bullet_bill/bullet_bill_eye: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1222624 - mio0: 47784 - format: RGBA16 -bullet_bill/bullet_bill_mouth: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1222624 - mio0: 51880 - format: RGBA16 -bully/bully_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1256544 - mio0: 9320 - format: RGBA16 -bully/bully_horn: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1256544 - mio0: 224 - format: RGBA16 -bully/bully_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1256544 - mio0: 1128 - format: RGBA16 -bully/bully_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1256544 - mio0: 5224 - format: RGBA16 -burn_smoke/burn_smoke: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 137216 - format: IA16 -butterfly/butterfly_wing: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2102288 - mio0: 17320 - format: RGBA16 -cannon_barrel/cannon_barrel: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2040320 - mio0: 22696 - format: RGBA16 -cannon_base/cannon_base: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2040320 - mio0: 18872 - format: RGBA16 -cannon_lid/cannon_lid: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2040320 - mio0: 16472 - format: RGBA16 -capswitch/cap_switch_base: - type: TEXTURE - size: 128 - width: 16 - height: 4 - offset: 1464912 - mio0: 11336 - format: RGBA16 -capswitch/cap_switch_head: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1464912 - mio0: 7240 - format: IA16 -chain_ball/chain_ball: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1851952 - mio0: 133864 - format: RGBA16 -chain_chomp/chain_chomp_bright_shine: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1851952 - mio0: 136144 - format: RGBA16 -chain_chomp/chain_chomp_dull_shine: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1851952 - mio0: 138192 - format: RGBA16 -chain_chomp/chain_chomp_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1851952 - mio0: 144336 - format: RGBA16 -chain_chomp/chain_chomp_tongue: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1851952 - mio0: 140240 - format: RGBA16 -chain_chomp/chain_chomp_tooth: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1469536 - mio0: 27376 - format: RGBA16 -chair/chair_bottom: - type: TEXTURE - size: 1024 - width: 32 - height: 16 - offset: 1469536 - mio0: 16480 - format: RGBA16 -chair/chair_front: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1469536 - mio0: 12384 - format: RGBA16 -chair/chair_leg: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1469536 - mio0: 14432 - format: RGBA16 -chair/chair_surface_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1469536 - mio0: 17504 - format: RGBA16 -checkerboard_platform/checkerboard_platform: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2040320 - mio0: 52288 - format: RGBA16 -checkerboard_platform/checkerboard_platform_side: - type: TEXTURE - size: 1024 - width: 32 - height: 16 - offset: 2040320 - mio0: 51264 - format: RGBA16 -chillychief/chill_bully_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1256544 - mio0: 9320 - format: RGBA16 -chillychief/chill_bully_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1987056 - mio0: 96 - format: RGBA16 -chillychief/chill_bully_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1987056 - mio0: 4192 - format: RGBA16 -chuckya/chuckya_body_arm_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2040320 - mio0: 32632 - format: RGBA16 -chuckya/chuckya_body_arm_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2040320 - mio0: 36728 - format: RGBA16 -chuckya/chuckya_eyes: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2040320 - mio0: 26488 - format: RGBA16 -chuckya/chuckya_hand_antenna: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2040320 - mio0: 30584 - format: RGBA16 -clam_shell/clam_shell: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1292560 - mio0: 48 - format: RGBA16 -clam_shell/clam_shell_mouth: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1292560 - mio0: 2096 - format: RGBA16 -coin/coin_front: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 22400 - format: IA16 -coin/coin_side: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 26496 - format: IA16 -coin/coin_tilt_left: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 28544 - format: IA16 -coin/coin_tilt_right: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 24448 - format: IA16 -cyan_fish/cyan_fish: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1809600 - mio0: 54376 - format: RGBA16 -dirt/dirt_particle: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2102288 - mio0: 179704 - format: RGBA16 -door/bbh_door: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2102288 - mio0: 66832 - format: RGBA16 -door/bbh_door_overlay: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 70928 - format: RGBA16 -door/door_lock: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 2102288 - mio0: 79120 - format: RGBA16 -door/hmc_mural_door: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2102288 - mio0: 60688 - format: RGBA16 -door/hmc_mural_door_overlay: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 64784 - format: RGBA16 -door/metal_door: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2102288 - mio0: 54544 - format: RGBA16 -door/metal_door_overlay: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 58640 - format: RGBA16 -door/one_star_door_sign: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 75024 - format: RGBA16 -door/polished_wooden_door: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2102288 - mio0: 40208 - format: RGBA16 -door/polished_wooden_door_overlay: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2102288 - mio0: 44304 - format: RGBA16 -door/rough_wooden_door: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2102288 - mio0: 48400 - format: RGBA16 -door/rough_wooden_door_overlay: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 52496 - format: RGBA16 -door/three_star_door_sign: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 77072 - format: RGBA16 -door/zero_star_door_sign: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 72976 - format: RGBA16 -dorrie/dorrie_eye: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1998560 - mio0: 39840 - format: RGBA16 -dorrie/dorrie_skin: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1998560 - mio0: 40352 - format: RGBA16 -dorrie/dorrie_tongue: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1851952 - mio0: 140240 - format: RGBA16 -exclamation_box/exclamation_box_front: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2040320 - mio0: 95784 - format: RGBA16 -exclamation_box/exclamation_box_side: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 2040320 - mio0: 97832 - format: RGBA16 -exclamation_box/metal_cap_box_front: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2040320 - mio0: 83496 - format: RGBA16 -exclamation_box/metal_cap_box_side: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 2040320 - mio0: 85544 - format: RGBA16 -exclamation_box/vanish_cap_box_front: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2040320 - mio0: 77352 - format: RGBA16 -exclamation_box/vanish_cap_box_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2040320 - mio0: 79400 - format: RGBA16 -exclamation_box/wing_cap_box_front: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2040320 - mio0: 89640 - format: RGBA16 -exclamation_box/wing_cap_box_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2040320 - mio0: 91688 - format: RGBA16 -exclamation_box_outline/exclamation_box_outline: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2040320 - mio0: 151912 - format: RGBA16 -exclamation_box_outline/exclamation_point: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 2040320 - mio0: 154240 - format: RGBA16 -explosion/explosion_0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 2568 - format: RGBA16 -explosion/explosion_1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 4616 - format: RGBA16 -explosion/explosion_2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 6664 - format: RGBA16 -explosion/explosion_3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 8712 - format: RGBA16 -explosion/explosion_4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 10760 - format: RGBA16 -explosion/explosion_5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 12808 - format: RGBA16 -explosion/explosion_6: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 14856 - format: RGBA16 -eyerok/eyerok_bricks: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1334928 - mio0: 36160 - format: RGBA16 -eyerok/eyerok_eye_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1334928 - mio0: 44352 - format: RGBA16 -eyerok/eyerok_eye_mostly_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1334928 - mio0: 42304 - format: RGBA16 -eyerok/eyerok_eye_mostly_open: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1334928 - mio0: 40256 - format: RGBA16 -eyerok/eyerok_eye_open: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1334928 - mio0: 38208 - format: RGBA16 -flame/flame_0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 95008 - format: IA16 -flame/flame_1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 97056 - format: IA16 -flame/flame_2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 99104 - format: IA16 -flame/flame_3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 101152 - format: IA16 -flame/flame_4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 103200 - format: IA16 -flame/flame_5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 105248 - format: IA16 -flame/flame_6: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 107296 - format: IA16 -flame/flame_7: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 109344 - format: IA16 -flyguy/flyguy_cloth_wrinkle: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 2040320 - mio0: 57480 - format: RGBA16 -flyguy/flyguy_face: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2040320 - mio0: 61576 - format: RGBA16 -flyguy/flyguy_propeller: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2040320 - mio0: 63624 - format: IA16 -fwoosh/fwoosh_face: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1384912 - mio0: 88072 - format: IA16 -goomba/goomba_body: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2040320 - mio0: 103728 - format: RGBA16 -goomba/goomba_face: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2040320 - mio0: 105776 - format: RGBA16 -goomba/goomba_face_blink: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2040320 - mio0: 107824 - format: RGBA16 -haunted_cage/bbh_cage_bars: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1469536 - mio0: 55944 - format: RGBA16 -haunted_cage/bbh_cage_double_ornament: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1469536 - mio0: 51848 - format: RGBA16 -haunted_cage/bbh_cage_floor: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1469536 - mio0: 49800 - format: RGBA16 -haunted_cage/bbh_cage_garbage: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1469536 - mio0: 57992 - format: RGBA16 -haunted_cage/bbh_cage_ornament: - type: TEXTURE - size: 1024 - width: 32 - height: 16 - offset: 1469536 - mio0: 53896 - format: RGBA16 -haunted_cage/bbh_cage_wooden_base: - type: TEXTURE - size: 1024 - width: 32 - height: 16 - offset: 1469536 - mio0: 54920 - format: RGBA16 -heart/spinning_heart: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2040320 - mio0: 55264 - format: RGBA16 -heave_ho/heave-ho_arm_ornament: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1222624 - mio0: 68040 - format: RGBA16 -heave_ho/heave-ho_face: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1222624 - mio0: 59848 - format: RGBA16 -heave_ho/heave-ho_logo: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1222624 - mio0: 63944 - format: RGBA16 -heave_ho/heave-ho_platform: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1222624 - mio0: 61896 - format: RGBA16 -heave_ho/heave-ho_roller: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1222624 - mio0: 70088 - format: RGBA16 -heave_ho/heave-ho_turnkey: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1222624 - mio0: 70600 - format: RGBA16 -hoot/hoot_eyes: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1222624 - mio0: 2592 - format: RGBA16 -hoot/hoot_wing: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1222624 - mio0: 7760 - format: RGBA16 -hoot/hoot_wing_tip: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1222624 - mio0: 9808 - format: RGBA16 -impact_ring/impact_ring_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1606720 - mio0: 117328 - format: IA16 -impact_ring/impact_ring_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1606720 - mio0: 121424 - format: IA16 -impact_smoke/impact_smoke_0: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1606720 - mio0: 371576 - format: IA16 -impact_smoke/impact_smoke_1: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1606720 - mio0: 379768 - format: IA16 -impact_smoke/impact_smoke_2: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1606720 - mio0: 387960 - format: IA16 -impact_smoke/impact_smoke_3: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1606720 - mio0: 396152 - format: IA16 -king_bobomb/bob-omb_buddy_body_unused: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1264928 - mio0: 25720 - format: RGBA16 -king_bobomb/bob-omb_buddy_left_side_unused: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1264928 - mio0: 120 - format: RGBA16 -king_bobomb/bob-omb_buddy_right_side_unused: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1264928 - mio0: 4216 - format: RGBA16 -king_bobomb/king_bob-omb_arm: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1264928 - mio0: 8312 - format: RGBA16 -king_bobomb/king_bob-omb_body_unused: - type: TEXTURE - size: 8192 - width: 64 - height: 64 - offset: 1264928 - mio0: 10360 - format: RGBA16 -king_bobomb/king_bob-omb_crown_rim: - type: TEXTURE - size: 1024 - width: 32 - height: 16 - offset: 1264928 - mio0: 24696 - format: RGBA16 -king_bobomb/king_bob-omb_eyes: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1264928 - mio0: 18552 - format: RGBA16 -king_bobomb/king_bob-omb_eyes_blink: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1264928 - mio0: 20600 - format: RGBA16 -king_bobomb/king_bob-omb_hand: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1264928 - mio0: 22648 - format: RGBA16 -king_bobomb/king_bob-omb_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1264928 - mio0: 33912 - format: RGBA16 -king_bobomb/king_bob-omb_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1264928 - mio0: 38008 - format: RGBA16 -klepto/klepto_beak: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1334928 - mio0: 4104 - format: RGBA16 -klepto/klepto_chest_tuft: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1334928 - mio0: 8 - format: RGBA16 -klepto/klepto_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1334928 - mio0: 2056 - format: RGBA16 -klepto/klepto_wing: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1334928 - mio0: 8200 - format: RGBA16 -klepto/klepto_wing_flap: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1334928 - mio0: 12296 - format: RGBA16 -koopa/koopa_eye_border: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1851952 - mio0: 22088 - format: RGBA16 -koopa/koopa_eyes_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1851952 - mio0: 20040 - format: RGBA16 -koopa/koopa_eyes_open: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1851952 - mio0: 17992 - format: RGBA16 -koopa/koopa_nostrils: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1851952 - mio0: 24136 - format: RGBA16 -koopa/koopa_shell_back: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1851952 - mio0: 11848 - format: RGBA16 -koopa/koopa_shell_front: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1851952 - mio0: 9800 - format: RGBA16 -koopa/koopa_shell_front_top: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1851952 - mio0: 15944 - format: RGBA16 -koopa/koopa_shoe: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1851952 - mio0: 13896 - format: RGBA16 -koopa_flag/koopa_flag_banner: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1851952 - mio0: 72 - format: RGBA16 -koopa_shell/koopa_shell_back: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1851952 - mio0: 11848 - format: RGBA16 -koopa_shell/koopa_shell_front: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1851952 - mio0: 9800 - format: RGBA16 -lakitu_cameraman/lakitu_camera_lens: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1934096 - mio0: 14336 - format: RGBA16 -lakitu_cameraman/lakitu_cameraman_cloud_face_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1575856 - mio0: 60640 - format: RGBA16 -lakitu_cameraman/lakitu_cameraman_eyes_closed: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1575856 - mio0: 66784 - format: RGBA16 -lakitu_cameraman/lakitu_cameraman_eyes_open: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1575856 - mio0: 62688 - format: RGBA16 -lakitu_cameraman/lakitu_cameraman_frown: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1575856 - mio0: 72928 - format: RGBA16 -lakitu_cameraman/lakitu_cameraman_shell: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1575856 - mio0: 70880 - format: RGBA16 -lakitu_enemy/lakitu_enemy_cloud_face_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1575856 - mio0: 60640 - format: RGBA16 -lakitu_enemy/lakitu_enemy_eyes_closed: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1575856 - mio0: 66784 - format: RGBA16 -lakitu_enemy/lakitu_enemy_eyes_open: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1575856 - mio0: 62688 - format: RGBA16 -lakitu_enemy/lakitu_enemy_frown: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1575856 - mio0: 72928 - format: RGBA16 -lakitu_enemy/lakitu_enemy_shell: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1575856 - mio0: 70880 - format: RGBA16 -leaves/leaf: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2102288 - mio0: 117728 - format: RGBA16 -mad_piano/mad_piano_body: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 1469536 - mio0: 29424 - format: RGBA16 -mad_piano/mad_piano_keys: - type: TEXTURE - size: 1024 - width: 32 - height: 16 - offset: 1469536 - mio0: 32496 - format: RGBA16 -mad_piano/mad_piano_keys_corner: - type: TEXTURE - size: 1024 - width: 32 - height: 16 - offset: 1469536 - mio0: 30448 - format: RGBA16 -mad_piano/mad_piano_keys_edge: - type: TEXTURE - size: 1024 - width: 32 - height: 16 - offset: 1469536 - mio0: 33520 - format: RGBA16 -mad_piano/mad_piano_mouth: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 1469536 - mio0: 31472 - format: RGBA16 -mad_piano/mad_piano_tooth: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1469536 - mio0: 27376 - format: RGBA16 -manta/manta_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1292560 - mio0: 12192 - format: RGBA16 -manta/manta_fin_corner: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1292560 - mio0: 6048 - format: RGBA16 -manta/manta_fin_edge: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1292560 - mio0: 14240 - format: RGBA16 -manta/manta_gills: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1292560 - mio0: 8096 - format: RGBA16 -mario/mario_eyes_center: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 12432 - format: RGBA16 -mario/mario_eyes_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 16528 - format: RGBA16 -mario/mario_eyes_closed_unused_0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 16528 - format: RGBA16 -mario/mario_eyes_closed_unused_1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 16528 - format: RGBA16 -mario/mario_eyes_dead: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 30864 - format: RGBA16 -mario/mario_eyes_down_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 28816 - format: RGBA16 -mario/mario_eyes_half_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 14480 - format: RGBA16 -mario/mario_eyes_left_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 22672 - format: RGBA16 -mario/mario_eyes_right_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 24720 - format: RGBA16 -mario/mario_eyes_up_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 26768 - format: RGBA16 -mario/mario_logo: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 6288 - format: RGBA16 -mario/mario_metal: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1132368 - mio0: 144 - format: RGBA16 -mario/mario_metal_wing_tip_unused: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1132368 - mio0: 45200 - format: RGBA16 -mario/mario_metal_wing_unused: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1132368 - mio0: 41104 - format: RGBA16 -mario/mario_mustache: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 10384 - format: RGBA16 -mario/mario_overalls_button: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 4240 - format: RGBA16 -mario/mario_sideburn: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 8336 - format: RGBA16 -mario/mario_wing: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1132368 - mio0: 32912 - format: RGBA16 -mario/mario_wing_tip: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1132368 - mio0: 37008 - format: RGBA16 -mario_cap/mario_cap_logo: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 6288 - format: RGBA16 -mario_cap/mario_cap_metal: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1132368 - mio0: 144 - format: RGBA16 -mario_cap/mario_cap_metal_wing_tip_unused: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1132368 - mio0: 45200 - format: RGBA16 -mario_cap/mario_cap_metal_wing_unused: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1132368 - mio0: 41104 - format: RGBA16 -mario_cap/mario_cap_wing: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1132368 - mio0: 32912 - format: RGBA16 -mario_cap/mario_cap_wing_tip: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1132368 - mio0: 37008 - format: RGBA16 -metal_box/metal_box_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2040320 - mio0: 145816 - format: RGBA16 -mips/mips_eyes: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1934096 - mio0: 64624 - format: RGBA16 -mist/mist: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 128 - format: IA16 -moneybag/moneybag_eyes: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1987056 - mio0: 18864 - format: RGBA16 -moneybag/moneybag_mouth: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1987056 - mio0: 14768 - format: RGBA16 -monty_mole/monty_mole_cheek: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1384912 - mio0: 2416 - format: RGBA16 -monty_mole/monty_mole_claw: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1384912 - mio0: 10608 - format: RGBA16 -monty_mole/monty_mole_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1384912 - mio0: 4464 - format: RGBA16 -monty_mole/monty_mole_nose: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1384912 - mio0: 6512 - format: RGBA16 -monty_mole/monty_mole_tooth: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1384912 - mio0: 8560 - format: RGBA16 -monty_mole_hole/monty_mole_hole: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1384912 - mio0: 64 - format: IA16 -mr_i_eyeball/mr_i_eyeball_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1998560 - mio0: 128 - format: RGBA16 -mr_i_eyeball/mr_i_eyeball_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1998560 - mio0: 4224 - format: RGBA16 -mr_i_iris/mr_i_iris_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1998560 - mio0: 14704 - format: RGBA16 -mr_i_iris/mr_i_iris_mostly_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1998560 - mio0: 12656 - format: RGBA16 -mr_i_iris/mr_i_iris_mostly_open: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1998560 - mio0: 10608 - format: RGBA16 -mr_i_iris/mr_i_iris_open: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1998560 - mio0: 8560 - format: RGBA16 -mushroom_1up/1-up_mushroom: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2102288 - mio0: 169512 - format: RGBA16 -peach/peach_chest_jewel: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1497200 - mio0: 11304 - format: RGBA16 -peach/peach_crown_jewel: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1497200 - mio0: 10792 - format: RGBA16 -peach/peach_dress: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1497200 - mio0: 16424 - format: RGBA16 -peach/peach_eye_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1497200 - mio0: 8744 - format: RGBA16 -peach/peach_eye_mostly_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1497200 - mio0: 6696 - format: RGBA16 -peach/peach_eye_mostly_open: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1497200 - mio0: 4648 - format: RGBA16 -peach/peach_eye_open: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1497200 - mio0: 2600 - format: RGBA16 -peach/peach_lips: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1497200 - mio0: 13864 - format: RGBA16 -peach/peach_lips_scrunched: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1497200 - mio0: 11816 - format: RGBA16 -peach/peach_nostril: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1497200 - mio0: 15912 - format: RGBA16 -pebble/pebble: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 115456 - format: RGBA16 -penguin/penguin_beak: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1443440 - mio0: 21984 - format: RGBA16 -penguin/penguin_eye_angry: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1443440 - mio0: 17888 - format: RGBA16 -penguin/penguin_eye_angry_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1443440 - mio0: 19936 - format: RGBA16 -penguin/penguin_eye_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1443440 - mio0: 15840 - format: RGBA16 -penguin/penguin_eye_half_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1443440 - mio0: 13792 - format: RGBA16 -penguin/penguin_eye_open: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1443440 - mio0: 11744 - format: RGBA16 -piranha_plant/piranha_plant_bottom_lip: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1851952 - mio0: 78840 - format: RGBA16 -piranha_plant/piranha_plant_leaf: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1851952 - mio0: 82936 - format: RGBA16 -piranha_plant/piranha_plant_skin: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1851952 - mio0: 74744 - format: RGBA16 -piranha_plant/piranha_plant_stem: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1851952 - mio0: 76792 - format: RGBA16 -piranha_plant/piranha_plant_tongue: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1606720 - mio0: 148536 - format: RGBA16 -piranha_plant/piranha_plant_tooth: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1851952 - mio0: 80888 - format: RGBA16 -pokey/pokey_body: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1334928 - mio0: 75896 - format: RGBA16 -pokey/pokey_face: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1334928 - mio0: 71504 - format: RGBA16 -pokey/pokey_face_blink: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1334928 - mio0: 73552 - format: RGBA16 -poundable_pole/poundable_pole_side: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1851952 - mio0: 6224 - format: RGBA16 -poundable_pole/poundable_pole_top: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1851952 - mio0: 4176 - format: RGBA16 -power_meter/power_meter_five_segments: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 158688 - format: RGBA16 -power_meter/power_meter_four_segments: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 160736 - format: RGBA16 -power_meter/power_meter_full: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 152544 - format: RGBA16 -power_meter/power_meter_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2102288 - mio0: 144352 - format: RGBA16 -power_meter/power_meter_one_segment: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 166880 - format: RGBA16 -power_meter/power_meter_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2102288 - mio0: 148448 - format: RGBA16 -power_meter/power_meter_seven_segments: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 154592 - format: RGBA16 -power_meter/power_meter_six_segments: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 156640 - format: RGBA16 -power_meter/power_meter_three_segments: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 162784 - format: RGBA16 -power_meter/power_meter_two_segments: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 164832 - format: RGBA16 -purple_switch/purple_switch_base: - type: TEXTURE - size: 128 - width: 16 - height: 4 - offset: 2040320 - mio0: 49320 - format: RGBA16 -purple_switch/purple_switch_exclamation_point: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 2040320 - mio0: 49448 - format: RGBA16 -sand/sand_particle: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2102288 - mio0: 178896 - format: RGBA16 -scuttlebug/scuttlebug_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1998560 - mio0: 65800 - format: RGBA16 -scuttlebug/scuttlebug_iris: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1998560 - mio0: 76040 - format: RGBA16 -scuttlebug/scuttlebug_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1998560 - mio0: 67848 - format: RGBA16 -scuttlebug/scuttlebug_leg: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1998560 - mio0: 78088 - format: RGBA16 -scuttlebug/scuttlebug_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1998560 - mio0: 71944 - format: RGBA16 -seaweed/seaweed_base: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1809600 - mio0: 38416 - format: RGBA16 -seaweed/seaweed_lower_center: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1809600 - mio0: 36368 - format: RGBA16 -seaweed/seaweed_tip: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1809600 - mio0: 32272 - format: RGBA16 -seaweed/seaweed_upper_center: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1809600 - mio0: 34320 - format: RGBA16 -skeeter/skeeter_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1809600 - mio0: 144 - format: RGBA16 -skeeter/skeeter_iris: - type: TEXTURE - size: 256 - width: 16 - height: 8 - offset: 1809600 - mio0: 2192 - format: RGBA16 -smoke/smoke: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1384912 - mio0: 29376 - format: IA16 -snowman/mr_blizzard_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1443440 - mio0: 46192 - format: RGBA16 -snowman/mr_blizzard_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1443440 - mio0: 38000 - format: RGBA16 -snowman/mr_blizzard_mitten: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1443440 - mio0: 35952 - format: RGBA16 -snowman/mr_blizzard_mouth: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1443440 - mio0: 48240 - format: RGBA16 -snowman/mr_blizzard_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1443440 - mio0: 42096 - format: RGBA16 -snufit/snufit_body: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1998560 - mio0: 28896 - format: RGBA16 -snufit/snufit_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1998560 - mio0: 30944 - format: RGBA16 -snufit/snufit_mask_strap: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 1998560 - mio0: 32992 - format: RGBA16 -snufit/snufit_mouth: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1998560 - mio0: 34016 - format: RGBA16 -sparkle/sparkle_0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 160912 - format: RGBA16 -sparkle/sparkle_1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 162960 - format: RGBA16 -sparkle/sparkle_2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 165008 - format: RGBA16 -sparkle/sparkle_3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 167056 - format: RGBA16 -sparkle/sparkle_4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 169104 - format: RGBA16 -sparkle/sparkle_5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 171152 - format: RGBA16 -sparkle_animation/sparkle_animation_0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 207496 - format: IA16 -sparkle_animation/sparkle_animation_1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 209544 - format: IA16 -sparkle_animation/sparkle_animation_2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 211592 - format: IA16 -sparkle_animation/sparkle_animation_3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 213640 - format: IA16 -sparkle_animation/sparkle_animation_4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 215688 - format: IA16 -spindrift/spindrift_face: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1443440 - mio0: 1744 - format: RGBA16 -spindrift/spindrift_head: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1443440 - mio0: 7888 - format: RGBA16 -spindrift/spindrift_leaf: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1443440 - mio0: 5840 - format: RGBA16 -spindrift/spindrift_petal: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1443440 - mio0: 3792 - format: RGBA16 -springboard/springboard_base_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1464912 - mio0: 2072 - format: RGBA16 -springboard/springboard_top_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1464912 - mio0: 24 - format: RGBA16 -star/star_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1575856 - mio0: 31280 - format: RGBA16 -star/star_surface: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 173808 - format: RGBA16 -stomp_smoke/stomp_smoke_0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 139592 - format: IA16 -stomp_smoke/stomp_smoke_1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 141640 - format: IA16 -stomp_smoke/stomp_smoke_2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 143688 - format: IA16 -stomp_smoke/stomp_smoke_3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 145736 - format: IA16 -stomp_smoke/stomp_smoke_4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 147784 - format: IA16 -stomp_smoke/stomp_smoke_5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 149832 - format: IA16 -sushi/sushi_eye: - type: TEXTURE - size: 1024 - width: 32 - height: 16 - offset: 1292560 - mio0: 38608 - format: RGBA16 -sushi/sushi_snout: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1292560 - mio0: 36560 - format: RGBA16 -sushi/sushi_tooth: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1292560 - mio0: 39632 - format: RGBA16 -swoop/swoop_body: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1998560 - mio0: 17008 - format: RGBA16 -swoop/swoop_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1998560 - mio0: 19056 - format: RGBA16 -swoop/swoop_nose: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1998560 - mio0: 21104 - format: RGBA16 -swoop/swoop_wing: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1998560 - mio0: 23152 - format: RGBA16 -thwomp/thwomp_face: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1222624 - mio0: 39168 - format: RGBA16 -thwomp/thwomp_surface: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1222624 - mio0: 43264 - format: RGBA16 -toad/toad_face: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1934096 - mio0: 22816 - format: RGBA16 -toad/toad_head: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1934096 - mio0: 24864 - format: RGBA16 -tornado/tornado: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1292560 - mio0: 75848 - format: IA16 -treasure_chest/treasure_chest_front: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1809600 - mio0: 87976 - format: RGBA16 -treasure_chest/treasure_chest_lock: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1809600 - mio0: 81832 - format: RGBA16 -treasure_chest/treasure_chest_lock_top: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1809600 - mio0: 85928 - format: RGBA16 -treasure_chest/treasure_chest_side: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1809600 - mio0: 83880 - format: RGBA16 -tree/palm_tree: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2102288 - mio0: 205336 - format: RGBA16 -tree/pine_tree: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2102288 - mio0: 196448 - format: RGBA16 -tree/snowy_pine_tree: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2102288 - mio0: 200776 - format: RGBA16 -tree/tree_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2102288 - mio0: 187944 - format: RGBA16 -tree/tree_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2102288 - mio0: 192040 - format: RGBA16 -ukiki/ukiki_butt: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1384912 - mio0: 39872 - format: RGBA16 -ukiki/ukiki_face: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1384912 - mio0: 31680 - format: RGBA16 -ukiki/ukiki_face_blink: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1384912 - mio0: 35776 - format: RGBA16 -ukiki/ukiki_fur: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1384912 - mio0: 41920 - format: RGBA16 -unagi/unagi_body: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1292560 - mio0: 44832 - format: RGBA16 -unagi/unagi_eye: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1292560 - mio0: 46880 - format: RGBA16 -unagi/unagi_head_base: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1292560 - mio0: 47392 - format: RGBA16 -unagi/unagi_mouth: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1292560 - mio0: 49952 - format: RGBA16 -unagi/unagi_tail: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1292560 - mio0: 50080 - format: RGBA16 -unagi/unagi_tooth: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1292560 - mio0: 49440 - format: RGBA16 -walk_smoke/walk_smoke_0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 122528 - format: IA16 -walk_smoke/walk_smoke_1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 124576 - format: IA16 -walk_smoke/walk_smoke_2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 126624 - format: IA16 -walk_smoke/walk_smoke_3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 128672 - format: IA16 -walk_smoke/walk_smoke_4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 130720 - format: IA16 -walk_smoke/walk_smoke_5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 132768 - format: IA16 -walk_smoke/walk_smoke_6: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 134816 - format: IA16 -warp_pipe/warp_pipe_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 2102288 - mio0: 32320 - format: RGBA16 -warp_pipe/warp_pipe_top: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 37224 - format: RGBA16 -water_bubble/water_bubble: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1264928 - mio0: 65152 - format: RGBA16 -water_mine/water_mine_left_side_unused: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1606720 - mio0: 359440 - format: RGBA16 -water_mine/water_mine_right_side_unused: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1606720 - mio0: 363536 - format: RGBA16 -water_mine/water_mine_spike_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1606720 - mio0: 367632 - format: RGBA16 -water_ring/water_ring: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 1809600 - mio0: 74624 - format: RGBA16 -water_splash/water_splash_0: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1132368 - mio0: 173512 - format: RGBA16 -water_splash/water_splash_1: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1132368 - mio0: 177608 - format: RGBA16 -water_splash/water_splash_2: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1132368 - mio0: 181704 - format: RGBA16 -water_splash/water_splash_3: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1132368 - mio0: 185800 - format: RGBA16 -water_splash/water_splash_4: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1132368 - mio0: 189896 - format: RGBA16 -water_splash/water_splash_5: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1132368 - mio0: 193992 - format: RGBA16 -water_splash/water_splash_6: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1132368 - mio0: 198088 - format: RGBA16 -water_splash/water_splash_7: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1132368 - mio0: 202184 - format: RGBA16 -water_wave/water_wave_0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 152408 - format: IA16 -water_wave/water_wave_1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 154456 - format: IA16 -water_wave/water_wave_2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 156504 - format: IA16 -water_wave/water_wave_3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1132368 - mio0: 158552 - format: IA16 -whirlpool/whirlpool: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1292560 - mio0: 75848 - format: IA16 -white_particle/snow_particle: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2102288 - mio0: 181920 - format: RGBA16 -white_particle_small/small_snow_particle: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1132368 - mio0: 206720 - format: RGBA16 -whomp/whomp_back: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1851952 - mio0: 115552 - format: RGBA16 -whomp/whomp_face: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1851952 - mio0: 119648 - format: RGBA16 -whomp/whomp_hand: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1851952 - mio0: 123744 - format: RGBA16 -whomp/whomp_surface: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1851952 - mio0: 125792 - format: RGBA16 -wiggler/wiggler_eye: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1575856 - mio0: 31280 - format: RGBA16 -wiggler/wiggler_flower: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1575856 - mio0: 33328 - format: RGBA16 -wiggler/wiggler_frown: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1575856 - mio0: 35376 - format: RGBA16 -wiggler/wiggler_nose_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1575856 - mio0: 37424 - format: RGBA16 -wiggler/wiggler_nose_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1575856 - mio0: 41520 - format: RGBA16 -wiggler/wiggler_segment_left_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1575856 - mio0: 23088 - format: RGBA16 -wiggler/wiggler_segment_right_side: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 1575856 - mio0: 27184 - format: RGBA16 -wooden_signpost/wooden_signpost_back: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 182728 - format: RGBA16 -wooden_signpost/wooden_signpost_front: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2102288 - mio0: 184776 - format: RGBA16 -yellow_sphere/yellow_sphere: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1222624 - mio0: 64 - format: RGBA16 -yellow_sphere_small/small_yellow_sphere: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1222624 - mio0: 64 - format: RGBA16 -yoshi/yoshi_eye: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1497200 - mio0: 116104 - format: RGBA16 -yoshi/yoshi_eye_blink: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1497200 - mio0: 116616 - format: RGBA16 -yoshi/yoshi_nostril: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1497200 - mio0: 117128 - format: RGBA16 -yoshi_egg/yoshi_egg_0_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1222624 - mio0: 22456 - format: RGBA16 -yoshi_egg/yoshi_egg_1_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1222624 - mio0: 24504 - format: RGBA16 -yoshi_egg/yoshi_egg_2_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1222624 - mio0: 26552 - format: RGBA16 -yoshi_egg/yoshi_egg_3_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1222624 - mio0: 28600 - format: RGBA16 -yoshi_egg/yoshi_egg_4_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1222624 - mio0: 30648 - format: RGBA16 -yoshi_egg/yoshi_egg_5_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1222624 - mio0: 32696 - format: RGBA16 -yoshi_egg/yoshi_egg_6_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1222624 - mio0: 34744 - format: RGBA16 -yoshi_egg/yoshi_egg_7_unused: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1222624 - mio0: 36792 - format: RGBA16 diff --git a/assets/sm64/us/assets.yml b/assets/sm64/us/assets.yml deleted file mode 100644 index 3f64748..0000000 --- a/assets/sm64/us/assets.yml +++ /dev/null @@ -1,2331 +0,0 @@ -anims/anim_00: - type: SM64:ANIM - header: - offset: 5162640 - size: 24 - values: - offset: 5162916 - size: 2604 - indices: - offset: 5162664 - size: 252 -anims/anim_01: - type: SM64:ANIM - header: - offset: 5165520 - size: 24 - values: - offset: 5165820 - size: 6576 - indices: - offset: 5165568 - size: 252 -anims/anim_02: - type: SM64:ANIM - header: - offset: 5165544 - size: 24 - values: - offset: 5165820 - size: 6576 - indices: - offset: 5165568 - size: 252 -anims/anim_03: - type: SM64:ANIM - header: - offset: 5172396 - size: 24 - values: - offset: 5172672 - size: 4372 - indices: - offset: 5172420 - size: 252 -anims/anim_04: - type: SM64:ANIM - header: - offset: 5177044 - size: 24 - values: - offset: 5177320 - size: 2264 - indices: - offset: 5177068 - size: 252 -anims/anim_05: - type: SM64:ANIM - header: - offset: 5179584 - size: 24 - values: - offset: 5179860 - size: 5796 - indices: - offset: 5179608 - size: 252 -anims/anim_06: - type: SM64:ANIM - header: - offset: 5185656 - size: 24 - values: - offset: 5185932 - size: 892 - indices: - offset: 5185680 - size: 252 -anims/anim_07: - type: SM64:ANIM - header: - offset: 5165544 - size: 24 - values: - offset: 5187124 - size: 1468 - indices: - offset: 5186872 - size: 252 -anims/anim_08: - type: SM64:ANIM - header: - offset: 5186848 - size: 24 - values: - offset: 5187124 - size: 1468 - indices: - offset: 5186872 - size: 252 -anims/anim_09: - type: SM64:ANIM - header: - offset: 5188592 - size: 24 - values: - offset: 5188868 - size: 3052 - indices: - offset: 5188616 - size: 252 -anims/anim_0A: - type: SM64:ANIM - header: - offset: 5191920 - size: 24 - values: - offset: 5192196 - size: 2544 - indices: - offset: 5191944 - size: 252 -anims/anim_0B: - type: SM64:ANIM - header: - offset: 5194740 - size: 24 - values: - offset: 5195040 - size: 1348 - indices: - offset: 5194788 - size: 252 -anims/anim_0C: - type: SM64:ANIM - header: - offset: 5194764 - size: 24 - values: - offset: 5195040 - size: 1348 - indices: - offset: 5194788 - size: 252 -anims/anim_0D: - type: SM64:ANIM - header: - offset: 5196388 - size: 24 - values: - offset: 5196664 - size: 770 - indices: - offset: 5196412 - size: 252 -anims/anim_0E: - type: SM64:ANIM - header: - offset: 5165544 - size: 24 - values: - offset: 5197712 - size: 80 - indices: - offset: 5197460 - size: 252 -anims/anim_0F: - type: SM64:ANIM - header: - offset: 5165544 - size: 24 - values: - offset: 5198092 - size: 1502 - indices: - offset: 5197840 - size: 252 -anims/anim_10: - type: SM64:ANIM - header: - offset: 5197816 - size: 24 - values: - offset: 5198092 - size: 1502 - indices: - offset: 5197840 - size: 252 -anims/anim_11: - type: SM64:ANIM - header: - offset: 5199596 - size: 24 - values: - offset: 5199872 - size: 1174 - indices: - offset: 5199620 - size: 252 -anims/anim_12: - type: SM64:ANIM - header: - offset: 5201048 - size: 24 - values: - offset: 5201324 - size: 1318 - indices: - offset: 5201072 - size: 252 -anims/anim_13: - type: SM64:ANIM - header: - offset: 5202644 - size: 24 - values: - offset: 5202920 - size: 1678 - indices: - offset: 5202668 - size: 252 -anims/anim_14: - type: SM64:ANIM - header: - offset: 5204600 - size: 24 - values: - offset: 5204876 - size: 1102 - indices: - offset: 5204624 - size: 252 -anims/anim_15: - type: SM64:ANIM - header: - offset: 5205980 - size: 24 - values: - offset: 5206256 - size: 930 - indices: - offset: 5206004 - size: 252 -anims/anim_16: - type: SM64:ANIM - header: - offset: 5207188 - size: 24 - values: - offset: 5207464 - size: 4452 - indices: - offset: 5207212 - size: 252 -anims/anim_17: - type: SM64:ANIM - header: - offset: 5211916 - size: 24 - values: - offset: 5212192 - size: 2942 - indices: - offset: 5211940 - size: 252 -anims/anim_18: - type: SM64:ANIM - header: - offset: 5215136 - size: 24 - values: - offset: 5215412 - size: 4452 - indices: - offset: 5207212 - size: 252 -anims/anim_19: - type: SM64:ANIM - header: - offset: 5219864 - size: 24 - values: - offset: 5220140 - size: 5354 - indices: - offset: 5219888 - size: 252 -anims/anim_1A: - type: SM64:ANIM - header: - offset: 5225496 - size: 24 - values: - offset: 5225772 - size: 1146 - indices: - offset: 5225520 - size: 252 -anims/anim_1B: - type: SM64:ANIM - header: - offset: 5226920 - size: 24 - values: - offset: 5227196 - size: 2858 - indices: - offset: 5226944 - size: 252 -anims/anim_1C: - type: SM64:ANIM - header: - offset: 5230056 - size: 24 - values: - offset: 5230332 - size: 780 - indices: - offset: 5230080 - size: 252 -anims/anim_1D: - type: SM64:ANIM - header: - offset: 5231112 - size: 24 - values: - offset: 5231388 - size: 1380 - indices: - offset: 5231136 - size: 252 -anims/anim_1E: - type: SM64:ANIM - header: - offset: 5232768 - size: 24 - values: - offset: 5233044 - size: 1530 - indices: - offset: 5232792 - size: 252 -anims/anim_1F: - type: SM64:ANIM - header: - offset: 5234576 - size: 24 - values: - offset: 5234852 - size: 846 - indices: - offset: 5234600 - size: 252 -anims/anim_20: - type: SM64:ANIM - header: - offset: 5235700 - size: 24 - values: - offset: 5235976 - size: 7124 - indices: - offset: 5235724 - size: 252 -anims/anim_21: - type: SM64:ANIM - header: - offset: 5243100 - size: 24 - values: - offset: 5243376 - size: 2610 - indices: - offset: 5243124 - size: 252 -anims/anim_22: - type: SM64:ANIM - header: - offset: 5245988 - size: 24 - values: - offset: 5246264 - size: 1750 - indices: - offset: 5246012 - size: 252 -anims/anim_23: - type: SM64:ANIM - header: - offset: 5248016 - size: 24 - values: - offset: 5248292 - size: 8216 - indices: - offset: 5248040 - size: 252 -anims/anim_24: - type: SM64:ANIM - header: - offset: 5256508 - size: 24 - values: - offset: 5256784 - size: 9376 - indices: - offset: 5256532 - size: 252 -anims/anim_25: - type: SM64:ANIM - header: - offset: 5266160 - size: 24 - values: - offset: 5266436 - size: 8018 - indices: - offset: 5266184 - size: 252 -anims/anim_26: - type: SM64:ANIM - header: - offset: 5274456 - size: 24 - values: - offset: 5274732 - size: 7352 - indices: - offset: 5274480 - size: 252 -anims/anim_27: - type: SM64:ANIM - header: - offset: 5282084 - size: 24 - values: - offset: 5282360 - size: 8980 - indices: - offset: 5282108 - size: 252 -anims/anim_28: - type: SM64:ANIM - header: - offset: 5204600 - size: 24 - values: - offset: 5291616 - size: 1010 - indices: - offset: 5291364 - size: 252 -anims/anim_29: - type: SM64:ANIM - header: - offset: 5292628 - size: 24 - values: - offset: 5292904 - size: 582 - indices: - offset: 5292652 - size: 252 -anims/anim_2A: - type: SM64:ANIM - header: - offset: 5293488 - size: 24 - values: - offset: 5293764 - size: 1252 - indices: - offset: 5293512 - size: 252 -anims/anim_2B: - type: SM64:ANIM - header: - offset: 5293488 - size: 24 - values: - offset: 5295292 - size: 1582 - indices: - offset: 5295040 - size: 252 -anims/anim_2C: - type: SM64:ANIM - header: - offset: 5165520 - size: 24 - values: - offset: 5297176 - size: 5620 - indices: - offset: 5296924 - size: 252 -anims/anim_2D: - type: SM64:ANIM - header: - offset: 5165544 - size: 24 - values: - offset: 5297176 - size: 5620 - indices: - offset: 5296924 - size: 252 -anims/anim_2E: - type: SM64:ANIM - header: - offset: 5302796 - size: 24 - values: - offset: 5303072 - size: 3028 - indices: - offset: 5302820 - size: 252 -anims/anim_2F: - type: SM64:ANIM - header: - offset: 5248016 - size: 24 - values: - offset: 5306376 - size: 7420 - indices: - offset: 5306124 - size: 252 -anims/anim_30: - type: SM64:ANIM - header: - offset: 5179584 - size: 24 - values: - offset: 5314072 - size: 5428 - indices: - offset: 5313820 - size: 252 -anims/anim_31: - type: SM64:ANIM - header: - offset: 5319500 - size: 24 - values: - offset: 5319776 - size: 10660 - indices: - offset: 5319524 - size: 252 -anims/anim_32: - type: SM64:ANIM - header: - offset: 5235700 - size: 24 - values: - offset: 5330712 - size: 7890 - indices: - offset: 5330460 - size: 252 -anims/anim_33: - type: SM64:ANIM - header: - offset: 5338604 - size: 24 - values: - offset: 5338880 - size: 2840 - indices: - offset: 5338628 - size: 252 -anims/anim_34: - type: SM64:ANIM - header: - offset: 5199596 - size: 24 - values: - offset: 5341996 - size: 1300 - indices: - offset: 5341744 - size: 252 -anims/anim_35: - type: SM64:ANIM - header: - offset: 5343296 - size: 24 - values: - offset: 5343572 - size: 3704 - indices: - offset: 5343320 - size: 252 -anims/anim_36: - type: SM64:ANIM - header: - offset: 5347276 - size: 24 - values: - offset: 5347552 - size: 3700 - indices: - offset: 5347300 - size: 252 -anims/anim_37: - type: SM64:ANIM - header: - offset: 5248016 - size: 24 - values: - offset: 5351528 - size: 6828 - indices: - offset: 5351276 - size: 252 -anims/anim_38: - type: SM64:ANIM - header: - offset: 5185656 - size: 24 - values: - offset: 5358632 - size: 844 - indices: - offset: 5358380 - size: 252 -anims/anim_39: - type: SM64:ANIM - header: - offset: 5359476 - size: 24 - values: - offset: 5359752 - size: 12418 - indices: - offset: 5359500 - size: 252 -anims/anim_3A: - type: SM64:ANIM - header: - offset: 5372172 - size: 24 - values: - offset: 5372448 - size: 374 - indices: - offset: 5372196 - size: 252 -anims/anim_3B: - type: SM64:ANIM - header: - offset: 5199596 - size: 24 - values: - offset: 5373100 - size: 1204 - indices: - offset: 5372848 - size: 252 -anims/anim_3C: - type: SM64:ANIM - header: - offset: 5374304 - size: 24 - values: - offset: 5374604 - size: 774 - indices: - offset: 5374352 - size: 252 -anims/anim_3D: - type: SM64:ANIM - header: - offset: 5374328 - size: 24 - values: - offset: 5374604 - size: 774 - indices: - offset: 5374352 - size: 252 -anims/anim_3E: - type: SM64:ANIM - header: - offset: 5359476 - size: 24 - values: - offset: 5375656 - size: 11490 - indices: - offset: 5375404 - size: 252 -anims/anim_3F: - type: SM64:ANIM - header: - offset: 5387148 - size: 24 - values: - offset: 5387424 - size: 3094 - indices: - offset: 5387172 - size: 252 -anims/anim_40: - type: SM64:ANIM - header: - offset: 5390520 - size: 24 - values: - offset: 5390796 - size: 1094 - indices: - offset: 5390544 - size: 252 -anims/anim_41: - type: SM64:ANIM - header: - offset: 5230056 - size: 24 - values: - offset: 5392168 - size: 536 - indices: - offset: 5391916 - size: 252 -anims/anim_42: - type: SM64:ANIM - header: - offset: 5392704 - size: 24 - values: - offset: 5392980 - size: 956 - indices: - offset: 5392728 - size: 252 -anims/anim_43: - type: SM64:ANIM - header: - offset: 5393936 - size: 24 - values: - offset: 5394212 - size: 84 - indices: - offset: 5393960 - size: 252 -anims/anim_44: - type: SM64:ANIM - header: - offset: 5204600 - size: 24 - values: - offset: 5394572 - size: 650 - indices: - offset: 5394320 - size: 252 -anims/anim_45: - type: SM64:ANIM - header: - offset: 5165544 - size: 24 - values: - offset: 5395524 - size: 1190 - indices: - offset: 5395272 - size: 252 -anims/anim_46: - type: SM64:ANIM - header: - offset: 5395248 - size: 24 - values: - offset: 5395524 - size: 1190 - indices: - offset: 5395272 - size: 252 -anims/anim_47: - type: SM64:ANIM - header: - offset: 5374304 - size: 24 - values: - offset: 5396992 - size: 838 - indices: - offset: 5396740 - size: 252 -anims/anim_48: - type: SM64:ANIM - header: - offset: 5397832 - size: 24 - values: - offset: 5398108 - size: 5098 - indices: - offset: 5397856 - size: 252 -anims/anim_49: - type: SM64:ANIM - header: - offset: 5199596 - size: 24 - values: - offset: 5403484 - size: 1298 - indices: - offset: 5403232 - size: 252 -anims/anim_4A: - type: SM64:ANIM - header: - offset: 5404784 - size: 24 - values: - offset: 5405060 - size: 616 - indices: - offset: 5404808 - size: 252 -anims/anim_4B: - type: SM64:ANIM - header: - offset: 5201048 - size: 24 - values: - offset: 5405952 - size: 1386 - indices: - offset: 5405700 - size: 252 -anims/anim_4C: - type: SM64:ANIM - header: - offset: 5407340 - size: 24 - values: - offset: 5407616 - size: 670 - indices: - offset: 5407364 - size: 252 -anims/anim_4D: - type: SM64:ANIM - header: - offset: 5185656 - size: 24 - values: - offset: 5408588 - size: 2456 - indices: - offset: 5408336 - size: 252 -anims/anim_4E: - type: SM64:ANIM - header: - offset: 5408312 - size: 24 - values: - offset: 5408588 - size: 2456 - indices: - offset: 5408336 - size: 252 -anims/anim_4F: - type: SM64:ANIM - header: - offset: 5234576 - size: 24 - values: - offset: 5411320 - size: 1578 - indices: - offset: 5411068 - size: 252 -anims/anim_50: - type: SM64:ANIM - header: - offset: 5372172 - size: 24 - values: - offset: 5413176 - size: 420 - indices: - offset: 5412924 - size: 252 -anims/anim_51: - type: SM64:ANIM - header: - offset: 5413596 - size: 24 - values: - offset: 5413872 - size: 1002 - indices: - offset: 5413620 - size: 252 -anims/anim_52: - type: SM64:ANIM - header: - offset: 5374304 - size: 24 - values: - offset: 5415152 - size: 878 - indices: - offset: 5414900 - size: 252 -anims/anim_53: - type: SM64:ANIM - header: - offset: 5416032 - size: 24 - values: - offset: 5416308 - size: 1970 - indices: - offset: 5416056 - size: 252 -anims/anim_54: - type: SM64:ANIM - header: - offset: 5418280 - size: 24 - values: - offset: 5418556 - size: 1314 - indices: - offset: 5418304 - size: 252 -anims/anim_55: - type: SM64:ANIM - header: - offset: 5419872 - size: 24 - values: - offset: 5420148 - size: 11268 - indices: - offset: 5419896 - size: 252 -anims/anim_56: - type: SM64:ANIM - header: - offset: 5165544 - size: 24 - values: - offset: 5431716 - size: 1560 - indices: - offset: 5431464 - size: 252 -anims/anim_57: - type: SM64:ANIM - header: - offset: 5431440 - size: 24 - values: - offset: 5431716 - size: 1560 - indices: - offset: 5431464 - size: 252 -anims/anim_58: - type: SM64:ANIM - header: - offset: 5433276 - size: 24 - values: - offset: 5433552 - size: 1082 - indices: - offset: 5433300 - size: 252 -anims/anim_59: - type: SM64:ANIM - header: - offset: 5434636 - size: 24 - values: - offset: 5434912 - size: 3052 - indices: - offset: 5434660 - size: 252 -anims/anim_5A: - type: SM64:ANIM - header: - offset: 5437964 - size: 24 - values: - offset: 5438240 - size: 3278 - indices: - offset: 5437988 - size: 252 -anims/anim_5B: - type: SM64:ANIM - header: - offset: 5230056 - size: 24 - values: - offset: 5441796 - size: 720 - indices: - offset: 5441544 - size: 252 -anims/anim_5C: - type: SM64:ANIM - header: - offset: 5442516 - size: 24 - values: - offset: 5442792 - size: 1258 - indices: - offset: 5442540 - size: 252 -anims/anim_5D: - type: SM64:ANIM - header: - offset: 5390520 - size: 24 - values: - offset: 5444328 - size: 1142 - indices: - offset: 5444076 - size: 252 -anims/anim_5E: - type: SM64:ANIM - header: - offset: 5359476 - size: 24 - values: - offset: 5445748 - size: 12110 - indices: - offset: 5445496 - size: 252 -anims/anim_5F: - type: SM64:ANIM - header: - offset: 5457860 - size: 24 - values: - offset: 5458136 - size: 5058 - indices: - offset: 5457884 - size: 252 -anims/anim_60: - type: SM64:ANIM - header: - offset: 5463196 - size: 24 - values: - offset: 5463472 - size: 4020 - indices: - offset: 5463220 - size: 252 -anims/anim_61: - type: SM64:ANIM - header: - offset: 5467492 - size: 24 - values: - offset: 5467768 - size: 12660 - indices: - offset: 5467516 - size: 252 -anims/anim_62: - type: SM64:ANIM - header: - offset: 5230056 - size: 24 - values: - offset: 5480704 - size: 742 - indices: - offset: 5480452 - size: 252 -anims/anim_63: - type: SM64:ANIM - header: - offset: 5481448 - size: 24 - values: - offset: 5481724 - size: 1626 - indices: - offset: 5481472 - size: 252 -anims/anim_64: - type: SM64:ANIM - header: - offset: 5483352 - size: 24 - values: - offset: 5483628 - size: 1246 - indices: - offset: 5483376 - size: 252 -anims/anim_65: - type: SM64:ANIM - header: - offset: 5234576 - size: 24 - values: - offset: 5485152 - size: 1700 - indices: - offset: 5484900 - size: 252 -anims/anim_66: - type: SM64:ANIM - header: - offset: 5486852 - size: 24 - values: - offset: 5487128 - size: 1948 - indices: - offset: 5486876 - size: 252 -anims/anim_67: - type: SM64:ANIM - header: - offset: 5489076 - size: 24 - values: - offset: 5489352 - size: 386 - indices: - offset: 5489100 - size: 252 -anims/anim_68: - type: SM64:ANIM - header: - offset: 5489740 - size: 24 - values: - offset: 5490016 - size: 340 - indices: - offset: 5489764 - size: 252 -anims/anim_69: - type: SM64:ANIM - header: - offset: 5230056 - size: 24 - values: - offset: 5490632 - size: 764 - indices: - offset: 5490380 - size: 252 -anims/anim_6A: - type: SM64:ANIM - header: - offset: 5491396 - size: 24 - values: - offset: 5491672 - size: 1060 - indices: - offset: 5491420 - size: 252 -anims/anim_6B: - type: SM64:ANIM - header: - offset: 5374304 - size: 24 - values: - offset: 5493008 - size: 940 - indices: - offset: 5492756 - size: 252 -anims/anim_6C: - type: SM64:ANIM - header: - offset: 5493948 - size: 24 - values: - offset: 5494224 - size: 1284 - indices: - offset: 5493972 - size: 252 -anims/anim_6D: - type: SM64:ANIM - header: - offset: 5201048 - size: 24 - values: - offset: 5495784 - size: 1286 - indices: - offset: 5495532 - size: 252 -anims/anim_6E: - type: SM64:ANIM - header: - offset: 5199596 - size: 24 - values: - offset: 5497348 - size: 1136 - indices: - offset: 5497096 - size: 252 -anims/anim_6F: - type: SM64:ANIM - header: - offset: 5292628 - size: 24 - values: - offset: 5498784 - size: 98 - indices: - offset: 5498532 - size: 252 -anims/anim_70: - type: SM64:ANIM - header: - offset: 5498508 - size: 24 - values: - offset: 5498784 - size: 98 - indices: - offset: 5498532 - size: 252 -anims/anim_71: - type: SM64:ANIM - header: - offset: 5498884 - size: 24 - values: - offset: 5499160 - size: 2078 - indices: - offset: 5498908 - size: 252 -anims/anim_72: - type: SM64:ANIM - header: - offset: 5501240 - size: 24 - values: - offset: 5501540 - size: 4342 - indices: - offset: 5501288 - size: 252 -anims/anim_73: - type: SM64:ANIM - header: - offset: 5501240 - size: 24 - values: - offset: 5501540 - size: 4342 - indices: - offset: 5501288 - size: 252 -anims/anim_74: - type: SM64:ANIM - header: - offset: 5498884 - size: 24 - values: - offset: 5506160 - size: 1844 - indices: - offset: 5505908 - size: 252 -anims/anim_75: - type: SM64:ANIM - header: - offset: 5498884 - size: 24 - values: - offset: 5508280 - size: 1892 - indices: - offset: 5508028 - size: 252 -anims/anim_76: - type: SM64:ANIM - header: - offset: 5248016 - size: 24 - values: - offset: 5510448 - size: 4648 - indices: - offset: 5510196 - size: 252 -anims/anim_77: - type: SM64:ANIM - header: - offset: 5207188 - size: 24 - values: - offset: 5515372 - size: 2464 - indices: - offset: 5515120 - size: 252 -anims/anim_78: - type: SM64:ANIM - header: - offset: 5517836 - size: 24 - values: - offset: 5518112 - size: 10454 - indices: - offset: 5517860 - size: 252 -anims/anim_79: - type: SM64:ANIM - header: - offset: 5528568 - size: 24 - values: - offset: 5528844 - size: 3634 - indices: - offset: 5528592 - size: 252 -anims/anim_7A: - type: SM64:ANIM - header: - offset: 5532480 - size: 24 - values: - offset: 5532756 - size: 402 - indices: - offset: 5532504 - size: 252 -anims/anim_7B: - type: SM64:ANIM - header: - offset: 5418280 - size: 24 - values: - offset: 5533436 - size: 2360 - indices: - offset: 5533184 - size: 252 -anims/anim_7C: - type: SM64:ANIM - header: - offset: 5418280 - size: 24 - values: - offset: 5536072 - size: 2300 - indices: - offset: 5535820 - size: 252 -anims/anim_7D: - type: SM64:ANIM - header: - offset: 5293488 - size: 24 - values: - offset: 5538648 - size: 1114 - indices: - offset: 5538396 - size: 252 -anims/anim_7E: - type: SM64:ANIM - header: - offset: 5179584 - size: 24 - values: - offset: 5540040 - size: 4538 - indices: - offset: 5539788 - size: 252 -anims/anim_7F: - type: SM64:ANIM - header: - offset: 5226920 - size: 24 - values: - offset: 5544856 - size: 3622 - indices: - offset: 5544604 - size: 252 -anims/anim_80: - type: SM64:ANIM - header: - offset: 5226920 - size: 24 - values: - offset: 5548756 - size: 4248 - indices: - offset: 5548504 - size: 252 -anims/anim_81: - type: SM64:ANIM - header: - offset: 5553004 - size: 24 - values: - offset: 5553280 - size: 4308 - indices: - offset: 5553028 - size: 252 -anims/anim_82: - type: SM64:ANIM - header: - offset: 5557588 - size: 24 - values: - offset: 5557864 - size: 5770 - indices: - offset: 5557612 - size: 252 -anims/anim_83: - type: SM64:ANIM - header: - offset: 5563636 - size: 24 - values: - offset: 5563912 - size: 4734 - indices: - offset: 5563660 - size: 252 -anims/anim_84: - type: SM64:ANIM - header: - offset: 5172396 - size: 24 - values: - offset: 5568924 - size: 4756 - indices: - offset: 5568672 - size: 252 -anims/anim_85: - type: SM64:ANIM - header: - offset: 5293488 - size: 24 - values: - offset: 5573956 - size: 324 - indices: - offset: 5573704 - size: 252 -anims/anim_86: - type: SM64:ANIM - header: - offset: 5574280 - size: 24 - values: - offset: 5574556 - size: 2902 - indices: - offset: 5574304 - size: 252 -anims/anim_87: - type: SM64:ANIM - header: - offset: 5338604 - size: 24 - values: - offset: 5577736 - size: 1564 - indices: - offset: 5577484 - size: 252 -anims/anim_88: - type: SM64:ANIM - header: - offset: 5442516 - size: 24 - values: - offset: 5579600 - size: 1260 - indices: - offset: 5579348 - size: 252 -anims/anim_89: - type: SM64:ANIM - header: - offset: 5579324 - size: 24 - values: - offset: 5579600 - size: 1260 - indices: - offset: 5579348 - size: 252 -anims/anim_8A: - type: SM64:ANIM - header: - offset: 5574280 - size: 24 - values: - offset: 5581136 - size: 2980 - indices: - offset: 5580884 - size: 252 -anims/anim_8B: - type: SM64:ANIM - header: - offset: 5434636 - size: 24 - values: - offset: 5584392 - size: 2970 - indices: - offset: 5584140 - size: 252 -anims/anim_8C: - type: SM64:ANIM - header: - offset: 5404784 - size: 24 - values: - offset: 5587640 - size: 646 - indices: - offset: 5587388 - size: 252 -anims/anim_8D: - type: SM64:ANIM - header: - offset: 5413596 - size: 24 - values: - offset: 5588564 - size: 1086 - indices: - offset: 5588312 - size: 252 -anims/anim_8E: - type: SM64:ANIM - header: - offset: 5165544 - size: 24 - values: - offset: 5589952 - size: 1618 - indices: - offset: 5589700 - size: 252 -anims/anim_8F: - type: SM64:ANIM - header: - offset: 5186848 - size: 24 - values: - offset: 5589952 - size: 1618 - indices: - offset: 5589700 - size: 252 -anims/anim_90: - type: SM64:ANIM - header: - offset: 5204600 - size: 24 - values: - offset: 5591848 - size: 1012 - indices: - offset: 5591596 - size: 252 -anims/anim_91: - type: SM64:ANIM - header: - offset: 5592860 - size: 24 - values: - offset: 5593136 - size: 266 - indices: - offset: 5592884 - size: 252 -anims/anim_92: - type: SM64:ANIM - header: - offset: 5593404 - size: 24 - values: - offset: 5593680 - size: 5600 - indices: - offset: 5593428 - size: 252 -anims/anim_93: - type: SM64:ANIM - header: - offset: 5230056 - size: 24 - values: - offset: 5599556 - size: 602 - indices: - offset: 5599304 - size: 252 -anims/anim_94: - type: SM64:ANIM - header: - offset: 5165544 - size: 24 - values: - offset: 5600436 - size: 80 - indices: - offset: 5197460 - size: 252 -anims/anim_95: - type: SM64:ANIM - header: - offset: 5489076 - size: 24 - values: - offset: 5600792 - size: 280 - indices: - offset: 5600540 - size: 252 -anims/anim_96: - type: SM64:ANIM - header: - offset: 5230056 - size: 24 - values: - offset: 5601348 - size: 680 - indices: - offset: 5601096 - size: 252 -anims/anim_97: - type: SM64:ANIM - header: - offset: 5372172 - size: 24 - values: - offset: 5602304 - size: 416 - indices: - offset: 5602052 - size: 252 -anims/anim_98: - type: SM64:ANIM - header: - offset: 5179584 - size: 24 - values: - offset: 5602996 - size: 2758 - indices: - offset: 5602744 - size: 252 -anims/anim_99: - type: SM64:ANIM - header: - offset: 5605756 - size: 24 - values: - offset: 5606032 - size: 7014 - indices: - offset: 5605780 - size: 252 -anims/anim_9A: - type: SM64:ANIM - header: - offset: 5404784 - size: 24 - values: - offset: 5613324 - size: 644 - indices: - offset: 5613072 - size: 252 -anims/anim_9B: - type: SM64:ANIM - header: - offset: 5404784 - size: 24 - values: - offset: 5614244 - size: 630 - indices: - offset: 5613992 - size: 252 -anims/anim_9C: - type: SM64:ANIM - header: - offset: 5614876 - size: 24 - values: - offset: 5615152 - size: 4884 - indices: - offset: 5614900 - size: 252 -anims/anim_9D: - type: SM64:ANIM - header: - offset: 5620036 - size: 24 - values: - offset: 5620312 - size: 1944 - indices: - offset: 5620060 - size: 252 -anims/anim_9E: - type: SM64:ANIM - header: - offset: 5553004 - size: 24 - values: - offset: 5622532 - size: 4008 - indices: - offset: 5622280 - size: 252 -anims/anim_9F: - type: SM64:ANIM - header: - offset: 5199596 - size: 24 - values: - offset: 5626816 - size: 774 - indices: - offset: 5626564 - size: 252 -anims/anim_A0: - type: SM64:ANIM - header: - offset: 5230056 - size: 24 - values: - offset: 5627868 - size: 390 - indices: - offset: 5627616 - size: 252 -anims/anim_A1: - type: SM64:ANIM - header: - offset: 5628260 - size: 24 - values: - offset: 5628536 - size: 920 - indices: - offset: 5628284 - size: 252 -anims/anim_A2: - type: SM64:ANIM - header: - offset: 5202644 - size: 24 - values: - offset: 5629732 - size: 1448 - indices: - offset: 5629480 - size: 252 -anims/anim_A3: - type: SM64:ANIM - header: - offset: 5418280 - size: 24 - values: - offset: 5631456 - size: 2590 - indices: - offset: 5631204 - size: 252 -anims/anim_A4: - type: SM64:ANIM - header: - offset: 5232768 - size: 24 - values: - offset: 5634324 - size: 1650 - indices: - offset: 5634072 - size: 252 -anims/anim_A5: - type: SM64:ANIM - header: - offset: 5165520 - size: 24 - values: - offset: 5636252 - size: 5148 - indices: - offset: 5636000 - size: 252 -anims/anim_A6: - type: SM64:ANIM - header: - offset: 5641400 - size: 24 - values: - offset: 5641676 - size: 4646 - indices: - offset: 5641424 - size: 252 -anims/anim_A7: - type: SM64:ANIM - header: - offset: 5574280 - size: 24 - values: - offset: 5646600 - size: 3060 - indices: - offset: 5646348 - size: 252 -anims/anim_A8: - type: SM64:ANIM - header: - offset: 5553004 - size: 24 - values: - offset: 5649936 - size: 3910 - indices: - offset: 5649684 - size: 252 -anims/anim_A9: - type: SM64:ANIM - header: - offset: 5442516 - size: 24 - values: - offset: 5654124 - size: 1728 - indices: - offset: 5653872 - size: 252 -anims/anim_AA: - type: SM64:ANIM - header: - offset: 5491396 - size: 24 - values: - offset: 5656128 - size: 972 - indices: - offset: 5655876 - size: 252 -anims/anim_AB: - type: SM64:ANIM - header: - offset: 5230056 - size: 24 - values: - offset: 5657376 - size: 750 - indices: - offset: 5657124 - size: 252 -anims/anim_AC: - type: SM64:ANIM - header: - offset: 5658128 - size: 24 - values: - offset: 5658404 - size: 1706 - indices: - offset: 5658152 - size: 252 -anims/anim_AD: - type: SM64:ANIM - header: - offset: 5416032 - size: 24 - values: - offset: 5660388 - size: 1860 - indices: - offset: 5660136 - size: 252 -anims/anim_AE: - type: SM64:ANIM - header: - offset: 5374304 - size: 24 - values: - offset: 5662524 - size: 956 - indices: - offset: 5662272 - size: 252 -anims/anim_AF: - type: SM64:ANIM - header: - offset: 5416032 - size: 24 - values: - offset: 5663756 - size: 2160 - indices: - offset: 5663504 - size: 252 -anims/anim_B0: - type: SM64:ANIM - header: - offset: 5489076 - size: 24 - values: - offset: 5666192 - size: 440 - indices: - offset: 5665940 - size: 252 -anims/anim_B1: - type: SM64:ANIM - header: - offset: 5666632 - size: 24 - values: - offset: 5666908 - size: 2418 - indices: - offset: 5666656 - size: 252 -anims/anim_B2: - type: SM64:ANIM - header: - offset: 5232768 - size: 24 - values: - offset: 5669604 - size: 1824 - indices: - offset: 5669352 - size: 252 -anims/anim_B3: - type: SM64:ANIM - header: - offset: 5671428 - size: 24 - values: - offset: 5671704 - size: 6494 - indices: - offset: 5671452 - size: 252 -anims/anim_B4: - type: SM64:ANIM - header: - offset: 5498884 - size: 24 - values: - offset: 5678476 - size: 1846 - indices: - offset: 5678224 - size: 252 -anims/anim_B5: - type: SM64:ANIM - header: - offset: 5442516 - size: 24 - values: - offset: 5680624 - size: 1382 - indices: - offset: 5680372 - size: 252 -anims/anim_B6: - type: SM64:ANIM - header: - offset: 5680348 - size: 24 - values: - offset: 5680624 - size: 1382 - indices: - offset: 5680372 - size: 252 -anims/anim_B7: - type: SM64:ANIM - header: - offset: 5574280 - size: 24 - values: - offset: 5682284 - size: 2980 - indices: - offset: 5682032 - size: 252 -anims/anim_B8: - type: SM64:ANIM - header: - offset: 5338604 - size: 24 - values: - offset: 5685540 - size: 776 - indices: - offset: 5685288 - size: 252 -anims/anim_B9: - type: SM64:ANIM - header: - offset: 5416032 - size: 24 - values: - offset: 5686592 - size: 2068 - indices: - offset: 5686340 - size: 252 -anims/anim_BA: - type: SM64:ANIM - header: - offset: 5433276 - size: 24 - values: - offset: 5688936 - size: 986 - indices: - offset: 5688684 - size: 252 -anims/anim_BB: - type: SM64:ANIM - header: - offset: 5689924 - size: 24 - values: - offset: 5690200 - size: 4132 - indices: - offset: 5689948 - size: 252 -anims/anim_BC: - type: SM64:ANIM - header: - offset: 5165544 - size: 24 - values: - offset: 5694632 - size: 1528 - indices: - offset: 5694380 - size: 252 -anims/anim_BD: - type: SM64:ANIM - header: - offset: 5197816 - size: 24 - values: - offset: 5694632 - size: 1528 - indices: - offset: 5694380 - size: 252 -anims/anim_BE: - type: SM64:ANIM - header: - offset: 5230056 - size: 24 - values: - offset: 5696436 - size: 760 - indices: - offset: 5696184 - size: 252 -anims/anim_BF: - type: SM64:ANIM - header: - offset: 5498884 - size: 24 - values: - offset: 5697472 - size: 1936 - indices: - offset: 5697220 - size: 252 -anims/anim_C0: - type: SM64:ANIM - header: - offset: 5699408 - size: 24 - values: - offset: 5699684 - size: 2452 - indices: - offset: 5699432 - size: 252 -anims/anim_C1: - type: SM64:ANIM - header: - offset: 5191920 - size: 24 - values: - offset: 5702412 - size: 2468 - indices: - offset: 5702160 - size: 252 -anims/anim_C2: - type: SM64:ANIM - header: - offset: 5179584 - size: 24 - values: - offset: 5705156 - size: 5422 - indices: - offset: 5704904 - size: 252 -anims/anim_C3: - type: SM64:ANIM - header: - offset: 5418280 - size: 24 - values: - offset: 5710856 - size: 1942 - indices: - offset: 5710604 - size: 252 -anims/anim_C4: - type: SM64:ANIM - header: - offset: 5418280 - size: 24 - values: - offset: 5713076 - size: 1942 - indices: - offset: 5710604 - size: 252 -anims/anim_C5: - type: SM64:ANIM - header: - offset: 5418280 - size: 24 - values: - offset: 5715296 - size: 1942 - indices: - offset: 5710604 - size: 252 -anims/anim_C6: - type: SM64:ANIM - header: - offset: 5338604 - size: 24 - values: - offset: 5717516 - size: 1666 - indices: - offset: 5717264 - size: 252 -anims/anim_C7: - type: SM64:ANIM - header: - offset: 5338604 - size: 24 - values: - offset: 5719460 - size: 2844 - indices: - offset: 5719208 - size: 252 -anims/anim_C8: - type: SM64:ANIM - header: - offset: 5722304 - size: 24 - values: - offset: 5722580 - size: 1648 - indices: - offset: 5722328 - size: 252 -anims/anim_C9: - type: SM64:ANIM - header: - offset: 5234576 - size: 24 - values: - offset: 5724504 - size: 1940 - indices: - offset: 5724252 - size: 252 -anims/anim_CA: - type: SM64:ANIM - header: - offset: 5726444 - size: 24 - values: - offset: 5726720 - size: 1998 - indices: - offset: 5726468 - size: 252 -anims/anim_CB: - type: SM64:ANIM - header: - offset: 5225496 - size: 24 - values: - offset: 5729020 - size: 1382 - indices: - offset: 5728768 - size: 252 -anims/anim_CC: - type: SM64:ANIM - header: - offset: 5165544 - size: 24 - values: - offset: 5729020 - size: 1382 - indices: - offset: 5728768 - size: 252 -anims/anim_CD: - type: SM64:ANIM - header: - offset: 5730404 - size: 24 - values: - offset: 5730680 - size: 5184 - indices: - offset: 5730428 - size: 252 -anims/anim_CE: - type: SM64:ANIM - header: - offset: 5201048 - size: 24 - values: - offset: 5736140 - size: 1460 - indices: - offset: 5735888 - size: 252 -anims/anim_CF: - type: SM64:ANIM - header: - offset: 5737600 - size: 24 - values: - offset: 5737876 - size: 2708 - indices: - offset: 5737624 - size: 252 -anims/anim_D0: - type: SM64:ANIM - header: - offset: 5413596 - size: 24 - values: - offset: 5740860 - size: 730 - indices: - offset: 5740608 - size: 252 -demos/bbh: - type: BLOB - size: 988 - offset: 5741664 -demos/bitdw: - type: BLOB - size: 1412 - offset: 5747100 -demos/ccm: - type: BLOB - size: 1320 - offset: 5742652 -demos/hmc: - type: BLOB - size: 980 - offset: 5743972 -demos/jrb: - type: BLOB - size: 620 - offset: 5744952 -demos/pss: - type: BLOB - size: 748 - offset: 5746244 -demos/unused: - type: BLOB - size: 108 - offset: 5746992 -demos/wf: - type: BLOB - size: 672 - offset: 5745572 diff --git a/assets/sm64/us/levels.yml b/assets/sm64/us/levels.yml deleted file mode 100644 index dcd160b..0000000 --- a/assets/sm64/us/levels.yml +++ /dev/null @@ -1,2389 +0,0 @@ -bbh/0: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3611712 - mio0: 0 - format: RGBA16 -bbh/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3611712 - mio0: 4096 - format: RGBA16 -bbh/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3611712 - mio0: 6144 - format: RGBA16 -bbh/3: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3611712 - mio0: 8192 - format: RGBA16 -bbh/4: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 3611712 - mio0: 12288 - format: RGBA16 -bbh/5: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3611712 - mio0: 13312 - format: RGBA16 -bbh/6: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 3611712 - mio0: 17408 - format: RGBA16 -bitdw/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4541952 - mio0: 0 - format: RGBA16 -bitdw/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4541952 - mio0: 2048 - format: RGBA16 -bitdw/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4541952 - mio0: 4096 - format: RGBA16 -bitdw/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4541952 - mio0: 6144 - format: RGBA16 -bitfs/0: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4592848 - mio0: 0 - format: RGBA16 -bitfs/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4592848 - mio0: 4096 - format: RGBA16 -bitfs/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4592848 - mio0: 6144 - format: RGBA16 -bits/0: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4637600 - mio0: 0 - format: RGBA16 -bits/1: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 4637600 - mio0: 4096 - format: RGBA16 -bits/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4637600 - mio0: 8192 - format: RGBA16 -bob/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4178608 - mio0: 0 - format: RGBA16 -bob/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4178608 - mio0: 2048 - format: RGBA16 -bob/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4178608 - mio0: 4096 - format: RGBA16 -bob/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4178608 - mio0: 6144 - format: RGBA16 -bob/4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4178608 - mio0: 8192 - format: RGBA16 -bowser_1/0: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4991264 - mio0: 0 - format: RGBA16 -bowser_1/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4991264 - mio0: 4096 - format: RGBA16 -bowser_1/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4991264 - mio0: 6144 - format: RGBA16 -bowser_2/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 5037008 - mio0: 0 - format: RGBA16 -bowser_3/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 5041152 - mio0: 0 - format: RGBA16 -bowser_3/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 5041152 - mio0: 2048 - format: RGBA16 -bowser_3/2: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 5041152 - mio0: 4096 - format: RGBA16 -castle_grounds/0: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4500416 - mio0: 0 - format: RGBA16 -castle_grounds/1: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 4500416 - mio0: 4096 - format: RGBA16 -castle_grounds/2: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 4500416 - mio0: 8192 - format: RGBA16 -castle_grounds/3: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4500416 - mio0: 51688 - format: RGBA16 -castle_grounds/4: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4500416 - mio0: 55784 - format: RGBA16 -castle_grounds/5: - type: TEXTURE - size: 2048 - width: 64 - height: 32 - offset: 4500416 - mio0: 60136 - format: IA8 -castle_inside/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3760960 - mio0: 2048 - format: RGBA16 -castle_inside/10: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3760960 - mio0: 28672 - format: RGBA16 -castle_inside/11: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3760960 - mio0: 30720 - format: RGBA16 -castle_inside/12: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3760960 - mio0: 32768 - format: RGBA16 -castle_inside/13: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3760960 - mio0: 34816 - format: RGBA16 -castle_inside/14: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3760960 - mio0: 36864 - format: RGBA16 -castle_inside/15: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3760960 - mio0: 38912 - format: RGBA16 -castle_inside/16: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3760960 - mio0: 40960 - format: IA16 -castle_inside/17: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3760960 - mio0: 43008 - format: RGBA16 -castle_inside/18: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3760960 - mio0: 47104 - format: RGBA16 -castle_inside/19: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3760960 - mio0: 51200 - format: RGBA16 -castle_inside/2: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3305024 - mio0: 47104 - format: IA16 -castle_inside/20: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3760960 - mio0: 55296 - format: RGBA16 -castle_inside/21: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3760960 - mio0: 59392 - format: RGBA16 -castle_inside/22: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3760960 - mio0: 63488 - format: RGBA16 -castle_inside/23: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3760960 - mio0: 67584 - format: RGBA16 -castle_inside/24: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3760960 - mio0: 71680 - format: RGBA16 -castle_inside/25: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3760960 - mio0: 75776 - format: RGBA16 -castle_inside/26: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3760960 - mio0: 79872 - format: RGBA16 -castle_inside/27: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3760960 - mio0: 83968 - format: RGBA16 -castle_inside/28: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3760960 - mio0: 88064 - format: RGBA16 -castle_inside/29: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3760960 - mio0: 92160 - format: RGBA16 -castle_inside/3: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3760960 - mio0: 8192 - format: RGBA16 -castle_inside/30: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3760960 - mio0: 94208 - format: RGBA16 -castle_inside/31: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3760960 - mio0: 96256 - format: RGBA16 -castle_inside/32: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3760960 - mio0: 100352 - format: RGBA16 -castle_inside/33: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3760960 - mio0: 104448 - format: RGBA16 -castle_inside/34: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3760960 - mio0: 108544 - format: RGBA16 -castle_inside/35: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3760960 - mio0: 112640 - format: RGBA16 -castle_inside/36: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3760960 - mio0: 116736 - format: RGBA16 -castle_inside/37: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3760960 - mio0: 120832 - format: RGBA16 -castle_inside/38: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3760960 - mio0: 124928 - format: RGBA16 -castle_inside/39: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3760960 - mio0: 129024 - format: RGBA16 -castle_inside/4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3760960 - mio0: 12288 - format: RGBA16 -castle_inside/40: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3760960 - mio0: 133120 - format: RGBA16 -castle_inside/5: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3760960 - mio0: 14336 - format: RGBA16 -castle_inside/6: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3760960 - mio0: 18432 - format: RGBA16 -castle_inside/7: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3760960 - mio0: 22528 - format: RGBA16 -castle_inside/8: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3760960 - mio0: 24576 - format: RGBA16 -castle_inside/9: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3760960 - mio0: 26624 - format: RGBA16 -castle_inside/castle_light: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3439184 - mio0: 47104 - format: IA16 -ccm/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3684688 - mio0: 0 - format: RGBA16 -ccm/1: - type: TEXTURE - size: 256 - width: 32 - height: 4 - offset: 3684688 - mio0: 2048 - format: RGBA16 -ccm/10: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3684688 - mio0: 17152 - format: RGBA16 -ccm/11: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3684688 - mio0: 19200 - format: RGBA16 -ccm/12: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3684688 - mio0: 72024 - format: RGBA16 -ccm/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3684688 - mio0: 2304 - format: RGBA16 -ccm/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3684688 - mio0: 4352 - format: RGBA16 -ccm/4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3684688 - mio0: 6400 - format: RGBA16 -ccm/5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1443440 - mio0: 48240 - format: RGBA16 -ccm/6: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1443440 - mio0: 46192 - format: RGBA16 -ccm/7: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3684688 - mio0: 12544 - format: RGBA16 -ccm/8: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 3684688 - mio0: 14592 - format: IA16 -ccm/9: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3684688 - mio0: 15104 - format: IA16 -cotmc/0: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 4948176 - mio0: 0 - format: RGBA16 -cotmc/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4948176 - mio0: 4096 - format: RGBA16 -cotmc/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4948176 - mio0: 6144 - format: RGBA16 -cotmc/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4948176 - mio0: 8192 - format: RGBA16 -cotmc/4: - type: TEXTURE - size: 2048 - width: 64 - height: 16 - offset: 4948176 - mio0: 10240 - format: RGBA16 -ddd/0: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4774192 - mio0: 0 - format: RGBA16 -ddd/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3439184 - mio0: 4096 - format: RGBA16 -ddd/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4774192 - mio0: 6144 - format: RGBA16 -ddd/3: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 4774192 - mio0: 8192 - format: RGBA16 -ddd/4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4774192 - mio0: 12288 - format: RGBA16 -ending/cake: - type: BLOB - size: 153600 - offset: 4843280 - mio0: 0 -hmc/0: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4001216 - mio0: 0 - format: RGBA16 -hmc/1: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4001216 - mio0: 4096 - format: RGBA16 -hmc/2: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4001216 - mio0: 8192 - format: RGBA16 -hmc/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4001216 - mio0: 12288 - format: RGBA16 -hmc/4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4001216 - mio0: 14336 - format: RGBA16 -hmc/5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4001216 - mio0: 16384 - format: RGBA16 -hmc/6: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4001216 - mio0: 18432 - format: RGBA16 -hmc/7: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3760960 - mio0: 92160 - format: RGBA16 -intro/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2532256 - mio0: 32416 - format: RGBA16 -intro/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2532256 - mio0: 34464 - format: RGBA16 -intro/2_copyright: - type: TEXTURE - size: 4096 - width: 128 - height: 16 - offset: 2532256 - mio0: 46240 - format: RGBA16 -intro/3_tm: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2532256 - mio0: 50336 - format: RGBA16 -jrb/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3439184 - mio0: 4096 - format: RGBA16 -jrb/1: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 4302688 - mio0: 2048 - format: RGBA16 -jrb/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4302688 - mio0: 6144 - format: RGBA16 -jrb/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4302688 - mio0: 8192 - format: RGBA16 -lll/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4687008 - mio0: 0 - format: RGBA16 -lll/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4687008 - mio0: 2048 - format: RGBA16 -lll/10: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4687008 - mio0: 20480 - format: RGBA16 -lll/11: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4687008 - mio0: 22528 - format: RGBA16 -lll/12: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4687008 - mio0: 24576 - format: RGBA16 -lll/13: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4687008 - mio0: 26624 - format: RGBA16 -lll/14: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4687008 - mio0: 28672 - format: RGBA16 -lll/15: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4687008 - mio0: 30720 - format: RGBA16 -lll/16: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4687008 - mio0: 32768 - format: RGBA16 -lll/17: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4687008 - mio0: 34816 - format: RGBA16 -lll/18: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4687008 - mio0: 36864 - format: RGBA16 -lll/19: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4687008 - mio0: 38912 - format: RGBA16 -lll/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4687008 - mio0: 4096 - format: RGBA16 -lll/20: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4687008 - mio0: 40960 - format: RGBA16 -lll/21: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4687008 - mio0: 43008 - format: RGBA16 -lll/22: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4687008 - mio0: 45056 - format: RGBA16 -lll/23: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4687008 - mio0: 47104 - format: RGBA16 -lll/24: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4687008 - mio0: 49152 - format: RGBA16 -lll/25: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4687008 - mio0: 51200 - format: RGBA16 -lll/26: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 4687008 - mio0: 53248 - format: RGBA16 -lll/27: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 3684688 - mio0: 14592 - format: IA16 -lll/28: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4687008 - mio0: 54272 - format: RGBA16 -lll/29: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4687008 - mio0: 56320 - format: RGBA16 -lll/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4687008 - mio0: 6144 - format: RGBA16 -lll/30: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4687008 - mio0: 58368 - format: RGBA16 -lll/31: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4687008 - mio0: 60416 - format: RGBA16 -lll/32: - type: TEXTURE - size: 2048 - width: 64 - height: 16 - offset: 4687008 - mio0: 62464 - format: RGBA16 -lll/4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4687008 - mio0: 8192 - format: RGBA16 -lll/5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4687008 - mio0: 10240 - format: RGBA16 -lll/6: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4687008 - mio0: 12288 - format: RGBA16 -lll/7: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3269072 - mio0: 6144 - format: RGBA16 -lll/8: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4687008 - mio0: 16384 - format: RGBA16 -lll/9: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4687008 - mio0: 18432 - format: RGBA16 -menu/main_menu_seg7.00018: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2778544 - mio0: 24 - format: RGBA16 -menu/main_menu_seg7.00818: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2778544 - mio0: 2072 - format: RGBA16 -menu/main_menu_seg7.01018: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 2778544 - mio0: 4120 - format: RGBA16 -menu/main_menu_seg7.02018: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 2778544 - mio0: 8216 - format: RGBA16 -menu/main_menu_seg7.03468: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2778544 - mio0: 13416 - format: RGBA16 -menu/main_menu_seg7.03C68: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2778544 - mio0: 15464 - format: RGBA16 -menu/main_menu_seg7.04468: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2778544 - mio0: 17512 - format: RGBA16 -menu/main_menu_seg7.04C68: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2778544 - mio0: 19560 - format: RGBA16 -menu/main_menu_seg7.05468: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2778544 - mio0: 21608 - format: RGBA16 -menu/main_menu_seg7.06328: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2778544 - mio0: 25384 - format: RGBA16 -menu/main_menu_seg7.06B28: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2778544 - mio0: 27432 - format: RGBA16 -menu/main_menu_seg7.073D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2778544 - mio0: 29648 - format: RGBA16 -menu/main_menu_seg7.075D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2778544 - mio0: 30160 - format: RGBA16 -menu/main_menu_seg7.077D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2778544 - mio0: 30672 - format: RGBA16 -menu/main_menu_seg7.079D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2778544 - mio0: 31184 - format: RGBA16 -menu/main_menu_seg7.07BD0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2778544 - mio0: 31696 - format: RGBA16 -menu/main_menu_seg7.07DD0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2778544 - mio0: 32208 - format: RGBA16 -menu/main_menu_seg7.07FD0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2778544 - mio0: 32720 - format: RGBA16 -menu/main_menu_seg7.081D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2778544 - mio0: 33232 - format: RGBA16 -menu/main_menu_seg7.083D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2778544 - mio0: 33744 - format: RGBA16 -menu/main_menu_seg7.085D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2778544 - mio0: 34256 - format: RGBA16 -menu/main_menu_seg7.087D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2778544 - mio0: 34768 - format: RGBA16 -menu/main_menu_seg7.089D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2778544 - mio0: 35280 - format: RGBA16 -menu/main_menu_seg7.08BD0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2778544 - mio0: 35792 - format: RGBA16 -menu/main_menu_seg7.08DD0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2778544 - mio0: 36304 - format: RGBA16 -menu/main_menu_seg7.08FD0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2778544 - mio0: 36816 - format: RGBA16 -menu/main_menu_seg7.091D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2778544 - mio0: 37328 - format: RGBA16 -menu/main_menu_seg7.093D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2778544 - mio0: 37840 - format: RGBA16 -menu/main_menu_seg7.095D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2778544 - mio0: 38352 - format: RGBA16 -menu/main_menu_seg7.097D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2778544 - mio0: 38864 - format: RGBA16 -menu/main_menu_seg7.099D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2778544 - mio0: 39376 - format: RGBA16 -menu/main_menu_seg7.09BD0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2778544 - mio0: 39888 - format: RGBA16 -menu/main_menu_seg7.09DD0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2778544 - mio0: 40400 - format: RGBA16 -menu/main_menu_seg7.09FD0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2778544 - mio0: 40912 - format: RGBA16 -menu/main_menu_seg7.0A1D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2778544 - mio0: 41424 - format: RGBA16 -menu/main_menu_seg7.0A3D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2778544 - mio0: 41936 - format: RGBA16 -menu/main_menu_seg7.0A5D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2778544 - mio0: 42448 - format: RGBA16 -menu/main_menu_seg7.0A7D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2778544 - mio0: 42960 - format: RGBA16 -menu/main_menu_seg7.0A9D0: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2778544 - mio0: 43472 - format: RGBA16 -menu/main_menu_seg7.0D1A8: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 2778544 - mio0: 48352 - format: RGBA16 -menu/main_menu_seg7.0E1A8: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 2778544 - mio0: 52448 - format: RGBA16 -menu/main_menu_seg7.0AC40: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 44096 - format: IA8 -menu/main_menu_seg7.0AC80: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 44160 - format: IA8 -menu/main_menu_seg7.0ACC0: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 44224 - format: IA8 -menu/main_menu_seg7.0AD00: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 44288 - format: IA8 -menu/main_menu_seg7.0AD40: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 44352 - format: IA8 -menu/main_menu_seg7.0AD80: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 44416 - format: IA8 -menu/main_menu_seg7.0ADC0: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 44480 - format: IA8 -menu/main_menu_seg7.0AE00: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 44544 - format: IA8 -menu/main_menu_seg7.0AE40: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 44608 - format: IA8 -menu/main_menu_seg7.0AE80: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 44672 - format: IA8 -menu/main_menu_seg7.0AEC0: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 44736 - format: IA8 -menu/main_menu_seg7.0AF00: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 44800 - format: IA8 -menu/main_menu_seg7.0AF40: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 44864 - format: IA8 -menu/main_menu_seg7.0AF80: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 44928 - format: IA8 -menu/main_menu_seg7.0AFC0: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 44992 - format: IA8 -menu/main_menu_seg7.0B000: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 45056 - format: IA8 -menu/main_menu_seg7.0B040: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 45120 - format: IA8 -menu/main_menu_seg7.0B080: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 45184 - format: IA8 -menu/main_menu_seg7.0B0C0: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 45248 - format: IA8 -menu/main_menu_seg7.0B100: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 45312 - format: IA8 -menu/main_menu_seg7.0B140: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 45376 - format: IA8 -menu/main_menu_seg7.0B180: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 45440 - format: IA8 -menu/main_menu_seg7.0B1C0: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 45504 - format: IA8 -menu/main_menu_seg7.0B200: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 45568 - format: IA8 -menu/main_menu_seg7.0B240: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 45632 - format: IA8 -menu/main_menu_seg7.0B280: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 45696 - format: IA8 -menu/main_menu_seg7.0B2C0: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 45760 - format: IA8 -menu/main_menu_seg7.0B300: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 45824 - format: IA8 -menu/main_menu_seg7.0B340: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 45888 - format: IA8 -menu/main_menu_seg7.0B380: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 45952 - format: IA8 -menu/main_menu_seg7.0B3C0: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 46016 - format: IA8 -menu/main_menu_seg7.0B400: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 46080 - format: IA8 -menu/main_menu_seg7.0B440: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 46144 - format: IA8 -menu/main_menu_seg7.0B480: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 46208 - format: IA8 -menu/main_menu_seg7.0B4C0: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 46272 - format: IA8 -menu/main_menu_seg7.0B500: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 46336 - format: IA8 -menu/main_menu_seg7.0B540: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 46400 - format: IA8 -menu/main_menu_seg7.0B580: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 46464 - format: IA8 -menu/main_menu_seg7.0B5C0: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 46528 - format: IA8 -menu/main_menu_seg7.0B600: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 46592 - format: IA8 -menu/main_menu_seg7.0B640: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 46656 - format: IA8 -menu/main_menu_seg7.0B680: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 46720 - format: IA8 -menu/main_menu_seg7.0B6C0: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 46784 - format: IA8 -menu/main_menu_seg7.0B700: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 46848 - format: IA8 -menu/main_menu_seg7.0B740: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 46912 - format: IA8 -menu/main_menu_seg7.0B780: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 46976 - format: IA8 -menu/main_menu_seg7.0B7C0: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 46648 - format: IA8 -menu/main_menu_seg7.0B800: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 2778544 - mio0: 47104 - format: IA8 -pss/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4913456 - mio0: 0 - format: RGBA16 -pss/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4913456 - mio0: 2048 - format: IA16 -pss/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4913456 - mio0: 4096 - format: RGBA16 -rr/1: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 4421744 - mio0: 2048 - format: RGBA16 -rr/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4421744 - mio0: 6144 - format: RGBA16 -rr/quarter_flying_carpet: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4421744 - mio0: 0 - format: RGBA16 -sl/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4218800 - mio0: 0 - format: RGBA16 -sl/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4218800 - mio0: 2048 - format: RGBA16 -sl/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4218800 - mio0: 4096 - format: RGBA16 -sl/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4218800 - mio0: 6144 - format: RGBA16 -sl/4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4218800 - mio0: 8192 - format: RGBA16 -ssl/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4093616 - mio0: 0 - format: RGBA16 -ssl/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4093616 - mio0: 2048 - format: IA16 -ssl/10: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4093616 - mio0: 55208 - format: RGBA16 -ssl/11: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4093616 - mio0: 59304 - format: RGBA16 -ssl/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4093616 - mio0: 4096 - format: RGBA16 -ssl/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4093616 - mio0: 6144 - format: RGBA16 -ssl/4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4093616 - mio0: 8192 - format: RGBA16 -ssl/5: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4093616 - mio0: 10240 - format: RGBA16 -ssl/6: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4093616 - mio0: 14336 - format: RGBA16 -ssl/7: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3330160 - mio0: 32768 - format: RGBA16 -ssl/8: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4093616 - mio0: 49064 - format: RGBA16 -ssl/9: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4093616 - mio0: 51112 - format: RGBA16 -thi/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4343504 - mio0: 0 - format: RGBA16 -thi/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4343504 - mio0: 2048 - format: RGBA16 -totwc/0: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4975664 - mio0: 0 - format: RGBA16 -totwc/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4975664 - mio0: 4096 - format: RGBA16 -totwc/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4975664 - mio0: 6144 - format: RGBA16 -totwc/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4975664 - mio0: 8192 - format: IA16 -ttc/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4378400 - mio0: 0 - format: RGBA16 -ttc/1: - type: TEXTURE - size: 2048 - width: 16 - height: 64 - offset: 4378400 - mio0: 2048 - format: RGBA16 -ttc/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4378400 - mio0: 90000 - format: RGBA16 -ttm/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 5052688 - mio0: 0 - format: IA16 -ttm/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 5052688 - mio0: 2048 - format: RGBA16 -ttm/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 5052688 - mio0: 4096 - format: RGBA16 -ttm/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 5052688 - mio0: 6144 - format: RGBA16 -ttm/4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 5052688 - mio0: 8192 - format: RGBA16 -ttm/5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 5052688 - mio0: 10240 - format: RGBA16 -ttm/6: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 5052688 - mio0: 12288 - format: RGBA16 -ttm/7: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 5052688 - mio0: 16384 - format: RGBA16 -ttm/8: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3479904 - mio0: 43008 - format: RGBA16 -vcutm/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4572672 - mio0: 0 - format: RGBA16 -vcutm/1: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 4572672 - mio0: 2048 - format: RGBA16 -vcutm/2: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 4572672 - mio0: 6144 - format: RGBA16 -vcutm/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4572672 - mio0: 10240 - format: RGBA16 -wdw/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4255088 - mio0: 0 - format: RGBA16 -wdw/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4255088 - mio0: 2048 - format: RGBA16 -wdw/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4255088 - mio0: 4096 - format: RGBA16 -wdw/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4255088 - mio0: 6144 - format: RGBA16 -wdw/4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4255088 - mio0: 8192 - format: RGBA16 -wf/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4808848 - mio0: 0 - format: RGBA16 -wf/1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4808848 - mio0: 2048 - format: RGBA16 -wf/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4808848 - mio0: 4096 - format: RGBA16 -wf/3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4808848 - mio0: 6144 - format: RGBA16 -wf/4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4808848 - mio0: 8192 - format: RGBA16 -wf/5: - type: TEXTURE - size: 256 - width: 16 - height: 16 - offset: 1083968 - mio0: 74168 - format: IA8 -wmotr/0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4997920 - mio0: 0 - format: RGBA16 -wmotr/1: - type: TEXTURE - size: 1024 - width: 32 - height: 16 - offset: 4997920 - mio0: 2048 - format: RGBA16 -wmotr/2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 4997920 - mio0: 3072 - format: RGBA16 -wmotr/3: - type: TEXTURE - size: 512 - width: 32 - height: 8 - offset: 4997920 - mio0: 5120 - format: RGBA16 -wmotr/4: - type: TEXTURE - size: 512 - width: 8 - height: 32 - offset: 4997920 - mio0: 5632 - format: RGBA16 diff --git a/assets/sm64/us/sound.yml b/assets/sm64/us/sound.yml deleted file mode 100644 index 4bb13f9..0000000 --- a/assets/sm64/us/sound.yml +++ /dev/null @@ -1,1035 +0,0 @@ -header: - type: AUDIO:HEADER - ctl: - offset: 5748512 - size: 97856 - tbl: - offset: 5846368 - size: 2216704 -banks/00: - type: BANK - id: 0 -banks/01_terrain: - type: BANK - id: 1 -banks/02_water: - type: BANK - id: 2 -banks/03: - type: BANK - id: 3 -banks/04: - type: BANK - id: 4 -banks/05: - type: BANK - id: 5 -banks/06: - type: BANK - id: 6 -banks/07: - type: BANK - id: 7 -banks/08_mario: - type: BANK - id: 8 -banks/09: - type: BANK - id: 9 -banks/0A_mario_peach: - type: BANK - id: 10 -banks/0B: - type: BANK - id: 11 -banks/0C: - type: BANK - id: 12 -banks/0D: - type: BANK - id: 13 -banks/0E: - type: BANK - id: 14 -banks/0F: - type: BANK - id: 15 -banks/10: - type: BANK - id: 16 -banks/11: - type: BANK - id: 17 -banks/12: - type: BANK - id: 18 -banks/13: - type: BANK - id: 19 -banks/14_piranha_music_box: - type: BANK - id: 20 -banks/15: - type: BANK - id: 21 -banks/16_course_start: - type: BANK - id: 22 -banks/17: - type: BANK - id: 23 -banks/18: - type: BANK - id: 24 -banks/19: - type: BANK - id: 25 -banks/1A: - type: BANK - id: 26 -banks/1B: - type: BANK - id: 27 -banks/1C_endless_stairs: - type: BANK - id: 28 -banks/1D_bowser_organ: - type: BANK - id: 29 -banks/1E: - type: BANK - id: 30 -banks/1F: - type: BANK - id: 31 -banks/20: - type: BANK - id: 32 -banks/21: - type: BANK - id: 33 -banks/22: - type: BANK - id: 34 -banks/23: - type: BANK - id: 35 -banks/24: - type: BANK - id: 36 -banks/25: - type: BANK - id: 37 -samples/bowser_organ/00_organ_1: - type: SAMPLE - id: 216 -samples/bowser_organ/01_organ_1_lq: - type: SAMPLE - id: 217 -samples/bowser_organ/02_boys_choir: - type: SAMPLE - id: 218 -samples/course_start/00_la: - type: SAMPLE - id: 215 -samples/instruments/00: - type: SAMPLE - id: 141 -samples/instruments/01_banjo_1: - type: SAMPLE - id: 142 -samples/instruments/02: - type: SAMPLE - id: 143 -samples/instruments/03_human_whistle: - type: SAMPLE - id: 144 -samples/instruments/04_bright_piano: - type: SAMPLE - id: 145 -samples/instruments/05_acoustic_bass: - type: SAMPLE - id: 146 -samples/instruments/06_kick_drum_1: - type: SAMPLE - id: 147 -samples/instruments/07_rimshot: - type: SAMPLE - id: 148 -samples/instruments/08: - type: SAMPLE - id: 149 -samples/instruments/09: - type: SAMPLE - id: 150 -samples/instruments/0A_tambourine: - type: SAMPLE - id: 151 -samples/instruments/0B: - type: SAMPLE - id: 152 -samples/instruments/0C_conga_stick: - type: SAMPLE - id: 153 -samples/instruments/0D_clave: - type: SAMPLE - id: 154 -samples/instruments/0E_hihat_closed: - type: SAMPLE - id: 155 -samples/instruments/0F_hihat_open: - type: SAMPLE - id: 156 -samples/instruments/10_cymbal_bell: - type: SAMPLE - id: 157 -samples/instruments/11_splash_cymbal: - type: SAMPLE - id: 158 -samples/instruments/12_snare_drum_1: - type: SAMPLE - id: 159 -samples/instruments/13_snare_drum_2: - type: SAMPLE - id: 160 -samples/instruments/14_strings_5: - type: SAMPLE - id: 161 -samples/instruments/15_strings_4: - type: SAMPLE - id: 162 -samples/instruments/16_french_horns: - type: SAMPLE - id: 163 -samples/instruments/17_trumpet: - type: SAMPLE - id: 164 -samples/instruments/18_timpani: - type: SAMPLE - id: 165 -samples/instruments/19_brass: - type: SAMPLE - id: 166 -samples/instruments/1A_slap_bass: - type: SAMPLE - id: 167 -samples/instruments/1B_organ_2: - type: SAMPLE - id: 168 -samples/instruments/1C: - type: SAMPLE - id: 169 -samples/instruments/1D: - type: SAMPLE - id: 170 -samples/instruments/1E_closed_triangle: - type: SAMPLE - id: 171 -samples/instruments/1F_open_triangle: - type: SAMPLE - id: 172 -samples/instruments/20_cabasa: - type: SAMPLE - id: 173 -samples/instruments/21_sine_bass: - type: SAMPLE - id: 174 -samples/instruments/22_boys_choir: - type: SAMPLE - id: 175 -samples/instruments/23_strings_1: - type: SAMPLE - id: 176 -samples/instruments/24_strings_2: - type: SAMPLE - id: 177 -samples/instruments/25_strings_3: - type: SAMPLE - id: 178 -samples/instruments/26_crystal_rhodes: - type: SAMPLE - id: 179 -samples/instruments/27_harpsichord: - type: SAMPLE - id: 180 -samples/instruments/28_sitar_1: - type: SAMPLE - id: 181 -samples/instruments/29_orchestra_hit: - type: SAMPLE - id: 182 -samples/instruments/2A: - type: SAMPLE - id: 183 -samples/instruments/2B: - type: SAMPLE - id: 184 -samples/instruments/2C: - type: SAMPLE - id: 185 -samples/instruments/2D_trombone: - type: SAMPLE - id: 186 -samples/instruments/2E_accordion: - type: SAMPLE - id: 187 -samples/instruments/2F_sleigh_bells: - type: SAMPLE - id: 188 -samples/instruments/30_rarefaction-lahna: - type: SAMPLE - id: 189 -samples/instruments/31_rarefaction-convolution: - type: SAMPLE - id: 190 -samples/instruments/32_metal_rimshot: - type: SAMPLE - id: 191 -samples/instruments/33_kick_drum_2: - type: SAMPLE - id: 192 -samples/instruments/34_alto_flute: - type: SAMPLE - id: 193 -samples/instruments/35_gospel_organ: - type: SAMPLE - id: 194 -samples/instruments/36_sawtooth_synth: - type: SAMPLE - id: 195 -samples/instruments/37_square_synth: - type: SAMPLE - id: 196 -samples/instruments/38_electric_kick_drum: - type: SAMPLE - id: 197 -samples/instruments/39_sitar_2: - type: SAMPLE - id: 198 -samples/instruments/3A_music_box: - type: SAMPLE - id: 199 -samples/instruments/3B_banjo_2: - type: SAMPLE - id: 200 -samples/instruments/3C_acoustic_guitar: - type: SAMPLE - id: 201 -samples/instruments/3D: - type: SAMPLE - id: 202 -samples/instruments/3E_monk_choir: - type: SAMPLE - id: 203 -samples/instruments/3F: - type: SAMPLE - id: 204 -samples/instruments/40_bell: - type: SAMPLE - id: 205 -samples/instruments/41_pan_flute: - type: SAMPLE - id: 206 -samples/instruments/42_vibraphone: - type: SAMPLE - id: 207 -samples/instruments/43_harmonica: - type: SAMPLE - id: 208 -samples/instruments/44_grand_piano: - type: SAMPLE - id: 209 -samples/instruments/45_french_horns_lq: - type: SAMPLE - id: 210 -samples/instruments/46_pizzicato_strings_1: - type: SAMPLE - id: 211 -samples/instruments/47_pizzicato_strings_2: - type: SAMPLE - id: 212 -samples/instruments/48_steel_drum: - type: SAMPLE - id: 213 -samples/piranha_music_box/00_music_box: - type: SAMPLE - id: 214 -samples/sfx_1/00_twirl: - type: SAMPLE - id: 0 -samples/sfx_1/01_brushing: - type: SAMPLE - id: 1 -samples/sfx_1/02_hand_touch: - type: SAMPLE - id: 2 -samples/sfx_1/03_yoshi: - type: SAMPLE - id: 3 -samples/sfx_1/04_plop: - type: SAMPLE - id: 4 -samples/sfx_1/05_heavy_landing: - type: SAMPLE - id: 5 -samples/sfx_4/00: - type: SAMPLE - id: 17 -samples/sfx_4/01: - type: SAMPLE - id: 18 -samples/sfx_4/02: - type: SAMPLE - id: 19 -samples/sfx_4/03: - type: SAMPLE - id: 20 -samples/sfx_4/04: - type: SAMPLE - id: 21 -samples/sfx_4/05: - type: SAMPLE - id: 22 -samples/sfx_4/06: - type: SAMPLE - id: 23 -samples/sfx_4/07: - type: SAMPLE - id: 24 -samples/sfx_4/08: - type: SAMPLE - id: 25 -samples/sfx_4/09: - type: SAMPLE - id: 26 -samples/sfx_5/00: - type: SAMPLE - id: 27 -samples/sfx_5/01: - type: SAMPLE - id: 28 -samples/sfx_5/02: - type: SAMPLE - id: 29 -samples/sfx_5/03: - type: SAMPLE - id: 30 -samples/sfx_5/04: - type: SAMPLE - id: 31 -samples/sfx_5/05: - type: SAMPLE - id: 32 -samples/sfx_5/06: - type: SAMPLE - id: 33 -samples/sfx_5/07: - type: SAMPLE - id: 34 -samples/sfx_5/08: - type: SAMPLE - id: 35 -samples/sfx_5/09: - type: SAMPLE - id: 36 -samples/sfx_5/0A: - type: SAMPLE - id: 37 -samples/sfx_5/0B: - type: SAMPLE - id: 38 -samples/sfx_5/0C: - type: SAMPLE - id: 39 -samples/sfx_5/0D: - type: SAMPLE - id: 40 -samples/sfx_5/0E: - type: SAMPLE - id: 41 -samples/sfx_5/0F: - type: SAMPLE - id: 42 -samples/sfx_5/10: - type: SAMPLE - id: 43 -samples/sfx_5/11: - type: SAMPLE - id: 44 -samples/sfx_5/12: - type: SAMPLE - id: 45 -samples/sfx_5/13: - type: SAMPLE - id: 46 -samples/sfx_5/14: - type: SAMPLE - id: 47 -samples/sfx_5/15: - type: SAMPLE - id: 48 -samples/sfx_5/16: - type: SAMPLE - id: 49 -samples/sfx_5/17: - type: SAMPLE - id: 50 -samples/sfx_5/18: - type: SAMPLE - id: 51 -samples/sfx_5/19: - type: SAMPLE - id: 52 -samples/sfx_5/1A: - type: SAMPLE - id: 53 -samples/sfx_5/1B: - type: SAMPLE - id: 54 -samples/sfx_5/1C: - type: SAMPLE - id: 55 -samples/sfx_6/00: - type: SAMPLE - id: 56 -samples/sfx_6/01: - type: SAMPLE - id: 57 -samples/sfx_6/02: - type: SAMPLE - id: 58 -samples/sfx_6/03: - type: SAMPLE - id: 59 -samples/sfx_6/04: - type: SAMPLE - id: 60 -samples/sfx_6/05: - type: SAMPLE - id: 61 -samples/sfx_6/06: - type: SAMPLE - id: 62 -samples/sfx_6/07: - type: SAMPLE - id: 63 -samples/sfx_6/08: - type: SAMPLE - id: 64 -samples/sfx_6/09: - type: SAMPLE - id: 65 -samples/sfx_6/0A: - type: SAMPLE - id: 66 -samples/sfx_6/0B: - type: SAMPLE - id: 67 -samples/sfx_6/0C: - type: SAMPLE - id: 68 -samples/sfx_6/0D: - type: SAMPLE - id: 69 -samples/sfx_7/00: - type: SAMPLE - id: 70 -samples/sfx_7/01: - type: SAMPLE - id: 71 -samples/sfx_7/02: - type: SAMPLE - id: 72 -samples/sfx_7/03: - type: SAMPLE - id: 73 -samples/sfx_7/04: - type: SAMPLE - id: 74 -samples/sfx_7/05: - type: SAMPLE - id: 75 -samples/sfx_7/06: - type: SAMPLE - id: 76 -samples/sfx_7/07: - type: SAMPLE - id: 77 -samples/sfx_7/08: - type: SAMPLE - id: 78 -samples/sfx_7/09: - type: SAMPLE - id: 79 -samples/sfx_7/0A: - type: SAMPLE - id: 80 -samples/sfx_7/0B: - type: SAMPLE - id: 81 -samples/sfx_7/0C: - type: SAMPLE - id: 82 -samples/sfx_7/0D_chain_chomp_bark: - type: SAMPLE - id: 83 -samples/sfx_9/00: - type: SAMPLE - id: 111 -samples/sfx_9/01: - type: SAMPLE - id: 112 -samples/sfx_9/02: - type: SAMPLE - id: 113 -samples/sfx_9/03: - type: SAMPLE - id: 114 -samples/sfx_9/04_camera_buzz: - type: SAMPLE - id: 115 -samples/sfx_9/05_camera_shutter: - type: SAMPLE - id: 116 -samples/sfx_9/06: - type: SAMPLE - id: 117 -samples/sfx_mario/00_mario_jump_hoo: - type: SAMPLE - id: 84 -samples/sfx_mario/01_mario_jump_wah: - type: SAMPLE - id: 85 -samples/sfx_mario/02_mario_yah: - type: SAMPLE - id: 86 -samples/sfx_mario/03_mario_haha: - type: SAMPLE - id: 87 -samples/sfx_mario/04_mario_yahoo: - type: SAMPLE - id: 88 -samples/sfx_mario/05_mario_uh: - type: SAMPLE - id: 89 -samples/sfx_mario/06_mario_hrmm: - type: SAMPLE - id: 90 -samples/sfx_mario/07_mario_wah2: - type: SAMPLE - id: 91 -samples/sfx_mario/08_mario_whoa: - type: SAMPLE - id: 92 -samples/sfx_mario/09_mario_eeuh: - type: SAMPLE - id: 93 -samples/sfx_mario/0A_mario_attacked: - type: SAMPLE - id: 94 -samples/sfx_mario/0B_mario_ooof: - type: SAMPLE - id: 95 -samples/sfx_mario/0C_mario_here_we_go: - type: SAMPLE - id: 96 -samples/sfx_mario/0D_mario_yawning: - type: SAMPLE - id: 97 -samples/sfx_mario/0E_mario_snoring1: - type: SAMPLE - id: 98 -samples/sfx_mario/0F_mario_snoring2: - type: SAMPLE - id: 99 -samples/sfx_mario/10_mario_doh: - type: SAMPLE - id: 100 -samples/sfx_mario/11_mario_game_over: - type: SAMPLE - id: 101 -samples/sfx_mario/12_mario_hello: - type: SAMPLE - id: 102 -samples/sfx_mario/13_mario_press_start_to_play: - type: SAMPLE - id: 103 -samples/sfx_mario/14_mario_twirl_bounce: - type: SAMPLE - id: 104 -samples/sfx_mario/15_mario_snoring3: - type: SAMPLE - id: 105 -samples/sfx_mario/16_mario_so_longa_bowser: - type: SAMPLE - id: 106 -samples/sfx_mario/17_mario_ima_tired: - type: SAMPLE - id: 107 -samples/sfx_mario/18_mario_waha: - type: SAMPLE - id: 108 -samples/sfx_mario/19_mario_yippee: - type: SAMPLE - id: 109 -samples/sfx_mario/1A_mario_lets_a_go: - type: SAMPLE - id: 110 -samples/sfx_mario_peach/00_mario_waaaooow: - type: SAMPLE - id: 118 -samples/sfx_mario_peach/01_mario_hoohoo: - type: SAMPLE - id: 119 -samples/sfx_mario_peach/02_mario_panting: - type: SAMPLE - id: 120 -samples/sfx_mario_peach/03_mario_dying: - type: SAMPLE - id: 121 -samples/sfx_mario_peach/04_mario_on_fire: - type: SAMPLE - id: 122 -samples/sfx_mario_peach/05_mario_uh2: - type: SAMPLE - id: 123 -samples/sfx_mario_peach/06_mario_coughing: - type: SAMPLE - id: 124 -samples/sfx_mario_peach/07_mario_its_a_me_mario: - type: SAMPLE - id: 125 -samples/sfx_mario_peach/08_mario_punch_yah: - type: SAMPLE - id: 126 -samples/sfx_mario_peach/09_mario_punch_hoo: - type: SAMPLE - id: 127 -samples/sfx_mario_peach/0A_mario_mama_mia: - type: SAMPLE - id: 128 -samples/sfx_mario_peach/0B_mario_okey_dokey: - type: SAMPLE - id: 129 -samples/sfx_mario_peach/0C_mario_drowning: - type: SAMPLE - id: 130 -samples/sfx_mario_peach/0D_mario_thank_you_playing_my_game: - type: SAMPLE - id: 131 -samples/sfx_mario_peach/0E_peach_dear_mario: - type: SAMPLE - id: 132 -samples/sfx_mario_peach/0F_peach_mario: - type: SAMPLE - id: 133 -samples/sfx_mario_peach/10_peach_power_of_the_stars: - type: SAMPLE - id: 134 -samples/sfx_mario_peach/11_peach_thanks_to_you: - type: SAMPLE - id: 135 -samples/sfx_mario_peach/12_peach_thank_you_mario: - type: SAMPLE - id: 136 -samples/sfx_mario_peach/13_peach_something_special: - type: SAMPLE - id: 137 -samples/sfx_mario_peach/14_peach_bake_a_cake: - type: SAMPLE - id: 138 -samples/sfx_mario_peach/15_peach_for_mario: - type: SAMPLE - id: 139 -samples/sfx_mario_peach/16_peach_mario2: - type: SAMPLE - id: 140 -samples/sfx_terrain/00_step_default: - type: SAMPLE - id: 6 -samples/sfx_terrain/01_step_grass: - type: SAMPLE - id: 7 -samples/sfx_terrain/02_step_stone: - type: SAMPLE - id: 8 -samples/sfx_terrain/03_step_spooky: - type: SAMPLE - id: 9 -samples/sfx_terrain/04_step_snow: - type: SAMPLE - id: 10 -samples/sfx_terrain/05_step_ice: - type: SAMPLE - id: 11 -samples/sfx_terrain/06_step_metal: - type: SAMPLE - id: 12 -samples/sfx_terrain/07_step_sand: - type: SAMPLE - id: 13 -samples/sfx_water/00_plunge: - type: SAMPLE - id: 14 -samples/sfx_water/01_splash: - type: SAMPLE - id: 15 -samples/sfx_water/02_swim: - type: SAMPLE - id: 16 -sequences/sound_player: - type: SEQUENCE - id: 0x00 - offset: 0x7B0980 - size: 13452 - banks: - - sound/banks/00 - - sound/banks/01_terrain - - sound/banks/02_water - - sound/banks/03 - - sound/banks/04 - - sound/banks/05 - - sound/banks/06 - - sound/banks/07 - - sound/banks/08_mario - - sound/banks/09 - - sound/banks/0A_mario_peach -sequences/cutscene_collect_star: - type: SEQUENCE - id: 0x01 - offset: 0x7B3E10 - size: 619 - banks: - - sound/banks/22 -sequences/menu_title_screen: - type: SEQUENCE - id: 0x02 - offset: 0x7B4080 - size: 8254 - banks: - - sound/banks/11 -sequences/level_grass: - type: SEQUENCE - id: 0x03 - offset: 0x7B60C0 - size: 5122 - banks: - - sound/banks/22 -sequences/level_inside_castle: - type: SEQUENCE - id: 0x04 - offset: 0x7B74D0 - size: 2494 - banks: - - sound/banks/0E -sequences/level_water: - type: SEQUENCE - id: 0x05 - offset: 0x7B7E90 - size: 4780 - banks: - - sound/banks/13 -sequences/level_hot: - type: SEQUENCE - id: 0x06 - offset: 0x7B9140 - size: 2451 - banks: - - sound/banks/0F -sequences/level_boss_koopa: - type: SEQUENCE - id: 0x07 - offset: 0x7B9AE0 - size: 3418 - banks: - - sound/banks/12 -sequences/level_snow: - type: SEQUENCE - id: 0x08 - offset: 0x7BA840 - size: 8143 - banks: - - sound/banks/0B -sequences/level_slide: - type: SEQUENCE - id: 0x09 - offset: 0x7BC810 - size: 7432 - banks: - - sound/banks/0D -sequences/level_spooky: - type: SEQUENCE - id: 0x0A - offset: 0x7BE520 - size: 5674 - banks: - - sound/banks/21 - - sound/banks/10 -sequences/event_piranha_plant: - type: SEQUENCE - id: 0x0B - offset: 0x7BFB50 - size: 1395 - banks: - - sound/banks/14_piranha_music_box -sequences/level_underground: - type: SEQUENCE - id: 0x0C - offset: 0x7C00D0 - size: 4887 - banks: - - sound/banks/15 -sequences/menu_star_select: - type: SEQUENCE - id: 0x0D - offset: 0x7C13F0 - size: 134 - banks: - - sound/banks/16_course_start -sequences/event_powerup: - type: SEQUENCE - id: 0x0E - offset: 0x7C1480 - size: 3129 - banks: - - sound/banks/17 -sequences/event_metal_cap: - type: SEQUENCE - id: 0x0F - offset: 0x7C20C0 - size: 2770 - banks: - - sound/banks/18 -sequences/event_koopa_message: - type: SEQUENCE - id: 0x10 - offset: 0x7C2BA0 - size: 552 - banks: - - sound/banks/12 -sequences/level_koopa_road: - type: SEQUENCE - id: 0x11 - offset: 0x7C2DD0 - size: 4741 - banks: - - sound/banks/19 -sequences/event_high_score: - type: SEQUENCE - id: 0x12 - offset: 0x7C4060 - size: 271 - banks: - - sound/banks/1F -sequences/event_merry_go_round: - type: SEQUENCE - id: 0x13 - offset: 0x7C4170 - size: 1657 - banks: - - sound/banks/21 -sequences/event_race: - type: SEQUENCE - id: 0x14 - offset: 0x7C47F0 - size: 197 - banks: - - sound/banks/1A -sequences/cutscene_star_spawn: - type: SEQUENCE - id: 0x15 - offset: 0x7C48C0 - size: 644 - banks: - - sound/banks/0E -sequences/event_boss: - type: SEQUENCE - id: 0x16 - offset: 0x7C4B50 - size: 3435 - banks: - - sound/banks/1B -sequences/cutscene_collect_key: - type: SEQUENCE - id: 0x17 - offset: 0x7C58C0 - size: 671 - banks: - - sound/banks/1A -sequences/event_endless_stairs: - type: SEQUENCE - id: 0x18 - offset: 0x7C5B60 - size: 1777 - banks: - - sound/banks/1C_endless_stairs -sequences/level_boss_koopa_final: - type: SEQUENCE - id: 0x19 - offset: 0x7C6260 - size: 3515 - banks: - - sound/banks/1D_bowser_organ -sequences/cutscene_credits: - type: SEQUENCE - id: 0x1A - offset: 0x7C7020 - size: 14313 - banks: - - sound/banks/25 -sequences/event_solve_puzzle: - type: SEQUENCE - id: 0x1B - offset: 0x7CA810 - size: 216 - banks: - - sound/banks/14_piranha_music_box -sequences/event_toad_message: - type: SEQUENCE - id: 0x1C - offset: 0x7CA8F0 - size: 208 - banks: - - sound/banks/20 -sequences/event_peach_message: - type: SEQUENCE - id: 0x1D - offset: 0x7CA9C0 - size: 432 - banks: - - sound/banks/1E -sequences/cutscene_intro: - type: SEQUENCE - id: 0x1E - offset: 0x7CAB70 - size: 1764 - banks: - - sound/banks/1B -sequences/cutscene_victory: - type: SEQUENCE - id: 0x1F - offset: 0x7CB260 - size: 2058 - banks: - - sound/banks/1A -sequences/cutscene_ending: - type: SEQUENCE - id: 0x20 - offset: 0x7CBA70 - size: 1882 - banks: - - sound/banks/23 -sequences/menu_file_select: - type: SEQUENCE - id: 0x21 - offset: 0x7CC1D0 - size: 781 - banks: - - sound/banks/24 -sequences/cutscene_lakitu: - type: SEQUENCE - id: 0x22 - offset: 0x7CC4E0 - size: 313 - banks: - - sound/banks/1B \ No newline at end of file diff --git a/assets/sm64/us/texts.yml b/assets/sm64/us/texts.yml deleted file mode 100644 index e7a82e5..0000000 --- a/assets/sm64/us/texts.yml +++ /dev/null @@ -1,1243 +0,0 @@ -dialogs/dialog_00: - type: SM64:DIALOG - offset: 1083968 - mio0: 65480 -dialogs/dialog_01: - type: SM64:DIALOG - offset: 1083968 - mio0: 65496 -dialogs/dialog_02: - type: SM64:DIALOG - offset: 1083968 - mio0: 65512 -dialogs/dialog_03: - type: SM64:DIALOG - offset: 1083968 - mio0: 65528 -dialogs/dialog_04: - type: SM64:DIALOG - offset: 1083968 - mio0: 65544 -dialogs/dialog_05: - type: SM64:DIALOG - offset: 1083968 - mio0: 65560 -dialogs/dialog_06: - type: SM64:DIALOG - offset: 1083968 - mio0: 65576 -dialogs/dialog_07: - type: SM64:DIALOG - offset: 1083968 - mio0: 65592 -dialogs/dialog_08: - type: SM64:DIALOG - offset: 1083968 - mio0: 65608 -dialogs/dialog_09: - type: SM64:DIALOG - offset: 1083968 - mio0: 65624 -dialogs/dialog_0A: - type: SM64:DIALOG - offset: 1083968 - mio0: 65640 -dialogs/dialog_0B: - type: SM64:DIALOG - offset: 1083968 - mio0: 65656 -dialogs/dialog_0C: - type: SM64:DIALOG - offset: 1083968 - mio0: 65672 -dialogs/dialog_0D: - type: SM64:DIALOG - offset: 1083968 - mio0: 65688 -dialogs/dialog_0E: - type: SM64:DIALOG - offset: 1083968 - mio0: 65704 -dialogs/dialog_0F: - type: SM64:DIALOG - offset: 1083968 - mio0: 65720 -dialogs/dialog_10: - type: SM64:DIALOG - offset: 1083968 - mio0: 65736 -dialogs/dialog_11: - type: SM64:DIALOG - offset: 1083968 - mio0: 65752 -dialogs/dialog_12: - type: SM64:DIALOG - offset: 1083968 - mio0: 65768 -dialogs/dialog_13: - type: SM64:DIALOG - offset: 1083968 - mio0: 65784 -dialogs/dialog_14: - type: SM64:DIALOG - offset: 1083968 - mio0: 65800 -dialogs/dialog_15: - type: SM64:DIALOG - offset: 1083968 - mio0: 65816 -dialogs/dialog_16: - type: SM64:DIALOG - offset: 1083968 - mio0: 65832 -dialogs/dialog_17: - type: SM64:DIALOG - offset: 1083968 - mio0: 65848 -dialogs/dialog_18: - type: SM64:DIALOG - offset: 1083968 - mio0: 65864 -dialogs/dialog_19: - type: SM64:DIALOG - offset: 1083968 - mio0: 65880 -dialogs/dialog_1A: - type: SM64:DIALOG - offset: 1083968 - mio0: 65896 -dialogs/dialog_1B: - type: SM64:DIALOG - offset: 1083968 - mio0: 65912 -dialogs/dialog_1C: - type: SM64:DIALOG - offset: 1083968 - mio0: 65928 -dialogs/dialog_1D: - type: SM64:DIALOG - offset: 1083968 - mio0: 65944 -dialogs/dialog_1E: - type: SM64:DIALOG - offset: 1083968 - mio0: 65960 -dialogs/dialog_1F: - type: SM64:DIALOG - offset: 1083968 - mio0: 65976 -dialogs/dialog_20: - type: SM64:DIALOG - offset: 1083968 - mio0: 65992 -dialogs/dialog_21: - type: SM64:DIALOG - offset: 1083968 - mio0: 66008 -dialogs/dialog_22: - type: SM64:DIALOG - offset: 1083968 - mio0: 66024 -dialogs/dialog_23: - type: SM64:DIALOG - offset: 1083968 - mio0: 66040 -dialogs/dialog_24: - type: SM64:DIALOG - offset: 1083968 - mio0: 66056 -dialogs/dialog_25: - type: SM64:DIALOG - offset: 1083968 - mio0: 66072 -dialogs/dialog_26: - type: SM64:DIALOG - offset: 1083968 - mio0: 66088 -dialogs/dialog_27: - type: SM64:DIALOG - offset: 1083968 - mio0: 66104 -dialogs/dialog_28: - type: SM64:DIALOG - offset: 1083968 - mio0: 66120 -dialogs/dialog_29: - type: SM64:DIALOG - offset: 1083968 - mio0: 66136 -dialogs/dialog_2A: - type: SM64:DIALOG - offset: 1083968 - mio0: 66152 -dialogs/dialog_2B: - type: SM64:DIALOG - offset: 1083968 - mio0: 66168 -dialogs/dialog_2C: - type: SM64:DIALOG - offset: 1083968 - mio0: 66184 -dialogs/dialog_2D: - type: SM64:DIALOG - offset: 1083968 - mio0: 66200 -dialogs/dialog_2E: - type: SM64:DIALOG - offset: 1083968 - mio0: 66216 -dialogs/dialog_2F: - type: SM64:DIALOG - offset: 1083968 - mio0: 66232 -dialogs/dialog_30: - type: SM64:DIALOG - offset: 1083968 - mio0: 66248 -dialogs/dialog_31: - type: SM64:DIALOG - offset: 1083968 - mio0: 66264 -dialogs/dialog_32: - type: SM64:DIALOG - offset: 1083968 - mio0: 66280 -dialogs/dialog_33: - type: SM64:DIALOG - offset: 1083968 - mio0: 66296 -dialogs/dialog_34: - type: SM64:DIALOG - offset: 1083968 - mio0: 66312 -dialogs/dialog_35: - type: SM64:DIALOG - offset: 1083968 - mio0: 66328 -dialogs/dialog_36: - type: SM64:DIALOG - offset: 1083968 - mio0: 66344 -dialogs/dialog_37: - type: SM64:DIALOG - offset: 1083968 - mio0: 66360 -dialogs/dialog_38: - type: SM64:DIALOG - offset: 1083968 - mio0: 66376 -dialogs/dialog_39: - type: SM64:DIALOG - offset: 1083968 - mio0: 66392 -dialogs/dialog_3A: - type: SM64:DIALOG - offset: 1083968 - mio0: 66408 -dialogs/dialog_3B: - type: SM64:DIALOG - offset: 1083968 - mio0: 66424 -dialogs/dialog_3C: - type: SM64:DIALOG - offset: 1083968 - mio0: 66440 -dialogs/dialog_3D: - type: SM64:DIALOG - offset: 1083968 - mio0: 66456 -dialogs/dialog_3E: - type: SM64:DIALOG - offset: 1083968 - mio0: 66472 -dialogs/dialog_3F: - type: SM64:DIALOG - offset: 1083968 - mio0: 66488 -dialogs/dialog_40: - type: SM64:DIALOG - offset: 1083968 - mio0: 66504 -dialogs/dialog_41: - type: SM64:DIALOG - offset: 1083968 - mio0: 66520 -dialogs/dialog_42: - type: SM64:DIALOG - offset: 1083968 - mio0: 66536 -dialogs/dialog_43: - type: SM64:DIALOG - offset: 1083968 - mio0: 66552 -dialogs/dialog_44: - type: SM64:DIALOG - offset: 1083968 - mio0: 66568 -dialogs/dialog_45: - type: SM64:DIALOG - offset: 1083968 - mio0: 66584 -dialogs/dialog_46: - type: SM64:DIALOG - offset: 1083968 - mio0: 66600 -dialogs/dialog_47: - type: SM64:DIALOG - offset: 1083968 - mio0: 66616 -dialogs/dialog_48: - type: SM64:DIALOG - offset: 1083968 - mio0: 66632 -dialogs/dialog_49: - type: SM64:DIALOG - offset: 1083968 - mio0: 66648 -dialogs/dialog_4A: - type: SM64:DIALOG - offset: 1083968 - mio0: 66664 -dialogs/dialog_4B: - type: SM64:DIALOG - offset: 1083968 - mio0: 66680 -dialogs/dialog_4C: - type: SM64:DIALOG - offset: 1083968 - mio0: 66696 -dialogs/dialog_4D: - type: SM64:DIALOG - offset: 1083968 - mio0: 66712 -dialogs/dialog_4E: - type: SM64:DIALOG - offset: 1083968 - mio0: 66728 -dialogs/dialog_4F: - type: SM64:DIALOG - offset: 1083968 - mio0: 66744 -dialogs/dialog_50: - type: SM64:DIALOG - offset: 1083968 - mio0: 66760 -dialogs/dialog_51: - type: SM64:DIALOG - offset: 1083968 - mio0: 66776 -dialogs/dialog_52: - type: SM64:DIALOG - offset: 1083968 - mio0: 66792 -dialogs/dialog_53: - type: SM64:DIALOG - offset: 1083968 - mio0: 66808 -dialogs/dialog_54: - type: SM64:DIALOG - offset: 1083968 - mio0: 66824 -dialogs/dialog_55: - type: SM64:DIALOG - offset: 1083968 - mio0: 66840 -dialogs/dialog_56: - type: SM64:DIALOG - offset: 1083968 - mio0: 66856 -dialogs/dialog_57: - type: SM64:DIALOG - offset: 1083968 - mio0: 66872 -dialogs/dialog_58: - type: SM64:DIALOG - offset: 1083968 - mio0: 66888 -dialogs/dialog_59: - type: SM64:DIALOG - offset: 1083968 - mio0: 66904 -dialogs/dialog_5A: - type: SM64:DIALOG - offset: 1083968 - mio0: 66920 -dialogs/dialog_5B: - type: SM64:DIALOG - offset: 1083968 - mio0: 66936 -dialogs/dialog_5C: - type: SM64:DIALOG - offset: 1083968 - mio0: 66952 -dialogs/dialog_5D: - type: SM64:DIALOG - offset: 1083968 - mio0: 66968 -dialogs/dialog_5E: - type: SM64:DIALOG - offset: 1083968 - mio0: 66984 -dialogs/dialog_5F: - type: SM64:DIALOG - offset: 1083968 - mio0: 67000 -dialogs/dialog_60: - type: SM64:DIALOG - offset: 1083968 - mio0: 67016 -dialogs/dialog_61: - type: SM64:DIALOG - offset: 1083968 - mio0: 67032 -dialogs/dialog_62: - type: SM64:DIALOG - offset: 1083968 - mio0: 67048 -dialogs/dialog_63: - type: SM64:DIALOG - offset: 1083968 - mio0: 67064 -dialogs/dialog_64: - type: SM64:DIALOG - offset: 1083968 - mio0: 67080 -dialogs/dialog_65: - type: SM64:DIALOG - offset: 1083968 - mio0: 67096 -dialogs/dialog_66: - type: SM64:DIALOG - offset: 1083968 - mio0: 67112 -dialogs/dialog_67: - type: SM64:DIALOG - offset: 1083968 - mio0: 67128 -dialogs/dialog_68: - type: SM64:DIALOG - offset: 1083968 - mio0: 67144 -dialogs/dialog_69: - type: SM64:DIALOG - offset: 1083968 - mio0: 67160 -dialogs/dialog_6A: - type: SM64:DIALOG - offset: 1083968 - mio0: 67176 -dialogs/dialog_6B: - type: SM64:DIALOG - offset: 1083968 - mio0: 67192 -dialogs/dialog_6C: - type: SM64:DIALOG - offset: 1083968 - mio0: 67208 -dialogs/dialog_6D: - type: SM64:DIALOG - offset: 1083968 - mio0: 67224 -dialogs/dialog_6E: - type: SM64:DIALOG - offset: 1083968 - mio0: 67240 -dialogs/dialog_6F: - type: SM64:DIALOG - offset: 1083968 - mio0: 67256 -dialogs/dialog_70: - type: SM64:DIALOG - offset: 1083968 - mio0: 67272 -dialogs/dialog_71: - type: SM64:DIALOG - offset: 1083968 - mio0: 67288 -dialogs/dialog_72: - type: SM64:DIALOG - offset: 1083968 - mio0: 67304 -dialogs/dialog_73: - type: SM64:DIALOG - offset: 1083968 - mio0: 67320 -dialogs/dialog_74: - type: SM64:DIALOG - offset: 1083968 - mio0: 67336 -dialogs/dialog_75: - type: SM64:DIALOG - offset: 1083968 - mio0: 67352 -dialogs/dialog_76: - type: SM64:DIALOG - offset: 1083968 - mio0: 67368 -dialogs/dialog_77: - type: SM64:DIALOG - offset: 1083968 - mio0: 67384 -dialogs/dialog_78: - type: SM64:DIALOG - offset: 1083968 - mio0: 67400 -dialogs/dialog_79: - type: SM64:DIALOG - offset: 1083968 - mio0: 67416 -dialogs/dialog_7A: - type: SM64:DIALOG - offset: 1083968 - mio0: 67432 -dialogs/dialog_7B: - type: SM64:DIALOG - offset: 1083968 - mio0: 67448 -dialogs/dialog_7C: - type: SM64:DIALOG - offset: 1083968 - mio0: 67464 -dialogs/dialog_7D: - type: SM64:DIALOG - offset: 1083968 - mio0: 67480 -dialogs/dialog_7E: - type: SM64:DIALOG - offset: 1083968 - mio0: 67496 -dialogs/dialog_7F: - type: SM64:DIALOG - offset: 1083968 - mio0: 67512 -dialogs/dialog_80: - type: SM64:DIALOG - offset: 1083968 - mio0: 67528 -dialogs/dialog_81: - type: SM64:DIALOG - offset: 1083968 - mio0: 67544 -dialogs/dialog_82: - type: SM64:DIALOG - offset: 1083968 - mio0: 67560 -dialogs/dialog_83: - type: SM64:DIALOG - offset: 1083968 - mio0: 67576 -dialogs/dialog_84: - type: SM64:DIALOG - offset: 1083968 - mio0: 67592 -dialogs/dialog_85: - type: SM64:DIALOG - offset: 1083968 - mio0: 67608 -dialogs/dialog_86: - type: SM64:DIALOG - offset: 1083968 - mio0: 67624 -dialogs/dialog_87: - type: SM64:DIALOG - offset: 1083968 - mio0: 67640 -dialogs/dialog_88: - type: SM64:DIALOG - offset: 1083968 - mio0: 67656 -dialogs/dialog_89: - type: SM64:DIALOG - offset: 1083968 - mio0: 67672 -dialogs/dialog_8A: - type: SM64:DIALOG - offset: 1083968 - mio0: 67688 -dialogs/dialog_8B: - type: SM64:DIALOG - offset: 1083968 - mio0: 67704 -dialogs/dialog_8C: - type: SM64:DIALOG - offset: 1083968 - mio0: 67720 -dialogs/dialog_8D: - type: SM64:DIALOG - offset: 1083968 - mio0: 67736 -dialogs/dialog_8E: - type: SM64:DIALOG - offset: 1083968 - mio0: 67752 -dialogs/dialog_8F: - type: SM64:DIALOG - offset: 1083968 - mio0: 67768 -dialogs/dialog_90: - type: SM64:DIALOG - offset: 1083968 - mio0: 67784 -dialogs/dialog_91: - type: SM64:DIALOG - offset: 1083968 - mio0: 67800 -dialogs/dialog_92: - type: SM64:DIALOG - offset: 1083968 - mio0: 67816 -dialogs/dialog_93: - type: SM64:DIALOG - offset: 1083968 - mio0: 67832 -dialogs/dialog_94: - type: SM64:DIALOG - offset: 1083968 - mio0: 67848 -dialogs/dialog_95: - type: SM64:DIALOG - offset: 1083968 - mio0: 67864 -dialogs/dialog_96: - type: SM64:DIALOG - offset: 1083968 - mio0: 67880 -dialogs/dialog_97: - type: SM64:DIALOG - offset: 1083968 - mio0: 67896 -dialogs/dialog_98: - type: SM64:DIALOG - offset: 1083968 - mio0: 67912 -dialogs/dialog_99: - type: SM64:DIALOG - offset: 1083968 - mio0: 67928 -dialogs/dialog_9A: - type: SM64:DIALOG - offset: 1083968 - mio0: 67944 -dialogs/dialog_9B: - type: SM64:DIALOG - offset: 1083968 - mio0: 67960 -dialogs/dialog_9C: - type: SM64:DIALOG - offset: 1083968 - mio0: 67976 -dialogs/dialog_9D: - type: SM64:DIALOG - offset: 1083968 - mio0: 67992 -dialogs/dialog_9E: - type: SM64:DIALOG - offset: 1083968 - mio0: 68008 -dialogs/dialog_9F: - type: SM64:DIALOG - offset: 1083968 - mio0: 68024 -dialogs/dialog_A0: - type: SM64:DIALOG - offset: 1083968 - mio0: 68040 -dialogs/dialog_A1: - type: SM64:DIALOG - offset: 1083968 - mio0: 68056 -dialogs/dialog_A2: - type: SM64:DIALOG - offset: 1083968 - mio0: 68072 -dialogs/dialog_A3: - type: SM64:DIALOG - offset: 1083968 - mio0: 68088 -dialogs/dialog_A4: - type: SM64:DIALOG - offset: 1083968 - mio0: 68104 -dialogs/dialog_A5: - type: SM64:DIALOG - offset: 1083968 - mio0: 68120 -dialogs/dialog_A6: - type: SM64:DIALOG - offset: 1083968 - mio0: 68136 -dialogs/dialog_A7: - type: SM64:DIALOG - offset: 1083968 - mio0: 68152 -dialogs/dialog_A8: - type: SM64:DIALOG - offset: 1083968 - mio0: 68168 -dialogs/dialog_A9: - type: SM64:DIALOG - offset: 1083968 - mio0: 68184 -courses/course_00: - type: SM64:TEXT - offset: 1083968 - mio0: 68884 -courses/course_01: - type: SM64:TEXT - offset: 1083968 - mio0: 68908 -courses/course_02: - type: SM64:TEXT - offset: 1083968 - mio0: 68928 -courses/course_03: - type: SM64:TEXT - offset: 1083968 - mio0: 68948 -courses/course_04: - type: SM64:TEXT - offset: 1083968 - mio0: 68972 -courses/course_05: - type: SM64:TEXT - offset: 1083968 - mio0: 68992 -courses/course_06: - type: SM64:TEXT - offset: 1083968 - mio0: 69012 -courses/course_07: - type: SM64:TEXT - offset: 1083968 - mio0: 69032 -courses/course_08: - type: SM64:TEXT - offset: 1083968 - mio0: 69056 -courses/course_09: - type: SM64:TEXT - offset: 1083968 - mio0: 69076 -courses/course_0A: - type: SM64:TEXT - offset: 1083968 - mio0: 69096 -courses/course_0B: - type: SM64:TEXT - offset: 1083968 - mio0: 69116 -courses/course_0C: - type: SM64:TEXT - offset: 1083968 - mio0: 69140 -courses/course_0D: - type: SM64:TEXT - offset: 1083968 - mio0: 69160 -courses/course_0E: - type: SM64:TEXT - offset: 1083968 - mio0: 69180 -courses/course_0F: - type: SM64:TEXT - offset: 1083968 - mio0: 69196 -courses/course_10: - type: SM64:TEXT - offset: 1083968 - mio0: 69224 -courses/course_11: - type: SM64:TEXT - offset: 1083968 - mio0: 69252 -courses/course_12: - type: SM64:TEXT - offset: 1083968 - mio0: 69276 -courses/course_13: - type: SM64:TEXT - offset: 1083968 - mio0: 69308 -courses/course_14: - type: SM64:TEXT - offset: 1083968 - mio0: 69336 -courses/course_15: - type: SM64:TEXT - offset: 1083968 - mio0: 69364 -courses/course_16: - type: SM64:TEXT - offset: 1083968 - mio0: 69396 -courses/course_17: - type: SM64:TEXT - offset: 1083968 - mio0: 69428 -courses/course_18: - type: SM64:TEXT - offset: 1083968 - mio0: 69452 -courses/course_19: - type: SM64:TEXT - offset: 1083968 - mio0: 69456 -acts/act_00: - type: SM64:TEXT - offset: 1083968 - mio0: 69588 -acts/act_01: - type: SM64:TEXT - offset: 1083968 - mio0: 69616 -acts/act_02: - type: SM64:TEXT - offset: 1083968 - mio0: 69648 -acts/act_03: - type: SM64:TEXT - offset: 1083968 - mio0: 69680 -acts/act_04: - type: SM64:TEXT - offset: 1083968 - mio0: 69704 -acts/act_05: - type: SM64:TEXT - offset: 1083968 - mio0: 69728 -acts/act_06: - type: SM64:TEXT - offset: 1083968 - mio0: 69756 -acts/act_07: - type: SM64:TEXT - offset: 1083968 - mio0: 69780 -acts/act_08: - type: SM64:TEXT - offset: 1083968 - mio0: 69808 -acts/act_09: - type: SM64:TEXT - offset: 1083968 - mio0: 69836 -acts/act_0A: - type: SM64:TEXT - offset: 1083968 - mio0: 69868 -acts/act_0B: - type: SM64:TEXT - offset: 1083968 - mio0: 69896 -acts/act_0C: - type: SM64:TEXT - offset: 1083968 - mio0: 69916 -acts/act_0D: - type: SM64:TEXT - offset: 1083968 - mio0: 69944 -acts/act_0E: - type: SM64:TEXT - offset: 1083968 - mio0: 69976 -acts/act_0F: - type: SM64:TEXT - offset: 1083968 - mio0: 70004 -acts/act_10: - type: SM64:TEXT - offset: 1083968 - mio0: 70036 -acts/act_11: - type: SM64:TEXT - offset: 1083968 - mio0: 70064 -acts/act_12: - type: SM64:TEXT - offset: 1083968 - mio0: 70088 -acts/act_13: - type: SM64:TEXT - offset: 1083968 - mio0: 70108 -acts/act_14: - type: SM64:TEXT - offset: 1083968 - mio0: 70128 -acts/act_15: - type: SM64:TEXT - offset: 1083968 - mio0: 70148 -acts/act_16: - type: SM64:TEXT - offset: 1083968 - mio0: 70180 -acts/act_17: - type: SM64:TEXT - offset: 1083968 - mio0: 70204 -acts/act_18: - type: SM64:TEXT - offset: 1083968 - mio0: 70228 -acts/act_19: - type: SM64:TEXT - offset: 1083968 - mio0: 70248 -acts/act_1A: - type: SM64:TEXT - offset: 1083968 - mio0: 70280 -acts/act_1B: - type: SM64:TEXT - offset: 1083968 - mio0: 70308 -acts/act_1C: - type: SM64:TEXT - offset: 1083968 - mio0: 70332 -acts/act_1D: - type: SM64:TEXT - offset: 1083968 - mio0: 70352 -acts/act_1E: - type: SM64:TEXT - offset: 1083968 - mio0: 70384 -acts/act_1F: - type: SM64:TEXT - offset: 1083968 - mio0: 70416 -acts/act_20: - type: SM64:TEXT - offset: 1083968 - mio0: 70440 -acts/act_21: - type: SM64:TEXT - offset: 1083968 - mio0: 70468 -acts/act_22: - type: SM64:TEXT - offset: 1083968 - mio0: 70496 -acts/act_23: - type: SM64:TEXT - offset: 1083968 - mio0: 70524 -acts/act_24: - type: SM64:TEXT - offset: 1083968 - mio0: 70548 -acts/act_25: - type: SM64:TEXT - offset: 1083968 - mio0: 70568 -acts/act_26: - type: SM64:TEXT - offset: 1083968 - mio0: 70588 -acts/act_27: - type: SM64:TEXT - offset: 1083968 - mio0: 70620 -acts/act_28: - type: SM64:TEXT - offset: 1083968 - mio0: 70640 -acts/act_29: - type: SM64:TEXT - offset: 1083968 - mio0: 70672 -acts/act_2A: - type: SM64:TEXT - offset: 1083968 - mio0: 70704 -acts/act_2B: - type: SM64:TEXT - offset: 1083968 - mio0: 70736 -acts/act_2C: - type: SM64:TEXT - offset: 1083968 - mio0: 70764 -acts/act_2D: - type: SM64:TEXT - offset: 1083968 - mio0: 70792 -acts/act_2E: - type: SM64:TEXT - offset: 1083968 - mio0: 70824 -acts/act_2F: - type: SM64:TEXT - offset: 1083968 - mio0: 70852 -acts/act_30: - type: SM64:TEXT - offset: 1083968 - mio0: 70868 -acts/act_31: - type: SM64:TEXT - offset: 1083968 - mio0: 70888 -acts/act_32: - type: SM64:TEXT - offset: 1083968 - mio0: 70912 -acts/act_33: - type: SM64:TEXT - offset: 1083968 - mio0: 70940 -acts/act_34: - type: SM64:TEXT - offset: 1083968 - mio0: 70964 -acts/act_35: - type: SM64:TEXT - offset: 1083968 - mio0: 70988 -acts/act_36: - type: SM64:TEXT - offset: 1083968 - mio0: 71008 -acts/act_37: - type: SM64:TEXT - offset: 1083968 - mio0: 71028 -acts/act_38: - type: SM64:TEXT - offset: 1083968 - mio0: 71052 -acts/act_39: - type: SM64:TEXT - offset: 1083968 - mio0: 71072 -acts/act_3A: - type: SM64:TEXT - offset: 1083968 - mio0: 71104 -acts/act_3B: - type: SM64:TEXT - offset: 1083968 - mio0: 71136 -acts/act_3C: - type: SM64:TEXT - offset: 1083968 - mio0: 71152 -acts/act_3D: - type: SM64:TEXT - offset: 1083968 - mio0: 71176 -acts/act_3E: - type: SM64:TEXT - offset: 1083968 - mio0: 71192 -acts/act_3F: - type: SM64:TEXT - offset: 1083968 - mio0: 71224 -acts/act_40: - type: SM64:TEXT - offset: 1083968 - mio0: 71252 -acts/act_41: - type: SM64:TEXT - offset: 1083968 - mio0: 71280 -acts/act_42: - type: SM64:TEXT - offset: 1083968 - mio0: 71312 -acts/act_43: - type: SM64:TEXT - offset: 1083968 - mio0: 71332 -acts/act_44: - type: SM64:TEXT - offset: 1083968 - mio0: 71360 -acts/act_45: - type: SM64:TEXT - offset: 1083968 - mio0: 71388 -acts/act_46: - type: SM64:TEXT - offset: 1083968 - mio0: 71412 -acts/act_47: - type: SM64:TEXT - offset: 1083968 - mio0: 71444 -acts/act_48: - type: SM64:TEXT - offset: 1083968 - mio0: 71476 -acts/act_49: - type: SM64:TEXT - offset: 1083968 - mio0: 71504 -acts/act_4A: - type: SM64:TEXT - offset: 1083968 - mio0: 71536 -acts/act_4B: - type: SM64:TEXT - offset: 1083968 - mio0: 71568 -acts/act_4C: - type: SM64:TEXT - offset: 1083968 - mio0: 71592 -acts/act_4D: - type: SM64:TEXT - offset: 1083968 - mio0: 71612 -acts/act_4E: - type: SM64:TEXT - offset: 1083968 - mio0: 71632 -acts/act_4F: - type: SM64:TEXT - offset: 1083968 - mio0: 71652 -acts/act_50: - type: SM64:TEXT - offset: 1083968 - mio0: 71680 -acts/act_51: - type: SM64:TEXT - offset: 1083968 - mio0: 71692 -acts/act_52: - type: SM64:TEXT - offset: 1083968 - mio0: 71712 -acts/act_53: - type: SM64:TEXT - offset: 1083968 - mio0: 71740 -acts/act_54: - type: SM64:TEXT - offset: 1083968 - mio0: 71764 -acts/act_55: - type: SM64:TEXT - offset: 1083968 - mio0: 71796 -acts/act_56: - type: SM64:TEXT - offset: 1083968 - mio0: 71824 -acts/act_57: - type: SM64:TEXT - offset: 1083968 - mio0: 71848 -acts/act_58: - type: SM64:TEXT - offset: 1083968 - mio0: 71872 -acts/act_59: - type: SM64:TEXT - offset: 1083968 - mio0: 71892 -acts/act_5A: - type: SM64:TEXT - offset: 1083968 - mio0: 71920 -acts/act_5B: - type: SM64:TEXT - offset: 1083968 - mio0: 71956 -acts/act_5C: - type: SM64:TEXT - offset: 1083968 - mio0: 71960 -acts/act_5D: - type: SM64:TEXT - offset: 1083968 - mio0: 71964 -acts/act_5E: - type: SM64:TEXT - offset: 1083968 - mio0: 71968 -acts/act_5F: - type: SM64:TEXT - offset: 1083968 - mio0: 71972 -acts/act_60: - type: SM64:TEXT - offset: 1083968 - mio0: 71976 -strings/global: - type: SM64:DICTIONARY - keys: - TEXT_ZERO: 8177343 - TEXT_COIN: 8155500 - TEXT_STAR: 8142922 - TEXT_COIN_X: 5057623 - TEXT_STAR_X: 5324116 - TEXT_VARIABLE_X: 8085611 - TEXT_UNFILLED_STAR: 8145264 - TEXT_NEW: 2458232 - TEXT_4DASHES: 2458548 - TEXT_MARIO: 2458588 - TEXT_SELECT_FILE: 2458244 - TEXT_CHECK_FILE: 2458280 - TEXT_COPY_FILE: 2458316 - TEXT_ERASE_FILE: 2458436 - TEXT_SOUND_SELECT: 2458520 - TEXT_FILE_MARIO_A: 2458200 - TEXT_FILE_MARIO_B: 2458208 - TEXT_FILE_MARIO_C: 2458216 - TEXT_FILE_MARIO_D: 2458224 - TEXT_SCORE: 2459246 - TEXT_COPY: 2458264 - TEXT_ERASE: 2458272 - TEXT_STEREO: 2458176 - TEXT_MONO: 2458184 - TEXT_HEADSET: 2458192 - TEXT_SAVED_DATA_EXISTS: 2458500 - TEXT_NO_SAVED_DATA_EXISTS: 2458456 - TEXT_RETURN: 2458132 - TEXT_CHECK_SCORE: 2458140 - TEXT_COPY_FILE_BUTTON: 2458316 - TEXT_ERASE_FILE_BUTTON: 2458436 - TEXT_HI_SCORE: 2458596 - TEXT_MY_SCORE: 2458608 - TEXT_SCORE_MARIO_A: 2458556 - TEXT_SCORE_MARIO_B: 2458564 - TEXT_SCORE_MARIO_C: 2458572 - TEXT_SCORE_MARIO_D: 2458580 - TEXT_COPY_IT_TO_WHERE: 2458328 - TEXT_COPYING_COMPLETED: 2458372 - TEXT_NO_FILE_TO_COPY_FROM: 2458412 - TEXT_SURE: 2458448 - TEXT_YES: 2458428 - TEXT_NO: 4539719 - TEXT_FILE_MARIO_A_JUST_ERASED: 2458480 - TEXT_COURSE: 968444 - TEXT_MYSCORE: 2459244 - TEXT_CONTINUE: 968479 - TEXT_EXIT_COURSE: 968336 - TEXT_CAMERA_ANGLE_R: 968348 - TEXT_LAKITU_MARIO: 968256 - TEXT_LAKITU_STOP: 968272 - TEXT_NORMAL_UPCLOSE: 968288 - TEXT_NORMAL_FIXED: 968308 - TEXT_CATCH: 968452 - TEXT_CLEAR: 968460 - TEXT_HUD_HI_SCORE: 2458596 - TEXT_SAVE_AND_CONTINUE: 968472 - TEXT_SAVE_AND_QUIT: 968488 - TEXT_CONTINUE_WITHOUT_SAVING: 968500 - TEXT_FILE_MARIO_EXCLAMATION: 968156 - TEXT_POWER_STARS_RESTORED: 967940 - TEXT_THANKS_TO_YOU: 967992 - TEXT_THANK_YOU_MARIO: 968024 - TEXT_SOMETHING_SPECIAL: 968044 - TEXT_LISTEN_EVERYBODY: 968088 - TEXT_LETS_HAVE_CAKE: 968108 - TEXT_FOR_MARIO: 968140 - TEXT_FILE_MARIO_QUESTION: 968156 diff --git a/assets/sm64/us/textures.yml b/assets/sm64/us/textures.yml deleted file mode 100644 index 15c9a90..0000000 --- a/assets/sm64/us/textures.yml +++ /dev/null @@ -1,4023 +0,0 @@ -cave/hmc_textures.00000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3439184 - mio0: 0 - format: RGBA16 -cave/hmc_textures.01000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3439184 - mio0: 4096 - format: RGBA16 -cave/hmc_textures.01800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3439184 - mio0: 6144 - format: RGBA16 -cave/hmc_textures.02800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3439184 - mio0: 10240 - format: RGBA16 -cave/hmc_textures.03000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3439184 - mio0: 12288 - format: RGBA16 -cave/hmc_textures.03800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3439184 - mio0: 14336 - format: RGBA16 -cave/hmc_textures.04800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3439184 - mio0: 18432 - format: RGBA16 -cave/hmc_textures.05800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3439184 - mio0: 22528 - format: RGBA16 -cave/hmc_textures.06800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3439184 - mio0: 26624 - format: RGBA16 -cave/hmc_textures.07000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3439184 - mio0: 28672 - format: RGBA16 -cave/hmc_textures.07800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3439184 - mio0: 30720 - format: RGBA16 -cave/hmc_textures.08800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3439184 - mio0: 34816 - format: RGBA16 -cave/hmc_textures.09800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3439184 - mio0: 38912 - format: RGBA16 -cave/hmc_textures.0A000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3439184 - mio0: 40960 - format: RGBA16 -cave/hmc_textures.0A800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3439184 - mio0: 43008 - format: RGBA16 -cave/hmc_textures.0B800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3439184 - mio0: 47104 - format: IA16 -cave/hmc_textures.0C000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3305024 - mio0: 43008 - format: IA16 -effect/bubble.06048: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3601712 - mio0: 24648 - format: RGBA16 -effect/flower.00008: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3601712 - mio0: 8 - format: RGBA16 -effect/flower.00808: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3601712 - mio0: 2056 - format: RGBA16 -effect/flower.01008: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3601712 - mio0: 4104 - format: RGBA16 -effect/flower.01808: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3601712 - mio0: 6152 - format: RGBA16 -effect/lava_bubble.02020: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3601712 - mio0: 8224 - format: RGBA16 -effect/lava_bubble.02820: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3601712 - mio0: 10272 - format: RGBA16 -effect/lava_bubble.03020: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3601712 - mio0: 12320 - format: RGBA16 -effect/lava_bubble.03820: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3601712 - mio0: 14368 - format: RGBA16 -effect/lava_bubble.04020: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3601712 - mio0: 16416 - format: RGBA16 -effect/lava_bubble.04820: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3601712 - mio0: 18464 - format: RGBA16 -effect/lava_bubble.05020: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3601712 - mio0: 20512 - format: RGBA16 -effect/lava_bubble.05820: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3601712 - mio0: 22560 - format: RGBA16 -effect/tiny_bubble.0684C: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 3601712 - mio0: 26700 - format: RGBA16 -effect/tiny_bubble.06AD8: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 3601712 - mio0: 27352 - format: RGBA16 -fire/lll_textures.00000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3269072 - mio0: 0 - format: RGBA16 -fire/lll_textures.00800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3269072 - mio0: 2048 - format: RGBA16 -fire/lll_textures.01000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3269072 - mio0: 4096 - format: RGBA16 -fire/lll_textures.01800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3269072 - mio0: 6144 - format: RGBA16 -fire/lll_textures.02000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3269072 - mio0: 8192 - format: RGBA16 -fire/lll_textures.02800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3269072 - mio0: 10240 - format: RGBA16 -fire/lll_textures.03000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3269072 - mio0: 12288 - format: RGBA16 -fire/lll_textures.03800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3269072 - mio0: 14336 - format: RGBA16 -fire/lll_textures.04000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3269072 - mio0: 16384 - format: RGBA16 -fire/lll_textures.04800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3269072 - mio0: 18432 - format: RGBA16 -fire/lll_textures.05000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3269072 - mio0: 20480 - format: RGBA16 -fire/lll_textures.05800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3269072 - mio0: 22528 - format: RGBA16 -fire/lll_textures.06000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3269072 - mio0: 24576 - format: RGBA16 -fire/lll_textures.06800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3269072 - mio0: 26624 - format: RGBA16 -fire/lll_textures.07000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3269072 - mio0: 28672 - format: RGBA16 -fire/lll_textures.07800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3269072 - mio0: 30720 - format: RGBA16 -fire/lll_textures.08000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3269072 - mio0: 32768 - format: RGBA16 -fire/lll_textures.08800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3269072 - mio0: 34816 - format: RGBA16 -fire/lll_textures.09000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1083968 - mio0: 92856 - format: RGBA16 -fire/lll_textures.09800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3269072 - mio0: 38912 - format: RGBA16 -fire/lll_textures.0A000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3269072 - mio0: 40960 - format: RGBA16 -fire/lll_textures.0A800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3269072 - mio0: 43008 - format: RGBA16 -fire/lll_textures.0B000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3269072 - mio0: 45056 - format: RGBA16 -fire/lll_textures.0B800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3269072 - mio0: 47104 - format: RGBA16 -generic/bob_textures.00000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3330160 - mio0: 0 - format: RGBA16 -generic/bob_textures.00800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1334928 - mio0: 36160 - format: RGBA16 -generic/bob_textures.01000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3330160 - mio0: 4096 - format: RGBA16 -generic/bob_textures.01800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3330160 - mio0: 6144 - format: RGBA16 -generic/bob_textures.02000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3330160 - mio0: 8192 - format: RGBA16 -generic/bob_textures.02800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3330160 - mio0: 10240 - format: RGBA16 -generic/bob_textures.03000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3330160 - mio0: 12288 - format: RGBA16 -generic/bob_textures.03800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3330160 - mio0: 14336 - format: RGBA16 -generic/bob_textures.04000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3330160 - mio0: 16384 - format: RGBA16 -generic/bob_textures.04800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3330160 - mio0: 18432 - format: RGBA16 -generic/bob_textures.05000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3330160 - mio0: 20480 - format: RGBA16 -generic/bob_textures.05800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3330160 - mio0: 22528 - format: RGBA16 -generic/bob_textures.06000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3330160 - mio0: 24576 - format: RGBA16 -generic/bob_textures.07000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3330160 - mio0: 28672 - format: RGBA16 -generic/bob_textures.07800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3330160 - mio0: 30720 - format: RGBA16 -generic/bob_textures.08000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3330160 - mio0: 32768 - format: RGBA16 -generic/bob_textures.08800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3330160 - mio0: 34816 - format: RGBA16 -generic/bob_textures.09000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3330160 - mio0: 36864 - format: RGBA16 -generic/bob_textures.09800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3330160 - mio0: 38912 - format: RGBA16 -generic/bob_textures.0A000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3330160 - mio0: 40960 - format: RGBA16 -generic/bob_textures.0A800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3330160 - mio0: 43008 - format: RGBA16 -generic/bob_textures.0B000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3330160 - mio0: 45056 - format: IA16 -grass/wf_textures.00000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3502928 - mio0: 0 - format: RGBA16 -grass/wf_textures.00800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3502928 - mio0: 2048 - format: RGBA16 -grass/wf_textures.01000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3502928 - mio0: 4096 - format: RGBA16 -grass/wf_textures.01800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3502928 - mio0: 6144 - format: RGBA16 -grass/wf_textures.02000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3502928 - mio0: 8192 - format: RGBA16 -grass/wf_textures.02800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3502928 - mio0: 10240 - format: RGBA16 -grass/wf_textures.03000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3502928 - mio0: 12288 - format: RGBA16 -grass/wf_textures.03800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3502928 - mio0: 14336 - format: RGBA16 -grass/wf_textures.04000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3502928 - mio0: 16384 - format: RGBA16 -grass/wf_textures.04800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3502928 - mio0: 18432 - format: RGBA16 -grass/wf_textures.05000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3502928 - mio0: 20480 - format: RGBA16 -grass/wf_textures.05800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3502928 - mio0: 22528 - format: RGBA16 -grass/wf_textures.06000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3397392 - mio0: 20480 - format: RGBA16 -grass/wf_textures.06800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3502928 - mio0: 26624 - format: RGBA16 -grass/wf_textures.07000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3502928 - mio0: 28672 - format: RGBA16 -grass/wf_textures.07800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3502928 - mio0: 30720 - format: RGBA16 -grass/wf_textures.08000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3502928 - mio0: 32768 - format: RGBA16 -grass/wf_textures.08800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3502928 - mio0: 34816 - format: RGBA16 -grass/wf_textures.09000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3502928 - mio0: 36864 - format: RGBA16 -grass/wf_textures.09800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3502928 - mio0: 38912 - format: RGBA16 -grass/wf_textures.0A000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3502928 - mio0: 40960 - format: RGBA16 -grass/wf_textures.0A800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3502928 - mio0: 43008 - format: RGBA16 -grass/wf_textures.0B000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3330160 - mio0: 45056 - format: IA16 -grass/wf_textures.0B800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3502928 - mio0: 47104 - format: IA16 -inside/inside_castle_textures.00000: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3561856 - mio0: 0 - format: RGBA16 -inside/inside_castle_textures.01000: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3561856 - mio0: 4096 - format: RGBA16 -inside/inside_castle_textures.02000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3561856 - mio0: 8192 - format: RGBA16 -inside/inside_castle_textures.03000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3561856 - mio0: 12288 - format: RGBA16 -inside/inside_castle_textures.03800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3561856 - mio0: 14336 - format: RGBA16 -inside/inside_castle_textures.04000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3561856 - mio0: 16384 - format: RGBA16 -inside/inside_castle_textures.04800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3467104 - mio0: 2048 - format: RGBA16 -inside/inside_castle_textures.05000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3561856 - mio0: 20480 - format: RGBA16 -inside/inside_castle_textures.05800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3561856 - mio0: 22528 - format: RGBA16 -inside/inside_castle_textures.06000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3561856 - mio0: 24576 - format: RGBA16 -inside/inside_castle_textures.07000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3561856 - mio0: 28672 - format: RGBA16 -inside/inside_castle_textures.08000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3561856 - mio0: 32768 - format: RGBA16 -inside/inside_castle_textures.08800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3561856 - mio0: 34816 - format: RGBA16 -inside/inside_castle_textures.09000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3561856 - mio0: 36864 - format: RGBA16 -inside/inside_castle_textures.0A000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3561856 - mio0: 40960 - format: RGBA16 -inside/inside_castle_textures.0B000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3561856 - mio0: 45056 - format: RGBA16 -inside/inside_castle_textures.0B800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3561856 - mio0: 47104 - format: RGBA16 -intro_raw/hand_closed: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2463112 - format: RGBA16 -intro_raw/hand_open: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2461056 - format: RGBA16 -intro_raw/mario_face_shine: - type: TEXTURE - size: 1024 - width: 32 - height: 32 - offset: 2511696 - format: IA8 -intro_raw/red_star_0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2465160 - format: RGBA16 -intro_raw/red_star_1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2467208 - format: RGBA16 -intro_raw/red_star_2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2469256 - format: RGBA16 -intro_raw/red_star_3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2471304 - format: RGBA16 -intro_raw/red_star_4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2473352 - format: RGBA16 -intro_raw/red_star_5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2475400 - format: RGBA16 -intro_raw/red_star_6: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2477448 - format: RGBA16 -intro_raw/red_star_7: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2479496 - format: RGBA16 -intro_raw/sparkle_0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2498696 - format: RGBA16 -intro_raw/sparkle_1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2500744 - format: RGBA16 -intro_raw/sparkle_2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2502792 - format: RGBA16 -intro_raw/sparkle_3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2504840 - format: RGBA16 -intro_raw/sparkle_4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2506888 - format: RGBA16 -intro_raw/sparkle_5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2508936 - format: RGBA16 -intro_raw/white_star_0: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2481544 - format: RGBA16 -intro_raw/white_star_1: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2483592 - format: RGBA16 -intro_raw/white_star_2: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2485640 - format: RGBA16 -intro_raw/white_star_3: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2487688 - format: RGBA16 -intro_raw/white_star_4: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2489736 - format: RGBA16 -intro_raw/white_star_5: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2491784 - format: RGBA16 -intro_raw/white_star_6: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2493832 - format: RGBA16 -intro_raw/white_star_7: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 2495880 - format: RGBA16 -ipl3_raw/ipl3_font_00: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 2928 - format: IA1 -ipl3_raw/ipl3_font_01: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 2951 - format: IA1 -ipl3_raw/ipl3_font_02: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 2974 - format: IA1 -ipl3_raw/ipl3_font_03: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 2997 - format: IA1 -ipl3_raw/ipl3_font_04: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3020 - format: IA1 -ipl3_raw/ipl3_font_05: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3043 - format: IA1 -ipl3_raw/ipl3_font_06: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3066 - format: IA1 -ipl3_raw/ipl3_font_07: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3089 - format: IA1 -ipl3_raw/ipl3_font_08: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3112 - format: IA1 -ipl3_raw/ipl3_font_09: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3135 - format: IA1 -ipl3_raw/ipl3_font_10: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3158 - format: IA1 -ipl3_raw/ipl3_font_11: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3181 - format: IA1 -ipl3_raw/ipl3_font_12: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3204 - format: IA1 -ipl3_raw/ipl3_font_13: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3227 - format: IA1 -ipl3_raw/ipl3_font_14: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3250 - format: IA1 -ipl3_raw/ipl3_font_15: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3273 - format: IA1 -ipl3_raw/ipl3_font_16: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3296 - format: IA1 -ipl3_raw/ipl3_font_17: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3319 - format: IA1 -ipl3_raw/ipl3_font_18: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3342 - format: IA1 -ipl3_raw/ipl3_font_19: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3365 - format: IA1 -ipl3_raw/ipl3_font_20: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3388 - format: IA1 -ipl3_raw/ipl3_font_21: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3411 - format: IA1 -ipl3_raw/ipl3_font_22: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3434 - format: IA1 -ipl3_raw/ipl3_font_23: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3457 - format: IA1 -ipl3_raw/ipl3_font_24: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3480 - format: IA1 -ipl3_raw/ipl3_font_25: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3503 - format: IA1 -ipl3_raw/ipl3_font_26: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3526 - format: IA1 -ipl3_raw/ipl3_font_27: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3549 - format: IA1 -ipl3_raw/ipl3_font_28: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3572 - format: IA1 -ipl3_raw/ipl3_font_29: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3595 - format: IA1 -ipl3_raw/ipl3_font_30: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3618 - format: IA1 -ipl3_raw/ipl3_font_31: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3641 - format: IA1 -ipl3_raw/ipl3_font_32: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3664 - format: IA1 -ipl3_raw/ipl3_font_33: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3687 - format: IA1 -ipl3_raw/ipl3_font_34: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3710 - format: IA1 -ipl3_raw/ipl3_font_35: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3733 - format: IA1 -ipl3_raw/ipl3_font_36: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3756 - format: IA1 -ipl3_raw/ipl3_font_37: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3779 - format: IA1 -ipl3_raw/ipl3_font_38: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3802 - format: IA1 -ipl3_raw/ipl3_font_39: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3825 - format: IA1 -ipl3_raw/ipl3_font_40: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3848 - format: IA1 -ipl3_raw/ipl3_font_41: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3871 - format: IA1 -ipl3_raw/ipl3_font_42: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3894 - format: IA1 -ipl3_raw/ipl3_font_43: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3917 - format: IA1 -ipl3_raw/ipl3_font_44: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3940 - format: IA1 -ipl3_raw/ipl3_font_45: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3963 - format: IA1 -ipl3_raw/ipl3_font_46: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 3986 - format: IA1 -ipl3_raw/ipl3_font_47: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 4009 - format: IA1 -ipl3_raw/ipl3_font_48: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 4032 - format: IA1 -ipl3_raw/ipl3_font_49: - type: TEXTURE - size: 23 - width: 13 - height: 14 - offset: 4055 - format: IA1 -machine/ttc_textures.00000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3467104 - mio0: 0 - format: RGBA16 -machine/ttc_textures.00800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3467104 - mio0: 2048 - format: RGBA16 -machine/ttc_textures.01000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3467104 - mio0: 4096 - format: RGBA16 -machine/ttc_textures.01800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3467104 - mio0: 6144 - format: RGBA16 -machine/ttc_textures.02000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3467104 - mio0: 8192 - format: RGBA16 -machine/ttc_textures.02800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3467104 - mio0: 10240 - format: RGBA16 -machine/ttc_textures.03000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3467104 - mio0: 12288 - format: RGBA16 -machine/ttc_textures.03800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3467104 - mio0: 14336 - format: RGBA16 -machine/ttc_textures.04000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3467104 - mio0: 16384 - format: RGBA16 -machine/ttc_textures.05000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3467104 - mio0: 20480 - format: RGBA16 -machine/ttc_textures.05800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3467104 - mio0: 22528 - format: RGBA16 -machine/ttc_textures.06000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3467104 - mio0: 24576 - format: RGBA16 -machine/ttc_textures.06800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3467104 - mio0: 26624 - format: RGBA16 -machine/ttc_textures.07000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3467104 - mio0: 28672 - format: RGBA16 -machine/ttc_textures.07800: - type: TEXTURE - size: 2048 - width: 16 - height: 64 - offset: 3467104 - mio0: 30720 - format: RGBA16 -machine/ttc_textures.08000: - type: TEXTURE - size: 1024 - width: 64 - height: 8 - offset: 3467104 - mio0: 32768 - format: RGBA16 -machine/ttc_textures.08400: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3467104 - mio0: 33792 - format: RGBA16 -mountain/ttm_textures.00000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3479904 - mio0: 0 - format: RGBA16 -mountain/ttm_textures.00800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3479904 - mio0: 2048 - format: RGBA16 -mountain/ttm_textures.01800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3479904 - mio0: 6144 - format: RGBA16 -mountain/ttm_textures.02800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3479904 - mio0: 10240 - format: RGBA16 -mountain/ttm_textures.03000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3479904 - mio0: 12288 - format: RGBA16 -mountain/ttm_textures.03800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3479904 - mio0: 14336 - format: RGBA16 -mountain/ttm_textures.04000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3479904 - mio0: 16384 - format: RGBA16 -mountain/ttm_textures.04800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3479904 - mio0: 18432 - format: RGBA16 -mountain/ttm_textures.05000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3479904 - mio0: 20480 - format: RGBA16 -mountain/ttm_textures.05800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3479904 - mio0: 22528 - format: RGBA16 -mountain/ttm_textures.06800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3479904 - mio0: 26624 - format: RGBA16 -mountain/ttm_textures.07000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3479904 - mio0: 28672 - format: RGBA16 -mountain/ttm_textures.07800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3479904 - mio0: 30720 - format: RGBA16 -mountain/ttm_textures.08000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3479904 - mio0: 32768 - format: RGBA16 -mountain/ttm_textures.08800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3479904 - mio0: 34816 - format: RGBA16 -mountain/ttm_textures.09800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3479904 - mio0: 38912 - format: RGBA16 -mountain/ttm_textures.0A000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3397392 - mio0: 24576 - format: RGBA16 -mountain/ttm_textures.0A800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3479904 - mio0: 43008 - format: RGBA16 -mountain/ttm_textures.0B000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3479904 - mio0: 45056 - format: RGBA16 -mountain/ttm_textures.0B800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3479904 - mio0: 47104 - format: RGBA16 -mountain/ttm_textures.0C000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3479904 - mio0: 49152 - format: RGBA16 -outside/castle_grounds_textures.00000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3534096 - mio0: 0 - format: RGBA16 -outside/castle_grounds_textures.00800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3534096 - mio0: 2048 - format: RGBA16 -outside/castle_grounds_textures.01000: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3534096 - mio0: 4096 - format: RGBA16 -outside/castle_grounds_textures.02000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3534096 - mio0: 8192 - format: RGBA16 -outside/castle_grounds_textures.03000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3534096 - mio0: 12288 - format: RGBA16 -outside/castle_grounds_textures.03800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3534096 - mio0: 14336 - format: RGBA16 -outside/castle_grounds_textures.04000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3534096 - mio0: 16384 - format: RGBA16 -outside/castle_grounds_textures.04800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3534096 - mio0: 18432 - format: RGBA16 -outside/castle_grounds_textures.05800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3534096 - mio0: 22528 - format: RGBA16 -outside/castle_grounds_textures.06000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3534096 - mio0: 24576 - format: RGBA16 -outside/castle_grounds_textures.06800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3534096 - mio0: 26624 - format: RGBA16 -outside/castle_grounds_textures.07800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3534096 - mio0: 30720 - format: RGBA16 -outside/castle_grounds_textures.08000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3534096 - mio0: 32768 - format: RGBA16 -outside/castle_grounds_textures.08800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3534096 - mio0: 34816 - format: RGBA16 -outside/castle_grounds_textures.09000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3534096 - mio0: 36864 - format: RGBA16 -outside/castle_grounds_textures.09800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3534096 - mio0: 38912 - format: RGBA16 -outside/castle_grounds_textures.0A000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3534096 - mio0: 40960 - format: RGBA16 -outside/castle_grounds_textures.0A800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3534096 - mio0: 43008 - format: RGBA16 -outside/castle_grounds_textures.0B000: - type: TEXTURE - size: 1024 - width: 16 - height: 32 - offset: 3534096 - mio0: 45056 - format: RGBA16 -outside/castle_grounds_textures.0B400: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3534096 - mio0: 46080 - format: RGBA16 -outside/castle_grounds_textures.0BC00: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3330160 - mio0: 45056 - format: IA16 -segment2/font_graphics.05900: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 22784 - format: IA4 -segment2/font_graphics.05940: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 22848 - format: IA4 -segment2/font_graphics.05980: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 22912 - format: IA4 -segment2/font_graphics.059C0: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 22976 - format: IA4 -segment2/font_graphics.05A00: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 23040 - format: IA4 -segment2/font_graphics.05A40: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 23104 - format: IA4 -segment2/font_graphics.05A80: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 23168 - format: IA4 -segment2/font_graphics.05AC0: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 23232 - format: IA4 -segment2/font_graphics.05B00: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 23296 - format: IA4 -segment2/font_graphics.05B40: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 23360 - format: IA4 -segment2/font_graphics.05B80: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 23424 - format: IA4 -segment2/font_graphics.05BC0: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 23488 - format: IA4 -segment2/font_graphics.05C00: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 23552 - format: IA4 -segment2/font_graphics.05C40: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 23616 - format: IA4 -segment2/font_graphics.05C80: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 23680 - format: IA4 -segment2/font_graphics.05CC0: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 23744 - format: IA4 -segment2/font_graphics.05D00: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 23808 - format: IA4 -segment2/font_graphics.05D40: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 23872 - format: IA4 -segment2/font_graphics.05D80: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 23936 - format: IA4 -segment2/font_graphics.05DC0: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 24000 - format: IA4 -segment2/font_graphics.05E00: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 24064 - format: IA4 -segment2/font_graphics.05E40: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 24128 - format: IA4 -segment2/font_graphics.05E80: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 24192 - format: IA4 -segment2/font_graphics.05EC0: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 24256 - format: IA4 -segment2/font_graphics.05F00: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 24320 - format: IA4 -segment2/font_graphics.05F40: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 24384 - format: IA4 -segment2/font_graphics.05F80: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 24448 - format: IA4 -segment2/font_graphics.05FC0: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 24512 - format: IA4 -segment2/font_graphics.06000: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 24576 - format: IA4 -segment2/font_graphics.06040: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 24640 - format: IA4 -segment2/font_graphics.06080: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 24704 - format: IA4 -segment2/font_graphics.060C0: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 24768 - format: IA4 -segment2/font_graphics.06100: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 24832 - format: IA4 -segment2/font_graphics.06140: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 24896 - format: IA4 -segment2/font_graphics.06180: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 24960 - format: IA4 -segment2/font_graphics.061C0: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 25024 - format: IA4 -segment2/font_graphics.06200: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 25088 - format: IA4 -segment2/font_graphics.06240: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 25152 - format: IA4 -segment2/font_graphics.06280: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 25216 - format: IA4 -segment2/font_graphics.062C0: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 25280 - format: IA4 -segment2/font_graphics.06300: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 25344 - format: IA4 -segment2/font_graphics.06340: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 25408 - format: IA4 -segment2/font_graphics.06380: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 25472 - format: IA4 -segment2/font_graphics.063C0: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 25536 - format: IA4 -segment2/font_graphics.06400: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 25600 - format: IA4 -segment2/font_graphics.06410: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 1606720 - mio0: 83574 - format: IA1 -segment2/font_graphics.06420: - type: TEXTURE - size: 16 - width: 16 - height: 8 - offset: 1851952 - mio0: 133979 - format: IA1 -segment2/font_graphics.06440: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 25664 - format: IA4 -segment2/font_graphics.06480: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 25728 - format: IA4 -segment2/font_graphics.064C0: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 25792 - format: IA4 -segment2/font_graphics.06500: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 25856 - format: IA4 -segment2/font_graphics.06540: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 25920 - format: IA4 -segment2/font_graphics.06580: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 25984 - format: IA4 -segment2/font_graphics.065C0: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 26048 - format: IA4 -segment2/font_graphics.06600: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 26112 - format: IA4 -segment2/font_graphics.06640: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 26176 - format: IA4 -segment2/font_graphics.06680: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 26240 - format: IA4 -segment2/font_graphics.066C0: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 26304 - format: IA4 -segment2/font_graphics.06700: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 26368 - format: IA4 -segment2/font_graphics.06740: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 26432 - format: IA4 -segment2/font_graphics.06780: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 26496 - format: IA4 -segment2/font_graphics.067C0: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 26560 - format: IA4 -segment2/font_graphics.06800: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 26624 - format: IA4 -segment2/font_graphics.06840: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 26688 - format: IA4 -segment2/font_graphics.06880: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 26752 - format: IA4 -segment2/font_graphics.068C0: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 26816 - format: IA4 -segment2/font_graphics.06900: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 26880 - format: IA4 -segment2/font_graphics.06940: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 26944 - format: IA4 -segment2/font_graphics.06980: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 27008 - format: IA4 -segment2/font_graphics.069C0: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 27072 - format: IA4 -segment2/font_graphics.06A00: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 27136 - format: IA4 -segment2/font_graphics.06A40: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 27200 - format: IA4 -segment2/font_graphics.06A80: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 27264 - format: IA4 -segment2/font_graphics.06AC0: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 27328 - format: IA4 -segment2/font_graphics.06B00: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 27392 - format: IA4 -segment2/font_graphics.06B40: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 27456 - format: IA4 -segment2/font_graphics.06B80: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 27520 - format: IA4 -segment2/font_graphics.06BC0: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 27584 - format: IA4 -segment2/font_graphics.06C00: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 27648 - format: IA4 -segment2/font_graphics.06C40: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 27712 - format: IA4 -segment2/font_graphics.06C80: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 27776 - format: IA4 -segment2/font_graphics.06CC0: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 27840 - format: IA4 -segment2/font_graphics.06D00: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 27904 - format: IA4 -segment2/font_graphics.06D40: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 27968 - format: IA4 -segment2/font_graphics.06D80: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 28032 - format: IA4 -segment2/font_graphics.06DC0: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 28096 - format: IA4 -segment2/font_graphics.06E00: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 28160 - format: IA4 -segment2/font_graphics.06E40: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 28224 - format: IA4 -segment2/font_graphics.06E80: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 28288 - format: IA4 -segment2/font_graphics.06EC0: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 28352 - format: IA4 -segment2/font_graphics.06F00: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 28416 - format: IA4 -segment2/font_graphics.06F40: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 28480 - format: IA4 -segment2/font_graphics.06F80: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 28544 - format: IA4 -segment2/font_graphics.06FC0: - type: TEXTURE - size: 64 - width: 16 - height: 8 - offset: 1083968 - mio0: 28608 - format: IA4 -segment2/segment2.00000: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 0 - format: RGBA16 -segment2/segment2.00200: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 512 - format: RGBA16 -segment2/segment2.00400: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 1024 - format: RGBA16 -segment2/segment2.00600: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 1536 - format: RGBA16 -segment2/segment2.00800: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 2048 - format: RGBA16 -segment2/segment2.00A00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 2560 - format: RGBA16 -segment2/segment2.00C00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 3072 - format: RGBA16 -segment2/segment2.00E00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 3584 - format: RGBA16 -segment2/segment2.01000: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 4096 - format: RGBA16 -segment2/segment2.01200: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 4608 - format: RGBA16 -segment2/segment2.01400: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 5120 - format: RGBA16 -segment2/segment2.01600: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 5632 - format: RGBA16 -segment2/segment2.01800: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 6144 - format: RGBA16 -segment2/segment2.01A00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 6656 - format: RGBA16 -segment2/segment2.01C00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 7168 - format: RGBA16 -segment2/segment2.01E00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 7680 - format: RGBA16 -segment2/segment2.02000: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 8192 - format: RGBA16 -segment2/segment2.02200: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 8704 - format: RGBA16 -segment2/segment2.02400: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 9216 - format: RGBA16 -segment2/segment2.02800: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 9728 - format: RGBA16 -segment2/segment2.02A00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 10240 - format: RGBA16 -segment2/segment2.02C00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 10752 - format: RGBA16 -segment2/segment2.02E00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 11264 - format: RGBA16 -segment2/segment2.03000: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 11776 - format: RGBA16 -segment2/segment2.03200: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 12288 - format: RGBA16 -segment2/segment2.03600: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 12800 - format: RGBA16 -segment2/segment2.03800: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 13312 - format: RGBA16 -segment2/segment2.03A00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 13824 - format: RGBA16 -segment2/segment2.03C00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 14336 - format: RGBA16 -segment2/segment2.04000: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 14848 - format: RGBA16 -segment2/segment2.04400: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 15360 - format: RGBA16 -segment2/segment2.04800: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 15872 - format: RGBA16 -segment2/segment2.04A00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 16384 - format: RGBA16 -segment2/segment2.05000: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 2778544 - mio0: 41424 - format: RGBA16 -segment2/segment2.05600: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 16896 - format: RGBA16 -segment2/segment2.05800: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 17408 - format: RGBA16 -segment2/segment2.05A00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 17920 - format: RGBA16 -segment2/segment2.05C00: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 18432 - format: RGBA16 -segment2/segment2.06200: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1083968 - mio0: 18944 - format: RGBA16 -segment2/segment2.06280: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1083968 - mio0: 19072 - format: RGBA16 -segment2/segment2.06300: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1083968 - mio0: 19200 - format: RGBA16 -segment2/segment2.06380: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1083968 - mio0: 19328 - format: RGBA16 -segment2/segment2.06400: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1083968 - mio0: 19456 - format: RGBA16 -segment2/segment2.06480: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1083968 - mio0: 19584 - format: RGBA16 -segment2/segment2.06500: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1083968 - mio0: 19712 - format: RGBA16 -segment2/segment2.06580: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1083968 - mio0: 19840 - format: RGBA16 -segment2/segment2.06600: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1083968 - mio0: 19968 - format: RGBA16 -segment2/segment2.06680: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1083968 - mio0: 20096 - format: RGBA16 -segment2/segment2.06700: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1083968 - mio0: 20224 - format: RGBA16 -segment2/segment2.06780: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1083968 - mio0: 20352 - format: RGBA16 -segment2/segment2.06800: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1083968 - mio0: 20480 - format: RGBA16 -segment2/segment2.06880: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1083968 - mio0: 20608 - format: RGBA16 -segment2/segment2.06900: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1083968 - mio0: 20736 - format: RGBA16 -segment2/segment2.06980: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1083968 - mio0: 20864 - format: RGBA16 -segment2/segment2.06A00: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1083968 - mio0: 20992 - format: RGBA16 -segment2/segment2.06A80: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1083968 - mio0: 21120 - format: RGBA16 -segment2/segment2.06B00: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1083968 - mio0: 21248 - format: RGBA16 -segment2/segment2.06B80: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1083968 - mio0: 21376 - format: RGBA16 -segment2/segment2.06C00: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1083968 - mio0: 21504 - format: RGBA16 -segment2/segment2.06C80: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1083968 - mio0: 21632 - format: RGBA16 -segment2/segment2.06D00: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1083968 - mio0: 21760 - format: RGBA16 -segment2/segment2.06D80: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1083968 - mio0: 21888 - format: RGBA16 -segment2/segment2.06E00: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1083968 - mio0: 22016 - format: RGBA16 -segment2/segment2.06E80: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1083968 - mio0: 22144 - format: RGBA16 -segment2/segment2.06F00: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1083968 - mio0: 22272 - format: RGBA16 -segment2/segment2.06F80: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1083968 - mio0: 22400 - format: RGBA16 -segment2/segment2.07000: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1083968 - mio0: 22528 - format: RGBA16 -segment2/segment2.07080: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1083968 - mio0: 22656 - format: RGBA16 -segment2/segment2.07340: - type: TEXTURE - size: 16 - width: 8 - height: 16 - offset: 1083968 - mio0: 24050 - format: IA1 -segment2/segment2.07B50: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 28672 - format: RGBA16 -segment2/segment2.07D50: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 29184 - format: RGBA16 -segment2/segment2.07F50: - type: TEXTURE - size: 512 - width: 16 - height: 16 - offset: 1083968 - mio0: 29696 - format: RGBA16 -segment2/segment2.08150: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1083968 - mio0: 30208 - format: RGBA16 -segment2/segment2.081D0: - type: TEXTURE - size: 128 - width: 8 - height: 8 - offset: 1083968 - mio0: 30336 - format: RGBA16 -segment2/segment2.0F458: - type: TEXTURE - size: 2048 - width: 32 - height: 64 - offset: 1083968 - mio0: 74424 - format: IA8 -segment2/segment2.0FC58: - type: TEXTURE - size: 2048 - width: 32 - height: 64 - offset: 1083968 - mio0: 76472 - format: IA8 -segment2/segment2.10458: - type: TEXTURE - size: 4096 - width: 64 - height: 64 - offset: 1083968 - mio0: 78520 - format: IA8 -segment2/segment2.11458: - type: TEXTURE - size: 2048 - width: 32 - height: 64 - offset: 1083968 - mio0: 82616 - format: IA8 -segment2/segment2.11C58: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1083968 - mio0: 84664 - format: RGBA16 -segment2/segment2.12458: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1083968 - mio0: 86712 - format: RGBA16 -segment2/segment2.12C58: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1083968 - mio0: 88760 - format: RGBA16 -segment2/segment2.13458: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1083968 - mio0: 90808 - format: IA16 -segment2/segment2.13C58: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1083968 - mio0: 92856 - format: RGBA16 -segment2/segment2.14838: - type: TEXTURE - size: 64 - width: 8 - height: 8 - offset: 1083968 - mio0: 95896 - format: IA8 -segment2/shadow_quarter_circle: - type: TEXTURE - size: 256 - width: 16 - height: 16 - offset: 1083968 - mio0: 73912 - format: IA8 -segment2/shadow_quarter_square: - type: TEXTURE - size: 256 - width: 16 - height: 16 - offset: 1083968 - mio0: 74168 - format: IA8 -sky/metal_hole: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3397392 - mio0: 26624 - format: RGBA16 -sky/rr_textures.00000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3397392 - mio0: 0 - format: RGBA16 -sky/rr_textures.00800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3397392 - mio0: 2048 - format: RGBA16 -sky/rr_textures.01000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3397392 - mio0: 4096 - format: RGBA16 -sky/rr_textures.01800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3397392 - mio0: 6144 - format: RGBA16 -sky/rr_textures.02000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3397392 - mio0: 8192 - format: RGBA16 -sky/rr_textures.03000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3397392 - mio0: 12288 - format: RGBA16 -sky/rr_textures.03800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3397392 - mio0: 14336 - format: RGBA16 -sky/rr_textures.04800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3397392 - mio0: 18432 - format: RGBA16 -sky/rr_textures.05000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3397392 - mio0: 20480 - format: RGBA16 -sky/rr_textures.05800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3397392 - mio0: 22528 - format: RGBA16 -sky/rr_textures.06000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3397392 - mio0: 24576 - format: RGBA16 -sky/rr_textures.07000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3397392 - mio0: 28672 - format: RGBA16 -sky/rr_textures.07800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3397392 - mio0: 30720 - format: RGBA16 -sky/rr_textures.08000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3397392 - mio0: 32768 - format: RGBA16 -skyboxes/bbh: - type: BLOB - size: 84288 - offset: 3125680 - mio0: 0 -skyboxes/bidw: - type: BLOB - size: 131392 - offset: 3153104 - mio0: 0 -skyboxes/bitfs: - type: BLOB - size: 102720 - offset: 2949184 - mio0: 0 -skyboxes/bits: - type: BLOB - size: 131392 - offset: 3198656 - mio0: 0 -skyboxes/ccm: - type: BLOB - size: 131392 - offset: 2854672 - mio0: 0 -skyboxes/cloud_floor: - type: BLOB - size: 131392 - offset: 3045504 - mio0: 0 -skyboxes/clouds: - type: BLOB - size: 84288 - offset: 2913232 - mio0: 0 -skyboxes/ssl: - type: BLOB - size: 131392 - offset: 3085536 - mio0: 0 -skyboxes/water: - type: BLOB - size: 131392 - offset: 2803376 - mio0: 0 -skyboxes/wdw: - type: BLOB - size: 131392 - offset: 2974960 - mio0: 0 -snow/ccm_textures.00000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3412288 - mio0: 0 - format: RGBA16 -snow/ccm_textures.00800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3412288 - mio0: 2048 - format: RGBA16 -snow/ccm_textures.01000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3412288 - mio0: 4096 - format: RGBA16 -snow/ccm_textures.02000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3412288 - mio0: 8192 - format: RGBA16 -snow/ccm_textures.02800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3412288 - mio0: 10240 - format: RGBA16 -snow/ccm_textures.03000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3412288 - mio0: 12288 - format: RGBA16 -snow/ccm_textures.03800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3412288 - mio0: 14336 - format: RGBA16 -snow/ccm_textures.04000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3412288 - mio0: 16384 - format: RGBA16 -snow/ccm_textures.04800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3412288 - mio0: 18432 - format: RGBA16 -snow/ccm_textures.05000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3412288 - mio0: 20480 - format: RGBA16 -snow/ccm_textures.05800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3412288 - mio0: 22528 - format: RGBA16 -snow/ccm_textures.06000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3412288 - mio0: 24576 - format: RGBA16 -snow/ccm_textures.06800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3412288 - mio0: 26624 - format: RGBA16 -snow/ccm_textures.07000: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3412288 - mio0: 28672 - format: RGBA16 -snow/ccm_textures.08000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3412288 - mio0: 32768 - format: RGBA16 -snow/ccm_textures.08800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3412288 - mio0: 34816 - format: RGBA16 -snow/ccm_textures.09000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3412288 - mio0: 36864 - format: IA16 -snow/ccm_textures.09800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3412288 - mio0: 38912 - format: IA16 -spooky/bbh_textures.00000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3305024 - mio0: 0 - format: RGBA16 -spooky/bbh_textures.00800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3305024 - mio0: 2048 - format: RGBA16 -spooky/bbh_textures.01800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3305024 - mio0: 6144 - format: RGBA16 -spooky/bbh_textures.02800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3305024 - mio0: 10240 - format: RGBA16 -spooky/bbh_textures.03800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3305024 - mio0: 14336 - format: RGBA16 -spooky/bbh_textures.04800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3305024 - mio0: 18432 - format: RGBA16 -spooky/bbh_textures.05000: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3305024 - mio0: 20480 - format: RGBA16 -spooky/bbh_textures.06000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3305024 - mio0: 24576 - format: RGBA16 -spooky/bbh_textures.06800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3305024 - mio0: 26624 - format: RGBA16 -spooky/bbh_textures.07000: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3305024 - mio0: 28672 - format: RGBA16 -spooky/bbh_textures.08000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3305024 - mio0: 32768 - format: RGBA16 -spooky/bbh_textures.08800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3305024 - mio0: 34816 - format: RGBA16 -spooky/bbh_textures.09000: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3305024 - mio0: 36864 - format: RGBA16 -spooky/bbh_textures.0A000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 1469536 - mio0: 49800 - format: RGBA16 -spooky/bbh_textures.0A800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3305024 - mio0: 43008 - format: IA16 -spooky/bbh_textures.0B000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3305024 - mio0: 45056 - format: IA16 -spooky/bbh_textures.0B800: - type: TEXTURE - size: 4096 - width: 32 - height: 64 - offset: 3305024 - mio0: 47104 - format: IA16 -title_screen_bg/title_screen_bg.001C0: - type: TEXTURE - size: 3200 - width: 80 - height: 20 - offset: 2558144 - mio0: 448 - format: RGBA16 -title_screen_bg/title_screen_bg.00E40: - type: TEXTURE - size: 3200 - width: 80 - height: 20 - offset: 2558144 - mio0: 3648 - format: RGBA16 -title_screen_bg/title_screen_bg.01AC0: - type: TEXTURE - size: 3200 - width: 80 - height: 20 - offset: 2558144 - mio0: 6848 - format: RGBA16 -title_screen_bg/title_screen_bg.02740: - type: TEXTURE - size: 3200 - width: 80 - height: 20 - offset: 2558144 - mio0: 10048 - format: RGBA16 -title_screen_bg/title_screen_bg.033C0: - type: TEXTURE - size: 3200 - width: 80 - height: 20 - offset: 2558144 - mio0: 13248 - format: RGBA16 -title_screen_bg/title_screen_bg.04040: - type: TEXTURE - size: 3200 - width: 80 - height: 20 - offset: 2558144 - mio0: 16448 - format: RGBA16 -title_screen_bg/title_screen_bg.04CC0: - type: TEXTURE - size: 3200 - width: 80 - height: 20 - offset: 2558144 - mio0: 19648 - format: RGBA16 -title_screen_bg/title_screen_bg.05940: - type: TEXTURE - size: 3200 - width: 80 - height: 20 - offset: 2558144 - mio0: 22848 - format: RGBA16 -water/jrb_textures.00000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3361584 - mio0: 0 - format: RGBA16 -water/jrb_textures.00800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3361584 - mio0: 2048 - format: RGBA16 -water/jrb_textures.01800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3361584 - mio0: 6144 - format: RGBA16 -water/jrb_textures.02800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3361584 - mio0: 10240 - format: RGBA16 -water/jrb_textures.03800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3361584 - mio0: 14336 - format: RGBA16 -water/jrb_textures.04800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3361584 - mio0: 18432 - format: RGBA16 -water/jrb_textures.05800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3361584 - mio0: 22528 - format: RGBA16 -water/jrb_textures.06000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3361584 - mio0: 24576 - format: RGBA16 -water/jrb_textures.06800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3361584 - mio0: 26624 - format: RGBA16 -water/jrb_textures.07800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3361584 - mio0: 30720 - format: RGBA16 -water/jrb_textures.08800: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3361584 - mio0: 34816 - format: RGBA16 -water/jrb_textures.09000: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3361584 - mio0: 36864 - format: RGBA16 -water/jrb_textures.0A000: - type: TEXTURE - size: 2048 - width: 32 - height: 32 - offset: 3361584 - mio0: 40960 - format: RGBA16 -water/jrb_textures.0A800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3361584 - mio0: 43008 - format: RGBA16 -water/jrb_textures.0B800: - type: TEXTURE - size: 4096 - width: 64 - height: 32 - offset: 3361584 - mio0: 47104 - format: RGBA16 diff --git a/banks_table.h b/banks_table.h deleted file mode 100644 index 1c05cb1..0000000 --- a/banks_table.h +++ /dev/null @@ -1,129 +0,0 @@ -#pragma once -#include "align_asset_macro.h" - -#define dgBank00 "__OTR__sound/banks/us/00_bank" -static const ALIGN_ASSET(2) char gBank00[] = dgBank00; - -#define dgBank01 "__OTR__sound/banks/us/01_bank" -static const ALIGN_ASSET(2) char gBank01[] = dgBank01; - -#define dgBank02 "__OTR__sound/banks/us/02_bank" -static const ALIGN_ASSET(2) char gBank02[] = dgBank02; - -#define dgBank03 "__OTR__sound/banks/us/03_bank" -static const ALIGN_ASSET(2) char gBank03[] = dgBank03; - -#define dgBank04 "__OTR__sound/banks/us/04_bank" -static const ALIGN_ASSET(2) char gBank04[] = dgBank04; - -#define dgBank05 "__OTR__sound/banks/us/05_bank" -static const ALIGN_ASSET(2) char gBank05[] = dgBank05; - -#define dgBank06 "__OTR__sound/banks/us/06_bank" -static const ALIGN_ASSET(2) char gBank06[] = dgBank06; - -#define dgBank07 "__OTR__sound/banks/us/07_bank" -static const ALIGN_ASSET(2) char gBank07[] = dgBank07; - -#define dgBank08 "__OTR__sound/banks/us/08_bank" -static const ALIGN_ASSET(2) char gBank08[] = dgBank08; - -#define dgBank09 "__OTR__sound/banks/us/09_bank" -static const ALIGN_ASSET(2) char gBank09[] = dgBank09; - -#define dgBank0A "__OTR__sound/banks/us/0A_bank" -static const ALIGN_ASSET(2) char gBank0A[] = dgBank0A; - -#define dgBank0B "__OTR__sound/banks/us/0B_bank" -static const ALIGN_ASSET(2) char gBank0B[] = dgBank0B; - -#define dgBank0C "__OTR__sound/banks/us/0C_bank" -static const ALIGN_ASSET(2) char gBank0C[] = dgBank0C; - -#define dgBank0D "__OTR__sound/banks/us/0D_bank" -static const ALIGN_ASSET(2) char gBank0D[] = dgBank0D; - -#define dgBank0E "__OTR__sound/banks/us/0E_bank" -static const ALIGN_ASSET(2) char gBank0E[] = dgBank0E; - -#define dgBank0F "__OTR__sound/banks/us/0F_bank" -static const ALIGN_ASSET(2) char gBank0F[] = dgBank0F; - -#define dgBank10 "__OTR__sound/banks/us/10_bank" -static const ALIGN_ASSET(2) char gBank10[] = dgBank10; - -#define dgBank11 "__OTR__sound/banks/us/11_bank" -static const ALIGN_ASSET(2) char gBank11[] = dgBank11; - -#define dgBank12 "__OTR__sound/banks/us/12_bank" -static const ALIGN_ASSET(2) char gBank12[] = dgBank12; - -#define dgBank13 "__OTR__sound/banks/us/13_bank" -static const ALIGN_ASSET(2) char gBank13[] = dgBank13; - -#define dgBank14 "__OTR__sound/banks/us/14_bank" -static const ALIGN_ASSET(2) char gBank14[] = dgBank14; - -#define dgBank15 "__OTR__sound/banks/us/15_bank" -static const ALIGN_ASSET(2) char gBank15[] = dgBank15; - -#define dgBank16 "__OTR__sound/banks/us/16_bank" -static const ALIGN_ASSET(2) char gBank16[] = dgBank16; - -#define dgBank17 "__OTR__sound/banks/us/17_bank" -static const ALIGN_ASSET(2) char gBank17[] = dgBank17; - -#define dgBank18 "__OTR__sound/banks/us/18_bank" -static const ALIGN_ASSET(2) char gBank18[] = dgBank18; - -#define dgBank19 "__OTR__sound/banks/us/19_bank" -static const ALIGN_ASSET(2) char gBank19[] = dgBank19; - -#define dgBank1A "__OTR__sound/banks/us/1A_bank" -static const ALIGN_ASSET(2) char gBank1A[] = dgBank1A; - -#define dgBank1B "__OTR__sound/banks/us/1B_bank" -static const ALIGN_ASSET(2) char gBank1B[] = dgBank1B; - -#define dgBank1C "__OTR__sound/banks/us/1C_bank" -static const ALIGN_ASSET(2) char gBank1C[] = dgBank1C; - -#define dgBank1D "__OTR__sound/banks/us/1D_bank" -static const ALIGN_ASSET(2) char gBank1D[] = dgBank1D; - -#define dgBank1E "__OTR__sound/banks/us/1E_bank" -static const ALIGN_ASSET(2) char gBank1E[] = dgBank1E; - -#define dgBank1F "__OTR__sound/banks/us/1F_bank" -static const ALIGN_ASSET(2) char gBank1F[] = dgBank1F; - -#define dgBank20 "__OTR__sound/banks/us/20_bank" -static const ALIGN_ASSET(2) char gBank20[] = dgBank20; - -#define dgBank21 "__OTR__sound/banks/us/21_bank" -static const ALIGN_ASSET(2) char gBank21[] = dgBank21; - -#define dgBank22 "__OTR__sound/banks/us/22_bank" -static const ALIGN_ASSET(2) char gBank22[] = dgBank22; - -#define dgBank23 "__OTR__sound/banks/us/23_bank" -static const ALIGN_ASSET(2) char gBank23[] = dgBank23; - -#define dgBank24 "__OTR__sound/banks/us/24_bank" -static const ALIGN_ASSET(2) char gBank24[] = dgBank24; - -#define dgBank25 "__OTR__sound/banks/us/25_bank" -static const ALIGN_ASSET(2) char gBank25[] = dgBank25; - -static const char* gBankTable[] = { - gBank00, gBank01, gBank02, gBank03, - gBank04, gBank05, gBank06, gBank07, - gBank08, gBank09, gBank0A, gBank0B, - gBank0C, gBank0D, gBank0E, gBank0F, - gBank10, gBank11, gBank12, gBank13, - gBank14, gBank15, gBank16, gBank17, - gBank18, gBank19, gBank1A, gBank1B, - gBank1C, gBank1D, gBank1E, gBank1F, - gBank20, gBank21, gBank22, gBank23, - gBank24, gBank25, -}; diff --git a/config.yml b/config.yml index 2f14f1b..a2ae31b 100644 --- a/config.yml +++ b/config.yml @@ -1,23 +1,15 @@ -# Supported game versions -# SM64 [JP, US, EU] -# MK64 [US] +# This is a sample configuration file to use on Torch. +# You can find more information about the configuration file on the wiki (WIP) -8a20a5c83d6ceb0f0506cfc9fa20d8f438cafe51: - name: Super Mario 64 [JP] - path: assets/sm64/jp - output: smcube.otr - -9bef1128717f958171a4afac3ed78ee2bb4e86ce: - name: Super Mario 64 [US] - path: assets/sm64/us - output: smcube.otr - -4ac5721683d0e0b6bbb561b58a71740845dceea9: - name: Super Mario 64 [EU] - path: assets/sm64/eu - output: smcube.otr - -579c48e211ae952530ffc8738709f078d5dd215e: - name: Mario Kart 64 [US] - path: assets/mk64/us - output: mkcube.otr \ No newline at end of file +N64Hash: + name: Game # The name of the game; you can use any name you want. + path: assets/example/ # The path to the ymls folder + config: + gbi: F3D # You can use F3D, F3DEX, F3DEX-MK64, F3DB, F3DEX2, F3DEXB, + sort: OFFSET # This is how the assets are going to be sorted when generating the Header / C files. You can use OFFSET, ROFFSET for a reverse order or even specify a manual order using a list with the types. + output: + binary: example.otr # The name of the output binary file + headers: include # The name of the output headers folder + code: code # The name of the output code folder + segments: # A list with all the segmented addresses in order + - 0x12345678 \ No newline at end of file diff --git a/lib/binarytools/BinaryReader.cpp b/lib/binarytools/BinaryReader.cpp index f802885..4afeb17 100644 --- a/lib/binarytools/BinaryReader.cpp +++ b/lib/binarytools/BinaryReader.cpp @@ -8,6 +8,10 @@ LUS::BinaryReader::BinaryReader(char* nBuffer, size_t nBufferSize) { mStream = std::make_shared(nBuffer, nBufferSize); } +LUS::BinaryReader::BinaryReader(uint8_t* nBuffer, size_t nBufferSize) { + mStream = std::make_shared((char*) nBuffer, nBufferSize); +} + LUS::BinaryReader::BinaryReader(Stream* nStream) { mStream.reset(nStream); } diff --git a/lib/binarytools/BinaryReader.h b/lib/binarytools/BinaryReader.h index 02e65cc..a98742f 100644 --- a/lib/binarytools/BinaryReader.h +++ b/lib/binarytools/BinaryReader.h @@ -13,6 +13,7 @@ namespace LUS { class BinaryReader { public: BinaryReader(char* nBuffer, size_t nBufferSize); + BinaryReader(uint8_t* nBuffer, size_t nBufferSize); BinaryReader(Stream* nStream); BinaryReader(std::shared_ptr nStream); diff --git a/lib/binarytools/BinaryWriter.cpp b/lib/binarytools/BinaryWriter.cpp index 6e0140f..4d48a0e 100644 --- a/lib/binarytools/BinaryWriter.cpp +++ b/lib/binarytools/BinaryWriter.cpp @@ -1,5 +1,6 @@ #include "BinaryWriter.h" #include "MemoryStream.h" +#include LUS::BinaryWriter::BinaryWriter() { mStream = std::make_shared(); @@ -153,3 +154,8 @@ void LUS::BinaryWriter::WriteByte(char value) { std::vector LUS::BinaryWriter::ToVector() { return mStream->ToVector(); } + +void LUS::BinaryWriter::Finish(std::ostream& output) { + auto data = mStream->ToVector(); + output.write(data.data(), data.size()); +} \ No newline at end of file diff --git a/lib/binarytools/BinaryWriter.h b/lib/binarytools/BinaryWriter.h index dca683f..28fdd09 100644 --- a/lib/binarytools/BinaryWriter.h +++ b/lib/binarytools/BinaryWriter.h @@ -39,8 +39,11 @@ class BinaryWriter { std::vector ToVector(); - protected: + void Finish(std::ostream &output); + +protected: std::shared_ptr mStream; Endianness mEndianness = Endianness::Native; + }; } // namespace LUS diff --git a/lib/strhash64/StrHash64.cpp b/lib/strhash64/StrHash64.cpp new file mode 100644 index 0000000..9e622ad --- /dev/null +++ b/lib/strhash64/StrHash64.cpp @@ -0,0 +1,250 @@ +/* +* Below are the various copyright notices from the original source. +* +* +* The source has be substationally modified: +* 1. Unneeded code has been deleted. +* 2. The code was converted from C++ to C. +* 3. Routines optimized for hashing were added. +*/ +/////////////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2006 Anton Samokhvalov +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +/////////////////////////////////////////////////////////////////////////////////// +/* + [To some parts of this code] +*/ +/* + Copyright (C) 1995-2004 Jean-loup Gailly and Mark Adler + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu +*/ +/* + [To some parts of this code] +*/ +/* + Copyright (c) 2003, Dominik Reichl + All rights reserved. + LICENSE TERMS + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of ReichlSoft nor the names of its contributors may be used + to endorse or promote products derived from this software without specific + prior written permission. + DISCLAIMER + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include + +#define u8 uint8_t +#define u16 uint16_t +#define u32 uint32_t +#define u64 uint64_t +#define unint uint32_t + +#define INITIAL_CRC64 0xffffffffffffffffULL + +#define CONST64(n) n##ull +static const u64 CRC64_Table[256] = { + CONST64(0x0000000000000000), CONST64(0x42f0e1eba9ea3693), + CONST64(0x85e1c3d753d46d26), CONST64(0xc711223cfa3e5bb5), + CONST64(0x493366450e42ecdf), CONST64(0x0bc387aea7a8da4c), + CONST64(0xccd2a5925d9681f9), CONST64(0x8e224479f47cb76a), + CONST64(0x9266cc8a1c85d9be), CONST64(0xd0962d61b56fef2d), + CONST64(0x17870f5d4f51b498), CONST64(0x5577eeb6e6bb820b), + CONST64(0xdb55aacf12c73561), CONST64(0x99a54b24bb2d03f2), + CONST64(0x5eb4691841135847), CONST64(0x1c4488f3e8f96ed4), + CONST64(0x663d78ff90e185ef), CONST64(0x24cd9914390bb37c), + CONST64(0xe3dcbb28c335e8c9), CONST64(0xa12c5ac36adfde5a), + CONST64(0x2f0e1eba9ea36930), CONST64(0x6dfeff5137495fa3), + CONST64(0xaaefdd6dcd770416), CONST64(0xe81f3c86649d3285), + CONST64(0xf45bb4758c645c51), CONST64(0xb6ab559e258e6ac2), + CONST64(0x71ba77a2dfb03177), CONST64(0x334a9649765a07e4), + CONST64(0xbd68d2308226b08e), CONST64(0xff9833db2bcc861d), + CONST64(0x388911e7d1f2dda8), CONST64(0x7a79f00c7818eb3b), + CONST64(0xcc7af1ff21c30bde), CONST64(0x8e8a101488293d4d), + CONST64(0x499b3228721766f8), CONST64(0x0b6bd3c3dbfd506b), + CONST64(0x854997ba2f81e701), CONST64(0xc7b97651866bd192), + CONST64(0x00a8546d7c558a27), CONST64(0x4258b586d5bfbcb4), + CONST64(0x5e1c3d753d46d260), CONST64(0x1cecdc9e94ace4f3), + CONST64(0xdbfdfea26e92bf46), CONST64(0x990d1f49c77889d5), + CONST64(0x172f5b3033043ebf), CONST64(0x55dfbadb9aee082c), + CONST64(0x92ce98e760d05399), CONST64(0xd03e790cc93a650a), + CONST64(0xaa478900b1228e31), CONST64(0xe8b768eb18c8b8a2), + CONST64(0x2fa64ad7e2f6e317), CONST64(0x6d56ab3c4b1cd584), + CONST64(0xe374ef45bf6062ee), CONST64(0xa1840eae168a547d), + CONST64(0x66952c92ecb40fc8), CONST64(0x2465cd79455e395b), + CONST64(0x3821458aada7578f), CONST64(0x7ad1a461044d611c), + CONST64(0xbdc0865dfe733aa9), CONST64(0xff3067b657990c3a), + CONST64(0x711223cfa3e5bb50), CONST64(0x33e2c2240a0f8dc3), + CONST64(0xf4f3e018f031d676), CONST64(0xb60301f359dbe0e5), + CONST64(0xda050215ea6c212f), CONST64(0x98f5e3fe438617bc), + CONST64(0x5fe4c1c2b9b84c09), CONST64(0x1d14202910527a9a), + CONST64(0x93366450e42ecdf0), CONST64(0xd1c685bb4dc4fb63), + CONST64(0x16d7a787b7faa0d6), CONST64(0x5427466c1e109645), + CONST64(0x4863ce9ff6e9f891), CONST64(0x0a932f745f03ce02), + CONST64(0xcd820d48a53d95b7), CONST64(0x8f72eca30cd7a324), + CONST64(0x0150a8daf8ab144e), CONST64(0x43a04931514122dd), + CONST64(0x84b16b0dab7f7968), CONST64(0xc6418ae602954ffb), + CONST64(0xbc387aea7a8da4c0), CONST64(0xfec89b01d3679253), + CONST64(0x39d9b93d2959c9e6), CONST64(0x7b2958d680b3ff75), + CONST64(0xf50b1caf74cf481f), CONST64(0xb7fbfd44dd257e8c), + CONST64(0x70eadf78271b2539), CONST64(0x321a3e938ef113aa), + CONST64(0x2e5eb66066087d7e), CONST64(0x6cae578bcfe24bed), + CONST64(0xabbf75b735dc1058), CONST64(0xe94f945c9c3626cb), + CONST64(0x676dd025684a91a1), CONST64(0x259d31cec1a0a732), + CONST64(0xe28c13f23b9efc87), CONST64(0xa07cf2199274ca14), + CONST64(0x167ff3eacbaf2af1), CONST64(0x548f120162451c62), + CONST64(0x939e303d987b47d7), CONST64(0xd16ed1d631917144), + CONST64(0x5f4c95afc5edc62e), CONST64(0x1dbc74446c07f0bd), + CONST64(0xdaad56789639ab08), CONST64(0x985db7933fd39d9b), + CONST64(0x84193f60d72af34f), CONST64(0xc6e9de8b7ec0c5dc), + CONST64(0x01f8fcb784fe9e69), CONST64(0x43081d5c2d14a8fa), + CONST64(0xcd2a5925d9681f90), CONST64(0x8fdab8ce70822903), + CONST64(0x48cb9af28abc72b6), CONST64(0x0a3b7b1923564425), + CONST64(0x70428b155b4eaf1e), CONST64(0x32b26afef2a4998d), + CONST64(0xf5a348c2089ac238), CONST64(0xb753a929a170f4ab), + CONST64(0x3971ed50550c43c1), CONST64(0x7b810cbbfce67552), + CONST64(0xbc902e8706d82ee7), CONST64(0xfe60cf6caf321874), + CONST64(0xe224479f47cb76a0), CONST64(0xa0d4a674ee214033), + CONST64(0x67c58448141f1b86), CONST64(0x253565a3bdf52d15), + CONST64(0xab1721da49899a7f), CONST64(0xe9e7c031e063acec), + CONST64(0x2ef6e20d1a5df759), CONST64(0x6c0603e6b3b7c1ca), + CONST64(0xf6fae5c07d3274cd), CONST64(0xb40a042bd4d8425e), + CONST64(0x731b26172ee619eb), CONST64(0x31ebc7fc870c2f78), + CONST64(0xbfc9838573709812), CONST64(0xfd39626eda9aae81), + CONST64(0x3a28405220a4f534), CONST64(0x78d8a1b9894ec3a7), + CONST64(0x649c294a61b7ad73), CONST64(0x266cc8a1c85d9be0), + CONST64(0xe17dea9d3263c055), CONST64(0xa38d0b769b89f6c6), + CONST64(0x2daf4f0f6ff541ac), CONST64(0x6f5faee4c61f773f), + CONST64(0xa84e8cd83c212c8a), CONST64(0xeabe6d3395cb1a19), + CONST64(0x90c79d3fedd3f122), CONST64(0xd2377cd44439c7b1), + CONST64(0x15265ee8be079c04), CONST64(0x57d6bf0317edaa97), + CONST64(0xd9f4fb7ae3911dfd), CONST64(0x9b041a914a7b2b6e), + CONST64(0x5c1538adb04570db), CONST64(0x1ee5d94619af4648), + CONST64(0x02a151b5f156289c), CONST64(0x4051b05e58bc1e0f), + CONST64(0x87409262a28245ba), CONST64(0xc5b073890b687329), + CONST64(0x4b9237f0ff14c443), CONST64(0x0962d61b56fef2d0), + CONST64(0xce73f427acc0a965), CONST64(0x8c8315cc052a9ff6), + CONST64(0x3a80143f5cf17f13), CONST64(0x7870f5d4f51b4980), + CONST64(0xbf61d7e80f251235), CONST64(0xfd913603a6cf24a6), + CONST64(0x73b3727a52b393cc), CONST64(0x31439391fb59a55f), + CONST64(0xf652b1ad0167feea), CONST64(0xb4a25046a88dc879), + CONST64(0xa8e6d8b54074a6ad), CONST64(0xea16395ee99e903e), + CONST64(0x2d071b6213a0cb8b), CONST64(0x6ff7fa89ba4afd18), + CONST64(0xe1d5bef04e364a72), CONST64(0xa3255f1be7dc7ce1), + CONST64(0x64347d271de22754), CONST64(0x26c49cccb40811c7), + CONST64(0x5cbd6cc0cc10fafc), CONST64(0x1e4d8d2b65facc6f), + CONST64(0xd95caf179fc497da), CONST64(0x9bac4efc362ea149), + CONST64(0x158e0a85c2521623), CONST64(0x577eeb6e6bb820b0), + CONST64(0x906fc95291867b05), CONST64(0xd29f28b9386c4d96), + CONST64(0xcedba04ad0952342), CONST64(0x8c2b41a1797f15d1), + CONST64(0x4b3a639d83414e64), CONST64(0x09ca82762aab78f7), + CONST64(0x87e8c60fded7cf9d), CONST64(0xc51827e4773df90e), + CONST64(0x020905d88d03a2bb), CONST64(0x40f9e43324e99428), + CONST64(0x2cffe7d5975e55e2), CONST64(0x6e0f063e3eb46371), + CONST64(0xa91e2402c48a38c4), CONST64(0xebeec5e96d600e57), + CONST64(0x65cc8190991cb93d), CONST64(0x273c607b30f68fae), + CONST64(0xe02d4247cac8d41b), CONST64(0xa2dda3ac6322e288), + CONST64(0xbe992b5f8bdb8c5c), CONST64(0xfc69cab42231bacf), + CONST64(0x3b78e888d80fe17a), CONST64(0x7988096371e5d7e9), + CONST64(0xf7aa4d1a85996083), CONST64(0xb55aacf12c735610), + CONST64(0x724b8ecdd64d0da5), CONST64(0x30bb6f267fa73b36), + CONST64(0x4ac29f2a07bfd00d), CONST64(0x08327ec1ae55e69e), + CONST64(0xcf235cfd546bbd2b), CONST64(0x8dd3bd16fd818bb8), + CONST64(0x03f1f96f09fd3cd2), CONST64(0x41011884a0170a41), + CONST64(0x86103ab85a2951f4), CONST64(0xc4e0db53f3c36767), + CONST64(0xd8a453a01b3a09b3), CONST64(0x9a54b24bb2d03f20), + CONST64(0x5d45907748ee6495), CONST64(0x1fb5719ce1045206), + CONST64(0x919735e51578e56c), CONST64(0xd367d40ebc92d3ff), + CONST64(0x1476f63246ac884a), CONST64(0x568617d9ef46bed9), + CONST64(0xe085162ab69d5e3c), CONST64(0xa275f7c11f7768af), + CONST64(0x6564d5fde549331a), CONST64(0x279434164ca30589), + CONST64(0xa9b6706fb8dfb2e3), CONST64(0xeb46918411358470), + CONST64(0x2c57b3b8eb0bdfc5), CONST64(0x6ea7525342e1e956), + CONST64(0x72e3daa0aa188782), CONST64(0x30133b4b03f2b111), + CONST64(0xf7021977f9cceaa4), CONST64(0xb5f2f89c5026dc37), + CONST64(0x3bd0bce5a45a6b5d), CONST64(0x79205d0e0db05dce), + CONST64(0xbe317f32f78e067b), CONST64(0xfcc19ed95e6430e8), + CONST64(0x86b86ed5267cdbd3), CONST64(0xc4488f3e8f96ed40), + CONST64(0x0359ad0275a8b6f5), CONST64(0x41a94ce9dc428066), + CONST64(0xcf8b0890283e370c), CONST64(0x8d7be97b81d4019f), + CONST64(0x4a6acb477bea5a2a), CONST64(0x089a2aacd2006cb9), + CONST64(0x14dea25f3af9026d), CONST64(0x562e43b4931334fe), + CONST64(0x913f6188692d6f4b), CONST64(0xd3cf8063c0c759d8), + CONST64(0x5dedc41a34bbeeb2), CONST64(0x1f1d25f19d51d821), + CONST64(0xd80c07cd676f8394), CONST64(0x9afce626ce85b507) +}; + +uint64_t update_crc64(const void* buf, unint len, u64 crc) +{ + const u8* b = (const u8*)buf; + unint i; + for (i = 0; i < len; i++) { + crc = CRC64_Table[(u8)(crc >> 56) ^ *b++] ^ (crc << 8); + } + return ~crc; +} + +u64 crc64(const void* buf, unint len) +{ + return update_crc64(buf, len, INITIAL_CRC64); +} + +u64 CRC64(const char* t) +{ + u64 crc = INITIAL_CRC64; + const u8* s = (const u8*)t; + while (*s) { + crc = CRC64_Table[(u8)(crc >> 56) ^ *s++] ^ (crc << 8); + } + return crc; +} \ No newline at end of file diff --git a/lib/strhash64/StrHash64.h b/lib/strhash64/StrHash64.h new file mode 100644 index 0000000..3de4412 --- /dev/null +++ b/lib/strhash64/StrHash64.h @@ -0,0 +1,93 @@ +#pragma once + +/* + * Below are the various copyright notices from the original source. + * + * + * The source has be substationally modified: + * 1. Unneeded code has been deleted. + * 2. The code was converted from C++ to C. + * 3. Routines optimized for hashing were added. + */ +/////////////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2006 Anton Samokhvalov +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +/////////////////////////////////////////////////////////////////////////////////// +/* + [To some parts of this code] +*/ +/* + Copyright (C) 1995-2004 Jean-loup Gailly and Mark Adler + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu +*/ +/* + [To some parts of this code] +*/ +/* + Copyright (c) 2003, Dominik Reichl + All rights reserved. + LICENSE TERMS + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of ReichlSoft nor the names of its contributors may be used + to endorse or promote products derived from this software without specific + prior written permission. + DISCLAIMER + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include + +#define INITIAL_CRC64 0xffffffffffffffffULL + +extern uint64_t update_crc64(const void* buf, uint32_t len, uint64_t crc); +extern uint64_t crc64(const void* buf, uint32_t len); +extern uint64_t CRC64(const char* t); \ No newline at end of file diff --git a/src/Companion.cpp b/src/Companion.cpp index 1b98d2d..761f2eb 100644 --- a/src/Companion.cpp +++ b/src/Companion.cpp @@ -2,208 +2,450 @@ #include "storm/SWrapper.h" #include "utils/MIODecoder.h" -#include "factories/RawFactory.h" -#include "factories/BlobFactory.h" -#include "factories/debug/MIO0Factory.h" -#include "factories/AudioHeaderFactory.h" -#include "factories/SequenceFactory.h" -#include "factories/SampleFactory.h" +#include "factories/sm64/AnimationFactory.h" +#include "factories/sm64/DialogFactory.h" +#include "factories/sm64/DictionaryFactory.h" +#include "factories/sm64/TextFactory.h" #include "factories/BankFactory.h" +#include "factories/AudioHeaderFactory.h" +#include "factories/SampleFactory.h" +#include "factories/SequenceFactory.h" +#include "factories/VtxFactory.h" #include "factories/TextureFactory.h" -#include "factories/sm64/SAnimFactory.h" -#include "factories/sm64/STextFactory.h" -#include "factories/sm64/SDialogFactory.h" -#include "factories/sm64/SDictionaryFactory.h" +#include "factories/DisplayListFactory.h" +#include "factories/BlobFactory.h" +#include "factories/LightsFactory.h" +#include "factories/mk64/WaypointFactory.h" #include "spdlog/spdlog.h" -#include #include #include #include -namespace fs = std::filesystem; using namespace std::chrono; +namespace fs = std::filesystem; -void Companion::Init() { +static const std::string regular = "[%Y-%m-%d %H:%M:%S.%e] [%l] %v"; +static const std::string line = "[%Y-%m-%d %H:%M:%S.%e] [%l] > %v"; + +void Companion::Init(const ExportType type) { spdlog::set_level(spdlog::level::debug); spdlog::set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%l] %v"); - this->RegisterFactory("AUDIO:HEADER", new AudioHeaderFactory()); - this->RegisterFactory("SEQUENCE", new SequenceFactory()); - this->RegisterFactory("SAMPLE", new SampleFactory()); - this->RegisterFactory("BANK", new BankFactory()); + this->gExporterType = type; + this->RegisterFactory("BLOB", std::make_shared()); + this->RegisterFactory("TEXTURE", std::make_shared()); + this->RegisterFactory("VTX", std::make_shared()); + this->RegisterFactory("LIGHTS", std::make_shared()); + this->RegisterFactory("GFX", std::make_shared()); + this->RegisterFactory("AUDIO:HEADER", std::make_shared()); + this->RegisterFactory("SEQUENCE", std::make_shared()); + this->RegisterFactory("SAMPLE", std::make_shared()); + this->RegisterFactory("BANK", std::make_shared()); - this->RegisterFactory("TEXTURE", new TextureFactory()); - this->RegisterFactory("BLOB", new BlobFactory()); + // SM64 specific + this->RegisterFactory("SM64:DIALOG", std::make_shared()); + this->RegisterFactory("SM64:TEXT", std::make_shared()); + this->RegisterFactory("SM64:DICTIONARY", std::make_shared()); + this->RegisterFactory("SM64:ANIM", std::make_shared()); + // this->RegisterFactory("GEO_LAYOUT", new SGeoFactory()); - // SM64 Specific - this->RegisterFactory("SM64:DIALOG", new SDialogFactory()); - this->RegisterFactory("SM64:ANIM", new SAnimFactory()); - this->RegisterFactory("SM64:TEXT", new STextFactory()); - this->RegisterFactory("SM64:DICTIONARY", new SDictionaryFactory()); - - // Debug - this->RegisterFactory("MIO0", new MIO0Factory()); + // MK64 specific + this->RegisterFactory("MK64:TRACKWAYPOINTS", std::make_shared()); this->Process(); } +void Companion::ExtractNode(YAML::Node& node, std::string& name, SWrapper* binary) { + std::ostringstream stream; + + auto type = node["type"].as(); + auto offset = node["offset"].as(); + std::transform(type.begin(), type.end(), type.begin(), ::toupper); + + SPDLOG_INFO("[{}] Processing {} at 0x{:X}", type, name, offset); + auto factory = this->GetFactory(type); + if(!factory.has_value()){ + SPDLOG_ERROR("No factory found for {}", name); + return; + } + + auto result = factory->get()->parse(this->gRomData, node); + if(!result.has_value()){ + SPDLOG_ERROR("Failed to process {}", name); + return; + } + + auto exporter = factory->get()->GetExporter(this->gExporterType); + if(!exporter.has_value()){ + SPDLOG_ERROR("No exporter found for {}", name); + return; + } + + for (auto [fst, snd] : this->gAssetDependencies[this->gCurrentFile]) { + if(snd.second) continue; + std::string doutput = (this->gCurrentDirectory / fst).string(); + std::replace(doutput.begin(), doutput.end(), '\\', '/'); + this->gAssetDependencies[this->gCurrentFile][fst].second = true; + this->ExtractNode(snd.first, doutput, binary); + } + + switch (this->gExporterType) { + case ExportType::Binary: { + if(binary == nullptr) break; + stream.str(""); + stream.clear(); + exporter->get()->Export(stream, result.value(), name, node, &name); + auto data = stream.str(); + binary->CreateFile(name, std::vector(data.begin(), data.end())); + break; + } + default: { + exporter->get()->Export(stream, result.value(), name, node, &name); + break; + } + } + + SPDLOG_INFO("Processed {}", name); + this->gWriteMap[this->gCurrentFile][type].emplace_back(node["offset"].as(), stream.str()); +} + void Companion::Process() { - const std::string regular = "[%Y-%m-%d %H:%M:%S.%e] [%l] %v"; - const std::string line = "[%Y-%m-%d %H:%M:%S.%e] [%l] > %v"; + if(!fs::exists("config.yml")) { + SPDLOG_ERROR("No config file found"); + return; + } auto start = duration_cast(system_clock::now().time_since_epoch()); std::ifstream input( this->gRomPath, std::ios::binary ); - this->gRomData = std::vector( std::istreambuf_iterator( input ), {} ); + this->gRomData = std::vector( std::istreambuf_iterator( input ), {} ); input.close(); - this->cartridge = new N64::Cartridge(this->gRomData); - cartridge->Initialize(); + this->gCartridge = new N64::Cartridge(this->gRomData); + gCartridge->Initialize(); YAML::Node config = YAML::LoadFile("config.yml"); - if(!config[cartridge->GetHash()]){ - SPDLOG_ERROR("No config found for {}", cartridge->GetHash()); + if(!config[gCartridge->GetHash()]){ + SPDLOG_ERROR("No config found for {}", gCartridge->GetHash()); return; } - auto cfg = config[cartridge->GetHash()]; - auto path = cfg["path"].as(); - auto otr = cfg["output"].as(); + auto rom = config[gCartridge->GetHash()]; + auto cfg = rom["config"]; + + if(!cfg) { + SPDLOG_ERROR("No config found for {}", gCartridge->GetHash()); + return; + } + + if(rom["segments"]) { + this->gSegments = rom["segments"].as>(); + } + auto path = rom["path"].as(); + auto opath = cfg["output"]; + auto gbi = cfg["gbi"]; + + switch (gExporterType) { + case ExportType::Binary: { + this->gOutputPath = opath && opath["binary"] ? opath["binary"].as() : "generic.otr"; + break; + } + case ExportType::Header: { + this->gOutputPath = opath && opath["headers"] ? opath["headers"].as() : "headers"; + break; + } + case ExportType::Code: { + this->gOutputPath = opath && opath["code"] ? opath["code"].as() : "code"; + break; + } + } + + if(gbi) { + auto key = gbi.as(); + + if(key == "F3D") { + this->gGBIVersion = GBIVersion::f3d; + } else if(key == "F3DEX") { + this->gGBIVersion = GBIVersion::f3dex; + } else if(key == "F3DB") { + this->gGBIVersion = GBIVersion::f3db; + } else if(key == "F3DEX2") { + this->gGBIVersion = GBIVersion::f3dex2; + } else if(key == "F3DEXB") { + this->gGBIVersion = GBIVersion::f3dexb; + } else if (key == "F3DEX_MK64") { + this->gGBIVersion = GBIVersion::f3dex; + this->gGBIMinorVersion = GBIMinorVersion::Mk64; + } else { + SPDLOG_ERROR("Invalid GBI version"); + return; + } + } + + if(auto sort = cfg["sort"]) { + if(sort.IsSequence()) { + this->gWriteOrder = sort.as>(); + } else { + this->gWriteOrder = sort.as(); + } + } else { + this->gWriteOrder = std::vector { + "LIGHTS", "TEXTURE", "VTX", "GFX" + }; + } + + if(std::holds_alternative>(this->gWriteOrder)) { + for (auto& [key, _] : this->gFactories) { + auto entries = std::get>(this->gWriteOrder); + + if(std::find(entries.begin(), entries.end(), key) != entries.end()) { + continue; + } + + entries.push_back(key); + } + } SPDLOG_INFO("------------------------------------------------"); spdlog::set_pattern(line); - SPDLOG_INFO("Starting CubeOS..."); - SPDLOG_INFO("Game: {}", cartridge->GetGameTitle()); - SPDLOG_INFO("CRC: {}", cartridge->GetCRC()); - SPDLOG_INFO("Version: {}", cartridge->GetVersion()); - SPDLOG_INFO("Country: [{}]", cartridge->GetCountryCode()); - SPDLOG_INFO("Hash: {}", cartridge->GetHash()); + SPDLOG_INFO("Starting Torch..."); + SPDLOG_INFO("Game: {}", gCartridge->GetGameTitle()); + SPDLOG_INFO("CRC: {}", gCartridge->GetCRC()); + SPDLOG_INFO("Version: {}", gCartridge->GetVersion()); + SPDLOG_INFO("Country: [{}]", gCartridge->GetCountryCode()); + SPDLOG_INFO("Hash: {}", gCartridge->GetHash()); SPDLOG_INFO("Assets: {}", path); - auto wrapper = SWrapper(otr); + auto wrapper = this->gExporterType == ExportType::Binary ? new SWrapper(this->gOutputPath) : nullptr; auto vWriter = LUS::BinaryWriter(); vWriter.SetEndianness(LUS::Endianness::Big); - vWriter.Write((uint8_t) LUS::Endianness::Big); - vWriter.Write(cartridge->GetCRC()); + vWriter.Write(static_cast(LUS::Endianness::Big)); + vWriter.Write(gCartridge->GetCRC()); - for (const auto & entry : fs::directory_iterator(path)){ + for (const auto & entry : fs::recursive_directory_iterator(path)){ + if(entry.is_directory()) continue; YAML::Node root = YAML::LoadFile(entry.path().string()); - for(auto asset = root.begin(); asset != root.end(); ++asset){ - auto type = asset->second["type"].as(); + this->gCurrentDirectory = relative(entry.path(), path).replace_extension(""); + this->gCurrentFile = entry.path().string(); - LUS::BinaryWriter write = LUS::BinaryWriter(); - RawFactory* factory = this->GetFactory(type); - factory->SetCartridge(cartridge); + for(auto asset = root.begin(); asset != root.end(); ++asset){ + auto node = asset->second; + if(!asset->second["offset"]) continue; + + auto output = (this->gCurrentDirectory / asset->first.as()).string(); + std::replace(output.begin(), output.end(), '\\', '/'); + + this->gAddrMap[this->gCurrentFile][node["offset"].as()] = std::make_tuple(output, node); + } + + // Stupid hack because the iteration broke the assets + root = YAML::LoadFile(entry.path().string()); + + for(auto asset = root.begin(); asset != root.end(); ++asset){ spdlog::set_pattern(regular); SPDLOG_INFO("------------------------------------------------"); spdlog::set_pattern(line); - SPDLOG_INFO("Processing {} [{}]", asset->first.as(), type); - SPDLOG_INFO("Root: {}", entry.path().string()); - if(!factory->process(&write, asset->second, this->gRomData)){ - SPDLOG_ERROR("Failed to process {}", asset->first.as()); + auto entryName = asset->first.as(); + std::string output = (this->gCurrentDirectory / entryName).string(); + std::replace(output.begin(), output.end(), '\\', '/'); + + this->ExtractNode(asset->second, output, wrapper); + } + + if(gExporterType != ExportType::Binary){ + std::string output = (this->gOutputPath / this->gCurrentDirectory).string(); + + switch (gExporterType) { + case ExportType::Header: { + output += "/definition.h"; + break; + } + case ExportType::Code: { + output += "/root.inc.c"; + break; + } + default: break; + } + + std::ostringstream stream; + + if(std::holds_alternative(this->gWriteOrder)) { + auto sort = std::get(this->gWriteOrder); + std::vector> outbuf; + for (const auto& [type, buffer] : this->gWriteMap[this->gCurrentFile]) { + outbuf.insert(outbuf.end(), buffer.begin(), buffer.end()); + } + this->gWriteMap.clear(); + + if(sort == "OFFSET") { + std::sort(outbuf.begin(), outbuf.end(), [](const auto& a, const auto& b) { + return std::get(a) < std::get(b); + }); + } else if(sort == "ROFFSET") { + std::sort(outbuf.begin(), outbuf.end(), [](const auto& a, const auto& b) { + return std::get(a) > std::get(b); + }); + } else if(sort != "LINEAR") { + throw std::runtime_error("Invalid write order"); + } + + for (auto& [symbol, buffer] : outbuf) { + stream << buffer; + } + outbuf.clear(); + } else { + for (const auto& type : std::get>(this->gWriteOrder)) { + std::vector> outbuf = this->gWriteMap[this->gCurrentFile][type]; + + std::sort(outbuf.begin(), outbuf.end(), [](const auto& a, const auto& b) { + return std::get(a) > std::get(b); + }); + + for (auto& [symbol, buffer] : outbuf) { + stream << buffer; + } + } + } + + std::string buffer = stream.str(); + + if(buffer.empty()) { continue; } - auto buffer = write.ToVector(); - auto output = (entry.path().stem() / asset->first.as()).string(); - std::replace(output.begin(), output.end(), '\\', '/'); - - wrapper.CreateFile(output, buffer); - - if(type != "TEXTURE") { - SPDLOG_DEBUG("Writing debug file"); - std::string dpath = "debug/" + output; - if(!fs::exists(fs::path(dpath).parent_path())){ - fs::create_directories(fs::path(dpath).parent_path()); - } - std::ofstream stream(dpath, std::ios::binary); - stream.write((char*)buffer.data(), buffer.size()); - stream.close(); + if(!exists(fs::path(output).parent_path())){ + create_directories(fs::path(output).parent_path()); } - SPDLOG_INFO("Processed {}", output); + std::ofstream file(output, std::ios::binary); - write.Close(); + if(gExporterType == ExportType::Header) { + std::string symbol = entry.path().stem(); + std::transform(symbol.begin(), symbol.end(), symbol.begin(), toupper); + file << "#ifndef " << symbol << "_H" << std::endl; + file << "#define " << symbol << "_H" << std::endl << std::endl; + file << buffer; + file << std::endl << "#endif" << std::endl; + } else { + file << buffer; + } + + file.close(); } } spdlog::set_pattern(regular); SPDLOG_INFO("------------------------------------------------"); spdlog::set_pattern(line); - SPDLOG_INFO("Writing version file"); - wrapper.CreateFile("version", vWriter.ToVector()); - vWriter.Close(); + if(wrapper != nullptr) { + SPDLOG_INFO("Writing version file"); + wrapper->CreateFile("version", vWriter.ToVector()); + vWriter.Close(); + wrapper->Close(); + } auto end = duration_cast(system_clock::now().time_since_epoch()); SPDLOG_INFO("Done! Took {}ms", end.count() - start.count()); - SPDLOG_INFO("Exported to {}", otr); spdlog::set_pattern(regular); SPDLOG_INFO("------------------------------------------------"); MIO0Decoder::ClearCache(); - wrapper.Close(); - this->cartridge = nullptr; - Companion::Instance = nullptr; -} - -void Companion::RegisterFactory(const std::string &extension, RawFactory *factory) { - this->gFactories[extension] = factory; - SPDLOG_DEBUG("Registered factory for {}", extension); -} - -RawFactory *Companion::GetFactory(const std::string &extension) { - if(!this->gFactories.contains(extension)){ - throw std::runtime_error("No factory found for " + extension); - } - - return this->gFactories[extension]; + this->gCartridge = nullptr; + Instance = nullptr; } void Companion::Pack(const std::string& folder, const std::string& output) { - spdlog::set_level(spdlog::level::debug); - spdlog::set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%l] %v"); + spdlog::set_level(spdlog::level::debug); + spdlog::set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%l] %v"); - SPDLOG_INFO("------------------------------------------------"); + SPDLOG_INFO("------------------------------------------------"); - SPDLOG_INFO("Starting CubeOS..."); - SPDLOG_INFO("Scanning {}", folder); + SPDLOG_INFO("Starting Torch..."); + SPDLOG_INFO("Scanning {}", folder); - auto start = duration_cast(system_clock::now().time_since_epoch()); - std::unordered_map> files; + auto start = duration_cast(system_clock::now().time_since_epoch()); + std::unordered_map> files; - for (const auto & entry : fs::recursive_directory_iterator(folder)){ - if(entry.is_directory()) continue; - std::ifstream input( entry.path(), std::ios::binary ); - auto data = std::vector( std::istreambuf_iterator( input ), {} ); - input.close(); - files[entry.path().string()] = data; - } + for (const auto & entry : fs::recursive_directory_iterator(folder)){ + if(entry.is_directory()) continue; + std::ifstream input( entry.path(), std::ios::binary ); + auto data = std::vector( std::istreambuf_iterator( input ), {} ); + input.close(); + files[entry.path().string()] = data; + } - auto wrapper = SWrapper(output); + auto wrapper = SWrapper(output); - for(auto& [path, data] : files){ - std::string normalized = path; - std::replace(normalized.begin(), normalized.end(), '\\', '/'); - // Remove parent folder - normalized = normalized.substr(folder.length() + 1); - wrapper.CreateFile(normalized, data); - SPDLOG_INFO("> Added {}", normalized); - } + for(auto& [path, data] : files){ + std::string normalized = path; + std::replace(normalized.begin(), normalized.end(), '\\', '/'); + // Remove parent folder + normalized = normalized.substr(folder.length() + 1); + wrapper.CreateFile(normalized, data); + SPDLOG_INFO("> Added {}", normalized); + } - auto end = duration_cast(system_clock::now().time_since_epoch()); - SPDLOG_INFO("Done! Took {}ms", end.count() - start.count()); - SPDLOG_INFO("Exported to {}", output); - spdlog::set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%l] %v"); - SPDLOG_INFO("------------------------------------------------"); + auto end = duration_cast(system_clock::now().time_since_epoch()); + SPDLOG_INFO("Done! Took {}ms", end.count() - start.count()); + SPDLOG_INFO("Exported to {}", output); + spdlog::set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%l] %v"); + SPDLOG_INFO("------------------------------------------------"); - wrapper.Close(); + wrapper.Close(); +} + +void Companion::RegisterAsset(const std::string& name, YAML::Node& node) { + if(!node["offset"]) return; + this->gAssetDependencies[this->gCurrentFile][name] = std::make_pair(node, false); + + auto output = (this->gCurrentDirectory / name).string(); + std::replace(output.begin(), output.end(), '\\', '/'); + this->gAddrMap[this->gCurrentFile][node["offset"].as()] = std::make_tuple(output, node); +} + +void Companion::RegisterFactory(const std::string& type, const std::shared_ptr& factory) { + this->gFactories[type] = factory; + SPDLOG_DEBUG("Registered factory for {}", type); +} + +std::optional> Companion::GetFactory(const std::string &type) { + if(!this->gFactories.contains(type)){ + return std::nullopt; + } + + return this->gFactories[type]; +} + +std::optional Companion::GetSegmentedAddr(const uint8_t segment) { + if(segment >= this->gSegments.size()) { + return std::nullopt; + } + + return this->gSegments[segment]; +} + +std::optional> Companion::GetNodeByAddr(const uint32_t addr){ + if(!this->gAddrMap.contains(this->gCurrentFile)){ + return std::nullopt; + } + + if(!this->gAddrMap[this->gCurrentFile].contains(addr)){ + return std::nullopt; + } + + return this->gAddrMap[this->gCurrentFile][addr]; +} + +std::string Companion::NormalizeAsset(const std::string& name) const { + auto path = fs::path(this->gCurrentFile).stem().string() + "_" + name; + return path; } \ No newline at end of file diff --git a/src/Companion.h b/src/Companion.h index 8d131fb..1223f91 100644 --- a/src/Companion.h +++ b/src/Companion.h @@ -1,28 +1,71 @@ #pragma once #include -#include -#include -#include +#include #include -#include "factories/RawFactory.h" +#include +#include +#include +#include +#include "factories/BaseFactory.h" #include "n64/Cartridge.h" +class SWrapper; +namespace fs = std::filesystem; + +enum class GBIVersion { + f3d, + f3dex, + f3db, + f3dex2, + f3dexb, +}; + +enum class GBIMinorVersion { + None, + Mk64, +}; + class Companion { public: static Companion* Instance; - explicit Companion(std::filesystem::path rom) : gRomPath(std::move(rom)) {} - void Init(); + explicit Companion(std::filesystem::path rom, bool otr, bool debug) : gRomPath(std::move(rom)), gOTRMode(otr), gIsDebug(debug) {} + void Init(ExportType type); void Process(); - N64::Cartridge* GetCartridge() { return this->cartridge; } + bool IsOTRMode() { return this->gOTRMode; } + bool IsDebug() { return this->gIsDebug; } + N64::Cartridge* GetCartridge() { return this->gCartridge; } + std::vector GetRomData() { return this->gRomData; } + std::string GetOutputPath() { return this->gOutputPath; } + GBIVersion GetGBIVersion() { return this->gGBIVersion; } + GBIMinorVersion GetGBIMinorVersion() { return this->gGBIMinorVersion; } + std::optional GetSegmentedAddr(uint8_t segment); + std::optional> GetNodeByAddr(uint32_t addr); + std::optional> GetFactory(const std::string& type); static void Pack(const std::string& folder, const std::string& output); + std::string NormalizeAsset(const std::string& name) const; + void RegisterAsset(const std::string& name, YAML::Node& node); private: - std::filesystem::path gRomPath; + bool gOTRMode = false; + bool gIsDebug = false; + GBIVersion gGBIVersion = GBIVersion::f3d; + GBIMinorVersion gGBIMinorVersion = GBIMinorVersion::None; + std::string gOutputPath; + std::string gCurrentFile; + ExportType gExporterType; + fs::path gCurrentDirectory; + N64::Cartridge* gCartridge; std::vector gRomData; - std::unordered_map gFactories; - N64::Cartridge* cartridge; + std::filesystem::path gRomPath; + std::vector gSegments; - void RegisterFactory(const std::string& type, RawFactory* factory); - RawFactory* GetFactory(const std::string& type); -}; \ No newline at end of file + std::variant, std::string> gWriteOrder; + std::unordered_map> gFactories; + std::map>> gAssetDependencies; + std::map>>> gWriteMap; + std::unordered_map>> gAddrMap; + + void RegisterFactory(const std::string& type, const std::shared_ptr& factory); + void ExtractNode(YAML::Node& node, std::string& name, SWrapper* binary); +}; diff --git a/src/factories/AudioHeaderFactory.cpp b/src/factories/AudioHeaderFactory.cpp index b493458..b33d057 100644 --- a/src/factories/AudioHeaderFactory.cpp +++ b/src/factories/AudioHeaderFactory.cpp @@ -3,8 +3,8 @@ #include #include "audio/AudioManager.h" -bool AudioHeaderFactory::process(LUS::BinaryWriter* writer, YAML::Node& data, std::vector& buffer) { +std::optional> AudioHeaderFactory::parse(std::vector& buffer, YAML::Node& data) { AudioManager::Instance = new AudioManager(); AudioManager::Instance->initialize(buffer, data); - return false; + return std::nullopt; } \ No newline at end of file diff --git a/src/factories/AudioHeaderFactory.h b/src/factories/AudioHeaderFactory.h index bd7336e..5372eb5 100644 --- a/src/factories/AudioHeaderFactory.h +++ b/src/factories/AudioHeaderFactory.h @@ -1,9 +1,11 @@ #pragma once -#include "RawFactory.h" +#include "BaseFactory.h" -class AudioHeaderFactory : public RawFactory { +class AudioHeaderFactory : public BaseFactory { public: - AudioHeaderFactory() = default; - bool process(LUS::BinaryWriter* write, YAML::Node& data, std::vector& buffer) override; + std::optional> parse(std::vector& buffer, YAML::Node& data) override; + inline std::unordered_map> GetExporters() override { + return {}; + } }; \ No newline at end of file diff --git a/src/factories/BankFactory.cpp b/src/factories/BankFactory.cpp index 30d554f..6b4dc93 100644 --- a/src/factories/BankFactory.cpp +++ b/src/factories/BankFactory.cpp @@ -1,39 +1,32 @@ #include "BankFactory.h" - -#include -#include "audio/AudioManager.h" +#include "utils/MIODecoder.h" +#include "Companion.h" #include "audio/samples_table.h" -#include "binarytools/BinaryReader.h" -bool BankFactory::process(LUS::BinaryWriter* writer, YAML::Node& data, std::vector& buffer) { - auto banks = AudioManager::Instance->get_banks(); - auto bankId = data["id"].as(); - auto bank = banks[bankId]; +void BankBinaryExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement ) { + auto writer = LUS::BinaryWriter(); + auto bank = std::static_pointer_cast(raw); - auto gSampleTable = this->GetCartridge()->GetCountry() == N64::CountryCode::Japan ? gJPSampleTable : gUSSampleTable; + WriteHeader(writer, LUS::ResourceType::Bank, 0); + writer.Write(bank->mBankId); + writer.Write((uint32_t) bank->mBank.insts.size()); + for (auto& instrument : bank->mBank.insts) { + writer.Write((uint8_t) instrument.valid); + if(!instrument.valid) continue; - WRITE_HEADER(LUS::ResourceType::Bank, 0); + writer.Write((uint8_t) instrument.releaseRate); + writer.Write((uint8_t) instrument.normalRangeLo); + writer.Write((uint8_t) instrument.normalRangeHi); - WRITE_U32(bankId); - WRITE_U32(bank.insts.size()); - for(auto &instrument : bank.insts){ - WRITE_U8(instrument.valid); - if(!instrument.valid){ - continue; - } - WRITE_U8(instrument.releaseRate); - WRITE_U8(instrument.normalRangeLo); - WRITE_U8(instrument.normalRangeHi); - - auto envelope = bank.envelopes[instrument.envelope]; + auto envelope = bank->mBank.envelopes[instrument.envelope]; if(!envelope.entries.empty()){ - WRITE_U32(envelope.entries.size()); - for(auto &entry : envelope.entries){ - writer->Write(entry.delay); - writer->Write(entry.arg); + writer.Write((uint32_t) envelope.entries.size()); + for (auto& entry : envelope.entries) { + writer.Write((uint16_t) entry.delay); + writer.Write((uint16_t) entry.arg); } } else { - WRITE_U32(0); + writer.Write((uint32_t) 0); } uint32_t soundFlags = 0; @@ -50,47 +43,55 @@ bool BankFactory::process(LUS::BinaryWriter* writer, YAML::Node& data, std::vect soundFlags |= (1 << 2); } - WRITE_U32(soundFlags); + writer.Write((uint32_t) soundFlags); if(hasLo){ auto value = instrument.soundLo.value(); - uint32_t idx = AudioManager::Instance->get_index(bank.samples[value.offset]); - writer->Write(std::string(gSampleTable[idx])); - writer->Write(value.tuning); + uint32_t idx = AudioManager::Instance->get_index(bank->mBank.samples[value.offset]); + writer.Write(std::string(bank->mSampleTable[idx])); + writer.Write(value.tuning); } if(hasMed){ auto value = instrument.soundMed.value(); - uint32_t idx = AudioManager::Instance->get_index(bank.samples[value.offset]); - writer->Write(std::string(gSampleTable[idx])); - writer->Write(value.tuning); + uint32_t idx = AudioManager::Instance->get_index(bank->mBank.samples[value.offset]); + writer.Write(std::string(bank->mSampleTable[idx])); + writer.Write(value.tuning); } if(hasHi){ auto value = instrument.soundHi.value(); - uint32_t idx = AudioManager::Instance->get_index(bank.samples[value.offset]); - writer->Write(std::string(gSampleTable[idx])); - writer->Write(value.tuning); + uint32_t idx = AudioManager::Instance->get_index(bank->mBank.samples[value.offset]); + writer.Write(std::string(bank->mSampleTable[idx])); + writer.Write(value.tuning); } } - WRITE_U32(bank.drums.size()); - for(auto &drum : bank.drums){ - WRITE_U8(drum.releaseRate); - WRITE_U8(drum.pan); - auto envelope = bank.envelopes[drum.envelope]; + writer.Write((uint32_t) bank->mBank.drums.size()); + for(auto &drum : bank->mBank.drums){ + writer.Write((uint8_t) drum.releaseRate); + writer.Write((uint8_t) drum.pan); + auto envelope = bank->mBank.envelopes[drum.envelope]; if(!envelope.entries.empty()){ - WRITE_U32(envelope.entries.size()); + writer.Write((uint32_t) envelope.entries.size()); for(auto &entry : envelope.entries){ - writer->Write(entry.delay); - writer->Write(entry.arg); + writer.Write(entry.delay); + writer.Write(entry.arg); } } else { - WRITE_U32(0); + writer.Write((uint32_t) 0); } - uint32_t idx = AudioManager::Instance->get_index(bank.samples[drum.sound.offset]); - std::string out = std::string(gSampleTable[idx]); - writer->Write(out); - writer->Write(drum.sound.tuning); + uint32_t idx = AudioManager::Instance->get_index(bank->mBank.samples[drum.sound.offset]); + std::string out = std::string(bank->mSampleTable[idx]); + writer.Write(out); + writer.Write(drum.sound.tuning); } - return true; + writer.Finish(write); +} + +std::optional> BankFactory::parse(std::vector& buffer, YAML::Node& data) { + auto banks = AudioManager::Instance->get_banks(); + auto bankId = data["id"].as(); + + auto gSampleTable = Companion::Instance->GetCartridge()->GetCountry() == N64::CountryCode::Japan ? gJPSampleTable : gUSSampleTable; + return std::make_shared(banks[bankId], bankId, gSampleTable); } \ No newline at end of file diff --git a/src/factories/BankFactory.h b/src/factories/BankFactory.h index c19f137..bdabe10 100644 --- a/src/factories/BankFactory.h +++ b/src/factories/BankFactory.h @@ -1,9 +1,27 @@ #pragma once -#include "RawFactory.h" +#include "BaseFactory.h" +#include "audio/AudioManager.h" -class BankFactory : public RawFactory { +class BankData : public IParsedData { public: - BankFactory() = default; - bool process(LUS::BinaryWriter* write, YAML::Node& data, std::vector& buffer) override; + Bank mBank; + uint32_t mBankId; + const char** mSampleTable; + + BankData(Bank bank, uint32_t bankId, const char** sampleTable) : mBank(bank), mBankId(bankId), mSampleTable(sampleTable) {} +}; + +class BankBinaryExporter : public BaseExporter { + void Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) override; +}; + +class BankFactory : public BaseFactory { +public: + std::optional> parse(std::vector& buffer, YAML::Node& data) override; + inline std::unordered_map> GetExporters() override { + return { + REGISTER(Binary, BankBinaryExporter) + }; + } }; \ No newline at end of file diff --git a/src/factories/BaseFactory.cpp b/src/factories/BaseFactory.cpp new file mode 100644 index 0000000..c0da8cd --- /dev/null +++ b/src/factories/BaseFactory.cpp @@ -0,0 +1,17 @@ +#include "BaseFactory.h" + +void BaseExporter::WriteHeader(LUS::BinaryWriter &writer, LUS::ResourceType resType, int32_t version) { + writer.Write((uint8_t)(LUS::Endianness::Native)); // 0x00 + writer.Write((uint8_t)0); // 0x01 + writer.Write((uint8_t)0); // 0x02 + writer.Write((uint8_t)0); // 0x03 + writer.Write((uint32_t) resType); // 0x04 + writer.Write((uint32_t) version); // 0x08 + writer.Write((uint64_t) 0xDEADBEEFDEADBEEF); // id, 0x0C + writer.Write((uint32_t) 0); // 0x10 + writer.Write((uint64_t) 0); // ROM CRC, 0x14 + writer.Write((uint32_t) 0); // ROM Enum, 0x1C + + while (writer.GetBaseAddress() < 0x40) + writer.Write((uint32_t)0); // To be used at a later date! +} \ No newline at end of file diff --git a/src/factories/BaseFactory.h b/src/factories/BaseFactory.h new file mode 100644 index 0000000..365816b --- /dev/null +++ b/src/factories/BaseFactory.h @@ -0,0 +1,55 @@ +#pragma once + +#include "ResourceType.h" +#include "n64/Cartridge.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define REGISTER(type, c) { ExportType::type, std::make_shared() }, + +#define SEGMENT_OFFSET(a) ((uint32_t)(a)&0x00FFFFFF) +#define SEGMENT_NUMBER(x) ((x >> 24) & 0xFF) + +#define tab "\t" +#define fourSpaceTab " " + +enum class ExportType { + Header, + Code, + Binary, +}; + +class IParsedData {}; + +template +class GenericData : public IParsedData { +public: + T mData; +}; + +class BaseExporter { +public: + virtual void Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) = 0; + static void WriteHeader(LUS::BinaryWriter& write, LUS::ResourceType resType, int32_t version); +}; + +class BaseFactory { +public: + virtual std::optional> parse(std::vector& buffer, YAML::Node& data) = 0; + std::optional> GetExporter(ExportType type) { + auto exporters = this->GetExporters(); + if (exporters.find(type) != exporters.end()) { + return exporters[type]; + } + return std::nullopt; + } +private: + virtual std::unordered_map> GetExporters() = 0; +}; \ No newline at end of file diff --git a/src/factories/BlobFactory.cpp b/src/factories/BlobFactory.cpp index cc66463..886a206 100644 --- a/src/factories/BlobFactory.cpp +++ b/src/factories/BlobFactory.cpp @@ -1,28 +1,43 @@ #include "BlobFactory.h" -#include #include "utils/MIODecoder.h" +#include -namespace fs = std::filesystem; +void BlobCodeExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement ) { + auto data = std::static_pointer_cast(raw)->mBuffer; -bool BlobFactory::process(LUS::BinaryWriter* writer, YAML::Node& data, std::vector& buffer) { + write << "u8 " << entryName << "[] = {\n" << tab; + for (int i = 0; i < data.size(); i++) { + if ((i % 15 == 0) && i != 0) { + write << "\n" << tab; + } - WRITE_HEADER(LUS::ResourceType::Blob, 0); + write << "0x" << std::hex << std::setw(2) << std::setfill('0') << (int) data[i] << ", "; + } + write << "\n};\n"; +} - auto size = data["size"].as(); - auto offset = data["offset"].as(); +void BlobBinaryExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement ) { + auto writer = LUS::BinaryWriter(); + auto data = std::static_pointer_cast(raw)->mBuffer; + + WriteHeader(writer, LUS::ResourceType::Blob, 0); + writer.Write((uint32_t) data.size()); + writer.Write((char*) data.data(), data.size()); + writer.Finish(write); +} + +std::optional> BlobFactory::parse(std::vector& buffer, YAML::Node& data) { + auto size = data["size"].as(); + auto offset = data["offset"].as(); + std::shared_ptr result; - auto* blob = new uint8_t[size]; if(data["mio0"]){ auto decoded = MIO0Decoder::Decode(buffer, offset); - auto cursor = data["mio0"].as(); - memcpy(blob, decoded.data() + cursor, size); + auto cursor = data["mio0"].as(); + result = std::make_shared(decoded.data() + cursor, size); } else { - memcpy(blob, buffer.data() + offset, size); + result = std::make_shared(buffer.data() + offset, size); } - WRITE_U32(size); // Blob Data Size - WRITE_ARRAY(blob, size); // Blob Data - - delete[] blob; - return true; -} + return result; +} \ No newline at end of file diff --git a/src/factories/BlobFactory.h b/src/factories/BlobFactory.h index 302fb01..c199618 100644 --- a/src/factories/BlobFactory.h +++ b/src/factories/BlobFactory.h @@ -1,9 +1,22 @@ #pragma once -#include "RawFactory.h" +#include "BaseFactory.h" +#include "../types/RawBuffer.h" +class BlobBinaryExporter : public BaseExporter { + void Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) override; +}; -class BlobFactory : public RawFactory { +class BlobCodeExporter : public BaseExporter { + void Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) override; +}; + +class BlobFactory : public BaseFactory { public: - BlobFactory() = default; - bool process(LUS::BinaryWriter* write, YAML::Node& data, std::vector& buffer) override; + std::optional> parse(std::vector& buffer, YAML::Node& data) override; + inline std::unordered_map> GetExporters() override { + return { + REGISTER(Binary, BlobBinaryExporter) + REGISTER(Code, BlobCodeExporter) + }; + } }; \ No newline at end of file diff --git a/src/factories/DisplayListFactory.cpp b/src/factories/DisplayListFactory.cpp new file mode 100644 index 0000000..ec28ed0 --- /dev/null +++ b/src/factories/DisplayListFactory.cpp @@ -0,0 +1,377 @@ +#include "DisplayListFactory.h" +#include "DisplayListOverrides.h" +#include "utils/MIODecoder.h" +#include "spdlog/spdlog.h" +#include "Companion.h" +#include +#include + +#define C0(pos, width) ((w0 >> (pos)) & ((1U << width) - 1)) + +template< typename T > +std::string to_hex(T number, const bool append0x = true) { + std::stringstream stream; + if(append0x) { + stream << "0x"; + } + stream << std::setfill ('0') << std::setw(sizeof(T)*2) + << std::hex << number; + + auto format = stream.str(); + std::transform(format.begin(), format.end(), format.begin(), ::toupper); + return format; +} + +void GFXDSetGBIVersion(){ + switch (Companion::Instance->GetGBIVersion()) { + case GBIVersion::f3d: + gfxd_target(gfxd_f3d); + break; + case GBIVersion::f3dex: + gfxd_target(gfxd_f3dex); + break; + case GBIVersion::f3db: + gfxd_target(gfxd_f3db); + break; + case GBIVersion::f3dex2: + gfxd_target(gfxd_f3dex2); + break; + case GBIVersion::f3dexb: + gfxd_target(gfxd_f3dexb); + break; + } +} + +void DListHeaderExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement) { + const auto symbol = node["symbol"] ? node["symbol"].as() : entryName; + + if(Companion::Instance->IsOTRMode()){ + write << "static const char " << symbol << "[] = \"__OTR__" << (*replacement) << "\";\n\n"; + return; + } + + write << "extern Gfx " << symbol << "[];\n"; +} + +void DListCodeExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement ) { + const auto cmds = std::static_pointer_cast(raw)->mGfxs; + const auto symbol = node["symbol"].as(); + const auto offset = node["offset"].as(); + char out[0xFFFF] = {0}; + + gfxd_input_buffer(cmds.data(), sizeof(uint32_t) * cmds.size()); + gfxd_output_buffer(out, sizeof(out)); + + gfxd_endian(gfxd_endian_host, sizeof(uint32_t)); + gfxd_macro_fn([] { + auto gfx = static_cast(gfxd_macro_data()); + auto opcode = (gfx->words.w0 >> 24) & 0xFF; + + gfxd_puts(fourSpaceTab); + + #define QUAD 0xB5 + #define TRI2 0xB1 + + switch(opcode) { + + // For mk64 only + case QUAD: + if (Companion::Instance->GetGBIMinorVersion() == GBIMinorVersion::Mk64) { + GFXDOverride::Quadrangle(gfx); + } else { + gfxd_macro_dflt(); + } + break; + // Prevents mix and matching of quadrangle commands. Forces 2TRI only. + case TRI2: + GFXDOverride::Triangle2(gfx); + break; + default: + gfxd_macro_dflt(); + break; + } + + gfxd_puts(",\n"); + return 0; + }); + + gfxd_vtx_callback(GFXDOverride::Vtx); + gfxd_timg_callback(GFXDOverride::Texture); + gfxd_dl_callback(GFXDOverride::DisplayList); + gfxd_lightsn_callback(GFXDOverride::Light); + GFXDSetGBIVersion(); + + if (Companion::Instance->IsDebug()) { + write << "// 0x" << std::hex << std::uppercase << offset << "\n"; + } + + gfxd_puts(("Gfx " + symbol + "[] = {\n").c_str()); + gfxd_execute(); + gfxd_puts("};\n\n"); + + write << std::string(out); +} + +void DebugDisplayList(uint32_t w0, uint32_t w1){ + uint32_t dlist[] = {w0, w1}; + gfxd_input_buffer(dlist, sizeof(dlist)); + gfxd_output_fd(fileno(stdout)); + gfxd_endian(gfxd_endian_host, sizeof(uint32_t)); + gfxd_macro_fn([](){ + gfxd_puts("> "); + gfxd_macro_dflt(); + gfxd_puts("\n"); + return 0; + }); + gfxd_vtx_callback(GFXDOverride::Vtx); + gfxd_timg_callback(GFXDOverride::Texture); + gfxd_dl_callback(GFXDOverride::DisplayList); + //gfxd_light_callback(GFXDOverride::Light); + GFXDSetGBIVersion(); + gfxd_execute(); + int bp = 0; +} + +void DListBinaryExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement ) { + auto cmds = std::static_pointer_cast(raw)->mGfxs; + auto writer = LUS::BinaryWriter(); + + WriteHeader(writer, LUS::ResourceType::DisplayList, 0); + + while (writer.GetBaseAddress() % 8 != 0) + writer.Write(static_cast(0xFF)); + + auto bhash = CRC64((*replacement).c_str()); + writer.Write(static_cast((G_MARKER << 24))); + writer.Write(0xBEEFBEEF); + writer.Write(static_cast(bhash >> 32)); + writer.Write(static_cast(bhash & 0xFFFFFFFF)); + +#ifndef _WIN32 +#define case case (uint8_t) +#endif + + for(size_t i = 0; i < cmds.size(); i+=2){ + auto w0 = cmds[i]; + auto w1 = cmds[i + 1]; + uint8_t opcode = w0 >> 24; + + switch (opcode) { + case G_VTX: { + auto nvtx = (C0(0, 16)) / sizeof(Vtx); + auto didx = C0(16, 4); + uint32_t ptr = SEGMENT_OFFSET(w1); + + if(const auto decl = Companion::Instance->GetNodeByAddr(ptr); decl.has_value()){ + uint64_t hash = CRC64(std::get<0>(decl.value()).c_str()); + SPDLOG_INFO("Found vtx: 0x{:X} Hash: 0x{:X} Path: {}", ptr, hash, std::get<0>(decl.value())); + + // TODO: Find a better way to do this because its going to break on other games + Gfx value = gsSPVertexOTR(didx, nvtx, 0); + + SPDLOG_INFO("gsSPVertex({}, {}, 0x{:X})", nvtx, didx, ptr); + + w0 = value.words.w0; + w1 = value.words.w1; + + writer.Write(w0); + writer.Write(w1); + + w0 = hash >> 32; + w1 = hash & 0xFFFFFFFF; + } else { + SPDLOG_WARN("Warning: Could not find vtx at 0x{:X}", ptr); + } + break; + } + case G_DL: { + auto ptr = SEGMENT_OFFSET(w1); + auto dec = Companion::Instance->GetNodeByAddr(ptr); + + Gfx value = gsSPDisplayListOTRHash(ptr); + w0 = value.words.w0; + w1 = value.words.w1; + + writer.Write(w0); + writer.Write(w1); + + if(dec.has_value()){ + uint64_t hash = CRC64(std::get<0>(dec.value()).c_str()); + SPDLOG_INFO("Found display list: 0x{:X} Hash: 0x{:X} Path: {}", ptr, hash, std::get<0>(dec.value())); + w0 = hash >> 32; + w1 = hash & 0xFFFFFFFF; + } else { + SPDLOG_WARN("Warning: Could not find display list at 0x{:X}", ptr); + } + break; + } + case G_SETTIMG: { + auto ptr = SEGMENT_OFFSET(w1); + auto dec = Companion::Instance->GetNodeByAddr(ptr); + + Gfx value = gsDPSetTextureImage(C0(21, 3), C0(19, 2), C0(0, 10), ptr); + w0 = value.words.w0 & 0x00FFFFFF; + w0 += (G_SETTIMG_OTR_HASH << 24); + w1 = value.words.w1; + + writer.Write(w0); + writer.Write(w1); + + if(dec.has_value()){ + uint64_t hash = CRC64(std::get<0>(dec.value()).c_str()); + SPDLOG_INFO("Found texture: 0x{:X} Hash: 0x{:X} Path: {}", ptr, hash, std::get<0>(dec.value())); + w0 = hash >> 32; + w1 = hash & 0xFFFFFFFF; + } else { + SPDLOG_WARN("Warning: Could not find texture at 0x{:X}", ptr); + } + break; + } + default: break; + } + + writer.Write(w0); + writer.Write(w1); + } + +#undef case + + writer.Finish(write); +} + +std::optional> DListFactory::parse(std::vector& buffer, YAML::Node& node) { + const auto gbi = Companion::Instance->GetGBIVersion(); + + const auto mio0 = node["mio0"].as(); + const auto offset = node["offset"].as(); + auto decoded = MIO0Decoder::Decode(buffer, mio0); + + LUS::BinaryReader reader(decoded.data(), decoded.size()); + reader.SetEndianness(LUS::Endianness::Big); + reader.Seek(offset, LUS::SeekOffsetType::Start); + + std::vector gfxs; + auto processing = true; + + while (processing){ + auto w0 = reader.ReadUInt32(); + auto w1 = reader.ReadUInt32(); + + uint8_t opcode = w0 >> 24; + gfxs.push_back(w0); + gfxs.push_back(w1); + + switch (opcode) { + case static_cast(G_ENDDL): + processing = false; + break; + case static_cast(G_DL): { + auto ptr = SEGMENT_OFFSET(w1); + auto dec = Companion::Instance->GetNodeByAddr(ptr); + + if(!dec.has_value()){ + SPDLOG_INFO("Addr to Display list command at 0x{:X} not in yaml, autogenerating it", w1); + auto addr = Companion::Instance->GetSegmentedAddr(SEGMENT_NUMBER(w1)); + if(!addr.has_value()) { + SPDLOG_ERROR("Segment data missing from game config\nPlease add an entry for segment {}", SEGMENT_NUMBER(w1)); + break; + } + + auto rom = Companion::Instance->GetRomData(); + auto factory = Companion::Instance->GetFactory("GFX")->get(); + std::string output = Companion::Instance->NormalizeAsset("seg" + std::to_string(SEGMENT_NUMBER(w1)) +"_dl_" + to_hex(w1, false)); + YAML::Node dl; + dl["type"] = "GFX"; + dl["mio0"] = addr.value(); + dl["offset"] = ptr; + dl["symbol"] = output; + auto result = factory->parse(rom, dl); + + if(!result.has_value()){ + break; + } + + Companion::Instance->RegisterAsset(output, dl); + } else { + SPDLOG_WARN("Warning: Could not find display list at 0x{:X}", ptr); + } + break; + } + // Lights1 + case static_cast(G_MOVEMEM): { + uint32_t ptr = SEGMENT_OFFSET(w1); + + // Ignore if not a Lights1 command + if ( ( (w0 >> 16) & 0xFF ) != G_MV_L1) { + break; + } + + if(const auto decl = Companion::Instance->GetNodeByAddr(ptr); !decl.has_value()){ + SPDLOG_INFO("Addr to Lights1 command at 0x{:X} not in yaml, autogenerating it", w1); + auto addr = Companion::Instance->GetSegmentedAddr(SEGMENT_NUMBER(w1)); + if(!addr.has_value()) { + SPDLOG_ERROR("Segment data missing from game config\nPlease add an entry for segment {}", SEGMENT_NUMBER(w1)); + break; + } + auto rom = Companion::Instance->GetRomData(); + auto factory = Companion::Instance->GetFactory("LIGHTS")->get(); + std::string output = Companion::Instance->NormalizeAsset("seg" + std::to_string(SEGMENT_NUMBER(w1)) +"_lights1_" + to_hex(w1, false)); + YAML::Node light; + light["type"] = "lights"; + light["mio0"] = addr.value(); + light["offset"] = ptr; + light["symbol"] = output; + auto result = factory->parse(rom, light); + if(result.has_value()){ + Companion::Instance->RegisterAsset(output, light); + } + } + break; + } + case static_cast(G_VTX): { + uint32_t nvtx; + + switch (gbi) { + case GBIVersion::f3dex2: + nvtx = C0(12, 8); + break; + case GBIVersion::f3dex: + case GBIVersion::f3dexb: + nvtx = C0(10, 6); + break; + default: + nvtx = (C0(0, 16)) / sizeof(Vtx); + break; + } + + uint32_t ptr = SEGMENT_OFFSET(w1); + + if(const auto decl = Companion::Instance->GetNodeByAddr(ptr); !decl.has_value()){ + SPDLOG_INFO("Addr to Vtx array at 0x{:X} not in yaml, autogenerating it", w1); + auto addr = Companion::Instance->GetSegmentedAddr(SEGMENT_NUMBER(w1)); + if(!addr.has_value()) { + SPDLOG_ERROR("Segment data missing from game config\nPlease add an entry for segment {}", SEGMENT_NUMBER(w1)); + break; + } + + auto rom = Companion::Instance->GetRomData(); + auto factory = Companion::Instance->GetFactory("VTX")->get(); + std::string output = Companion::Instance->NormalizeAsset("seg" + std::to_string(SEGMENT_NUMBER(w1)) +"_vtx_" + to_hex(w1, false)); + YAML::Node vtx; + vtx["type"] = "VTX"; + vtx["mio0"] = addr.value(); + vtx["offset"] = ptr; + vtx["count"] = nvtx; + vtx["symbol"] = output; + auto result = factory->parse(rom, vtx); + if(result.has_value()){ + Companion::Instance->RegisterAsset(output, vtx); + } + } + break; + } + } + } + + return std::make_shared(gfxs); +} \ No newline at end of file diff --git a/src/factories/DisplayListFactory.h b/src/factories/DisplayListFactory.h new file mode 100644 index 0000000..1a27867 --- /dev/null +++ b/src/factories/DisplayListFactory.h @@ -0,0 +1,39 @@ +#pragma once + +#include "BaseFactory.h" +#include "n64/CommandMacros.h" + +#define F3DEX +#define _LANGUAGE_C +#include "n64/gbi.h" + +class DListData : public IParsedData { +public: + std::vector mGfxs; + + explicit DListData(std::vector gfxs) : mGfxs(gfxs) {} +}; + +class DListHeaderExporter : public BaseExporter { + void Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) override; +}; + +class DListBinaryExporter : public BaseExporter { + void Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) override; +}; + +class DListCodeExporter : public BaseExporter { + void Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) override; +}; + +class DListFactory : public BaseFactory { +public: + std::optional> parse(std::vector& buffer, YAML::Node& data) override; + std::unordered_map> GetExporters() override { + return { + REGISTER(Header, DListHeaderExporter) + REGISTER(Binary, DListBinaryExporter) + REGISTER(Code, DListCodeExporter) + }; + } +}; diff --git a/src/factories/DisplayListOverrides.cpp b/src/factories/DisplayListOverrides.cpp new file mode 100644 index 0000000..7da6ecf --- /dev/null +++ b/src/factories/DisplayListOverrides.cpp @@ -0,0 +1,103 @@ +#include "DisplayListOverrides.h" + +#include "DisplayListFactory.h" +#include "spdlog/spdlog.h" +#include "Companion.h" + +#include +#include + +namespace GFXDOverride { + +void Triangle2(const Gfx* gfx) { + auto w0 = gfx->words.w0; + auto w1 = gfx->words.w1; + + auto v1 = std::to_string( ((w0 >> 16) & 0xFF) / 2 ); + auto v2 = std::to_string( ((w0 >> 8) & 0xFF) / 2 ); + auto v3 = std::to_string( (w0 & 0xFF) / 2 ); + + auto v4 = std::to_string( ((w1 >> 16) & 0xFF) / 2 ); + auto v5 = std::to_string( ((w1 >> 8) & 0xFF) / 2 ); + auto v6 = std::to_string( (w1 & 0xFF) / 2 ); + auto flag = "0"; + + const auto str = v1 + ", " + v2 + ", " + v3 + ", " + flag + ", " + v4 + ", " + v5 + ", " + v6 + ", " + flag; + + gfxd_puts("gsSP2Triangles("); + gfxd_puts(str.c_str()); + gfxd_puts(")"); +} + +void Quadrangle(const Gfx* gfx) { + auto w1 = gfx->words.w1; + + auto v1 = std::to_string( ((w1 >> 16) & 0xFF) / 2 ); + auto v2 = std::to_string( ((w1 >> 8) & 0xFF) / 2 ); + auto v3 = std::to_string( (w1 & 0xFF) / 2 ); + auto v4 = std::to_string( ((w1 >> 24) & 0xFF) / 2 ); + auto flag = "0"; + + const auto str = v1 + ", " + v2 + ", " + v3 + ", " + v4 + ", " + flag; + + gfxd_puts("gsSP1Quadrangle("); + gfxd_puts(str.c_str()); + gfxd_puts(")"); +} + +int Vtx(uint32_t vtx, int32_t num) { + uint32_t ptr = SEGMENT_OFFSET(vtx); + if(const auto decl = Companion::Instance->GetNodeByAddr(ptr); decl.has_value()){ + auto node = std::get<1>(decl.value()); + auto symbol = node["symbol"].as(); + SPDLOG_INFO("Wrote vtx: 0x{:X} Symbol: {}", ptr, symbol); + gfxd_puts(symbol.c_str()); + return 1; + } + + SPDLOG_WARN("Warning: Could not find vtx at 0x{:X}", ptr); + return 0; +} + +int Texture(uint32_t timg, int32_t fmt, int32_t siz, int32_t width, int32_t height, int32_t pal) { + uint32_t ptr = SEGMENT_OFFSET(timg); + if(const auto decl = Companion::Instance->GetNodeByAddr(ptr); decl.has_value()){ + auto node = std::get<1>(decl.value()); + auto symbol = node["symbol"].as(); + SPDLOG_INFO("Wrote texture: 0x{:X} Symbol: {}", ptr, symbol); + gfxd_puts(symbol.c_str()); + return 1; + } + + SPDLOG_WARN("Warning: Could not find texture at 0x{:X}", ptr); + return 0; +} + +int Light(uint32_t lightsn, int32_t count) { + uint32_t ptr = SEGMENT_OFFSET(lightsn); + if(const auto decl = Companion::Instance->GetNodeByAddr(ptr); decl.has_value()){ + auto node = std::get<1>(decl.value()); + auto symbol = node["symbol"].as(); + SPDLOG_INFO("Wrote light: 0x{:X} Symbol: {}", ptr, symbol); + gfxd_puts(symbol.c_str()); + return 1; + } + + SPDLOG_WARN("Warning: Could not find light at 0x{:X}", ptr); + return 0; +} + +int DisplayList(uint32_t dl) { + uint32_t ptr = SEGMENT_OFFSET(dl); + if(const auto decl = Companion::Instance->GetNodeByAddr(ptr); decl.has_value()){ + auto node = std::get<1>(decl.value()); + auto symbol = node["symbol"].as(); + SPDLOG_INFO("Wrote display list: 0x{:X} Symbol: {}", ptr, symbol); + gfxd_puts(symbol.c_str()); + return 1; + } + + SPDLOG_WARN("Warning: Could not find display list to override at 0x{:X}", ptr); + return 0; +} +} diff --git a/src/factories/DisplayListOverrides.h b/src/factories/DisplayListOverrides.h new file mode 100644 index 0000000..4eba137 --- /dev/null +++ b/src/factories/DisplayListOverrides.h @@ -0,0 +1,13 @@ +#pragma once + +#include +#include "DisplayListFactory.h" + +namespace GFXDOverride { +void Quadrangle(const Gfx* gfx); +void Triangle2(const Gfx* gfx); +int Vtx(uint32_t vtx, int32_t num); +int Texture(uint32_t timg, int32_t fmt, int32_t siz, int32_t width, int32_t height, int32_t pal); +int Light(uint32_t lightsn, int32_t count); +int DisplayList(uint32_t dl); +}; \ No newline at end of file diff --git a/src/factories/LightsFactory.cpp b/src/factories/LightsFactory.cpp new file mode 100644 index 0000000..a0cf692 --- /dev/null +++ b/src/factories/LightsFactory.cpp @@ -0,0 +1,94 @@ +#include "LightsFactory.h" + +#include "utils/MIODecoder.h" +#include "spdlog/spdlog.h" +#include "Companion.h" + +void LightsHeaderExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement) { + const auto symbol = node["symbol"] ? node["symbol"].as() : entryName; + + if(Companion::Instance->IsOTRMode()){ + write << "static const char " << symbol << "[] = \"__OTR__" << (*replacement) << "\";\n\n"; + return; + } + + write << "extern Lights " << symbol << ";\n"; +} + +void LightsCodeExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement ) { + auto light = std::static_pointer_cast(raw)->mLights; + auto symbol = node["symbol"].as(); + + write << "Lights1 " << symbol << " = gdSPDefLights1 (\n"; + + // Ambient + auto r = (int16_t) light.a.l.col[0]; + auto g = (int16_t) light.a.l.col[1]; + auto b = (int16_t) light.a.l.col[2]; + + // Diffuse + auto r2 = (int16_t) light.l[0].l.col[0]; + auto g2 = (int16_t) light.l[0].l.col[1]; + auto b2 = (int16_t) light.l[0].l.col[2]; + + // Direction + auto x = (int16_t) light.l[0].l.dir[0]; + auto y = (int16_t) light.l[0].l.dir[1]; + auto z = (int16_t) light.l[0].l.dir[2]; + + SPDLOG_INFO("Read light: {:X} {:X} {:X} {:X} {:X}", r, g, b, r2, g2); + + write << fourSpaceTab; + write << r << ", " << g << ", " << b << ",\n"; + write << fourSpaceTab; + write << r2 << ", " << g2 << ", " << b2 << ", " << x << ", " << y << ", " << z << "\n"; + + write << ");\n\n"; +} + +void LightsBinaryExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement ) { + auto light = std::static_pointer_cast(raw)->mLights; + auto writer = LUS::BinaryWriter(); + + WriteHeader(writer, LUS::ResourceType::Lights, 0); + writer.Write((uint32_t) sizeof(light)); + +} + +std::optional> LightsFactory::parse(std::vector& buffer, YAML::Node& node) { + auto mio0 = node["mio0"].as(); + auto offset = node["offset"].as(); + auto symbol = node["symbol"].as(); + + auto decoded = MIO0Decoder::Decode(buffer, mio0); + LUS::BinaryReader reader(decoded.data() + offset, sizeof(Lights1Raw)); + + reader.SetEndianness(LUS::Endianness::Big); + Lights1Raw lights; + // Directional light + + // Ambient + auto r = reader.ReadInt8(); + auto g = reader.ReadInt8(); + auto b = reader.ReadInt8(); + //auto nil = reader.ReadInt32(); + reader.Seek(5, LUS::SeekOffsetType::Current); + + // Diffuse copy + auto r2 = reader.ReadUByte(); + auto g2 = reader.ReadUByte(); + auto b2 = reader.ReadUByte(); + + + reader.Seek(5, LUS::SeekOffsetType::Current); + + // Direction + auto x = reader.ReadInt8(); + auto y = reader.ReadInt8(); + auto z = reader.ReadInt8(); + + // The struct has several copies/padding. The zeros skip those for gdSPDefLights1. + lights = {r, g, b, 0, 0, 0, 0, 0, r2, g2, b2, 0, 0, 0, 0, 0, x, y, z}; + + return std::make_shared(lights); +} \ No newline at end of file diff --git a/src/factories/LightsFactory.h b/src/factories/LightsFactory.h new file mode 100644 index 0000000..9c3bcf1 --- /dev/null +++ b/src/factories/LightsFactory.h @@ -0,0 +1,66 @@ +#pragma once + +#include "BaseFactory.h" + +struct Light_tRaw { + uint8_t col[3]; /* diffuse light value (rgba) */ + int8_t pad1; + uint8_t colc[3]; /* copy of diffuse light value (rgba) */ + int8_t pad2; + int8_t dir[3]; /* direction of light (normalized) */ + int8_t pad3; +}; + +union LightRaw { + Light_tRaw l; + long long int force_structure_alignment[2]; +}; + +struct Ambient_tRaw { + uint8_t col[3]; /* ambient light value (rgba) */ + int8_t pad1; + uint8_t colc[3]; /* copy of ambient light value (rgba) */ + int8_t pad2; +}; + + +union AmbientRaw { + Ambient_tRaw l; + long long int force_structure_alignment[1]; +}; + +struct Lights1Raw { + AmbientRaw a; + LightRaw l[1]; +}; + +class LightsData : public IParsedData { +public: + Lights1Raw mLights; + + LightsData(Lights1Raw lights) : mLights(lights) {} +}; + +class LightsHeaderExporter : public BaseExporter { + void Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) override; +}; + +class LightsBinaryExporter : public BaseExporter { + void Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) override; +}; + +class LightsCodeExporter : public BaseExporter { + void Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) override; +}; + +class LightsFactory : public BaseFactory { +public: + std::optional> parse(std::vector& buffer, YAML::Node& data) override; + inline std::unordered_map> GetExporters() override { + return { + REGISTER(Code, LightsCodeExporter) + REGISTER(Header, LightsHeaderExporter) + REGISTER(Binary, LightsBinaryExporter) + }; + } +}; \ No newline at end of file diff --git a/src/factories/RawFactory.cpp b/src/factories/RawFactory.cpp deleted file mode 100644 index f737a9f..0000000 --- a/src/factories/RawFactory.cpp +++ /dev/null @@ -1,18 +0,0 @@ -#include "RawFactory.h" - -void RawFactory::WriteHeader(LUS::BinaryWriter* writer, LUS::ResourceType resType, int32_t version) { - writer->Write((uint8_t)(LUS::Endianness::Native)); // 0x00 - writer->Write((uint8_t)0); // 0x01 - writer->Write((uint8_t)0); // 0x02 - writer->Write((uint8_t)0); // 0x03 - - writer->Write((uint32_t) resType); // 0x04 - writer->Write((uint32_t) version); // 0x08 - writer->Write((uint64_t) 0xDEADBEEFDEADBEEF); // id, 0x0C - writer->Write((uint32_t) 0); // 0x10 - writer->Write((uint64_t) 0); // ROM CRC, 0x14 - writer->Write((uint32_t) 0); // ROM Enum, 0x1C - - while (writer->GetBaseAddress() < 0x40) - writer->Write((uint32_t)0); // To be used at a later date! -} \ No newline at end of file diff --git a/src/factories/RawFactory.h b/src/factories/RawFactory.h deleted file mode 100644 index 89f35df..0000000 --- a/src/factories/RawFactory.h +++ /dev/null @@ -1,39 +0,0 @@ -#pragma once - -#include "ResourceType.h" -#include "n64/Cartridge.h" -#include -#include -#include -#include -#include - - -#define SEGMENT_OFFSET(a) ((uint32_t)(a)&0x00FFFFFF) - -#define WRITE_HEADER(type, version) this->WriteHeader(writer, type, version) -#define WRITE_BHEADER(type, version) this->WriteHeader(writer, type, version, true) -#define WRITE_U8(value) writer->Write((uint8_t) value) -#define WRITE_U16(value) writer->Write((uint16_t) value) -#define WRITE_U32(value) writer->Write((uint32_t) value) -#define WRITE_U64(value) writer->Write((uint64_t) value) -#define WRITE_I8(value) writer->Write((int8_t) value) -#define WRITE_I16(value) writer->Write((int16_t) value) -#define WRITE_I32(value) writer->Write((int32_t) value) -#define WRITE_DATA(vec) writer->Write((char*) vec.data(), data.size()) -#define WRITE_ARRAY(data, size) writer->Write((char*) data, size) - -class RawFactory { -public: - RawFactory() = default; - virtual bool process(LUS::BinaryWriter* write, YAML::Node& data, std::vector& buffer) = 0; - void WriteHeader(LUS::BinaryWriter* write, LUS::ResourceType resType, int32_t version); - inline void SetCartridge(N64::Cartridge* cart) { - this->cartdrige = cart; - } - inline N64::Cartridge* GetCartridge() { - return this->cartdrige; - } -private: - N64::Cartridge* cartdrige; -}; \ No newline at end of file diff --git a/src/factories/ResourceType.h b/src/factories/ResourceType.h index fea9fc9..62a55ce 100644 --- a/src/factories/ResourceType.h +++ b/src/factories/ResourceType.h @@ -17,10 +17,15 @@ enum class ResourceType { Bank = 0x42414E4B, // BANK Sample = 0x41554643, // AIFC Sequence = 0x53455143, // SEQC + Lights = 0x46669697, // LIGHTS // SM64 Anim = 0x414E494D, // ANIM SDialog = 0x53444C47, // SDLG Dictionary = 0x44494354, // DICT + Geo = 0x47454F20, // GEO + + // MK64 + Waypoints = 0x46665666, // TrackWaypoints }; } // namespace LUS diff --git a/src/factories/SampleFactory.cpp b/src/factories/SampleFactory.cpp index 7e2d1a1..9b7c48f 100644 --- a/src/factories/SampleFactory.cpp +++ b/src/factories/SampleFactory.cpp @@ -1,46 +1,36 @@ #include "SampleFactory.h" +#include "utils/MIODecoder.h" -#include -#include "audio/AudioManager.h" +void SampleBinaryExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement ) { + auto writer = LUS::BinaryWriter(); + auto sample = std::static_pointer_cast(raw)->mSample; -bool SampleFactory::process(LUS::BinaryWriter* writer, YAML::Node& data, std::vector& buffer) { - WRITE_HEADER(LUS::ResourceType::Sample, 0); + WriteHeader(writer, LUS::ResourceType::Sample, 0); + writer.Write((uint32_t) sample.loop.start); + writer.Write((uint32_t) sample.loop.end); + writer.Write((uint32_t) sample.loop.count); + writer.Write((uint32_t) sample.loop.pad); + if(sample.loop.state.has_value()){ + auto state = sample.loop.state.value(); + writer.Write((uint32_t) state.size()); + writer.Write((char*) state.data(), state.size() * sizeof(int16_t)); + } else { + writer.Write((uint32_t) 0); + } + + writer.Write((uint32_t) sample.book.order); + writer.Write((uint32_t) sample.book.npredictors); + + writer.Write((uint32_t) sample.book.table.size()); + writer.Write((char*) sample.book.table.data(), sample.book.table.size() * sizeof(int16_t)); + writer.Write(sample.name); + + writer.Finish(write); +} + +std::optional> SampleFactory::parse(std::vector& buffer, YAML::Node& data) { auto id = data["id"].as(); AudioBankSample entry = AudioManager::Instance->get_aifc(id); - - // Write AdpcmLoop - WRITE_U32(entry.loop.start); - WRITE_U32(entry.loop.end); - WRITE_I32(entry.loop.count); - WRITE_U32(entry.loop.pad); - - if(entry.loop.state.has_value()){ - std::vector state = entry.loop.state.value(); - WRITE_U32(state.size()); - for(auto &value : state){ - writer->Write(value); - } - } else { - WRITE_U32(0); - } - - // Write AdpcmBook - WRITE_I32(entry.book.order); - WRITE_I32(entry.book.npredictors); - - WRITE_U32(entry.book.table.size()); - for(auto &value : entry.book.table){ - writer->Write(value); - } - - // Write sample - WRITE_I32(entry.data.size()); - for(auto &value : entry.data){ - WRITE_U8(value); - } - - writer->Write(entry.name); - - return true; + return std::make_shared(entry); } \ No newline at end of file diff --git a/src/factories/SampleFactory.h b/src/factories/SampleFactory.h index c0ad4ef..2877a66 100644 --- a/src/factories/SampleFactory.h +++ b/src/factories/SampleFactory.h @@ -1,9 +1,25 @@ #pragma once -#include "RawFactory.h" +#include "BaseFactory.h" +#include "audio/AudioManager.h" -class SampleFactory : public RawFactory { +class SampleData : public IParsedData { public: - SampleFactory() = default; - bool process(LUS::BinaryWriter* write, YAML::Node& data, std::vector& buffer) override; + AudioBankSample mSample; + + SampleData(AudioBankSample sample) : mSample(sample) {} +}; + +class SampleBinaryExporter : public BaseExporter { + void Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) override; +}; + +class SampleFactory : public BaseFactory { +public: + std::optional> parse(std::vector& buffer, YAML::Node& data) override; + inline std::unordered_map> GetExporters() override { + return { + REGISTER(Binary, SampleBinaryExporter) + }; + } }; \ No newline at end of file diff --git a/src/factories/SequenceFactory.cpp b/src/factories/SequenceFactory.cpp index b9bccf9..46ed35e 100644 --- a/src/factories/SequenceFactory.cpp +++ b/src/factories/SequenceFactory.cpp @@ -1,25 +1,25 @@ #include "SequenceFactory.h" +#include "utils/MIODecoder.h" -#include "audio/AudioManager.h" -#include +void SequenceBinaryExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement ) { + auto writer = LUS::BinaryWriter(); + auto sequence = std::static_pointer_cast(raw); -bool SequenceFactory::process(LUS::BinaryWriter* writer, YAML::Node& data, std::vector& buffer) { - WRITE_HEADER(LUS::ResourceType::Sequence, 0); + WriteHeader(writer, LUS::ResourceType::Sequence, 0); + writer.Write((uint32_t) sequence->mId); + writer.Write((uint32_t) sequence->mBanks.size()); + for (auto& bank : sequence->mBanks) { + writer.Write(bank); + } + writer.Write((uint32_t) sequence->mSize); + writer.Write((char*) sequence->mBuffer.data(), sequence->mSize); + writer.Finish(write); +} +std::optional> SequenceFactory::parse(std::vector& buffer, YAML::Node& data) { auto id = data["id"].as(); auto size = data["size"].as(); auto offset = data["offset"].as(); - auto banks = data["banks"].as>(); - - WRITE_U32(id); - WRITE_U32(banks.size()); - for(auto& bank : banks){ - writer->Write(bank); - } - - WRITE_U32(size); - WRITE_ARRAY(buffer.data() + offset, size); - - return true; + return std::make_shared(id, size, buffer.data() + offset, banks); } \ No newline at end of file diff --git a/src/factories/SequenceFactory.h b/src/factories/SequenceFactory.h index 93e9b3e..1f82d75 100644 --- a/src/factories/SequenceFactory.h +++ b/src/factories/SequenceFactory.h @@ -1,9 +1,29 @@ #pragma once -#include "RawFactory.h" +#include "BaseFactory.h" -class SequenceFactory : public RawFactory { +class SequenceData : public IParsedData { public: - SequenceFactory() = default; - bool process(LUS::BinaryWriter* write, YAML::Node& data, std::vector& buffer) override; + uint32_t mId; + uint32_t mSize; + std::vector mBuffer; + std::vector mBanks; + + SequenceData(uint32_t id, uint32_t size, uint8_t* data, std::vector& banks) : mId(id), mSize(size), mBanks(banks) { + mBuffer = std::vector(data, data + size); + } +}; + +class SequenceBinaryExporter : public BaseExporter { + void Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) override; +}; + +class SequenceFactory : public BaseFactory { +public: + std::optional> parse(std::vector& buffer, YAML::Node& data) override; + inline std::unordered_map> GetExporters() override { + return { + REGISTER(Binary, SequenceBinaryExporter) + }; + } }; \ No newline at end of file diff --git a/src/factories/TextureFactory.cpp b/src/factories/TextureFactory.cpp index d929d7c..f49db17 100644 --- a/src/factories/TextureFactory.cpp +++ b/src/factories/TextureFactory.cpp @@ -1,13 +1,16 @@ #include "TextureFactory.h" - #include "utils/MIODecoder.h" #include "spdlog/spdlog.h" - -namespace fs = std::filesystem; +#include "Companion.h" +#include static const std::unordered_map gTextureTypes = { { "RGBA16", TextureType::RGBA16bpp }, { "RGBA32", TextureType::RGBA32bpp }, + { "CI4", TextureType::Palette4bpp }, + { "CI8", TextureType::Palette8bpp }, + { "I4", TextureType::Grayscale4bpp }, + { "I8", TextureType::Grayscale8bpp }, { "IA1", TextureType::GrayscaleAlpha1bpp }, { "IA4", TextureType::GrayscaleAlpha4bpp }, { "IA8", TextureType::GrayscaleAlpha8bpp }, @@ -18,7 +21,7 @@ uint8_t* alloc_ia8_text_from_i1(uint16_t *in, int16_t width, int16_t height) { int32_t inPos; uint16_t bitMask; int16_t outPos = 0; - uint8_t* out = new uint8_t[width * height]; + auto out = new uint8_t[width * height]; for (inPos = 0; inPos < (width * height) / 16; inPos++) { bitMask = 0x8000; @@ -38,47 +41,113 @@ uint8_t* alloc_ia8_text_from_i1(uint16_t *in, int16_t width, int16_t height) { return out; } -bool TextureFactory::process(LUS::BinaryWriter* writer, YAML::Node& data, std::vector& buffer) { +void TextureHeaderExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement) { + auto symbol = node["symbol"] ? node["symbol"].as() : entryName; + auto data = std::static_pointer_cast(raw)->mBuffer; - auto format = data["format"].as(); - auto width = data["width"].as(); - auto height = data["height"].as(); - auto size = data["size"].as(); - auto offset = data["offset"].as(); + if(Companion::Instance->IsOTRMode()){ + write << "static const char " << symbol << "[] = \"__OTR__" << (*replacement) << "\";\n\n"; + return; + } + + write << "extern u8 " << symbol << "[" << data.size() << "];\n"; +} + +void TextureCodeExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement) { + auto data = std::static_pointer_cast(raw)->mBuffer; + auto symbol = node["symbol"] ? node["symbol"].as() : entryName; + auto format = node["format"].as(); + + std::transform(format.begin(), format.end(), format.begin(), tolower); + (*replacement) += "." + format; + + std::string dpath = Companion::Instance->GetOutputPath() + "/" + (*replacement); + if(!exists(fs::path(dpath).parent_path())){ + create_directories(fs::path(dpath).parent_path()); + } + + std::ofstream file(dpath + ".inc.c", std::ios::binary); + + for (int i = 0; i < data.size(); i++) { + if (i % 16 == 0 && i != 0) { + file << std::endl; + } + + file << "0x" << std::hex << std::setw(2) << std::setfill('0') << static_cast(data[i]) << ", "; + } + + file.close(); + + if (Companion::Instance->GetGBIMinorVersion() == GBIMinorVersion::Mk64) { + write << "u8 " << symbol << "[] = {\n"; + } else { + write << "ALIGNED8 static const u8 " << symbol << "[] = {\n"; + } + write << tab << "#include \"" << Companion::Instance->GetOutputPath() + "/" << (*replacement) << ".inc.c\"\n"; + write << "};\n\n"; +} + +void TextureBinaryExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement) { + auto writer = LUS::BinaryWriter(); + auto texture = std::static_pointer_cast(raw); + auto data = texture->mBuffer; + + WriteHeader(writer, LUS::ResourceType::Texture, 0); + + writer.Write((uint32_t) texture->mType); + writer.Write(texture->mWidth); + writer.Write(texture->mHeight); + + writer.Write((uint32_t) data.size()); + writer.Write((char*) data.data(), data.size()); + writer.Finish(write); +} + +std::optional> TextureFactory::parse(std::vector& buffer, YAML::Node& node) { + auto format = node["format"].as(); + auto width = node["width"].as(); + auto height = node["height"].as(); + auto size = node["size"].as(); + auto offset = node["offset"].as(); + + if (format.empty()) { + SPDLOG_ERROR("Texture entry at {:X} in yaml missing format node\n\ + Please add one of the following formats\n\ + rgba16, rgba32, ia16, ia8, ia4, i8, i4, ci8, ci4, 1bpp", offset); + return std::nullopt; + } if(!gTextureTypes.contains(format)) { - return false; + return std::nullopt; } TextureType type = gTextureTypes.at(format); - WRITE_HEADER(LUS::ResourceType::Texture, 0); + std::vector result; - WRITE_U32(type); - WRITE_U32(width); - WRITE_U32(height); - - if(data["mio0"]){ - auto mio0 = data["mio0"].as(); - auto decoded = MIO0Decoder::Decode(buffer, offset); - auto data = decoded.data() + mio0; + if(node["mio0"]){ + auto mio0 = node["mio0"].as(); + auto decoded = MIO0Decoder::Decode(buffer, mio0); + auto data = decoded.data() + offset; if(type == TextureType::GrayscaleAlpha1bpp){ - auto ia8 = alloc_ia8_text_from_i1((uint16_t*)data, 8, 16); - WRITE_U32(8 * 16); - WRITE_ARRAY(ia8, 8 * 16); + auto ia8 = alloc_ia8_text_from_i1((uint16_t*) data, 8, 16); + result = std::vector(ia8, ia8 + 8 * 16); delete[] ia8; - } else { - WRITE_U32(size); - WRITE_ARRAY(data, size); } - } else { - WRITE_U32(size); - WRITE_ARRAY(buffer.data() + offset, size); - } + + result = std::vector(data, data + size); + } else { + result = std::vector(buffer.data() + offset, buffer.data() + offset + size); + } SPDLOG_INFO("Texture: {} {}x{} {}", format, width, height, size); SPDLOG_INFO("Offset: {}", offset); - SPDLOG_INFO("Has MIO0: {}", data["mio0"] ? "true" : "false"); + SPDLOG_INFO("Has MIO0: {}", node["mio0"] ? "true" : "false"); + SPDLOG_INFO("Size: {}", result.size()); - return true; + if(result.size() == 0){ + return std::nullopt; + } + + return std::make_shared(type, width, height, result); } diff --git a/src/factories/TextureFactory.h b/src/factories/TextureFactory.h index e153e07..5f5fcc8 100644 --- a/src/factories/TextureFactory.h +++ b/src/factories/TextureFactory.h @@ -1,6 +1,6 @@ #pragma once -#include "RawFactory.h" +#include "BaseFactory.h" enum class TextureType { Error, @@ -16,8 +16,36 @@ enum class TextureType { GrayscaleAlpha16bpp, }; -class TextureFactory : public RawFactory { +class TextureData : public IParsedData { public: - TextureFactory() = default; - bool process(LUS::BinaryWriter* write, YAML::Node& data, std::vector& buffer) override; + TextureType mType; + uint32_t mWidth; + uint32_t mHeight; + std::vector mBuffer; + + TextureData(TextureType type, uint32_t width, uint32_t height, std::vector& buffer) : mType(type), mWidth(width), mHeight(height), mBuffer(std::move(buffer)) {} +}; + +class TextureHeaderExporter : public BaseExporter { + void Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) override; +}; + +class TextureCodeExporter : public BaseExporter { + void Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) override; +}; + +class TextureBinaryExporter : public BaseExporter { + void Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) override; +}; + +class TextureFactory : public BaseFactory { +public: + std::optional> parse(std::vector& buffer, YAML::Node& data) override; + inline std::unordered_map> GetExporters() override { + return { + REGISTER(Header, TextureHeaderExporter) + REGISTER(Binary, TextureBinaryExporter) + REGISTER(Code, TextureCodeExporter) + }; + } }; \ No newline at end of file diff --git a/src/factories/VtxFactory.cpp b/src/factories/VtxFactory.cpp new file mode 100644 index 0000000..8196571 --- /dev/null +++ b/src/factories/VtxFactory.cpp @@ -0,0 +1,114 @@ +#include "VtxFactory.h" + +#include "Companion.h" +#include "utils/MIODecoder.h" + +#define NUM(x) std::dec << std::setfill(' ') << std::setw(6) << x +#define COL(c) "0x" << std::hex << std::setw(2) << std::setfill('0') << c + +void VtxHeaderExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement) { + const auto symbol = node["symbol"] ? node["symbol"].as() : entryName; + + if(Companion::Instance->IsOTRMode()){ + write << "static const char " << symbol << "[] = \"__OTR__" << (*replacement) << "\";\n\n"; + return; + } + + write << "extern Vtx " << symbol << "[];\n"; +} + +void VtxCodeExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement ) { + auto vtx = std::static_pointer_cast(raw)->mVtxs; + const auto symbol = node["symbol"].as(); + const auto offset = node["offset"].as(); + + if (Companion::Instance->IsDebug()) { + write << "// 0x" << std::hex << std::uppercase << offset << "\n"; + } + + write << "Vtx " << symbol << "[] = {\n"; + + for (int i = 0; i < vtx.size(); ++i) { + auto v = vtx[i]; + + auto x = v.ob[0]; + auto y = v.ob[1]; + auto z = v.ob[2]; + + auto flag = v.flag; + + auto tc1 = v.tc[0]; + auto tc2 = v.tc[1]; + + auto c1 = (uint16_t) v.cn[0]; + auto c2 = (uint16_t) v.cn[1]; + auto c3 = (uint16_t) v.cn[2]; + auto c4 = (uint16_t) v.cn[3]; + + if(i <= vtx.size() - 1) { + write << fourSpaceTab; + } + + // {{{ x, y, z }, f, { tc1, tc2 }, { c1, c2, c3, c4 }}} + write << "{{{" << NUM(x) << ", " << NUM(y) << ", " << NUM(z) << "}, " << flag << ", {" << NUM(tc1) << ", " << NUM(tc2) << "}, {" << COL(c1) << ", " << COL(c2) << ", " << COL(c3) << ", " << COL(c4) << "}}},\n"; + } + + if (Companion::Instance->IsDebug()) { + write << fourSpaceTab << "// 0x" << std::hex << std::uppercase << (offset + (16 * vtx.size())) << "\n"; + } + + write << "};\n\n"; +} + +void VtxBinaryExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement ) { + auto vtx = std::static_pointer_cast(raw); + auto writer = LUS::BinaryWriter(); + + WriteHeader(writer, LUS::ResourceType::Vertex, 0); + writer.Write((uint32_t) vtx->mVtxs.size()); + for(auto v : vtx->mVtxs) { + writer.Write(v.ob[0]); + writer.Write(v.ob[1]); + writer.Write(v.ob[2]); + writer.Write(v.flag); + writer.Write(v.tc[0]); + writer.Write(v.tc[1]); + writer.Write(v.cn[0]); + writer.Write(v.cn[1]); + writer.Write(v.cn[2]); + writer.Write(v.cn[3]); + } + + writer.Finish(write); +} + +std::optional> VtxFactory::parse(std::vector& buffer, YAML::Node& node) { + auto mio0 = node["mio0"].as(); + auto offset = node["offset"].as(); + auto count = node["count"].as(); + + auto decoded = MIO0Decoder::Decode(buffer, mio0); + LUS::BinaryReader reader(decoded.data() + offset, count * sizeof(VtxRaw) ); + + reader.SetEndianness(LUS::Endianness::Big); + std::vector vertices; + + for(size_t i = 0; i < count; i++) { + auto x = reader.ReadInt16(); + auto y = reader.ReadInt16(); + auto z = reader.ReadInt16(); + auto flag = reader.ReadUInt16(); + auto tc1 = reader.ReadInt16(); + auto tc2 = reader.ReadInt16(); + auto cn1 = reader.ReadUByte(); + auto cn2 = reader.ReadUByte(); + auto cn3 = reader.ReadUByte(); + auto cn4 = reader.ReadUByte(); + + vertices.push_back(VtxRaw({ + {x, y, z}, flag, {tc1, tc2}, {cn1, cn2, cn3, cn4} + })); + } + + return std::make_shared(vertices); +} \ No newline at end of file diff --git a/src/factories/VtxFactory.h b/src/factories/VtxFactory.h new file mode 100644 index 0000000..22ec7dd --- /dev/null +++ b/src/factories/VtxFactory.h @@ -0,0 +1,41 @@ +#pragma once + +#include "BaseFactory.h" + +struct VtxRaw { + int16_t ob[3]; /* x, y, z */ + uint16_t flag; + int16_t tc[2]; /* texture coord */ + uint8_t cn[4]; /* color & alpha */ +}; + +class VtxData : public IParsedData { +public: + std::vector mVtxs; + + explicit VtxData(std::vector vtxs) : mVtxs(vtxs) {} +}; + +class VtxHeaderExporter : public BaseExporter { + void Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) override; +}; + +class VtxBinaryExporter : public BaseExporter { + void Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) override; +}; + +class VtxCodeExporter : public BaseExporter { + void Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) override; +}; + +class VtxFactory : public BaseFactory { +public: + std::optional> parse(std::vector& buffer, YAML::Node& data) override; + inline std::unordered_map> GetExporters() override { + return { + REGISTER(Code, VtxCodeExporter) + REGISTER(Header, VtxHeaderExporter) + REGISTER(Binary, VtxBinaryExporter) + }; + } +}; \ No newline at end of file diff --git a/src/factories/debug/MIO0Factory.cpp b/src/factories/debug/MIO0Factory.cpp deleted file mode 100644 index e5858ed..0000000 --- a/src/factories/debug/MIO0Factory.cpp +++ /dev/null @@ -1,23 +0,0 @@ -#include "MIO0Factory.h" -#include -#include "utils/MIODecoder.h" - -namespace fs = std::filesystem; - -bool MIO0Factory::process(LUS::BinaryWriter* writer, YAML::Node& data, std::vector& buffer) { - -// WRITE_HEADER(LUS::ResourceType::Blob, 0); - - auto offset = data["offset"].as(); - - auto decoded = MIO0Decoder::Decode(buffer, offset); - auto size = decoded.size(); - auto* blob = new uint8_t[size]; - memcpy(blob, decoded.data(), size); - -// WRITE_U32(size); // MIO0 Data Size - WRITE_ARRAY(blob, size); // MIO0 Data - - delete[] blob; - return true; -} diff --git a/src/factories/mk64/WaypointFactory.cpp b/src/factories/mk64/WaypointFactory.cpp new file mode 100644 index 0000000..9ec96bc --- /dev/null +++ b/src/factories/mk64/WaypointFactory.cpp @@ -0,0 +1,83 @@ +#include "WaypointFactory.h" + +#include "Companion.h" +#include "utils/MIODecoder.h" + +#define NUM(x) std::dec << std::setfill(' ') << std::setw(6) << x +#define COL(c) "0x" << std::hex << std::setw(2) << std::setfill('0') << c + +void MK64::WaypointHeaderExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement) { + const auto symbol = node["symbol"] ? node["symbol"].as() : entryName; + + if(Companion::Instance->IsOTRMode()){ + write << "static const char " << symbol << "[] = \"__OTR__" << (*replacement) << "\";\n\n"; + return; + } + + write << "extern TrackWaypoint " << symbol << "[];\n"; +} + +void MK64::WaypointCodeExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement ) { + auto waypoints = std::static_pointer_cast(raw)->mWaypoints; + auto symbol = node["symbol"].as(); + + write << "TrackWaypoint " << symbol << "[] = {\n"; + + for (int i = 0; i < waypoints.size(); ++i) { + auto x = waypoints[i].posX; + auto y = waypoints[i].posY; + auto z = waypoints[i].posZ; + + // Track segment + auto seg = waypoints[i].trackSegment; + + if(i <= waypoints.size() - 1) { + write << fourSpaceTab; + } + + // {{{ x, y, z }, f, { tc1, tc2 }, { c1, c2, c3, c4 }}} + write << "{" << NUM(x) << ", " << NUM(y) << ", " << NUM(z) << ", " << NUM(seg) << " },\n"; + } + write << "};\n\n"; +} + +void MK64::WaypointBinaryExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement ) { + auto waypoints = std::static_pointer_cast(raw)->mWaypoints; + auto writer = LUS::BinaryWriter(); + + WriteHeader(writer, LUS::ResourceType::Waypoints, 0); + writer.Write((uint32_t) waypoints.size()); + for(auto w : waypoints) { + writer.Write(w.posX); + writer.Write(w.posY); + writer.Write(w.posZ); + writer.Write(w.trackSegment); + } + + writer.Finish(write); +} + +std::optional> MK64::WaypointFactory::parse(std::vector& buffer, YAML::Node& node) { + auto mio0 = node["mio0"].as(); + auto offset = node["offset"].as(); + auto count = node["count"].as(); + + auto decoded = MIO0Decoder::Decode(buffer, mio0); + LUS::BinaryReader reader(decoded.data() + offset, count * sizeof(MK64::TrackWaypoint) ); + + reader.SetEndianness(LUS::Endianness::Big); + std::vector waypoints; + + for(size_t i = 0; i < count; i++) { + auto x = reader.ReadInt16(); + auto y = reader.ReadInt16(); + auto z = reader.ReadInt16(); + auto trackSegment = reader.ReadUInt16(); + + waypoints.push_back(MK64::TrackWaypoint({ + x, y, z, trackSegment + })); + } + + return std::make_shared(waypoints); +} \ No newline at end of file diff --git a/src/factories/mk64/WaypointFactory.h b/src/factories/mk64/WaypointFactory.h new file mode 100644 index 0000000..1268e6c --- /dev/null +++ b/src/factories/mk64/WaypointFactory.h @@ -0,0 +1,44 @@ +#pragma once + +#include "../BaseFactory.h" + +namespace MK64 { + + struct TrackWaypoint { + int16_t posX; + int16_t posY; + int16_t posZ; + uint16_t trackSegment; + }; + + class WaypointData : public IParsedData { + public: + std::vector mWaypoints; + + explicit WaypointData(std::vector waypoints) : mWaypoints(waypoints) {} + }; + + class WaypointHeaderExporter : public BaseExporter { + void Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) override; + }; + + class WaypointBinaryExporter : public BaseExporter { + void Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) override; + }; + + class WaypointCodeExporter : public BaseExporter { + void Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) override; + }; + + class WaypointFactory : public BaseFactory { + public: + std::optional> parse(std::vector& buffer, YAML::Node& data) override; + inline std::unordered_map> GetExporters() override { + return { + REGISTER(Code, WaypointCodeExporter) + REGISTER(Header, WaypointHeaderExporter) + REGISTER(Binary, WaypointBinaryExporter) + }; + } + }; +} \ No newline at end of file diff --git a/src/factories/sm64/AnimationFactory.cpp b/src/factories/sm64/AnimationFactory.cpp new file mode 100644 index 0000000..6afb405 --- /dev/null +++ b/src/factories/sm64/AnimationFactory.cpp @@ -0,0 +1,74 @@ +#include "AnimationFactory.h" +#include "utils/MIODecoder.h" +#include "spdlog/spdlog.h" + +void SM64::AnimationBinaryExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement ) { + auto writer = LUS::BinaryWriter(); + auto anim = std::static_pointer_cast(raw); + + WriteHeader(writer, LUS::ResourceType::Anim, 0); + writer.Write((int16_t) anim->mFlags); + writer.Write((int16_t) anim->mAnimYTransDivisor); + writer.Write((int16_t) anim->mStartFrame); + writer.Write((int16_t) anim->mLoopStart); + writer.Write((int16_t) anim->mLoopEnd); + writer.Write((int16_t) anim->mUnusedBoneCount); + writer.Write((uint64_t) anim->mLength); + + writer.Write((uint32_t) anim->mIndices.size()); + for (auto& index : anim->mIndices) { + writer.Write((int16_t) index); + } + + writer.Write((uint32_t) anim->mEntries.size()); + for (auto& entry : anim->mEntries) { + writer.Write((uint16_t) entry); + } + + writer.Finish(write); +} + +std::optional> SM64::AnimationFactory::parse(std::vector& buffer, YAML::Node& node) { + auto headerNode = node["header"]; + auto valuesNode = node["values"]; + auto indexNode = node["indices"]; + + LUS::BinaryReader header((char*) buffer.data() + headerNode["offset"].as(), headerNode["size"].as()); + header.SetEndianness(LUS::Endianness::Big); + + auto flags = header.ReadInt16(); + auto animYTransDivisor = header.ReadInt16(); + auto startFrame = header.ReadInt16(); + auto loopStart = header.ReadInt16(); + auto loopEnd = header.ReadInt16(); + auto unusedBoneCount = header.ReadInt16(); + header.ReadUInt32(); + header.ReadUInt32(); + auto length = header.ReadUInt32(); + + LUS::BinaryReader indices((char*) buffer.data() + indexNode["offset"].as(), indexNode["size"].as()); + indices.SetEndianness(LUS::Endianness::Big); + size_t indexLength = indexNode["size"].as() / sizeof(uint16_t); + std::vector indicesData; + for (size_t i = 0; i < indexLength; i++) { + indicesData.push_back(indices.ReadInt16()); + } + + LUS::BinaryReader values((char*) buffer.data() + valuesNode["offset"].as(), valuesNode["size"].as()); + values.SetEndianness(LUS::Endianness::Big); + size_t entries = valuesNode["size"].as() / sizeof(uint16_t); + std::vector valuesData; + for (size_t i = 0; i < entries; i++) { + valuesData.push_back(values.ReadUInt16()); + } + + SPDLOG_INFO("Flags: {}", flags); + SPDLOG_INFO("Anim-Y Trans Divisor: {}", animYTransDivisor); + SPDLOG_INFO("Start Frame: {}", startFrame); + SPDLOG_INFO("Loop Start: {}", loopStart); + SPDLOG_INFO("Loop End: {}", loopEnd); + SPDLOG_INFO("Unused Bone Count: {}", unusedBoneCount); + SPDLOG_INFO("Length: {}", length); + + return std::make_shared(flags, animYTransDivisor, startFrame, loopStart, loopEnd, unusedBoneCount, length, valuesData, indicesData); +} \ No newline at end of file diff --git a/src/factories/sm64/AnimationFactory.h b/src/factories/sm64/AnimationFactory.h new file mode 100644 index 0000000..2d0ea45 --- /dev/null +++ b/src/factories/sm64/AnimationFactory.h @@ -0,0 +1,32 @@ +#pragma once + +#include "../BaseFactory.h" + +namespace SM64 { +class AnimationData : public IParsedData { +public: + int16_t mFlags; + int16_t mAnimYTransDivisor; + int16_t mStartFrame; + int16_t mLoopStart; + int16_t mLoopEnd; + int16_t mUnusedBoneCount; + int16_t mLength; + std::vector mIndices; + std::vector mEntries; + + AnimationData(int16_t flags, int16_t animYTransDivisor, int16_t startFrame, int16_t loopStart, int16_t loopEnd, int16_t unusedBoneCount, int16_t length, std::vector& indices, std::vector& entries) : mFlags(flags), mAnimYTransDivisor(animYTransDivisor), mStartFrame(startFrame), mLoopStart(loopStart), mLoopEnd(loopEnd), mUnusedBoneCount(unusedBoneCount), mLength(length), mIndices(indices), mEntries(entries) {} +}; + +class AnimationBinaryExporter : public BaseExporter { + void Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) override; +}; + +class AnimationFactory : public BaseFactory { +public: + std::optional> parse(std::vector& buffer, YAML::Node& data) override; + inline std::unordered_map> GetExporters() override { + return { REGISTER(Binary, AnimationBinaryExporter) }; + } +}; +} \ No newline at end of file diff --git a/src/factories/sm64/DialogFactory.cpp b/src/factories/sm64/DialogFactory.cpp new file mode 100644 index 0000000..897b956 --- /dev/null +++ b/src/factories/sm64/DialogFactory.cpp @@ -0,0 +1,54 @@ +#include "DialogFactory.h" +#include "utils/MIODecoder.h" +#include "spdlog/spdlog.h" + +void SM64::DialogBinaryExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement ) { + auto writer = LUS::BinaryWriter(); + auto dialog = std::static_pointer_cast(raw); + + WriteHeader(writer, LUS::ResourceType::SDialog, 0); + writer.Write((uint32_t) dialog->mUnused); + writer.Write((int8_t) dialog->mLinesPerBox); + writer.Write((int16_t) dialog->mLeftOffset); + writer.Write((int16_t) dialog->mWidth); + + writer.Write((uint32_t) dialog->mText.size()); + writer.Write((char*) dialog->mText.data(), dialog->mText.size()); + writer.Finish(write); +} + +std::optional> SM64::DialogFactory::parse(std::vector& buffer, YAML::Node& node) { + auto offset = node["offset"].as(); + auto mio0 = node["mio0"].as(); + + auto decoded = MIO0Decoder::Decode(buffer, mio0); + auto bytes = (uint8_t*) decoded.data(); + LUS::BinaryReader reader(bytes, decoded.size()); + reader.SetEndianness(LUS::Endianness::Big); + reader.Seek(offset, LUS::SeekOffsetType::Start); + + auto unused = reader.ReadUInt32(); + auto linesPerBox = reader.ReadUByte(); + // Padding + reader.Read(1); + auto leftOffset = reader.ReadInt16(); + auto width = reader.ReadInt16(); + // Padding + reader.Read(2); + auto str = SEGMENT_OFFSET(reader.ReadInt32()); + std::vector text; + + while(bytes[str] != 0xFF){ + auto c = bytes[str++]; + text.push_back(c); + } + text.push_back(0xFF); + + SPDLOG_INFO("Unused: {}", unused); + SPDLOG_INFO("Lines per box: {}", linesPerBox); + SPDLOG_INFO("Left offset: {}", leftOffset); + SPDLOG_INFO("Width: {}", width); + SPDLOG_INFO("Size: {}", text.size()); + + return std::make_shared(unused, linesPerBox, leftOffset, width, text); +} \ No newline at end of file diff --git a/src/factories/sm64/DialogFactory.h b/src/factories/sm64/DialogFactory.h new file mode 100644 index 0000000..75160af --- /dev/null +++ b/src/factories/sm64/DialogFactory.h @@ -0,0 +1,28 @@ +#pragma once + +#include "../BaseFactory.h" + +namespace SM64 { +class DialogData : public IParsedData { +public: + uint32_t mUnused; + uint8_t mLinesPerBox; + uint16_t mLeftOffset; + uint16_t mWidth; + std::vector mText; + + DialogData(uint32_t unused, uint8_t linesPerBox, uint16_t leftOffset, uint16_t width, std::vector& text) : mUnused(unused), mLinesPerBox(linesPerBox), mLeftOffset(leftOffset), mWidth(width), mText(text) {} +}; + +class DialogBinaryExporter : public BaseExporter { + void Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) override; +}; + +class DialogFactory : public BaseFactory { +public: + std::optional> parse(std::vector& buffer, YAML::Node& data) override; + inline std::unordered_map> GetExporters() override { + return { REGISTER(Binary, DialogBinaryExporter) }; + } +}; +} \ No newline at end of file diff --git a/src/factories/sm64/DictionaryFactory.cpp b/src/factories/sm64/DictionaryFactory.cpp new file mode 100644 index 0000000..39d6055 --- /dev/null +++ b/src/factories/sm64/DictionaryFactory.cpp @@ -0,0 +1,39 @@ +#include "DictionaryFactory.h" +#include "utils/MIODecoder.h" + +void SM64::DictionaryBinaryExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement ) { + auto writer = LUS::BinaryWriter(); + auto data = std::static_pointer_cast(raw); + + WriteHeader(writer, LUS::ResourceType::Dictionary, 0); + + writer.Write((uint32_t) data->mDictionary.size()); + for(auto& [key, value] : data->mDictionary){ + writer.Write(key); + writer.Write((uint32_t) value.size()); + writer.Write((char*) value.data(), value.size()); + } + writer.Finish(write); +} + +std::optional> SM64::DictionaryFactory::parse(std::vector& buffer, YAML::Node& data) { + std::unordered_map> dictionary; + + for (auto it = data["keys"].begin(); it != data["keys"].end(); ++it) { + auto key = it->first.as(); + auto offset = it->second.as(); + + std::vector text; + auto bytes = (uint8_t*) buffer.data(); + + while(bytes[offset] != 0xFF){ + auto c = bytes[offset++]; + text.push_back(c); + } + + text.push_back(0xFF); + dictionary[key] = text; + } + + return std::make_shared(dictionary); +} \ No newline at end of file diff --git a/src/factories/sm64/DictionaryFactory.h b/src/factories/sm64/DictionaryFactory.h new file mode 100644 index 0000000..acb7429 --- /dev/null +++ b/src/factories/sm64/DictionaryFactory.h @@ -0,0 +1,25 @@ +#pragma once + +#include "../BaseFactory.h" + +namespace SM64 { + +class DictionaryData : public IParsedData { +public: + std::unordered_map> mDictionary; + + DictionaryData(std::unordered_map> dictionary) : mDictionary(dictionary) {} +}; + +class DictionaryBinaryExporter : public BaseExporter { + void Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) override; +}; + +class DictionaryFactory : public BaseFactory { +public: + std::optional> parse(std::vector& buffer, YAML::Node& data) override; + inline std::unordered_map> GetExporters() override { + return { REGISTER(Binary, DictionaryBinaryExporter) }; + } +}; +} \ No newline at end of file diff --git a/src/factories/sm64/GeoCommands.h b/src/factories/sm64/GeoCommands.h new file mode 100644 index 0000000..e10e2a0 --- /dev/null +++ b/src/factories/sm64/GeoCommands.h @@ -0,0 +1,436 @@ +#pragma once + +#include "n64/CommandMacros.h" + +typedef float Vec2f[2]; +typedef float Vec3f[3]; // X, Y, Z, where Y is up +typedef int16_t Vec3s[3]; +typedef int32_t Vec3i[3]; +typedef float Vec4f[4]; +typedef int16_t Vec4s[4]; + +#define cur_geo_cmd_u8(offset) \ + (cmd[CMD_PROCESS_OFFSET(offset)]) + +#define cur_geo_cmd_s16(offset) \ + BSWAP16((*(int16_t *) &cmd[CMD_PROCESS_OFFSET(offset)])) + +#define cur_geo_cmd_i32(offset) \ + (*(int32_t *) &cmd[CMD_PROCESS_OFFSET(offset)]) + +#define cur_geo_cmd_u32(offset) \ + BSWAP32((*(uint32_t *) &cmd[CMD_PROCESS_OFFSET(offset)])) + +#define CMD_NOP(c) GeoCommand::c: writer->Write((uint32_t) GeoCommand::c); cmd += 0x04 << CMD_SIZE_SHIFT; print_cmd(c, #c); break; +//#define CMD_NOP(c) GeoCommand::c: cmd += 0x04 << CMD_SIZE_SHIFT; print_cmd(c, #c); break; +#define CMD_INFO(c) GeoCommand::c: print_cmd(c, #c); +#define next_s16_in_geo_script(src) ((uint32_t)(*(*src)++)) + +#define cur_geo_cmd_s32(offset) \ + (*(s32 *) &cmd[CMD_PROCESS_OFFSET(offset)]) + +/** + * 0x00: Branch and store return address + * 0x04: scriptTarget, segment address of geo layout + */ +#define GEO_BRANCH_AND_LINK(scriptTarget) \ + CMD_BBH(0x00, 0x00, 0x0000), \ + CMD_PTR(scriptTarget) + +/** + * 0x01: Terminate geo layout + * 0x01-0x03: unused + */ +#define GEO_END() \ + CMD_BBH(0x01, 0x00, 0x0000) + +/** + * 0x02: Branch + * 0x01: if 1, store next geo layout address on stack + * 0x02-0x03: unused + * 0x04: scriptTarget, segment address of geo layout + */ +#define GEO_BRANCH(type, scriptTarget) \ + CMD_BBH(0x02, type, 0x0000), \ + CMD_PTR(scriptTarget) + +/** + * 0x03: Return from branch + * 0x01-0x03: unused + */ +#define GEO_RETURN() \ + CMD_BBH(0x03, 0x00, 0x0000) + +/** + * 0x04: Open node + * 0x01-0x03: unused + */ +#define GEO_OPEN_NODE() \ + CMD_BBH(0x04, 0x00, 0x0000) + +/** + * 0x05: Close node + * 0x01-0x03: unused + */ +#define GEO_CLOSE_NODE() \ + CMD_BBH(0x05, 0x00, 0x0000) + +/** + * 0x06: Register the current node at the given index in the gGeoViews array + * 0x01: unused + * 0x02: s16 index + */ +#define GEO_ASSIGN_AS_VIEW(index) \ + CMD_BBH(0x06, 0x00, index) + +/** + * 0x07: Update current scene graph node flags + * 0x01: u8 operation (0 = reset, 1 = set, 2 = clear) + * 0x02: s16 bits + */ +#define GEO_UPDATE_NODE_FLAGS(operation, flagBits) \ + CMD_BBH(0x07, operation, flagBits) + +/** + * 0x08: Create screen area scene graph node + * 0x01: unused + * 0x02: s16 num entries (+2) to allocate + * 0x04: s16 x + * 0x06: s16 y + * 0x08: s16 width + * 0x0A: s16 height + */ +#define GEO_NODE_SCREEN_AREA(numEntries, x, y, width, height) \ + CMD_BBH(0x08, 0x00, numEntries), \ + CMD_HH(x, y), \ + CMD_HH(width, height) + +/** + * 0x09: Create orthographic projection scene graph node + * 0x02: s16 scale as percentage + */ +#define GEO_NODE_ORTHO(scale) \ + CMD_BBH(0x09, 0x00, scale) + +/** + * 0x0A: Create camera frustum scene graph node + * 0x01: u8 if nonzero, enable function field + * 0x02: s16 field of view + * 0x04: s16 near + * 0x06: s16 far + * 0x08: [GraphNodeFunc function] +*/ +#define GEO_CAMERA_FRUSTUM(fov, near, far) \ + CMD_BBH(0x0A, 0x00, fov), \ + CMD_HH(near, far) + +#define GEO_CAMERA_FRUSTUM_WITH_FUNC(fov, near, far, func) \ + CMD_BBH(0x0A, 0x01, fov), \ + CMD_HH(near, far), \ + CMD_PTR(func) + +/** + * 0x0B: Create a root scene graph node + * 0x01-0x03: unused + */ +#define GEO_NODE_START() \ + CMD_BBH(0x0B, 0x00, 0x0000) + +/** + * 0x0C: Create zbuffer-toggling scene graph node + * 0x01: u8 enableZBuffer (1 = on, 0 = off) + * 0x02-0x03: unused + */ +#define GEO_ZBUFFER(enable) \ + CMD_BBH(0x0C, enable, 0x0000) + +/** + * 0x0D: Create render range scene graph node + * 0x01-0x03: unused + * 0x04: s16 minDistance + * 0x06: s16 maxDistance + */ +#define GEO_RENDER_RANGE(minDistance, maxDistance) \ + CMD_BBH(0x0D, 0x00, 0x0000), \ + CMD_HH(minDistance, maxDistance) + +/** + * 0x0E: Create switch-case scene graph node + * 0x01: unused + * 0x02: s16 numCases + * 0x04: GraphNodeFunc caseSelectorFunc + */ +#define GEO_SWITCH_CASE(count, function) \ + CMD_BBH(0x0E, 0x00, count), \ + CMD_PTR(function) + +/** + * 0x0F: Create a camera scene graph node. + * 0x01: unused + * 0x02: s16 camera type + * 0x04: s16 posX + * 0x06: s16 posY + * 0x08: s16 posZ + * 0x0A: s16 focusX + * 0x0C: s16 focusY + * 0x0E: s16 focusZ + * 0x10: GraphNodeFunc function + */ +#define GEO_CAMERA(type, x1, y1, z1, x2, y2, z2, function) \ + CMD_BBH(0x0F, 0x00, type), \ + CMD_HHHHHH(x1, y1, z1, x2, y2, z2), \ + CMD_PTR(function) + +/** + * 0x10: Create translation & rotation scene graph node with optional display list + * Four different versions of 0x10 + * cmd+0x01: u8 params + * 0b1000_0000: if set, enable displayList field and drawingLayer + * 0b0111_0000: fieldLayout (determines how rest of data is formatted + * 0b0000_1111: drawingLayer + * + * fieldLayout = 0: Translate & Rotate + * 0x04: s16 xTranslation + * 0x06: s16 yTranslation + * 0x08: s16 zTranslation + * 0x0A: s16 xRotation + * 0x0C: s16 yRotation + * 0x0E: s16 zRotation + * 0x10: [u32 displayList: if MSbit of params set, display list segmented address] + */ +#define GEO_TRANSLATE_ROTATE(layer, tx, ty, tz, rx, ry, rz) \ + CMD_BBH(0x10, (0x00 | layer), 0x0000), \ + CMD_HHHHHH(tx, ty, tz, rx, ry, rz) +#define GEO_TRANSLATE_ROTATE_WITH_DL(layer, tx, ty, tz, rx, ry, rz, displayList) \ + CMD_BBH(0x10, (0x00 | layer | 0x80), 0x0000), \ + CMD_HHHHHH(tx, ty, tz, rx, ry, rz), \ + CMD_PTR(displayList) + +/** + * fieldLayout = 1: Translate + * 0x02: s16 xTranslation + * 0x04: s16 yTranslation + * 0x06: s16 zTranslation + * 0x08: [u32 displayList: if MSbit of params set, display list segmented address] + */ +#define GEO_TRANSLATE(layer, tx, ty, tz) \ + CMD_BBH(0x10, (0x10 | layer), tx), \ + CMD_HH(ty, tz) +#define GEO_TRANSLATE_WITH_DL(layer, tx, ty, tz, displayList) \ + CMD_BBH(0x10, (0x10 | layer | 0x80), tx), \ + CMD_HH(ty, tz), \ + CMD_PTR(displayList) + +/** + * fieldLayout = 2: Rotate + * 0x02: s16 xRotation + * 0x04: s16 yRotation + * 0x06: s16 zRotation + * 0x08: [u32 displayList: if MSbit of params set, display list segmented address] + */ +#define GEO_ROTATE(layer, rx, ry, rz) \ + CMD_BBH(0x10, (0x20 | layer), rx), \ + CMD_HH(ry, rz) +#define GEO_ROTATE_WITH_DL(layer, rx, ry, rz, displayList) \ + CMD_BBH(0x10, (0x20 | layer | 0x80), rx), \ + CMD_HH(ry, rz), \ + CMD_PTR(displayList) + +/** + * fieldLayout = 3: Rotate Y + * 0x02: s16 yRotation + * 0x04: [u32 displayList: if MSbit of params set, display list segmented address] + */ +#define GEO_ROTATE_Y(layer, ry) \ + CMD_BBH(0x10, (0x30 | layer), ry) +#define GEO_ROTATE_Y_WITH_DL(layer, ry, displayList) \ + CMD_BBH(0x10, (0x30 | layer | 0x80), ry), \ + CMD_PTR(displayList) + +/** + * 0x11: Create translation scene graph node with optional display list + * 0x01: u8 params + * 0b1000_0000: if set, enable displayList field and drawingLayer + * 0b0000_1111: drawingLayer + * 0x02: s16 translationX + * 0x04: s16 translationY + * 0x06: s16 translationZ + * 0x08: [u32 displayList: if MSbit of params set, display list segmented address] + */ +#define GEO_TRANSLATE_NODE(layer, ux, uy, uz) \ + CMD_BBH(0x11, layer, ux), \ + CMD_HH(uy, uz) +#define GEO_TRANSLATE_NODE_WITH_DL(layer, ux, uy, uz, displayList) \ + CMD_BBH(0x11, (layer | 0x80), ux), \ + CMD_HH(uy, uz), \ + CMD_PTR(displayList) + +/** + * 0x12: Create rotation scene graph node with optional display list + * 0x01: u8 params + * 0b1000_0000: if set, enable displayList field and drawingLayer + * 0b0000_1111: drawingLayer + * 0x02: s16 rotationX + * 0x04: s16 rotationY + * 0x06: s16 rotationZ + * 0x08: [u32 displayList: if MSbit of params set, display list segmented address] + */ +#define GEO_ROTATION_NODE(layer, ux, uy, uz) \ + CMD_BBH(0x12, layer, ux), \ + CMD_HH(uy, uz) +#define GEO_ROTATION_NODE_WITH_DL(layer, ux, uy, uz, displayList) \ + CMD_BBH(0x12, (layer | 0x80), ux), \ + CMD_HH(uy, uz), \ + CMD_PTR(displayList) + +/** + * 0x13: Create a scene graph node that is rotated by the object's animation. + * 0x01: u8 drawingLayer + * 0x02: s16 xTranslation + * 0x04: s16 yTranslation + * 0x06: s16 zTranslation + * 0x08: u32 displayList: dislay list segmented address + */ +#define GEO_ANIMATED_PART(layer, x, y, z, displayList) \ + CMD_BBH(0x13, layer, x), \ + CMD_HH(y, z), \ + CMD_PTR(displayList) + +/** + * 0x14: Create billboarding node with optional display list + * 0x01: u8 params + * 0b1000_0000: if set, enable displayList field and drawingLayer + * 0b0000_1111: drawingLayer + * 0x02: s16 xTranslation + * 0x04: s16 yTranslation + * 0x06: s16 zTranslation + * 0x08: [u32 displayList: if MSbit of params is set, display list segmented address] + */ +#define GEO_BILLBOARD_WITH_PARAMS(layer, tx, ty, tz) \ + CMD_BBH(0x14, layer, tx), \ + CMD_HH(ty, tz) +#define GEO_BILLBOARD_WITH_PARAMS_AND_DL(layer, tx, ty, tz, displayList) \ + CMD_BBH(0x14, (layer | 0x80), tx), \ + CMD_HH(ty, tz), \ + CMD_PTR(displayList) +#define GEO_BILLBOARD() \ + GEO_BILLBOARD_WITH_PARAMS(0, 0, 0, 0) + +/** + * 0x15: Create plain display list scene graph node + * 0x01: u8 drawingLayer + * 0x02-0x03: unused + * 0x04: u32 displayList: display list segmented address + */ +#define GEO_DISPLAY_LIST(layer, displayList) \ + CMD_BBH(0x15, layer, 0x0000), \ + CMD_PTR(displayList) + +/** + * 0x16: Create shadow scene graph node + * 0x01: unused + * 0x02: s16 shadowType (cast to u8) + * 0x04: s16 shadowSolidity (cast to u8) + * 0x06: s16 shadowScale + */ +#define GEO_SHADOW(type, solidity, scale) \ + CMD_BBH(0x16, 0x00, type), \ + CMD_HH(solidity, scale) + +/** + * 0x17: Create render object scene graph node + * 0x01-0x03: unused + */ +#define GEO_RENDER_OBJ() \ + CMD_BBH(0x17, 0x00, 0x0000) + +/** + * 0x18: Create dynamically generated displaylist scene graph node + * 0x01: unused + * 0x02: s16 parameter + * 0x04: GraphNodeFunc function + */ +#define GEO_ASM(param, function) \ + CMD_BBH(0x18, 0x00, param), \ + CMD_PTR(function) + +/** + * 0x19: Create background scene graph node + * 0x02: s16 background: background ID, or RGBA5551 color if backgroundFunc is null + * 0x04: GraphNodeFunc backgroundFunc + */ +#define GEO_BACKGROUND(background, function) \ + CMD_BBH(0x19, 0x00, background), \ + CMD_PTR(function) +#define GEO_BACKGROUND_COLOR(background) \ + GEO_BACKGROUND(background, NULL) + +/** + * 0x1A: No operation + */ +#define GEO_NOP_1A() \ + CMD_BBH(0x1A, 0x00, 0x0000), \ + CMD_HH(0x0000, 0x0000) + +/** + * 0x1B: Copy the shared children from an object parent node from a specific view + * to a newly created object parent. + * 0x02: s16 index of array + */ +#define GEO_COPY_VIEW(index) \ + CMD_BBH(0x1B, 0x00, index) + +/** + * 0x1C: Create a held object scene graph node + * cmd+0x01: u8 unused + * cmd+0x02: s16 offsetX + * cmd+0x04: s16 offsetY + * cmd+0x06: s16 offsetZ + * cmd+0x08: GraphNodeFunc nodeFunc + */ +#define GEO_HELD_OBJECT(param, ux, uy, uz, nodeFunc) \ + CMD_BBH(0x1C, param, ux), \ + CMD_HH(uy, uz), \ + CMD_PTR(nodeFunc) + +/** + * 0x1D: Create scale scene graph node with optional display list + * 0x01: u8 params + * 0b1000_0000: if set, enable displayList field and drawingLayer + * 0b0000_1111: drawingLayer + * 0x02-0x03: unused + * 0x04: u32 scale (0x10000 = 1.0) + * 0x08: [u32 displayList: if MSbit of params is set, display list segment address] + */ +#define GEO_SCALE(layer, scale) \ + CMD_BBH(0x1D, layer, 0x0000), \ + CMD_W(scale) +#define GEO_SCALE_WITH_DL(layer, scale, displayList) \ + CMD_BBH(0x1D, (layer | 0x80), 0x0000), \ + CMD_W(scale), \ + CMD_PTR(displayList) + +/** + * 0x1E: No operation + */ +#define GEO_NOP_1E() \ + CMD_BBH(0x1E, 0x00, 0x0000), \ + CMD_HH(0x0000, 0x0000) + +/** + * 0x1F: No operation + */ +#define GEO_NOP_1F() \ + CMD_BBH(0x1F, 0x00, 0x0000), \ + CMD_HH(0x0000, 0x0000), \ + CMD_HH(0x0000, 0x0000), \ + CMD_HH(0x0000, 0x0000) + +/** + * 0x20: Create a scene graph node that specifies for an object the radius that + * is used for frustum culling. + * 0x01: unused + * 0x02: s16 cullingRadius + */ +#define GEO_CULLING_RADIUS(cullingRadius) \ + CMD_BBH(0x20, 0x00, cullingRadius) \ No newline at end of file diff --git a/src/factories/sm64/GeoFactory.cpp.old b/src/factories/sm64/GeoFactory.cpp.old new file mode 100644 index 0000000..e30f73a --- /dev/null +++ b/src/factories/sm64/GeoFactory.cpp.old @@ -0,0 +1,594 @@ +#include "SGeoFactory.h" + +#include "spdlog/spdlog.h" +#include "utils/MIODecoder.h" +#include "GeoCommands.h" +#include "Companion.h" +#include + +namespace fs = std::filesystem; + +enum GeoCommand { + BRANCH_AND_LINK, + END, + BRANCH, + RETURN, + OPEN_NODE, + CLOSE_NODE, + ASSIGN_AS_VIEW, + UPDATE_NODE_FLAGS, + NODE_ROOT, + NODE_ORTHO_PROJECTION, + NODE_PERSPECTIVE, + NODE_START, + NODE_MASTER_LIST, + NODE_LEVEL_OF_DETAIL, + NODE_SWITCH_CASE, + NODE_CAMERA, + NODE_TRANSLATION_ROTATION, + NODE_TRANSLATION, + NODE_ROTATION, + NODE_ANIMATED_PART, + NODE_BILLBOARD, + NODE_DISPLAY_LIST, + NODE_SHADOW, + NODE_OBJECT_PARENT, + NODE_ASM, + NODE_BACKGROUND, + NOP, + COPY_VIEW, + NODE_HELD_OBJ, + NODE_SCALE, + NOP2, + NOP3, + NODE_CULLING_RADIUS, + // Custom + BRANCH_AND_LINK_OTR, + BRANCH_OTR, + NODE_SWITCH_CASE_OTR, + NODE_CAMERA_OTR, + NODE_TRANSLATION_ROTATION_OTR, + NODE_TRANSLATION_OTR, + NODE_ROTATION_OTR, + NODE_ANIMATED_PART_OTR, + NODE_BILLBOARD_OTR, + NODE_DISPLAY_LIST_OTR, + NODE_ASM_OTR, + NODE_BACKGROUND_OTR, + NODE_HELD_OBJ_OTR, + NODE_SCALE_OTR +}; + +Vec3s gVec3sZero = { 0, 0, 0 }; + +int16_t *read_vec3s_to_vec3f(Vec3f dst, int16_t *src) { + dst[0] = next_s16_in_geo_script(&src); + dst[1] = next_s16_in_geo_script(&src); + dst[2] = next_s16_in_geo_script(&src); + return src; +} + +int16_t *read_vec3s(Vec3s dst, int16_t *src) { + dst[0] = next_s16_in_geo_script(&src); + dst[1] = next_s16_in_geo_script(&src); + dst[2] = next_s16_in_geo_script(&src); + return src; +} + +int16_t *read_vec3s_angle(Vec3s dst, int16_t *src) { + dst[0] = next_s16_in_geo_script(&src); + dst[1] = next_s16_in_geo_script(&src); + dst[2] = next_s16_in_geo_script(&src); + return src; +} + +void vec3s_copy(Vec3s dest, Vec3s src) { + dest[0] = src[0]; + dest[1] = src[1]; + dest[2] = src[2]; +} + +void vec3s_set(Vec3s dest, int16_t x, int16_t y, int16_t z) { + dest[0] = x; + dest[1] = y; + dest[2] = z; +} + +int current_tab_size = 0; + +static inline void print_cmd(GeoCommand cmd, std::string c){ + if(cmd == GeoCommand::CLOSE_NODE){ + current_tab_size--; + } + + for(int i = 0; i < current_tab_size; i++){ + std::cout << "\t"; + } + + if(cmd == GeoCommand::OPEN_NODE){ + current_tab_size++; + } + + std::cout << "GEO_" << c << "()" << std::endl; +} + +typedef uint32_t GeoLayout; + +bool SGeoFactory::process(LUS::BinaryWriter* writer, YAML::Node& data, std::vector& buffer) { + + WriteHeader(writer, LUS::ResourceType::Blob, 0); + + auto offset = data["offset"].as(); + auto cmd = (uint8_t*) buffer.data() + offset; + auto processing = true; + + std::vector layout; + auto geo_writer = new LUS::BinaryWriter(); + +#define GeoWrite(x) layout.insert(layout.end(), {x}) + + while(processing){ + auto opcode = cmd[0x00]; + switch (opcode) { + case CMD_INFO(BRANCH_AND_LINK) { + geo_writer->Write((uint8_t) BRANCH_AND_LINK_OTR); + uint32_t ptr = SEGMENT_OFFSET(BSWAP32(cur_geo_cmd_u32(0x04))); + auto decl = Companion::Instance->GetNodeByAddr(ptr); + + if(decl.has_value()){ + uint64_t hash = CRC64(std::get<0>(decl.value()).c_str()); + SPDLOG_INFO("Found geo: 0x{:X} Hash: 0x{:X} Path: {}", ptr, hash, std::get<0>(decl.value())); + geo_writer->Write(hash); + } else { + SPDLOG_INFO("Warning: Could not find geo at 0x{:X}", ptr); + geo_writer->Write((uint64_t) 0); + } + + cmd += 0x08 << CMD_SIZE_SHIFT; + break; + } + case CMD_INFO(BRANCH) { + geo_writer->Write((uint8_t) BRANCH_OTR); + geo_writer->Write(cur_geo_cmd_u8(0x01)); + + int32_t ptr = SEGMENT_OFFSET(BSWAP32(cur_geo_cmd_u32(0x04))); + auto decl = Companion::Instance->GetNodeByAddr(ptr); + + if(decl.has_value()){ + uint64_t hash = CRC64(std::get<0>(decl.value()).c_str()); + SPDLOG_INFO("Found geo: 0x{:X} Hash: 0x{:X} Path: {}", ptr, hash, std::get<0>(decl.value())); + geo_writer->Write(hash); + } else { + SPDLOG_INFO("Warning: Could not find geo at 0x{:X}", ptr); + geo_writer->Write((uint64_t) 0); + } + + cmd += 0x08 << CMD_SIZE_SHIFT; + break; + } + case CMD_INFO(END) + geo_writer->Write((uint8_t) END); + processing = false; + break; + case CMD_INFO(RETURN) + geo_writer->Write((uint8_t) RETURN); + processing = false; + break; + case CMD_NOP(OPEN_NODE) + case CMD_NOP(CLOSE_NODE) + case CMD_INFO(ASSIGN_AS_VIEW) { + geo_writer->Write(ASSIGN_AS_VIEW); + geo_writer->Write(cur_geo_cmd_s16(0x02)); + break; + } + case CMD_INFO(UPDATE_NODE_FLAGS) { + geo_writer->Write((uint8_t) UPDATE_NODE_FLAGS); + geo_writer->Write(cur_geo_cmd_u8(0x01)); + geo_writer->Write(cur_geo_cmd_s16(0x02)); + break; + } + case CMD_INFO(NODE_ROOT) { + auto a1 = cur_geo_cmd_s16(0x02); + auto a2 = cur_geo_cmd_s16(0x04); + auto a3 = cur_geo_cmd_s16(0x06); + auto a4 = cur_geo_cmd_s16(0x08); + auto a5 = cur_geo_cmd_s16(0x0A); + GeoWrite(GEO_NODE_SCREEN_AREA(a1, a2, a3, a4, a5)); + cmd += 0x0C << CMD_SIZE_SHIFT; + processing = false; + } + case CMD_INFO(NODE_ORTHO_PROJECTION) { + geo_writer->Write((uint8_t) NODE_ORTHO_PROJECTION); + geo_writer->Write(cur_geo_cmd_s16(0x02)); + cmd += 0x04 << CMD_SIZE_SHIFT; + break; + } + case CMD_INFO(NODE_PERSPECTIVE) { + geo_writer->Write((uint8_t) NODE_PERSPECTIVE); + auto param = cur_geo_cmd_u8(0x01); + auto fov = cur_geo_cmd_s16(0x02); + auto near = cur_geo_cmd_s16(0x04); + auto far = cur_geo_cmd_s16(0x06); + + geo_writer->Write(param); + geo_writer->Write(fov); + geo_writer->Write(near); + geo_writer->Write(far); + + if (param != 0) { + auto func = cur_geo_cmd_u32(0x08); + geo_writer->Write(func); + cmd += 4 << CMD_SIZE_SHIFT; + } + + cmd += 0x08 << CMD_SIZE_SHIFT; + break; + } + case CMD_NOP(NODE_START) + case CMD_INFO(NODE_MASTER_LIST) { + geo_writer->Write((uint8_t) NODE_MASTER_LIST); + geo_writer->Write(cur_geo_cmd_u8(0x01)); + cmd += 0x04 << CMD_SIZE_SHIFT; + break; + } + case CMD_INFO(NODE_LEVEL_OF_DETAIL) { + geo_writer->Write((uint8_t) NODE_LEVEL_OF_DETAIL); + int16_t minDistance = cur_geo_cmd_s16(0x04); + int16_t maxDistance = cur_geo_cmd_s16(0x06); + + geo_writer->Write(minDistance); + geo_writer->Write(maxDistance); + + cmd += 0x08 << CMD_SIZE_SHIFT; + break; + } + case CMD_INFO(NODE_SWITCH_CASE) { + geo_writer->Write((uint8_t) NODE_SWITCH_CASE_OTR); + auto cs = cur_geo_cmd_s16(0x02); + auto ptr = cur_geo_cmd_u32(0x04); + + geo_writer->Write(cs); + geo_writer->Write(ptr); + + cmd += 0x08 << CMD_SIZE_SHIFT; + break; + } + case CMD_INFO(NODE_CAMERA) { + geo_writer->Write((uint8_t) NODE_CAMERA_OTR); + auto cmd_pos = (int16_t *) &cmd[4]; + auto mode = cur_geo_cmd_s16(0x02); + + geo_writer->Write(mode); + + Vec3f pos, focus; + + cmd_pos = read_vec3s_to_vec3f(pos, cmd_pos); + read_vec3s_to_vec3f(focus, cmd_pos); + + geo_writer->Write(pos[0]); + geo_writer->Write(pos[1]); + geo_writer->Write(pos[2]); + geo_writer->Write(focus[0]); + geo_writer->Write(focus[1]); + geo_writer->Write(focus[2]); + + auto ptr = SEGMENT_OFFSET(BSWAP32(cur_geo_cmd_u32(0x10))); + geo_writer->Write(ptr); + + cmd += 0x14 << CMD_SIZE_SHIFT; + break; + } + case CMD_INFO(NODE_TRANSLATION_ROTATION) { + geo_writer->Write(NODE_TRANSLATION_ROTATION_OTR); + auto params = cur_geo_cmd_u8(0x01); + auto cmd_pos = (int16_t*) cmd; + + Vec3s translation, rotation; + + geo_writer->Write(params); + + switch ((params & 0x70) >> 4) { + case 0: + cmd_pos = read_vec3s(translation, &cmd_pos[2]); + geo_writer->Write(translation[0]); + geo_writer->Write(translation[1]); + geo_writer->Write(translation[2]); + cmd_pos = read_vec3s_angle(rotation, cmd_pos); + geo_writer->Write(rotation[0]); + geo_writer->Write(rotation[1]); + geo_writer->Write(rotation[2]); + break; + case 1: + cmd_pos = read_vec3s(translation, &cmd_pos[1]); + geo_writer->Write(translation[0]); + geo_writer->Write(translation[1]); + geo_writer->Write(translation[2]); + break; + case 2: + cmd_pos = read_vec3s_angle(rotation, &cmd_pos[1]); + geo_writer->Write(rotation[0]); + geo_writer->Write(rotation[1]); + geo_writer->Write(rotation[2]); + break; + case 3: + cmd_pos += 2 << CMD_SIZE_SHIFT; + break; + } + + if (params & 0x80) { + auto dlist = SEGMENT_OFFSET(BSWAP32(*(uint32_t*) &cmd_pos[0])); + auto decl = Companion::Instance->GetNodeByAddr(dlist); + if(decl.has_value()){ + uint64_t hash = CRC64(std::get<0>(decl.value()).c_str()); + SPDLOG_INFO("Found display list: 0x{:X} Hash: 0x{:X} Path: {}", dlist, hash, std::get<0>(decl.value())); + geo_writer->Write(hash); + } else { + SPDLOG_INFO("Warning: Could not find display list at 0x{:X}", dlist); + geo_writer->Write((uint64_t) 0); + } + cmd_pos += 2 << CMD_SIZE_SHIFT; + } + + cmd = (uint8_t*) cmd_pos; + break; + } + case CMD_INFO(NODE_TRANSLATION) { + geo_writer->Write(NODE_TRANSLATION_OTR); + auto params = cur_geo_cmd_u8(0x01); + auto cmd_pos = (int16_t*) cmd; + + Vec3s translation; + cmd_pos = read_vec3s(translation, &cmd_pos[1]); + + geo_writer->Write(translation[0]); + geo_writer->Write(translation[1]); + geo_writer->Write(translation[2]); + + if (params & 0x80) { + auto dlist = SEGMENT_OFFSET(BSWAP32(*(uint32_t*) &cmd_pos[0])); + auto decl = Companion::Instance->GetNodeByAddr(dlist); + if(decl.has_value()){ + uint64_t hash = CRC64(std::get<0>(decl.value()).c_str()); + SPDLOG_INFO("Found display list: 0x{:X} Hash: 0x{:X} Path: {}", dlist, hash, std::get<0>(decl.value())); + geo_writer->Write(hash); + } else { + SPDLOG_INFO("Warning: Could not find display list at 0x{:X}", dlist); + geo_writer->Write((uint64_t) 0); + } + cmd_pos += 2 << CMD_SIZE_SHIFT; + } + + cmd = (uint8_t*) cmd_pos; + break; + } + case CMD_INFO(NODE_ROTATION) { + geo_writer->Write(NODE_ROTATION_OTR); + auto params = cur_geo_cmd_u8(0x01); + auto cmd_pos = (int16_t*) cmd; + + Vec3s sp2c; + cmd_pos = read_vec3s(sp2c, &cmd_pos[1]); + + geo_writer->Write(sp2c[0]); + geo_writer->Write(sp2c[1]); + geo_writer->Write(sp2c[2]); + + if (params & 0x80) { + auto dlist = SEGMENT_OFFSET(BSWAP32(*(uint32_t*) &cmd_pos[0])); + auto decl = Companion::Instance->GetNodeByAddr(dlist); + if(decl.has_value()){ + uint64_t hash = CRC64(std::get<0>(decl.value()).c_str()); + SPDLOG_INFO("Found display list: 0x{:X} Hash: 0x{:X} Path: {}", dlist, hash, std::get<0>(decl.value())); + geo_writer->Write(hash); + } else { + SPDLOG_INFO("Warning: Could not find display list at 0x{:X}", dlist); + geo_writer->Write((uint64_t) 0); + } + cmd_pos += 2 << CMD_SIZE_SHIFT; + } + + cmd = (uint8_t*) cmd_pos; + break; + } + case CMD_INFO(NODE_ANIMATED_PART) { + geo_writer->Write(NODE_ANIMATED_PART_OTR); + + auto layer = cur_geo_cmd_u8(0x01); + auto ptr = cur_geo_cmd_u32(0x08); + + geo_writer->Write(layer); + geo_writer->Write(ptr); + + auto dlist = SEGMENT_OFFSET(BSWAP32(cur_geo_cmd_u32(0x08))); + auto decl = Companion::Instance->GetNodeByAddr(dlist); + if(decl.has_value()){ + uint64_t hash = CRC64(std::get<0>(decl.value()).c_str()); + SPDLOG_INFO("Found display list: 0x{:X} Hash: 0x{:X} Path: {}", dlist, hash, std::get<0>(decl.value())); + geo_writer->Write(hash); + } else { + SPDLOG_INFO("Warning: Could not find display list at 0x{:X}", dlist); + geo_writer->Write((uint64_t) 0); + } + + cmd += 0x0C << CMD_SIZE_SHIFT; + break; + } + case CMD_INFO(NODE_BILLBOARD) { + geo_writer->Write(NODE_BILLBOARD_OTR); + + Vec3s translation; + auto params = cur_geo_cmd_u8(0x01); + auto cmd_pos = (int16_t*) cmd; + + cmd_pos = read_vec3s(translation, &cmd_pos[1]); + geo_writer->Write(params); + if (params & 0x80) { + auto dlist = SEGMENT_OFFSET(BSWAP32(*(uint32_t*) &cmd_pos[0])); + auto decl = Companion::Instance->GetNodeByAddr(dlist); + if (decl.has_value()) { + uint64_t hash = CRC64(std::get<0>(decl.value()).c_str()); + SPDLOG_INFO("Found display list: 0x{:X} Hash: 0x{:X} Path: {}", dlist, hash, + std::get<0>(decl.value())); + geo_writer->Write(hash); + } else { + SPDLOG_INFO("Warning: Could not find display list at 0x{:X}", dlist); + geo_writer->Write((uint64_t) 0); + } + + cmd_pos += 2 << CMD_SIZE_SHIFT; + } + + cmd = (uint8_t*) cmd_pos; + break; + } + case CMD_INFO(NODE_DISPLAY_LIST) { + geo_writer->Write((uint8_t) NODE_DISPLAY_LIST_OTR); + + int32_t layer = cur_geo_cmd_u8(0x01); + auto ptr = SEGMENT_OFFSET(BSWAP32(cur_geo_cmd_u32(0x04))); + + geo_writer->Write(layer); + + auto decl = Companion::Instance->GetNodeByAddr(ptr); + + if(decl.has_value()){ + uint64_t hash = CRC64(std::get<0>(decl.value()).c_str()); + SPDLOG_INFO("Found display list: 0x{:X} Hash: 0x{:X} Path: {}", ptr, hash, std::get<0>(decl.value())); + geo_writer->Write(hash); + } else { + SPDLOG_INFO("Warning: Could not find display list at 0x{:X}", ptr); + geo_writer->Write((uint64_t) 0); + } + + cmd += 0x08 << CMD_SIZE_SHIFT; + break; + } + case CMD_INFO(NODE_SHADOW) { + geo_writer->Write((uint8_t) NODE_SHADOW); + auto type = cur_geo_cmd_s16(0x02); + auto solidity = cur_geo_cmd_s16(0x04); + auto scale = cur_geo_cmd_s16(0x06); + + geo_writer->Write(type); + geo_writer->Write(solidity); + geo_writer->Write(scale); + + cmd += 0x08 << CMD_SIZE_SHIFT; + break; + } + case CMD_NOP(NODE_OBJECT_PARENT) + case CMD_INFO(NODE_ASM) { + geo_writer->Write(NODE_ASM_OTR); + auto param = cur_geo_cmd_s16(0x02); + auto ptr = cur_geo_cmd_u32(0x04); + + geo_writer->Write(param); + geo_writer->Write(SEGMENT_OFFSET(BSWAP32(ptr))); + cmd += 0x08 << CMD_SIZE_SHIFT; + break; + } + case CMD_INFO(NODE_BACKGROUND) { + geo_writer->Write((uint8_t) NODE_BACKGROUND_OTR); + auto bg = cur_geo_cmd_s16(0x02); + geo_writer->Write(bg); + + auto ptr = SEGMENT_OFFSET(BSWAP32(cur_geo_cmd_u32(0x04))); + geo_writer->Write(ptr); + + cmd += 0x08 << CMD_SIZE_SHIFT; + break; + } + case CMD_INFO(NOP) { + geo_writer->Write((uint8_t) NOP); + geo_writer->Write((uint32_t) 0); + geo_writer->Write((uint32_t) 0); + cmd += 0x08 << CMD_SIZE_SHIFT; + break; + } + case CMD_INFO(COPY_VIEW) { + geo_writer->Write((uint32_t) COPY_VIEW); + auto idx = cur_geo_cmd_s16(0x02); + geo_writer->Write(idx); + break; + } + case CMD_INFO(NODE_HELD_OBJ) { + geo_writer->Write((uint8_t) NODE_HELD_OBJ_OTR); + + auto idx = cur_geo_cmd_u8(0x01); + geo_writer->Write(idx); + + Vec3s c_offset; + read_vec3s(c_offset, (int16_t*) &cmd[0x02]); + + geo_writer->Write(c_offset[0]); + geo_writer->Write(c_offset[1]); + geo_writer->Write(c_offset[2]); + + auto ptr = SEGMENT_OFFSET(BSWAP32(cur_geo_cmd_u32(0x08))); + geo_writer->Write(ptr); + + cmd += 0x0C << CMD_SIZE_SHIFT; + break; + } + case CMD_INFO(NODE_SCALE) { + geo_writer->Write(NODE_SCALE_OTR); + auto params = cur_geo_cmd_u8(0x01); + auto scale = cur_geo_cmd_u32(0x04); + + geo_writer->Write(params); + geo_writer->Write(scale); + + if (params & 0x80) { + auto dlist = SEGMENT_OFFSET(BSWAP32(cur_geo_cmd_u32(0x08))); + auto decl = Companion::Instance->GetNodeByAddr(dlist); + if(decl.has_value()){ + uint64_t hash = CRC64(std::get<0>(decl.value()).c_str()); + SPDLOG_INFO("Found display list: 0x{:X} Hash: 0x{:X} Path: {}", dlist, hash, std::get<0>(decl.value())); + geo_writer->Write(hash); + } else { + SPDLOG_INFO("Warning: Could not find display list at 0x{:X}", dlist); + geo_writer->Write((uint64_t) 0); + } + cmd += 4 << CMD_SIZE_SHIFT; + } + break; + } + case CMD_INFO(NOP2) { + geo_writer->Write((uint8_t) NOP2); + geo_writer->Write((uint32_t) 0); + geo_writer->Write((uint32_t) 0); + cmd += 0x08 << CMD_SIZE_SHIFT; + break; + } + case CMD_INFO(NOP3) { + geo_writer->Write((uint8_t) NOP3); + geo_writer->Write((uint32_t) 0); + geo_writer->Write((uint32_t) 0); + geo_writer->Write((uint32_t) 0); + cmd += 0x10 << CMD_SIZE_SHIFT; + break; + } + case CMD_INFO(NODE_CULLING_RADIUS) { + geo_writer->Write((uint8_t) NODE_CULLING_RADIUS); + auto radius = cur_geo_cmd_s16(0x02); + geo_writer->Write(radius); + break; + } + default: + std::cout << "Unknown command: " << std::hex << (int) cmd[0x00] << std::endl; + break; + } + } + + auto size = geo_writer->GetLength(); + auto data_ptr = geo_writer->ToVector(); +// auto s = size + layout.size() * sizeof(GeoLayout); +// writer->Write(s); +// writer->Write(data_ptr.data(), size); + + writer->Write((uint32_t) layout.size()); + writer->Write((char*) layout.data(), layout.size() * sizeof(GeoLayout)); + geo_writer->Close(); + + return true; +} diff --git a/src/factories/debug/MIO0Factory.h b/src/factories/sm64/GeoFactory.h.old similarity index 68% rename from src/factories/debug/MIO0Factory.h rename to src/factories/sm64/GeoFactory.h.old index 7df6ee9..331e072 100644 --- a/src/factories/debug/MIO0Factory.h +++ b/src/factories/sm64/GeoFactory.h.old @@ -2,8 +2,8 @@ #include "../RawFactory.h" -class MIO0Factory : public RawFactory { +class SGeoFactory : public RawFactory { public: - MIO0Factory() = default; + SGeoFactory() = default; bool process(LUS::BinaryWriter* write, YAML::Node& data, std::vector& buffer) override; }; \ No newline at end of file diff --git a/src/factories/sm64/SAnimFactory.cpp b/src/factories/sm64/SAnimFactory.cpp deleted file mode 100644 index 06d5944..0000000 --- a/src/factories/sm64/SAnimFactory.cpp +++ /dev/null @@ -1,86 +0,0 @@ -#include "SAnimFactory.h" - -#include "spdlog/spdlog.h" -#include "utils/MIODecoder.h" -#include "binarytools/BinaryReader.h" - -namespace fs = std::filesystem; - -void WriteAnimationHeader(LUS::BinaryWriter* writer, YAML::Node& data, std::vector& buffer) { - auto offset = data["offset"].as(); - auto size = data["size"].as(); - - LUS::BinaryReader reader((char*) buffer.data() + offset, size); - reader.SetEndianness(LUS::Endianness::Big); - - auto flags = reader.ReadInt16(); - auto animYTransDivisor = reader.ReadInt16(); - auto startFrame = reader.ReadInt16(); - auto loopStart = reader.ReadInt16(); - auto loopEnd = reader.ReadInt16(); - auto unusedBoneCount = reader.ReadInt16(); - reader.ReadUInt32(); - reader.ReadUInt32(); - auto length = reader.ReadUInt32(); - - SPDLOG_INFO("Flags: {}", flags); - SPDLOG_INFO("Anim-Y Trans Divisor: {}", animYTransDivisor); - SPDLOG_INFO("Start Frame: {}", startFrame); - SPDLOG_INFO("Loop Start: {}", loopStart); - SPDLOG_INFO("Loop End: {}", loopEnd); - SPDLOG_INFO("Unused Bone Count: {}", unusedBoneCount); - SPDLOG_INFO("Length: {}", length); - - WRITE_I16(flags); - WRITE_I16(animYTransDivisor); - WRITE_I16(startFrame); - WRITE_I16(loopStart); - WRITE_I16(loopEnd); - WRITE_I16(unusedBoneCount); - WRITE_U64(length); - reader.Close(); -} - -void WriteAnimationIndex(LUS::BinaryWriter* writer, YAML::Node& data, std::vector& buffer) { - auto offset = data["offset"].as(); - auto size = data["size"].as(); - - LUS::BinaryReader reader((char*) buffer.data() + offset, size); - reader.SetEndianness(LUS::Endianness::Big); - size_t entries = size / sizeof(uint16_t); - SPDLOG_INFO("Found Indices: {}", entries); - WRITE_U32(entries); - for(size_t id = 0; id < entries; id++) { - WRITE_I16(reader.ReadInt16()); - } - reader.Close(); -} - -void WriteAnimationValues(LUS::BinaryWriter* writer, YAML::Node& data, std::vector& buffer) { - auto offset = data["offset"].as(); - auto size = data["size"].as(); - - LUS::BinaryReader reader((char*) buffer.data() + offset, size); - reader.SetEndianness(LUS::Endianness::Big); - size_t entries = size / sizeof(uint16_t); - SPDLOG_INFO("Found Values: {}", entries); - WRITE_U32(entries); - for(size_t id = 0; id < entries; id++) { - WRITE_U16(reader.ReadUInt16()); - } - reader.Close(); -} - -bool SAnimFactory::process(LUS::BinaryWriter* writer, YAML::Node& data, std::vector& buffer) { - WRITE_HEADER(LUS::ResourceType::Anim, 0); - - auto header = data["header"]; - auto values = data["values"]; - auto index = data["indices"]; - - WriteAnimationHeader(writer, header, buffer); - WriteAnimationIndex(writer, index, buffer); - WriteAnimationValues(writer, values, buffer); - - return true; -} diff --git a/src/factories/sm64/SAnimFactory.h b/src/factories/sm64/SAnimFactory.h deleted file mode 100644 index a5fa529..0000000 --- a/src/factories/sm64/SAnimFactory.h +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once - -#include "factories/RawFactory.h" - -class SAnimFactory : public RawFactory { -public: - SAnimFactory() = default; - bool process(LUS::BinaryWriter* write, YAML::Node& data, std::vector& buffer) override; -}; \ No newline at end of file diff --git a/src/factories/sm64/SDialogFactory.cpp b/src/factories/sm64/SDialogFactory.cpp deleted file mode 100644 index 474690a..0000000 --- a/src/factories/sm64/SDialogFactory.cpp +++ /dev/null @@ -1,62 +0,0 @@ -#include -#include "SDialogFactory.h" - -#include "spdlog/spdlog.h" -#include "utils/MIODecoder.h" -#include "binarytools/BinaryReader.h" - -namespace fs = std::filesystem; - -static size_t id = 0; - -bool SDialogFactory::process(LUS::BinaryWriter* writer, YAML::Node& data, std::vector& buffer) { - - WRITE_HEADER(LUS::ResourceType::SDialog, 0); - - auto offset = data["offset"].as(); - auto mio0 = data["mio0"].as(); - - std::vector text; - auto decoded = MIO0Decoder::Decode(buffer, offset); - auto bytes = (uint8_t*) decoded.data(); - LUS::BinaryReader reader(decoded.data(), decoded.size()); - reader.SetEndianness(LUS::Endianness::Big); - reader.Seek(mio0, LUS::SeekOffsetType::Start); - - auto unused = reader.ReadUInt32(); - auto linesPerBox = reader.ReadUByte(); - // Padding - reader.Read(1); - auto leftOffset = reader.ReadInt16(); - auto width = reader.ReadInt16(); - // Padding - reader.Read(2); - auto str = SEGMENT_OFFSET(reader.ReadInt32()); - - while(bytes[str] != 0xFF){ - auto c = bytes[str++]; - text.push_back(c); - } - text.push_back(0xFF); - - SPDLOG_INFO("Unused: {}", unused); - SPDLOG_INFO("Lines per box: {}", linesPerBox); - SPDLOG_INFO("Left offset: {}", leftOffset); - SPDLOG_INFO("Width: {}", width); - SPDLOG_INFO("Size: {}", text.size()); - - WRITE_U32(unused); - WRITE_I8(linesPerBox); - WRITE_I16(leftOffset); - WRITE_I16(width); - - WRITE_U32(text.size()); - WRITE_ARRAY(text.data(), text.size()); - - if(id == 85){ - int bp = 0; - } - - id++; - return true; -} \ No newline at end of file diff --git a/src/factories/sm64/SDialogFactory.h b/src/factories/sm64/SDialogFactory.h deleted file mode 100644 index a1f58a9..0000000 --- a/src/factories/sm64/SDialogFactory.h +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once - -#include "../RawFactory.h" - -class SDialogFactory : public RawFactory { -public: - SDialogFactory() = default; - bool process(LUS::BinaryWriter* write, YAML::Node& data, std::vector& buffer) override; -}; \ No newline at end of file diff --git a/src/factories/sm64/SDictionaryFactory.cpp b/src/factories/sm64/SDictionaryFactory.cpp deleted file mode 100644 index e9d598f..0000000 --- a/src/factories/sm64/SDictionaryFactory.cpp +++ /dev/null @@ -1,35 +0,0 @@ -#include "SDictionaryFactory.h" - -#include "utils/MIODecoder.h" - -namespace fs = std::filesystem; - -bool SDictionaryFactory::process(LUS::BinaryWriter* writer, YAML::Node& data, std::vector& buffer) { - - WRITE_HEADER(LUS::ResourceType::Dictionary, 0); - - auto entries = data["keys"].size(); - WRITE_U32(entries); - - // Iterate on yaml keys - for (auto it = data["keys"].begin(); it != data["keys"].end(); ++it) { - auto key = it->first.as(); - auto offset = it->second.as(); - - std::vector text; - auto bytes = (uint8_t*) buffer.data(); - - while(bytes[offset] != 0xFF){ - auto c = bytes[offset++]; - text.push_back(c); - } - - text.push_back(0xFF); - - writer->Write(key); - WRITE_U32(text.size()); - WRITE_ARRAY(text.data(), text.size()); - } - - return true; -} diff --git a/src/factories/sm64/SDictionaryFactory.h b/src/factories/sm64/SDictionaryFactory.h deleted file mode 100644 index 9dd5753..0000000 --- a/src/factories/sm64/SDictionaryFactory.h +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once - -#include "../RawFactory.h" - -class SDictionaryFactory : public RawFactory { -public: - SDictionaryFactory() = default; - bool process(LUS::BinaryWriter* write, YAML::Node& data, std::vector& buffer) override; -}; \ No newline at end of file diff --git a/src/factories/sm64/STextFactory.cpp b/src/factories/sm64/STextFactory.cpp deleted file mode 100644 index e6b27ee..0000000 --- a/src/factories/sm64/STextFactory.cpp +++ /dev/null @@ -1,28 +0,0 @@ -#include "STextFactory.h" - -#include "utils/MIODecoder.h" - -namespace fs = std::filesystem; - -bool STextFactory::process(LUS::BinaryWriter* writer, YAML::Node& data, std::vector& buffer) { - - WRITE_HEADER(LUS::ResourceType::Blob, 0); - - auto offset = data["offset"].as(); - auto mio0 = data["mio0"].as(); - - std::vector text; - auto decoded = MIO0Decoder::Decode(buffer, offset); - auto bytes = (uint8_t*) decoded.data(); - - while(bytes[mio0] != 0xFF){ - auto c = bytes[mio0++]; - text.push_back(c); - } - text.push_back(0xFF); - - WRITE_U32(text.size()); - WRITE_ARRAY(text.data(), text.size()); - - return true; -} diff --git a/src/factories/sm64/STextFactory.h b/src/factories/sm64/STextFactory.h deleted file mode 100644 index 7f9fe00..0000000 --- a/src/factories/sm64/STextFactory.h +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once - -#include "../RawFactory.h" - -class STextFactory : public RawFactory { -public: - STextFactory() = default; - bool process(LUS::BinaryWriter* write, YAML::Node& data, std::vector& buffer) override; -}; \ No newline at end of file diff --git a/src/factories/sm64/TextFactory.cpp b/src/factories/sm64/TextFactory.cpp new file mode 100644 index 0000000..6fcda1e --- /dev/null +++ b/src/factories/sm64/TextFactory.cpp @@ -0,0 +1,29 @@ +#include "TextFactory.h" +#include "utils/MIODecoder.h" + +void SM64::TextBinaryExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement ) { + auto writer = LUS::BinaryWriter(); + auto data = std::static_pointer_cast(raw)->mBuffer; + + WriteHeader(writer, LUS::ResourceType::Blob, 0); + writer.Write((uint32_t) data.size()); + writer.Write((char*) data.data(), data.size()); + writer.Finish(write); +} + +std::optional> SM64::TextFactory::parse(std::vector& buffer, YAML::Node& data) { + auto offset = data["offset"].as(); + auto mio0 = data["mio0"].as(); + + std::vector text; + auto decoded = MIO0Decoder::Decode(buffer, mio0); + auto bytes = (uint8_t*) decoded.data(); + + while(bytes[offset] != 0xFF){ + auto c = bytes[offset++]; + text.push_back(c); + } + text.push_back(0xFF); + + return std::make_shared(text); +} \ No newline at end of file diff --git a/src/factories/sm64/TextFactory.h b/src/factories/sm64/TextFactory.h new file mode 100644 index 0000000..9c030b7 --- /dev/null +++ b/src/factories/sm64/TextFactory.h @@ -0,0 +1,18 @@ +#pragma once + +#include "../BaseFactory.h" +#include "../../types/RawBuffer.h" + +namespace SM64 { +class TextBinaryExporter : public BaseExporter { + void Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) override; +}; + +class TextFactory : public BaseFactory { +public: + std::optional> parse(std::vector& buffer, YAML::Node& data) override; + inline std::unordered_map> GetExporters() override { + return { REGISTER(Binary, TextBinaryExporter) }; + } +}; +}; \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 9001fcb..7cab502 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5,39 +5,69 @@ #ifdef STANDALONE Companion* Companion::Instance; -void BindOTRMode(CLI::App& app){ - auto otr = app.add_subcommand("otr", "Extracts the rom to a folder"); - std::string filename; - otr->add_option("rom", filename, "sm64 us rom")->required()->check(CLI::ExistingFile); - otr->parse_complete_callback([&]() { - auto instance = Companion::Instance = new Companion(filename); - instance->Init(); - }); -} - -void BindPackMode(CLI::App& app){ - auto pack = app.add_subcommand("pack", "Packs the rom from a folder"); - std::string folder; - pack->add_option("folder", folder, "Folder")->required()->check(CLI::ExistingDirectory); - std::string output; - pack->add_option("output", output, "MPQ Output")->required(); - pack->parse_complete_callback([&]() { - Companion::Pack(folder, output); - }); -} - int main(int argc, char *argv[]) { - CLI::App app{"CubeOS - Rom extractor"}; + CLI::App app{"Torch - [T]orch is [O]ur [R]esource [C]onversion [H]elper\n\ + * It extracts from a baserom and generates code or an otr.\n\ + * It can also generate an otr from a folder of assets.\n" + }; + std::string mode; + std::string filename; + std::string target; + std::string folder; + bool otrMode = false; + bool debug = false; + bool header = false; - BindOTRMode(app); - BindPackMode(app); + app.require_subcommand(); + + /* Generate an OTR */ + auto otr = app.add_subcommand("otr", "OTR - Generates an otr\n"); + + otr->add_option("", filename, "")->required()->check(CLI::ExistingFile); + + otr->add_flag("-t,--target", target, "OTR output destination"); + otr->add_flag("-o,--otr", otrMode, "OTR Mode"); + otr->add_flag("-d,--dir", folder, "Generate OTR from a directory of assets"); + otr->add_flag("-z,--zeader", header, "Generates a header"); + otr->add_flag("-v,--verbose", debug, "Verbose Debug Mode"); + otr->parse_complete_callback([&]() { + auto instance = Companion::Instance = new Companion(filename, otrMode, debug); + + if (header) { + instance->Init(ExportType::Header); + } else { + instance->Init(ExportType::Binary); + } + + if (!folder.empty()) { + Companion::Pack(folder, target); + } + + }); + + /* Generate C code */ + auto code = app.add_subcommand("code", "Code - Generates C code\n"); + + code->add_option("", filename, "")->required()->check(CLI::ExistingFile); + + code->add_flag("-v,--verbose", debug, "Verbose Debug Mode; adds offsets to C code"); + code->parse_complete_callback([&]() { + auto instance = Companion::Instance = new Companion(filename, otrMode, debug); + instance->Init(ExportType::Code); + }); try { app.parse(argc, argv); } catch (const CLI::ParseError &e) { + std::cout << app.help() << std::endl; return app.exit(e); } + // No arguments --> display help. + if (argc == 1) { + std::cout << app.help() << std::endl; + } + return 0; } #endif \ No newline at end of file diff --git a/src/n64/Cartridge.h b/src/n64/Cartridge.h index 9450239..82dd5b1 100644 --- a/src/n64/Cartridge.h +++ b/src/n64/Cartridge.h @@ -2,6 +2,7 @@ #include #include +#include namespace N64 { enum class CountryCode { diff --git a/src/n64/CommandMacros.h b/src/n64/CommandMacros.h new file mode 100644 index 0000000..5466907 --- /dev/null +++ b/src/n64/CommandMacros.h @@ -0,0 +1,17 @@ +#pragma once + +#include + +#define _SHIFTL(v, s, w) ((uint32_t)(((uint32_t)(v) & ((0x01 << (w)) - 1)) << (s))) +#define _SHIFTR(v, s, w) ((uint32_t)(((uint32_t)(v) >> (s)) & ((0x01 << (w)) - 1))) + +#define CMD_SIZE_SHIFT (sizeof(uint32_t) >> 3) +#define CMD_PROCESS_OFFSET(offset) (((offset) & 3) | (((offset) & ~3) << CMD_SIZE_SHIFT)) + +#define CMD_BBBB(a, b, c, d) (_SHIFTL(a, 0, 8) | _SHIFTL(b, 8, 8) | _SHIFTL(c, 16, 8) | _SHIFTL(d, 24, 8)) +#define CMD_BBH(a, b, c) (_SHIFTL(a, 0, 8) | _SHIFTL(b, 8, 8) | _SHIFTL(c, 16, 16)) +#define CMD_HH(a, b) (_SHIFTL(a, 0, 16) | _SHIFTL(b, 16, 16)) +#define CMD_W(a) (a) +#define CMD_PTR(a) ((uintptr_t)(a)) + +#define CMD_HHHHHH(a, b, c, d, e, f) CMD_HH(a, b), CMD_HH(c, d), CMD_HH(e, f) diff --git a/src/n64/gbi-otr.h b/src/n64/gbi-otr.h new file mode 100644 index 0000000..74d707e --- /dev/null +++ b/src/n64/gbi-otr.h @@ -0,0 +1,140 @@ +#pragma once + +// CUSTOM OTR COMMANDS +#define G_SETTIMG_OTR_HASH 0x20 +#define G_SETFB 0x21 +#define G_RESETFB 0x22 +#define G_SETTIMG_FB 0x23 +#define G_VTX_OTR_FILEPATH 0x24 +#define G_SETTIMG_OTR_FILEPATH 0x25 +#define G_TRI1_OTR 0x26 +#define G_DL_OTR_FILEPATH 0x27 +#define G_PUSHCD 0x28 +#define G_MTX_OTR2 0x29 +#define G_DL_OTR_HASH 0x31 +#define G_VTX_OTR_HASH 0x32 +#define G_MARKER 0x33 +#define G_INVALTEXCACHE 0x34 +#define G_BRANCH_Z_OTR 0x35 +#define G_MTX_OTR 0x36 +#define G_TEXRECT_WIDE 0x37 +#define G_FILLWIDERECT 0x38 + +/* GFX Effects */ +#define G_SETGRAYSCALE 0x39 +#define G_EXTRAGEOMETRYMODE 0x3a +#define G_SETINTENSITY 0x40 +#define G_SETFILTERING 0x41 + +#define gDPFillWideRectangle(pkt, ulx, uly, lrx, lry) \ +{ \ + Gfx *_g0 = (Gfx*)(pkt), *_g1 = (Gfx*)(pkt); \ + _g0->words.w0 = _SHIFTL(G_FILLWIDERECT, 24, 8) | _SHIFTL((lrx), 2, 22); \ + _g0->words.w1 = _SHIFTL((lry), 2, 22); \ + _g1->words.w0 = _SHIFTL((ulx), 2, 22); \ + _g1->words.w1 = _SHIFTL((uly), 2, 22); \ +} + +#define gSPWideTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ +{ \ + Gfx *_g0 = (Gfx*)(pkt), *_g1 = (Gfx*)(pkt), *_g2 = (Gfx*)(pkt); \ + \ + _g0->words.w0 = _SHIFTL(G_TEXRECT_WIDE, 24, 8) | _SHIFTL((xh), 0, 24); \ + _g0->words.w1 = _SHIFTL((yh), 0, 24); \ + _g1->words.w0 = (_SHIFTL(tile, 24, 3) | _SHIFTL((xl), 0, 24)); \ + _g1->words.w1 = _SHIFTL((yl), 0, 24); \ + _g2->words.w0 = (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16)); \ + _g2->words.w1 = (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)); \ +} + +#define gsSPWideTextureRectangle(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ +{ { \ + (_SHIFTL(G_TEXRECT_WIDE, 24, 8) | _SHIFTL((xh), 0, 24)), \ + _SHIFTL((yh), 0, 24), \ +} }, \ + { { \ + (_SHIFTL((tile), 24, 3) | _SHIFTL((xl), 0, 24)), \ + _SHIFTL((yl), 0, 24), \ + } }, \ +{ \ + { _SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16), _SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16) } \ +} + +#define gSPExtraGeometryMode(pkt, c, s) \ +_DW({ \ + Gfx* _g = (Gfx*)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_EXTRAGEOMETRYMODE, 24, 8) | _SHIFTL(~(u32)(c), 0, 24); \ + _g->words.w1 = (u32)(s); \ +}) + +#define gSPSetExtraGeometryMode(pkt, word) gSPExtraGeometryMode((pkt), 0, word) +#define gSPClearExtraGeometryMode(pkt, word) gSPExtraGeometryMode((pkt), word, 0) + +#define __gSPInvalidateTexCache(pkt, addr) \ + _DW({ \ + Gfx* _g = (Gfx*)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_INVALTEXCACHE, 24, 8); \ + _g->words.w1 = addr; \ + }) + +#define gsSPInvalidateTexCache() \ + { _SHIFTL(G_INVALTEXCACHE, 24, 8), 0 } + +#define gsSPSetFB(pkt, fb) \ + { \ + Gfx* _g = (Gfx*)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_SETFB, 24, 8); \ + _g->words.w1 = fb; \ + } + +#define gsSPResetFB(pkt) \ + { \ + Gfx* _g = (Gfx*)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_RESETFB, 24, 8); \ + _g->words.w1 = 0; \ + } + +#define gSPGrayscale(pkt, state) \ + { \ + Gfx* _g = (Gfx*)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_SETGRAYSCALE, 24, 8); \ + _g->words.w1 = state; \ + } + +#define gsSPGrayscale(state) \ + { (_SHIFTL(G_SETGRAYSCALE, 24, 8)), (state) } + +#define gSPDisableFiltering(pkt, state) \ + { \ + Gfx* _g = (Gfx*)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_SETFILTERING, 24, 8); \ + _g->words.w1 = state; \ + } + +#define gsSPDisableFiltering(state) \ + { (_SHIFTL(G_SETFILTERING, 24, 8)), (state) } + +#define gsSP1TriangleOTR(v0, v1, v2, flag) \ + { _SHIFTL(G_TRI1_OTR, 24, 8) | __gsSP1Triangle_w1f(v0, v1, v2, flag), 0 } + +#define gsSPVertexOTR(v, n, v0) \ + { (_SHIFTL(G_VTX_OTR_HASH, 24, 8) | _SHIFTL((n), 12, 8) | _SHIFTL((v0) + (n), 1, 7)), (uintptr_t)(v) } + +#define gsSPBranchListOTRHash(dl) gsDma1p(G_DL_OTR_HASH, dl, 0, G_DL_NOPUSH) +#define gsSPBranchListOTRFilePath(dl) gsDma1p(G_DL_OTR_FILEPATH, dl, 0, G_DL_NOPUSH) +#define gsSPDisplayListOTRHash(dl) gsDma1p(G_DL_OTR_HASH, dl, 0, G_DL_PUSH) +#define gsSPDisplayListOTRFilePath(dl) gsDma1p(G_DL_OTR_FILEPATH, dl, 0, G_DL_PUSH) +#define gDPSetGrayscaleColor(pkt, r, g, b, lerp) DPRGBColor(pkt, G_SETINTENSITY, r, g, b, lerp) +#define gsDPSetGrayscaleColor(r, g, b, a) sDPRGBColor(G_SETINTENSITY, r, g, b, a) + +#define gsDPSetCombineLERP_NoMacros(a0, b0, c0, d0, Aa0, Ab0, Ac0, Ad0, a1, b1, c1, d1, Aa1, Ab1, Ac1, Ad1) \ + { \ + _SHIFTL(G_SETCOMBINE, 24, 8) | _SHIFTL(GCCc0w0(a0, c0, Aa0, Ac0) | GCCc1w0(a1, c1), 0, 24), \ + (unsigned int)(GCCc0w1(b0, d0, Ab0, Ad0) | GCCc1w1(b1, Aa1, Ac1, d1, Ab1, Ad1)) \ + } diff --git a/src/n64/gbi.h b/src/n64/gbi.h new file mode 100644 index 0000000..4f8596a --- /dev/null +++ b/src/n64/gbi.h @@ -0,0 +1,4801 @@ +/************************************************************************** + * * + * Copyright (C) 1994, Silicon Graphics, Inc. * + * * + * These coded instructions, statements, and computer programs contain * + * unpublished proprietary information of Silicon Graphics, Inc., and * + * are protected by Federal copyright law. They may not be disclosed * + * to third parties or copied or duplicated in any form, in whole or * + * in part, without the prior written consent of Silicon Graphics, Inc. * + * * + **************************************************************************/ +/************************************************************************** + * + * $Revision: 1.141 $ + * $Date: 1999/09/03 03:43:08 $ + * $Source: /exdisk2/cvs/N64OS/Master/cvsmdev2/PR/include/gbi.h,v $ + * + **************************************************************************/ + +#ifndef _GBI_H_ +#define _GBI_H_ + +#include "gbi-otr.h" + +/* + * To use the F3DEX ucodes, define F3DEX_GBI before include this file. + * + * #define F3DEX_GBI + * #include + * + * or + * + * cc -c -DF3DEX_GBI -I.... foo.c + * + */ + +/************************************************************************** + * + * Graphics Binary Interface + * + **************************************************************************/ + +/* + * Graphics Commands, 'xxx' parts may be generated from ucode + * + * The command format is + * + * |00xxxxxx| = DMA 0,..,127 + * |10xxxxxx| = Immediate Mode -65,..,-128 + * |11xxxxxx| = RDP cmds -1,..,-64 + * + * Note: in order for the RSP microcode to process RDP commands opaquely, + * we need to further identify those RDP commands that need DRAM address + * "fixup". To do this, we have the dummy command G_RDP_ADDR_FIXUP, and + * all |RDP commands| less than this are commands with embedded DRAM + * addresses. Further, the format of these commands should be similar so + * only one fixup routine is needed. + * + * Further explanation: + * The names of the commands are somewhat misleading. Here is clarification: + * + * - a 'DMA' type command has a pointer to additional data and + * causes a DMA transfer to bring that into DMEM. + * + * - an 'Immediate' type command isn't really 'immediate', in the + * traditional sense. This just means that the entire command fits + * in the 64-bit word, and the ucode can execute it 'immediately' + * without additional memory transfers. + * + * - an 'RDP' command is identified as such because the RDP + * commands can be passed-thru the RSP and sent to the RDP + * directly. One further confusing thing, is that some 'DP' + * macros below actually generate immediate commands, not + * not direct DP commands. + * + * IMPLEMENTATION NOTE: + * There is another group of RDP commands that includes the triangle commands + * generated by the RSP code. These are the raw commands the rasterizer + * hardware chews on, with slope info, etc. They will follow the RDP + * ordering... + * + * IMPLEMENTATION NOTE: + * The RDP hardware has some of these bit patterns wired up. If the hardware + * changes, we must adjust this table, likewise we can't change/add things + * once the hardware is frozen. (actually, the RDP hardware only looks at + * the lower 6 bits of the command byte) + * + */ + +#ifdef F3DEX_GBI_2E +# ifndef F3DEX_GBI_2 +# define F3DEX_GBI_2 +# endif +# define GBI_FLOATS +#endif + +#ifdef F3DEX_GBI_2 +# ifndef F3DEX_GBI +# define F3DEX_GBI +# endif +#define G_NOOP 0x00 +#define G_RDPHALF_2 0xf1 +#define G_SETOTHERMODE_H 0xe3 +#define G_SETOTHERMODE_L 0xe2 +#define G_RDPHALF_1 0xe1 +#define G_SPNOOP 0xe0 +#define G_ENDDL 0xdf +#define G_DL 0xde +#define G_LOAD_UCODE 0xdd +#define G_MOVEMEM 0xdc +#define G_MOVEWORD 0xdb +#define G_MTX 0xda +#define G_GEOMETRYMODE 0xd9 +#define G_POPMTX 0xd8 +#define G_TEXTURE 0xd7 +#define G_DMA_IO 0xd6 +#define G_SPECIAL_1 0xd5 +#define G_SPECIAL_2 0xd4 +#define G_SPECIAL_3 0xd3 + +#define G_VTX 0x01 +#define G_MODIFYVTX 0x02 +#define G_CULLDL 0x03 +#define G_BRANCH_Z 0x04 +#define G_TRI1 0x05 +#define G_TRI2 0x06 +#define G_QUAD 0x07 +#define G_LINE3D 0x08 +#else /* F3DEX_GBI_2 */ + +/* DMA commands: */ +#define G_SPNOOP 0 /* handle 0 gracefully */ +#define G_MTX 1 +#define G_RESERVED0 2 /* not implemeted */ +#define G_MOVEMEM 3 /* move a block of memory (up to 4 words) to dmem */ +#define G_VTX 4 +#define G_RESERVED1 5 /* not implemeted */ +#define G_DL 6 +#define G_RESERVED2 7 /* not implemeted */ +#define G_RESERVED3 8 /* not implemeted */ +#define G_SPRITE2D_BASE 9 /* sprite command */ + +/* IMMEDIATE commands: */ +#define G_IMMFIRST -65 +#define G_TRI1 (G_IMMFIRST-0) +#define G_CULLDL (G_IMMFIRST-1) +#define G_POPMTX (G_IMMFIRST-2) +#define G_MOVEWORD (G_IMMFIRST-3) +#define G_TEXTURE (G_IMMFIRST-4) +#define G_SETOTHERMODE_H (G_IMMFIRST-5) +#define G_SETOTHERMODE_L (G_IMMFIRST-6) +#define G_ENDDL (G_IMMFIRST-7) +#define G_SETGEOMETRYMODE (G_IMMFIRST-8) +#define G_CLEARGEOMETRYMODE (G_IMMFIRST-9) +#define G_LINE3D (G_IMMFIRST-10) +#define G_RDPHALF_1 (G_IMMFIRST-11) +#define G_RDPHALF_2 (G_IMMFIRST-12) +#if (defined(F3DEX_GBI)||defined(F3DLP_GBI)) +# define G_MODIFYVTX (G_IMMFIRST-13) +# define G_TRI2 (G_IMMFIRST-14) +# define G_BRANCH_Z (G_IMMFIRST-15) +# define G_LOAD_UCODE (G_IMMFIRST-16) +#else +# define G_RDPHALF_CONT (G_IMMFIRST-13) +#endif + +/* We are overloading 2 of the immediate commands + to keep the byte alignment of dmem the same */ + +#define G_SPRITE2D_SCALEFLIP (G_IMMFIRST-1) +#define G_SPRITE2D_DRAW (G_IMMFIRST-2) + +/* RDP commands: */ +#define G_NOOP 0xc0 /* 0 */ + +#endif /* F3DEX_GBI_2 */ + +/* RDP commands: */ +#define G_SETCIMG 0xff /* -1 */ +#define G_SETZIMG 0xfe /* -2 */ +#define G_SETTIMG 0xfd /* -3 */ +#define G_SETCOMBINE 0xfc /* -4 */ +#define G_SETENVCOLOR 0xfb /* -5 */ +#define G_SETPRIMCOLOR 0xfa /* -6 */ +#define G_SETBLENDCOLOR 0xf9 /* -7 */ +#define G_SETFOGCOLOR 0xf8 /* -8 */ +#define G_SETFILLCOLOR 0xf7 /* -9 */ +#define G_FILLRECT 0xf6 /* -10 */ +#define G_SETTILE 0xf5 /* -11 */ +#define G_LOADTILE 0xf4 /* -12 */ +#define G_LOADBLOCK 0xf3 /* -13 */ +#define G_SETTILESIZE 0xf2 /* -14 */ +#define G_LOADTLUT 0xf0 /* -16 */ +#define G_RDPSETOTHERMODE 0xef /* -17 */ +#define G_SETPRIMDEPTH 0xee /* -18 */ +#define G_SETSCISSOR 0xed /* -19 */ +#define G_SETCONVERT 0xec /* -20 */ +#define G_SETKEYR 0xeb /* -21 */ +#define G_SETKEYGB 0xea /* -22 */ +#define G_RDPFULLSYNC 0xe9 /* -23 */ +#define G_RDPTILESYNC 0xe8 /* -24 */ +#define G_RDPPIPESYNC 0xe7 /* -25 */ +#define G_RDPLOADSYNC 0xe6 /* -26 */ +#define G_TEXRECTFLIP 0xe5 /* -27 */ +#define G_TEXRECT 0xe4 /* -28 */ + + +/* + * The following commands are the "generated" RDP commands; the user + * never sees them, the RSP microcode generates them. + * + * The layout of the bits is magical, to save work in the ucode. + * These id's are -56, -52, -54, -50, -55, -51, -53, -49, ... + * edge, shade, texture, zbuff bits: estz + */ +#define G_TRI_FILL 0xc8 /* fill triangle: 11001000 */ +#define G_TRI_SHADE 0xcc /* shade triangle: 11001100 */ +#define G_TRI_TXTR 0xca /* texture triangle: 11001010 */ +#define G_TRI_SHADE_TXTR 0xce /* shade, texture triangle: 11001110 */ +#define G_TRI_FILL_ZBUFF 0xc9 /* fill, zbuff triangle: 11001001 */ +#define G_TRI_SHADE_ZBUFF 0xcd /* shade, zbuff triangle: 11001101 */ +#define G_TRI_TXTR_ZBUFF 0xcb /* texture, zbuff triangle: 11001011 */ +#define G_TRI_SHADE_TXTR_ZBUFF 0xcf /* shade, txtr, zbuff trngl: 11001111 */ + +/* + * A TRI_FILL triangle is just the edges. You need to set the DP + * to use primcolor, in order to see anything. (it is NOT a triangle + * that gets rendered in 'fill mode'. Triangles can't be rendered + * in 'fill mode') + * + * A TRI_SHADE is a gouraud triangle that has colors interpolated. + * Flat-shaded triangles (from the software) are still gouraud shaded, + * it's just the colors are all the same and the deltas are 0. + * + * Other triangle types, and combinations are more obvious. + */ + +/* masks to build RDP triangle commands: */ +#define G_RDP_TRI_FILL_MASK 0x08 +#define G_RDP_TRI_SHADE_MASK 0x04 +#define G_RDP_TRI_TXTR_MASK 0x02 +#define G_RDP_TRI_ZBUFF_MASK 0x01 + +/* + * HACK: + * This is a dreadful hack. For version 1.0 hardware, there are still + * some 'bowtie' hangs. This parameter can be increased to avoid + * the hangs. Every increase of 4 chops one scanline off of every + * triangle. Values of 4,8,12 should be sufficient to avoid any + * bowtie hang. + * + * Change this value, then recompile ALL of your program (including static + * display lists!) + * + * THIS WILL BE REMOVED FOR HARDWARE VERSION 2.0! + */ +#define BOWTIE_VAL 0 + + +/* gets added to RDP command, in order to test for addres fixup: */ +#define G_RDP_ADDR_FIXUP 3 /* |RDP cmds| <= this, do addr fixup */ +#ifdef _LANGUAGE_ASSEMBLY +#define G_RDP_TEXRECT_CHECK ((-1*G_TEXRECTFLIP)& 0xff) +#endif + +/* macros for command parsing: */ +#define GDMACMD(x) (x) +#define GIMMCMD(x) (G_IMMFIRST-(x)) +#define GRDPCMD(x) (0xff-(x)) + +#define G_DMACMDSIZ 128 +#define G_IMMCMDSIZ 64 +#define G_RDPCMDSIZ 64 + +/* + * Coordinate shift values, number of bits of fraction + */ +#define G_TEXTURE_IMAGE_FRAC 2 +#define G_TEXTURE_SCALE_FRAC 16 +#define G_SCALE_FRAC 8 +#define G_ROTATE_FRAC 16 + +/* + * Parameters to graphics commands + */ + +/* + * Data packing macros + */ + +/* + * Maximum z-buffer value, used to initialize the z-buffer. + * Note : this number is NOT the viewport z-scale constant. + * See the comment next to G_MAXZ for more info. + */ +#define G_MAXFBZ 0x3fff /* 3b exp, 11b mantissa */ + +#define GPACK_RGBA5551(r, g, b, a) ((((r)<<8) & 0xf800) | \ + (((g)<<3) & 0x7c0) | \ + (((b)>>2) & 0x3e) | ((a) & 0x1)) +#define GPACK_ZDZ(z, dz) ((z) << 2 | (dz)) + +/* + * G_MTX: parameter flags + */ +#ifdef F3DEX_GBI_2 +# define G_MTX_MODELVIEW 0x00 /* matrix types */ +# define G_MTX_PROJECTION 0x04 +# define G_MTX_MUL 0x00 /* concat or load */ +# define G_MTX_LOAD 0x02 +# define G_MTX_NOPUSH 0x00 /* push or not */ +# define G_MTX_PUSH 0x01 +#else /* F3DEX_GBI_2 */ +# define G_MTX_MODELVIEW 0x00 /* matrix types */ +# define G_MTX_PROJECTION 0x01 +# define G_MTX_MUL 0x00 /* concat or load */ +# define G_MTX_LOAD 0x02 +# define G_MTX_NOPUSH 0x00 /* push or not */ +# define G_MTX_PUSH 0x04 +#endif /* F3DEX_GBI_2 */ + +/* + * flags for G_SETGEOMETRYMODE + * (this rendering state is maintained in RSP) + * + * DO NOT USE THE LOW 8 BITS OF GEOMETRYMODE: + * The weird bit-ordering is for the micro-code: the lower byte + * can be OR'd in with G_TRI_SHADE (11001100) to construct + * the triangle command directly. Don't break it... + * + * DO NOT USE THE HIGH 8 BITS OF GEOMETRYMODE: + * The high byte is OR'd with 0x703 to form the clip code mask. + * If it is set to 0x04, this will cause near clipping to occur. + * If it is zero, near clipping will not occur. + * + * Further explanation: + * G_SHADE is necessary in order to see the color that you passed + * down with the vertex. If G_SHADE isn't set, you need to set the DP + * appropriately and use primcolor to see anything. + * + * G_SHADING_SMOOTH enabled means use all 3 colors of the triangle. + * If it is not set, then do 'flat shading', where only one vertex color + * is used (and all 3 vertices are set to that same color by the ucode) + * See the man page for gSP1Triangle(). + * + */ +#define G_ZBUFFER 0x00000001 +#define G_SHADE 0x00000004 /* enable Gouraud interp */ +/* rest of low byte reserved for setup ucode */ +#ifdef F3DEX_GBI_2 +# define G_TEXTURE_ENABLE 0x00000000 /* Ignored */ +# define G_SHADING_SMOOTH 0x00200000 /* flat or smooth shaded */ +# define G_CULL_FRONT 0x00000200 +# define G_CULL_BACK 0x00000400 +# define G_CULL_BOTH 0x00000600 /* To make code cleaner */ +#else +# define G_TEXTURE_ENABLE 0x00000002 /* Microcode use only */ +# define G_SHADING_SMOOTH 0x00000200 /* flat or smooth shaded */ +# define G_CULL_FRONT 0x00001000 +# define G_CULL_BACK 0x00002000 +# define G_CULL_BOTH 0x00003000 /* To make code cleaner */ +#endif +#define G_FOG 0x00010000 +#define G_LIGHTING 0x00020000 +#define G_TEXTURE_GEN 0x00040000 +#define G_TEXTURE_GEN_LINEAR 0x00080000 +#define G_LOD 0x00100000 /* NOT IMPLEMENTED */ +#if (defined(F3DEX_GBI)||defined(F3DLP_GBI)) +# define G_CLIPPING 0x00800000 +#else +# define G_CLIPPING 0x00000000 +#endif + +#ifdef _LANGUAGE_ASSEMBLY +#define G_FOG_H (G_FOG/0x10000) +#define G_LIGHTING_H (G_LIGHTING/0x10000) +#define G_TEXTURE_GEN_H (G_TEXTURE_GEN/0x10000) +#define G_TEXTURE_GEN_LINEAR_H (G_TEXTURE_GEN_LINEAR/0x10000) +#define G_LOD_H (G_LOD/0x10000) /* NOT IMPLEMENTED */ +#if (defined(F3DEX_GBI)||defined(F3DLP_GBI)) +# define G_CLIPPING_H (G_CLIPPING/0x10000) +#endif +#endif + +/* Need these defined for Sprite Microcode */ +#ifdef _LANGUAGE_ASSEMBLY +#define G_TX_LOADTILE 7 +#define G_TX_RENDERTILE 0 + +#define G_TX_NOMIRROR 0 +#define G_TX_WRAP 0 +#define G_TX_MIRROR 0x1 +#define G_TX_CLAMP 0x2 +#define G_TX_NOMASK 0 +#define G_TX_NOLOD 0 +#endif + +/* + * G_SETIMG fmt: set image formats + */ +#define G_IM_FMT_RGBA 0 +#define G_IM_FMT_YUV 1 +#define G_IM_FMT_CI 2 +#define G_IM_FMT_IA 3 +#define G_IM_FMT_I 4 + +/* + * G_SETIMG siz: set image pixel size + */ +#define G_IM_SIZ_4b 0 +#define G_IM_SIZ_8b 1 +#define G_IM_SIZ_16b 2 +#define G_IM_SIZ_32b 3 +#define G_IM_SIZ_DD 5 + +#define G_IM_SIZ_4b_BYTES 0 +#define G_IM_SIZ_4b_TILE_BYTES G_IM_SIZ_4b_BYTES +#define G_IM_SIZ_4b_LINE_BYTES G_IM_SIZ_4b_BYTES + +#define G_IM_SIZ_8b_BYTES 1 +#define G_IM_SIZ_8b_TILE_BYTES G_IM_SIZ_8b_BYTES +#define G_IM_SIZ_8b_LINE_BYTES G_IM_SIZ_8b_BYTES + +#define G_IM_SIZ_16b_BYTES 2 +#define G_IM_SIZ_16b_TILE_BYTES G_IM_SIZ_16b_BYTES +#define G_IM_SIZ_16b_LINE_BYTES G_IM_SIZ_16b_BYTES + +#define G_IM_SIZ_32b_BYTES 4 +#define G_IM_SIZ_32b_TILE_BYTES 2 +#define G_IM_SIZ_32b_LINE_BYTES 2 + +#define G_IM_SIZ_4b_LOAD_BLOCK G_IM_SIZ_16b +#define G_IM_SIZ_8b_LOAD_BLOCK G_IM_SIZ_16b +#define G_IM_SIZ_16b_LOAD_BLOCK G_IM_SIZ_16b +#define G_IM_SIZ_32b_LOAD_BLOCK G_IM_SIZ_32b + +#define G_IM_SIZ_4b_SHIFT 2 +#define G_IM_SIZ_8b_SHIFT 1 +#define G_IM_SIZ_16b_SHIFT 0 +#define G_IM_SIZ_32b_SHIFT 0 + +#define G_IM_SIZ_4b_INCR 3 +#define G_IM_SIZ_8b_INCR 1 +#define G_IM_SIZ_16b_INCR 0 +#define G_IM_SIZ_32b_INCR 0 + +/* + * G_SETCOMBINE: color combine modes + */ +/* Color combiner constants: */ +#define G_CCMUX_COMBINED 0 +#define G_CCMUX_TEXEL0 1 +#define G_CCMUX_TEXEL1 2 +#define G_CCMUX_PRIMITIVE 3 +#define G_CCMUX_SHADE 4 +#define G_CCMUX_ENVIRONMENT 5 +#define G_CCMUX_CENTER 6 +#define G_CCMUX_SCALE 6 +#define G_CCMUX_COMBINED_ALPHA 7 +#define G_CCMUX_TEXEL0_ALPHA 8 +#define G_CCMUX_TEXEL1_ALPHA 9 +#define G_CCMUX_PRIMITIVE_ALPHA 10 +#define G_CCMUX_SHADE_ALPHA 11 +#define G_CCMUX_ENV_ALPHA 12 +#define G_CCMUX_LOD_FRACTION 13 +#define G_CCMUX_PRIM_LOD_FRAC 14 +#define G_CCMUX_NOISE 7 +#define G_CCMUX_K4 7 +#define G_CCMUX_K5 15 +#define G_CCMUX_1 6 +#define G_CCMUX_0 31 + +/* Alpha combiner constants: */ +#define G_ACMUX_COMBINED 0 +#define G_ACMUX_TEXEL0 1 +#define G_ACMUX_TEXEL1 2 +#define G_ACMUX_PRIMITIVE 3 +#define G_ACMUX_SHADE 4 +#define G_ACMUX_ENVIRONMENT 5 +#define G_ACMUX_LOD_FRACTION 0 +#define G_ACMUX_PRIM_LOD_FRAC 6 +#define G_ACMUX_1 6 +#define G_ACMUX_0 7 + +/* typical CC cycle 1 modes */ +#define G_CC_PRIMITIVE 0, 0, 0, PRIMITIVE, 0, 0, 0, PRIMITIVE +#define G_CC_SHADE 0, 0, 0, SHADE, 0, 0, 0, SHADE + +#define G_CC_MODULATEI TEXEL0, 0, SHADE, 0, 0, 0, 0, SHADE +#define G_CC_MODULATEIDECALA TEXEL0, 0, SHADE, 0, 0, 0, 0, TEXEL0 +#define G_CC_MODULATEIFADE TEXEL0, 0, SHADE, 0, 0, 0, 0, ENVIRONMENT + +#define G_CC_MODULATERGB G_CC_MODULATEI +#define G_CC_MODULATERGBDECALA G_CC_MODULATEIDECALA +#define G_CC_MODULATERGBFADE G_CC_MODULATEIFADE + +#define G_CC_MODULATEIA TEXEL0, 0, SHADE, 0, TEXEL0, 0, SHADE, 0 +#define G_CC_MODULATEIFADEA TEXEL0, 0, SHADE, 0, TEXEL0, 0, ENVIRONMENT, 0 + +#define G_CC_MODULATEFADE TEXEL0, 0, SHADE, 0, ENVIRONMENT, 0, TEXEL0, 0 + +#define G_CC_MODULATERGBA G_CC_MODULATEIA +#define G_CC_MODULATERGBFADEA G_CC_MODULATEIFADEA + +#define G_CC_MODULATEI_PRIM TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE +#define G_CC_MODULATEIA_PRIM TEXEL0, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0 +#define G_CC_MODULATEIDECALA_PRIM TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, TEXEL0 + +#define G_CC_MODULATERGB_PRIM G_CC_MODULATEI_PRIM +#define G_CC_MODULATERGBA_PRIM G_CC_MODULATEIA_PRIM +#define G_CC_MODULATERGBDECALA_PRIM G_CC_MODULATEIDECALA_PRIM + +#define G_CC_FADE SHADE, 0, ENVIRONMENT, 0, SHADE, 0, ENVIRONMENT, 0 +#define G_CC_FADEA TEXEL0, 0, ENVIRONMENT, 0, TEXEL0, 0, ENVIRONMENT, 0 + +#define G_CC_DECALRGB 0, 0, 0, TEXEL0, 0, 0, 0, SHADE +#define G_CC_DECALRGBA 0, 0, 0, TEXEL0, 0, 0, 0, TEXEL0 +#define G_CC_DECALFADE 0, 0, 0, TEXEL0, 0, 0, 0, ENVIRONMENT + +#define G_CC_DECALFADEA 0, 0, 0, TEXEL0, TEXEL0, 0, ENVIRONMENT, 0 + +#define G_CC_BLENDI ENVIRONMENT, SHADE, TEXEL0, SHADE, 0, 0, 0, SHADE +#define G_CC_BLENDIA ENVIRONMENT, SHADE, TEXEL0, SHADE, TEXEL0, 0, SHADE, 0 +#define G_CC_BLENDIDECALA ENVIRONMENT, SHADE, TEXEL0, SHADE, 0, 0, 0, TEXEL0 + +#define G_CC_BLENDRGBA TEXEL0, SHADE, TEXEL0_ALPHA, SHADE, 0, 0, 0, SHADE +#define G_CC_BLENDRGBDECALA TEXEL0, SHADE, TEXEL0_ALPHA, SHADE, 0, 0, 0, TEXEL0 +#define G_CC_BLENDRGBFADEA TEXEL0, SHADE, TEXEL0_ALPHA, SHADE, 0, 0, 0, ENVIRONMENT + +#define G_CC_ADDRGB TEXEL0, 0, TEXEL0, SHADE, 0, 0, 0, SHADE +#define G_CC_ADDRGBDECALA TEXEL0, 0, TEXEL0, SHADE, 0, 0, 0, TEXEL0 +#define G_CC_ADDRGBFADE TEXEL0, 0, TEXEL0, SHADE, 0, 0, 0, ENVIRONMENT + +#define G_CC_REFLECTRGB ENVIRONMENT, 0, TEXEL0, SHADE, 0, 0, 0, SHADE +#define G_CC_REFLECTRGBDECALA ENVIRONMENT, 0, TEXEL0, SHADE, 0, 0, 0, TEXEL0 + +#define G_CC_HILITERGB PRIMITIVE, SHADE, TEXEL0, SHADE, 0, 0, 0, SHADE +#define G_CC_HILITERGBA PRIMITIVE, SHADE, TEXEL0, SHADE, PRIMITIVE, SHADE, TEXEL0, SHADE +#define G_CC_HILITERGBDECALA PRIMITIVE, SHADE, TEXEL0, SHADE, 0, 0, 0, TEXEL0 + +#define G_CC_SHADEDECALA 0, 0, 0, SHADE, 0, 0, 0, TEXEL0 +#define G_CC_SHADEFADEA 0, 0, 0, SHADE, 0, 0, 0, ENVIRONMENT + +#define G_CC_BLENDPE PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, SHADE, 0 +#define G_CC_BLENDPEDECALA PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, 0, 0, 0, TEXEL0 + +/* oddball modes */ +#define _G_CC_BLENDPE ENVIRONMENT, PRIMITIVE, TEXEL0, PRIMITIVE, TEXEL0, 0, SHADE, 0 +#define _G_CC_BLENDPEDECALA ENVIRONMENT, PRIMITIVE, TEXEL0, PRIMITIVE, 0, 0, 0, TEXEL0 +#define _G_CC_TWOCOLORTEX PRIMITIVE, SHADE, TEXEL0, SHADE, 0, 0, 0, SHADE +/* used for 1-cycle sparse mip-maps, primitive color has color of lowest LOD */ +#define _G_CC_SPARSEST PRIMITIVE, TEXEL0, LOD_FRACTION, TEXEL0, PRIMITIVE, TEXEL0, LOD_FRACTION, TEXEL0 +#define G_CC_TEMPLERP TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0, TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0 + +/* typical CC cycle 1 modes, usually followed by other cycle 2 modes */ +#define G_CC_TRILERP TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0 +#define G_CC_INTERFERENCE TEXEL0, 0, TEXEL1, 0, TEXEL0, 0, TEXEL1, 0 + +/* + * One-cycle color convert operation + */ +#define G_CC_1CYUV2RGB TEXEL0, K4, K5, TEXEL0, 0, 0, 0, SHADE + +/* + * NOTE: YUV2RGB expects TF step1 color conversion to occur in 2nd clock. + * Therefore, CC looks for step1 results in TEXEL1 + */ +#define G_CC_YUV2RGB TEXEL1, K4, K5, TEXEL1, 0, 0, 0, 0 + +/* typical CC cycle 2 modes */ +#define G_CC_PASS2 0, 0, 0, COMBINED, 0, 0, 0, COMBINED +#define G_CC_MODULATEI2 COMBINED, 0, SHADE, 0, 0, 0, 0, SHADE +#define G_CC_MODULATEIA2 COMBINED, 0, SHADE, 0, COMBINED, 0, SHADE, 0 +#define G_CC_MODULATERGB2 G_CC_MODULATEI2 +#define G_CC_MODULATERGBA2 G_CC_MODULATEIA2 +#define G_CC_MODULATEI_PRIM2 COMBINED, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE +#define G_CC_MODULATEIA_PRIM2 COMBINED, 0, PRIMITIVE, 0, COMBINED, 0, PRIMITIVE, 0 +#define G_CC_MODULATERGB_PRIM2 G_CC_MODULATEI_PRIM2 +#define G_CC_MODULATERGBA_PRIM2 G_CC_MODULATEIA_PRIM2 +#define G_CC_DECALRGB2 0, 0, 0, COMBINED, 0, 0, 0, SHADE +/* + * ? +#define G_CC_DECALRGBA2 COMBINED, SHADE, COMBINED_ALPHA, SHADE, 0, 0, 0, SHADE +*/ +#define G_CC_BLENDI2 ENVIRONMENT, SHADE, COMBINED, SHADE, 0, 0, 0, SHADE +#define G_CC_BLENDIA2 ENVIRONMENT, SHADE, COMBINED, SHADE, COMBINED, 0, SHADE, 0 +#define G_CC_CHROMA_KEY2 TEXEL0, CENTER, SCALE, 0, 0, 0, 0, 0 +#define G_CC_HILITERGB2 ENVIRONMENT, COMBINED, TEXEL0, COMBINED, 0, 0, 0, SHADE +#define G_CC_HILITERGBA2 ENVIRONMENT, COMBINED, TEXEL0, COMBINED, ENVIRONMENT, COMBINED, TEXEL0, COMBINED +#define G_CC_HILITERGBDECALA2 ENVIRONMENT, COMBINED, TEXEL0, COMBINED, 0, 0, 0, TEXEL0 +#define G_CC_HILITERGBPASSA2 ENVIRONMENT, COMBINED, TEXEL0, COMBINED, 0, 0, 0, COMBINED + +/* + * G_SETOTHERMODE_L sft: shift count + */ +#define G_MDSFT_ALPHACOMPARE 0 +#define G_MDSFT_ZSRCSEL 2 +#define G_MDSFT_RENDERMODE 3 +#define G_MDSFT_BLENDER 16 + +/* + * G_SETOTHERMODE_H sft: shift count + */ +#define G_MDSFT_BLENDMASK 0 /* unsupported */ +#define G_MDSFT_ALPHADITHER 4 +#define G_MDSFT_RGBDITHER 6 + +#define G_MDSFT_COMBKEY 8 +#define G_MDSFT_TEXTCONV 9 +#define G_MDSFT_TEXTFILT 12 +#define G_MDSFT_TEXTLUT 14 +#define G_MDSFT_TEXTLOD 16 +#define G_MDSFT_TEXTDETAIL 17 +#define G_MDSFT_TEXTPERSP 19 +#define G_MDSFT_CYCLETYPE 20 +#define G_MDSFT_COLORDITHER 22 /* unsupported in HW 2.0 */ +#define G_MDSFT_PIPELINE 23 + +/* G_SETOTHERMODE_H gPipelineMode */ +#define G_PM_1PRIMITIVE (1 << G_MDSFT_PIPELINE) +#define G_PM_NPRIMITIVE (0 << G_MDSFT_PIPELINE) + +/* G_SETOTHERMODE_H gSetCycleType */ +#define G_CYC_1CYCLE (0 << G_MDSFT_CYCLETYPE) +#define G_CYC_2CYCLE (1 << G_MDSFT_CYCLETYPE) +#define G_CYC_COPY (2 << G_MDSFT_CYCLETYPE) +#define G_CYC_FILL (3 << G_MDSFT_CYCLETYPE) + +/* G_SETOTHERMODE_H gSetTexturePersp */ +#define G_TP_NONE (0 << G_MDSFT_TEXTPERSP) +#define G_TP_PERSP (1 << G_MDSFT_TEXTPERSP) + +/* G_SETOTHERMODE_H gSetTextureDetail */ +#define G_TD_CLAMP (0 << G_MDSFT_TEXTDETAIL) +#define G_TD_SHARPEN (1 << G_MDSFT_TEXTDETAIL) +#define G_TD_DETAIL (2 << G_MDSFT_TEXTDETAIL) + +/* G_SETOTHERMODE_H gSetTextureLOD */ +#define G_TL_TILE (0 << G_MDSFT_TEXTLOD) +#define G_TL_LOD (1 << G_MDSFT_TEXTLOD) + +/* G_SETOTHERMODE_H gSetTextureLUT */ +#define G_TT_NONE (0 << G_MDSFT_TEXTLUT) +#define G_TT_RGBA16 (2 << G_MDSFT_TEXTLUT) +#define G_TT_IA16 (3 << G_MDSFT_TEXTLUT) + +/* G_SETOTHERMODE_H gSetTextureFilter */ +#define G_TF_POINT (0 << G_MDSFT_TEXTFILT) +#define G_TF_AVERAGE (3 << G_MDSFT_TEXTFILT) +#define G_TF_BILERP (2 << G_MDSFT_TEXTFILT) + +/* G_SETOTHERMODE_H gSetTextureConvert */ +#define G_TC_CONV (0 << G_MDSFT_TEXTCONV) +#define G_TC_FILTCONV (5 << G_MDSFT_TEXTCONV) +#define G_TC_FILT (6 << G_MDSFT_TEXTCONV) + +/* G_SETOTHERMODE_H gSetCombineKey */ +#define G_CK_NONE (0 << G_MDSFT_COMBKEY) +#define G_CK_KEY (1 << G_MDSFT_COMBKEY) + +/* G_SETOTHERMODE_H gSetColorDither */ +#define G_CD_MAGICSQ (0 << G_MDSFT_RGBDITHER) +#define G_CD_BAYER (1 << G_MDSFT_RGBDITHER) +#define G_CD_NOISE (2 << G_MDSFT_RGBDITHER) + +#ifndef _HW_VERSION_1 +#define G_CD_DISABLE (3 << G_MDSFT_RGBDITHER) +#define G_CD_ENABLE G_CD_NOISE /* HW 1.0 compatibility mode */ +#else +#define G_CD_ENABLE (1 << G_MDSFT_COLORDITHER) +#define G_CD_DISABLE (0 << G_MDSFT_COLORDITHER) +#endif + +/* G_SETOTHERMODE_H gSetAlphaDither */ +#define G_AD_PATTERN (0 << G_MDSFT_ALPHADITHER) +#define G_AD_NOTPATTERN (1 << G_MDSFT_ALPHADITHER) +#define G_AD_NOISE (2 << G_MDSFT_ALPHADITHER) +#define G_AD_DISABLE (3 << G_MDSFT_ALPHADITHER) + +/* G_SETOTHERMODE_L gSetAlphaCompare */ +#define G_AC_NONE (0 << G_MDSFT_ALPHACOMPARE) +#define G_AC_THRESHOLD (1 << G_MDSFT_ALPHACOMPARE) +#define G_AC_DITHER (3 << G_MDSFT_ALPHACOMPARE) + +/* G_SETOTHERMODE_L gSetDepthSource */ +#define G_ZS_PIXEL (0 << G_MDSFT_ZSRCSEL) +#define G_ZS_PRIM (1 << G_MDSFT_ZSRCSEL) + +/* G_SETOTHERMODE_L gSetRenderMode */ +#define AA_EN 0x8 +#define Z_CMP 0x10 +#define Z_UPD 0x20 +#define IM_RD 0x40 +#define CLR_ON_CVG 0x80 +#define CVG_DST_CLAMP 0 +#define CVG_DST_WRAP 0x100 +#define CVG_DST_FULL 0x200 +#define CVG_DST_SAVE 0x300 +#define ZMODE_OPA 0 +#define ZMODE_INTER 0x400 +#define ZMODE_XLU 0x800 +#define ZMODE_DEC 0xc00 +#define CVG_X_ALPHA 0x1000 +#define ALPHA_CVG_SEL 0x2000 +#define FORCE_BL 0x4000 +#define TEX_EDGE 0x0000 /* used to be 0x8000 */ + +#define G_BL_CLR_IN 0 +#define G_BL_CLR_MEM 1 +#define G_BL_CLR_BL 2 +#define G_BL_CLR_FOG 3 +#define G_BL_1MA 0 +#define G_BL_A_MEM 1 +#define G_BL_A_IN 0 +#define G_BL_A_FOG 1 +#define G_BL_A_SHADE 2 +#define G_BL_1 2 +#define G_BL_0 3 + +#define GBL_c1(m1a, m1b, m2a, m2b) \ + (m1a) << 30 | (m1b) << 26 | (m2a) << 22 | (m2b) << 18 +#define GBL_c2(m1a, m1b, m2a, m2b) \ + (m1a) << 28 | (m1b) << 24 | (m2a) << 20 | (m2b) << 16 + +#define RM_AA_ZB_OPA_SURF(clk) \ + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ + ZMODE_OPA | ALPHA_CVG_SEL | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) + +#define RM_RA_ZB_OPA_SURF(clk) \ + AA_EN | Z_CMP | Z_UPD | CVG_DST_CLAMP | \ + ZMODE_OPA | ALPHA_CVG_SEL | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) + +#define RM_AA_ZB_XLU_SURF(clk) \ + AA_EN | Z_CMP | IM_RD | CVG_DST_WRAP | CLR_ON_CVG | \ + FORCE_BL | ZMODE_XLU | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_AA_ZB_OPA_DECAL(clk) \ + AA_EN | Z_CMP | IM_RD | CVG_DST_WRAP | ALPHA_CVG_SEL | \ + ZMODE_DEC | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) + +#define RM_RA_ZB_OPA_DECAL(clk) \ + AA_EN | Z_CMP | CVG_DST_WRAP | ALPHA_CVG_SEL | \ + ZMODE_DEC | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) + +#define RM_AA_ZB_XLU_DECAL(clk) \ + AA_EN | Z_CMP | IM_RD | CVG_DST_WRAP | CLR_ON_CVG | \ + FORCE_BL | ZMODE_DEC | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_AA_ZB_OPA_INTER(clk) \ + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ + ALPHA_CVG_SEL | ZMODE_INTER | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) + +#define RM_RA_ZB_OPA_INTER(clk) \ + AA_EN | Z_CMP | Z_UPD | CVG_DST_CLAMP | \ + ALPHA_CVG_SEL | ZMODE_INTER | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) + +#define RM_AA_ZB_XLU_INTER(clk) \ + AA_EN | Z_CMP | IM_RD | CVG_DST_WRAP | CLR_ON_CVG | \ + FORCE_BL | ZMODE_INTER | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_AA_ZB_XLU_LINE(clk) \ + AA_EN | Z_CMP | IM_RD | CVG_DST_CLAMP | CVG_X_ALPHA | \ + ALPHA_CVG_SEL | FORCE_BL | ZMODE_XLU | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_AA_ZB_DEC_LINE(clk) \ + AA_EN | Z_CMP | IM_RD | CVG_DST_SAVE | CVG_X_ALPHA | \ + ALPHA_CVG_SEL | FORCE_BL | ZMODE_DEC | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_AA_ZB_TEX_EDGE(clk) \ + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ + CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) + +#define RM_AA_ZB_TEX_INTER(clk) \ + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ + CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_INTER | TEX_EDGE | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) + +#define RM_AA_ZB_SUB_SURF(clk) \ + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_FULL | \ + ZMODE_OPA | ALPHA_CVG_SEL | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) + +#define RM_AA_ZB_PCL_SURF(clk) \ + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ + ZMODE_OPA | G_AC_DITHER | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_AA_ZB_OPA_TERR(clk) \ + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ + ZMODE_OPA | ALPHA_CVG_SEL | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_AA_ZB_TEX_TERR(clk) \ + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ + CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_AA_ZB_SUB_TERR(clk) \ + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_FULL | \ + ZMODE_OPA | ALPHA_CVG_SEL | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + + +#define RM_AA_OPA_SURF(clk) \ + AA_EN | IM_RD | CVG_DST_CLAMP | \ + ZMODE_OPA | ALPHA_CVG_SEL | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) + +#define RM_RA_OPA_SURF(clk) \ + AA_EN | CVG_DST_CLAMP | \ + ZMODE_OPA | ALPHA_CVG_SEL | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) + +#define RM_AA_XLU_SURF(clk) \ + AA_EN | IM_RD | CVG_DST_WRAP | CLR_ON_CVG | FORCE_BL | \ + ZMODE_OPA | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_AA_XLU_LINE(clk) \ + AA_EN | IM_RD | CVG_DST_CLAMP | CVG_X_ALPHA | \ + ALPHA_CVG_SEL | FORCE_BL | ZMODE_OPA | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_AA_DEC_LINE(clk) \ + AA_EN | IM_RD | CVG_DST_FULL | CVG_X_ALPHA | \ + ALPHA_CVG_SEL | FORCE_BL | ZMODE_OPA | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_AA_TEX_EDGE(clk) \ + AA_EN | IM_RD | CVG_DST_CLAMP | \ + CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) + +#define RM_AA_SUB_SURF(clk) \ + AA_EN | IM_RD | CVG_DST_FULL | \ + ZMODE_OPA | ALPHA_CVG_SEL | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) + +#define RM_AA_PCL_SURF(clk) \ + AA_EN | IM_RD | CVG_DST_CLAMP | \ + ZMODE_OPA | G_AC_DITHER | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_AA_OPA_TERR(clk) \ + AA_EN | IM_RD | CVG_DST_CLAMP | \ + ZMODE_OPA | ALPHA_CVG_SEL | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_AA_TEX_TERR(clk) \ + AA_EN | IM_RD | CVG_DST_CLAMP | \ + CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_AA_SUB_TERR(clk) \ + AA_EN | IM_RD | CVG_DST_FULL | \ + ZMODE_OPA | ALPHA_CVG_SEL | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + + +#define RM_ZB_OPA_SURF(clk) \ + Z_CMP | Z_UPD | CVG_DST_FULL | ALPHA_CVG_SEL | \ + ZMODE_OPA | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) + +#define RM_ZB_XLU_SURF(clk) \ + Z_CMP | IM_RD | CVG_DST_FULL | FORCE_BL | ZMODE_XLU | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_ZB_OPA_DECAL(clk) \ + Z_CMP | CVG_DST_FULL | ALPHA_CVG_SEL | ZMODE_DEC | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) + +#define RM_ZB_XLU_DECAL(clk) \ + Z_CMP | IM_RD | CVG_DST_FULL | FORCE_BL | ZMODE_DEC | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_ZB_CLD_SURF(clk) \ + Z_CMP | IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_XLU | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_ZB_OVL_SURF(clk) \ + Z_CMP | IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_DEC | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_ZB_PCL_SURF(clk) \ + Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | \ + G_AC_DITHER | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) + + +#define RM_OPA_SURF(clk) \ + CVG_DST_CLAMP | FORCE_BL | ZMODE_OPA | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) + +#define RM_XLU_SURF(clk) \ + IM_RD | CVG_DST_FULL | FORCE_BL | ZMODE_OPA | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_TEX_EDGE(clk) \ + CVG_DST_CLAMP | CVG_X_ALPHA | ALPHA_CVG_SEL | FORCE_BL |\ + ZMODE_OPA | TEX_EDGE | AA_EN | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) + +#define RM_CLD_SURF(clk) \ + IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_OPA | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_PCL_SURF(clk) \ + CVG_DST_FULL | FORCE_BL | ZMODE_OPA | \ + G_AC_DITHER | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) + +#define RM_ADD(clk) \ + IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_OPA | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_FOG, G_BL_CLR_MEM, G_BL_1) + +#define RM_NOOP(clk) \ + GBL_c##clk(0, 0, 0, 0) + +#define RM_VISCVG(clk) \ + IM_RD | FORCE_BL | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_BL, G_BL_A_MEM) + +/* for rendering to an 8-bit framebuffer */ +#define RM_OPA_CI(clk) \ + CVG_DST_CLAMP | ZMODE_OPA | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) + +/* Custom version of RM_AA_ZB_XLU_SURF with Z_UPD */ +#define RM_CUSTOM_AA_ZB_XLU_SURF(clk) \ + RM_AA_ZB_XLU_SURF(clk) | Z_UPD + + +#define G_RM_AA_ZB_OPA_SURF RM_AA_ZB_OPA_SURF(1) +#define G_RM_AA_ZB_OPA_SURF2 RM_AA_ZB_OPA_SURF(2) +#define G_RM_AA_ZB_XLU_SURF RM_AA_ZB_XLU_SURF(1) +#define G_RM_AA_ZB_XLU_SURF2 RM_AA_ZB_XLU_SURF(2) +#define G_RM_AA_ZB_OPA_DECAL RM_AA_ZB_OPA_DECAL(1) +#define G_RM_AA_ZB_OPA_DECAL2 RM_AA_ZB_OPA_DECAL(2) +#define G_RM_AA_ZB_XLU_DECAL RM_AA_ZB_XLU_DECAL(1) +#define G_RM_AA_ZB_XLU_DECAL2 RM_AA_ZB_XLU_DECAL(2) +#define G_RM_AA_ZB_OPA_INTER RM_AA_ZB_OPA_INTER(1) +#define G_RM_AA_ZB_OPA_INTER2 RM_AA_ZB_OPA_INTER(2) +#define G_RM_AA_ZB_XLU_INTER RM_AA_ZB_XLU_INTER(1) +#define G_RM_AA_ZB_XLU_INTER2 RM_AA_ZB_XLU_INTER(2) +#define G_RM_AA_ZB_XLU_LINE RM_AA_ZB_XLU_LINE(1) +#define G_RM_AA_ZB_XLU_LINE2 RM_AA_ZB_XLU_LINE(2) +#define G_RM_AA_ZB_DEC_LINE RM_AA_ZB_DEC_LINE(1) +#define G_RM_AA_ZB_DEC_LINE2 RM_AA_ZB_DEC_LINE(2) +#define G_RM_AA_ZB_TEX_EDGE RM_AA_ZB_TEX_EDGE(1) +#define G_RM_AA_ZB_TEX_EDGE2 RM_AA_ZB_TEX_EDGE(2) +#define G_RM_AA_ZB_TEX_INTER RM_AA_ZB_TEX_INTER(1) +#define G_RM_AA_ZB_TEX_INTER2 RM_AA_ZB_TEX_INTER(2) +#define G_RM_AA_ZB_SUB_SURF RM_AA_ZB_SUB_SURF(1) +#define G_RM_AA_ZB_SUB_SURF2 RM_AA_ZB_SUB_SURF(2) +#define G_RM_AA_ZB_PCL_SURF RM_AA_ZB_PCL_SURF(1) +#define G_RM_AA_ZB_PCL_SURF2 RM_AA_ZB_PCL_SURF(2) +#define G_RM_AA_ZB_OPA_TERR RM_AA_ZB_OPA_TERR(1) +#define G_RM_AA_ZB_OPA_TERR2 RM_AA_ZB_OPA_TERR(2) +#define G_RM_AA_ZB_TEX_TERR RM_AA_ZB_TEX_TERR(1) +#define G_RM_AA_ZB_TEX_TERR2 RM_AA_ZB_TEX_TERR(2) +#define G_RM_AA_ZB_SUB_TERR RM_AA_ZB_SUB_TERR(1) +#define G_RM_AA_ZB_SUB_TERR2 RM_AA_ZB_SUB_TERR(2) + +#define G_RM_RA_ZB_OPA_SURF RM_RA_ZB_OPA_SURF(1) +#define G_RM_RA_ZB_OPA_SURF2 RM_RA_ZB_OPA_SURF(2) +#define G_RM_RA_ZB_OPA_DECAL RM_RA_ZB_OPA_DECAL(1) +#define G_RM_RA_ZB_OPA_DECAL2 RM_RA_ZB_OPA_DECAL(2) +#define G_RM_RA_ZB_OPA_INTER RM_RA_ZB_OPA_INTER(1) +#define G_RM_RA_ZB_OPA_INTER2 RM_RA_ZB_OPA_INTER(2) + +#define G_RM_AA_OPA_SURF RM_AA_OPA_SURF(1) +#define G_RM_AA_OPA_SURF2 RM_AA_OPA_SURF(2) +#define G_RM_AA_XLU_SURF RM_AA_XLU_SURF(1) +#define G_RM_AA_XLU_SURF2 RM_AA_XLU_SURF(2) +#define G_RM_AA_XLU_LINE RM_AA_XLU_LINE(1) +#define G_RM_AA_XLU_LINE2 RM_AA_XLU_LINE(2) +#define G_RM_AA_DEC_LINE RM_AA_DEC_LINE(1) +#define G_RM_AA_DEC_LINE2 RM_AA_DEC_LINE(2) +#define G_RM_AA_TEX_EDGE RM_AA_TEX_EDGE(1) +#define G_RM_AA_TEX_EDGE2 RM_AA_TEX_EDGE(2) +#define G_RM_AA_SUB_SURF RM_AA_SUB_SURF(1) +#define G_RM_AA_SUB_SURF2 RM_AA_SUB_SURF(2) +#define G_RM_AA_PCL_SURF RM_AA_PCL_SURF(1) +#define G_RM_AA_PCL_SURF2 RM_AA_PCL_SURF(2) +#define G_RM_AA_OPA_TERR RM_AA_OPA_TERR(1) +#define G_RM_AA_OPA_TERR2 RM_AA_OPA_TERR(2) +#define G_RM_AA_TEX_TERR RM_AA_TEX_TERR(1) +#define G_RM_AA_TEX_TERR2 RM_AA_TEX_TERR(2) +#define G_RM_AA_SUB_TERR RM_AA_SUB_TERR(1) +#define G_RM_AA_SUB_TERR2 RM_AA_SUB_TERR(2) + +#define G_RM_RA_OPA_SURF RM_RA_OPA_SURF(1) +#define G_RM_RA_OPA_SURF2 RM_RA_OPA_SURF(2) + +#define G_RM_ZB_OPA_SURF RM_ZB_OPA_SURF(1) +#define G_RM_ZB_OPA_SURF2 RM_ZB_OPA_SURF(2) +#define G_RM_ZB_XLU_SURF RM_ZB_XLU_SURF(1) +#define G_RM_ZB_XLU_SURF2 RM_ZB_XLU_SURF(2) +#define G_RM_ZB_OPA_DECAL RM_ZB_OPA_DECAL(1) +#define G_RM_ZB_OPA_DECAL2 RM_ZB_OPA_DECAL(2) +#define G_RM_ZB_XLU_DECAL RM_ZB_XLU_DECAL(1) +#define G_RM_ZB_XLU_DECAL2 RM_ZB_XLU_DECAL(2) +#define G_RM_ZB_CLD_SURF RM_ZB_CLD_SURF(1) +#define G_RM_ZB_CLD_SURF2 RM_ZB_CLD_SURF(2) +#define G_RM_ZB_OVL_SURF RM_ZB_OVL_SURF(1) +#define G_RM_ZB_OVL_SURF2 RM_ZB_OVL_SURF(2) +#define G_RM_ZB_PCL_SURF RM_ZB_PCL_SURF(1) +#define G_RM_ZB_PCL_SURF2 RM_ZB_PCL_SURF(2) + +#define G_RM_OPA_SURF RM_OPA_SURF(1) +#define G_RM_OPA_SURF2 RM_OPA_SURF(2) +#define G_RM_XLU_SURF RM_XLU_SURF(1) +#define G_RM_XLU_SURF2 RM_XLU_SURF(2) +#define G_RM_CLD_SURF RM_CLD_SURF(1) +#define G_RM_CLD_SURF2 RM_CLD_SURF(2) +#define G_RM_TEX_EDGE RM_TEX_EDGE(1) +#define G_RM_TEX_EDGE2 RM_TEX_EDGE(2) +#define G_RM_PCL_SURF RM_PCL_SURF(1) +#define G_RM_PCL_SURF2 RM_PCL_SURF(2) +#define G_RM_ADD RM_ADD(1) +#define G_RM_ADD2 RM_ADD(2) +#define G_RM_NOOP RM_NOOP(1) +#define G_RM_NOOP2 RM_NOOP(2) +#define G_RM_VISCVG RM_VISCVG(1) +#define G_RM_VISCVG2 RM_VISCVG(2) +#define G_RM_OPA_CI RM_OPA_CI(1) +#define G_RM_OPA_CI2 RM_OPA_CI(2) + +#define G_RM_CUSTOM_AA_ZB_XLU_SURF RM_CUSTOM_AA_ZB_XLU_SURF(1) +#define G_RM_CUSTOM_AA_ZB_XLU_SURF2 RM_CUSTOM_AA_ZB_XLU_SURF(2) + + +#define G_RM_FOG_SHADE_A GBL_c1(G_BL_CLR_FOG, G_BL_A_SHADE, G_BL_CLR_IN, G_BL_1MA) +#define G_RM_FOG_PRIM_A GBL_c1(G_BL_CLR_FOG, G_BL_A_FOG, G_BL_CLR_IN, G_BL_1MA) +#define G_RM_PASS GBL_c1(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) + +/* + * G_SETCONVERT: K0-5 + */ +#define G_CV_K0 175 +#define G_CV_K1 -43 +#define G_CV_K2 -89 +#define G_CV_K3 222 +#define G_CV_K4 114 +#define G_CV_K5 42 + +/* + * G_SETSCISSOR: interlace mode + */ +#define G_SC_NON_INTERLACE 0 +#define G_SC_ODD_INTERLACE 3 +#define G_SC_EVEN_INTERLACE 2 + +/* flags to inhibit pushing of the display list (on branch) */ +#define G_DL_PUSH 0x00 +#define G_DL_NOPUSH 0x01 + +/* + * BEGIN C-specific section: (typedef's) + */ +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) + +/* + * Data Structures + * + * NOTE: + * The DMA transfer hardware requires 64-bit aligned, 64-bit multiple- + * sized transfers. This important hardware optimization is unfortunately + * reflected in the programming interface, with some structures + * padded and alignment enforced. + * + * Since structures are aligned to the boundary of the "worst-case" + * element, we can't depend on the C compiler to align things + * properly. + * + * 64-bit structure alignment is enforced by wrapping structures with + * unions that contain a dummy "long long int". Why this works is + * explained in the ANSI C Spec, or on page 186 of the second edition + * of K&R, "The C Programming Language". + * + * The price we pay for this is a little awkwardness referencing the + * structures through the union. There is no memory penalty, since + * all the structures are at least 64-bits the dummy alignment field + * does not increase the size of the union. + * + * Static initialization of these union structures works because + * the ANSI C spec states that static initialization for unions + * works by using the first union element. We put the dummy alignment + * field last for this reason. + * + * (it's possible a newer 64-bit compiler from MIPS might make this + * easier with a flag, but we can't wait for it...) + * + */ + +/* + * Vertex (set up for use with colors) + */ +typedef struct { +#ifndef GBI_FLOATS + short ob[3]; /* x, y, z */ +#else + float ob[3]; /* x, y, z */ +#endif + unsigned short flag; + short tc[2]; /* texture coord */ + unsigned char cn[4]; /* color & alpha */ +} Vtx_t; + +/* + * Vertex (set up for use with normals) + */ +typedef struct { +#ifndef GBI_FLOATS + short ob[3]; /* x, y, z */ +#else + float ob[3]; /* x, y, z */ +#endif + unsigned short flag; + short tc[2]; /* texture coord */ + signed char n[3]; /* normal */ + unsigned char a; /* alpha */ +} Vtx_tn; + +typedef union { + Vtx_t v; /* Use this one for colors */ + Vtx_tn n; /* Use this one for normals */ + long long int force_structure_alignment; +} Vtx; + +/* + * Sprite structure + */ + +typedef struct { + void *SourceImagePointer; + void *TlutPointer; + short Stride; + short SubImageWidth; + short SubImageHeight; + char SourceImageType; + char SourceImageBitSize; + short SourceImageOffsetS; + short SourceImageOffsetT; + /* 20 bytes for above */ + + /* padding to bring structure size to 64 bit allignment */ + char dummy[4]; + +} uSprite_t; + +typedef union { + uSprite_t s; + + /* Need to make sure this is 64 bit aligned */ + long long int force_structure_allignment[3]; +} uSprite; + +/* + * Triangle face + */ +typedef struct { + unsigned char flag; + unsigned char v[3]; +} Tri; + +#ifndef GBI_FLOATS +/* + * 4x4 matrix, fixed point s15.16 format. + * First 8 words are integer portion of the 4x4 matrix + * Last 8 words are the fraction portion of the 4x4 matrix + */ +typedef int32_t Mtx_t[4][4]; + +typedef union { + Mtx_t m; + long long int force_structure_alignment; +} Mtx; +#else +typedef struct { + float m[4][4]; +} Mtx; +#endif + +/* + * Viewport + */ + +/* + * + * This magic value is the maximum INTEGER z-range of the hardware + * (there are also 16-bits of fraction, which are introduced during + * any transformations). This is not just a good idea, it's the law. + * Feeding the hardware eventual z-coordinates (after any transforms + * or scaling) bigger than this, will not work. + * + * This number is DIFFERENT than G_MAXFBZ, which is the maximum value + * you want to use to initialize the z-buffer. + * + * The reason these are different is mildly interesting, but too long + * to explain here. It is basically the result of optimizations in the + * hardware. A more generic API might hide this detail from the users, + * but we don't have the ucode to do that... + * + */ +#define G_MAXZ 0x03ff /* 10 bits of integer screen-Z precision */ + +/* + * The viewport structure elements have 2 bits of fraction, necessary + * to accomodate the sub-pixel positioning scaling for the hardware. + * This can also be exploited to handle odd-sized viewports. + * + * Accounting for these fractional bits, using the default projection + * and viewing matrices, the viewport structure is initialized thusly: + * + * (SCREEN_WD/2)*4, (SCREEN_HT/2)*4, G_MAXZ, 0, + * (SCREEN_WD/2)*4, (SCREEN_HT/2)*4, 0, 0, + */ +typedef struct { + short vscale[4]; /* scale, 2 bits fraction */ + short vtrans[4]; /* translate, 2 bits fraction */ + /* both the above arrays are padded to 64-bit boundary */ +} Vp_t; + +typedef union { + Vp_t vp; + long long int force_structure_alignment; +} Vp; + +/* + * MOVEMEM indices + * + * Each of these indexes an entry in a dmem table + * which points to a 1-4 word block of dmem in + * which to store a 1-4 word DMA. + * + */ +#ifdef F3DEX_GBI_2 +/* 0,4 are reserved by G_MTX */ +# define G_MV_MMTX 2 +# define G_MV_PMTX 6 +# define G_MV_VIEWPORT 8 +# define G_MV_LIGHT 10 +# define G_MV_POINT 12 +# define G_MV_MATRIX 14 /* NOTE: this is in moveword table */ +# define G_MVO_LOOKATX (0*24) +# define G_MVO_LOOKATY (1*24) +# define G_MVO_L0 (2*24) +# define G_MVO_L1 (3*24) +# define G_MVO_L2 (4*24) +# define G_MVO_L3 (5*24) +# define G_MVO_L4 (6*24) +# define G_MVO_L5 (7*24) +# define G_MVO_L6 (8*24) +# define G_MVO_L7 (9*24) +#else /* F3DEX_GBI_2 */ +# define G_MV_VIEWPORT 0x80 +# define G_MV_LOOKATY 0x82 +# define G_MV_LOOKATX 0x84 +# define G_MV_L0 0x86 +# define G_MV_L1 0x88 +# define G_MV_L2 0x8a +# define G_MV_L3 0x8c +# define G_MV_L4 0x8e +# define G_MV_L5 0x90 +# define G_MV_L6 0x92 +# define G_MV_L7 0x94 +# define G_MV_TXTATT 0x96 +# define G_MV_MATRIX_1 0x9e /* NOTE: this is in moveword table */ +# define G_MV_MATRIX_2 0x98 +# define G_MV_MATRIX_3 0x9a +# define G_MV_MATRIX_4 0x9c +#endif /* F3DEX_GBI_2 */ + +/* + * MOVEWORD indices + * + * Each of these indexes an entry in a dmem table + * which points to a word in dmem in dmem where + * an immediate word will be stored. + * + */ +#define G_MW_MATRIX 0x00 /* NOTE: also used by movemem */ +#define G_MW_NUMLIGHT 0x02 +#define G_MW_CLIP 0x04 +#define G_MW_SEGMENT 0x06 +#define G_MW_FOG 0x08 +#define G_MW_LIGHTCOL 0x0a +#ifdef F3DEX_GBI_2 +# define G_MW_FORCEMTX 0x0c +#else /* F3DEX_GBI_2 */ +# define G_MW_POINTS 0x0c +#endif /* F3DEX_GBI_2 */ +#define G_MW_PERSPNORM 0x0e + +/* + * These are offsets from the address in the dmem table + */ +#define G_MWO_NUMLIGHT 0x00 +#define G_MWO_CLIP_RNX 0x04 +#define G_MWO_CLIP_RNY 0x0c +#define G_MWO_CLIP_RPX 0x14 +#define G_MWO_CLIP_RPY 0x1c +#define G_MWO_SEGMENT_0 0x00 +#define G_MWO_SEGMENT_1 0x01 +#define G_MWO_SEGMENT_2 0x02 +#define G_MWO_SEGMENT_3 0x03 +#define G_MWO_SEGMENT_4 0x04 +#define G_MWO_SEGMENT_5 0x05 +#define G_MWO_SEGMENT_6 0x06 +#define G_MWO_SEGMENT_7 0x07 +#define G_MWO_SEGMENT_8 0x08 +#define G_MWO_SEGMENT_9 0x09 +#define G_MWO_SEGMENT_A 0x0a +#define G_MWO_SEGMENT_B 0x0b +#define G_MWO_SEGMENT_C 0x0c +#define G_MWO_SEGMENT_D 0x0d +#define G_MWO_SEGMENT_E 0x0e +#define G_MWO_SEGMENT_F 0x0f +#define G_MWO_FOG 0x00 +#define G_MWO_aLIGHT_1 0x00 +#define G_MWO_bLIGHT_1 0x04 +#ifdef F3DEX_GBI_2 +#define G_MWO_aLIGHT_2 0x18 +#define G_MWO_bLIGHT_2 0x1c +#define G_MWO_aLIGHT_3 0x30 +#define G_MWO_bLIGHT_3 0x34 +#define G_MWO_aLIGHT_4 0x48 +#define G_MWO_bLIGHT_4 0x4c +#define G_MWO_aLIGHT_5 0x60 +#define G_MWO_bLIGHT_5 0x64 +#define G_MWO_aLIGHT_6 0x78 +#define G_MWO_bLIGHT_6 0x7c +#define G_MWO_aLIGHT_7 0x90 +#define G_MWO_bLIGHT_7 0x94 +#define G_MWO_aLIGHT_8 0xa8 +#define G_MWO_bLIGHT_8 0xac +#else +#define G_MWO_aLIGHT_2 0x20 +#define G_MWO_bLIGHT_2 0x24 +#define G_MWO_aLIGHT_3 0x40 +#define G_MWO_bLIGHT_3 0x44 +#define G_MWO_aLIGHT_4 0x60 +#define G_MWO_bLIGHT_4 0x64 +#define G_MWO_aLIGHT_5 0x80 +#define G_MWO_bLIGHT_5 0x84 +#define G_MWO_aLIGHT_6 0xa0 +#define G_MWO_bLIGHT_6 0xa4 +#define G_MWO_aLIGHT_7 0xc0 +#define G_MWO_bLIGHT_7 0xc4 +#define G_MWO_aLIGHT_8 0xe0 +#define G_MWO_bLIGHT_8 0xe4 +#endif +#define G_MWO_MATRIX_XX_XY_I 0x00 +#define G_MWO_MATRIX_XZ_XW_I 0x04 +#define G_MWO_MATRIX_YX_YY_I 0x08 +#define G_MWO_MATRIX_YZ_YW_I 0x0c +#define G_MWO_MATRIX_ZX_ZY_I 0x10 +#define G_MWO_MATRIX_ZZ_ZW_I 0x14 +#define G_MWO_MATRIX_WX_WY_I 0x18 +#define G_MWO_MATRIX_WZ_WW_I 0x1c +#define G_MWO_MATRIX_XX_XY_F 0x20 +#define G_MWO_MATRIX_XZ_XW_F 0x24 +#define G_MWO_MATRIX_YX_YY_F 0x28 +#define G_MWO_MATRIX_YZ_YW_F 0x2c +#define G_MWO_MATRIX_ZX_ZY_F 0x30 +#define G_MWO_MATRIX_ZZ_ZW_F 0x34 +#define G_MWO_MATRIX_WX_WY_F 0x38 +#define G_MWO_MATRIX_WZ_WW_F 0x3c +#define G_MWO_POINT_RGBA 0x10 +#define G_MWO_POINT_ST 0x14 +#define G_MWO_POINT_XYSCREEN 0x18 +#define G_MWO_POINT_ZSCREEN 0x1c + +/* + * Light structure. + * + * Note: only directional (infinite) lights are currently supported. + * + * Note: the weird order is for the DMEM alignment benefit of + * the microcode. + * + */ + +typedef struct { + unsigned char col[3]; /* diffuse light value (rgba) */ + char pad1; + unsigned char colc[3]; /* copy of diffuse light value (rgba) */ + char pad2; + signed char dir[3]; /* direction of light (normalized) */ + char pad3; +} Light_t; + +typedef struct { + unsigned char col[3]; /* ambient light value (rgba) */ + char pad1; + unsigned char colc[3]; /* copy of ambient light value (rgba) */ + char pad2; +} Ambient_t; + +typedef struct { + int x1,y1,x2,y2; /* texture offsets for highlight 1/2 */ +} Hilite_t; + +typedef union { + Light_t l; + long long int force_structure_alignment[2]; +} Light; + +typedef union { + Ambient_t l; + long long int force_structure_alignment[1]; +} Ambient; + +typedef struct { + Ambient a; + Light l[7]; +} Lightsn; + +typedef struct { + Ambient a; + Light l[1]; +} Lights0; + +typedef struct { + Ambient a; + Light l[1]; +} Lights1; + +typedef struct { + Ambient a; + Light l[2]; +} Lights2; + +typedef struct { + Ambient a; + Light l[3]; +} Lights3; + +typedef struct { + Ambient a; + Light l[4]; +} Lights4; + +typedef struct { + Ambient a; + Light l[5]; +} Lights5; + +typedef struct { + Ambient a; + Light l[6]; +} Lights6; + +typedef struct { + Ambient a; + Light l[7]; +} Lights7; + +typedef struct { + Light l[2]; +} LookAt; + +typedef union { + Hilite_t h; + long int force_structure_alignment[4]; +} Hilite; + +#define gdSPDefLights0(ar,ag,ab) \ + { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \ + {{{ { 0, 0, 0},0,{ 0, 0, 0},0,{ 0, 0, 0},0}}} } +#define gdSPDefLights1(ar,ag,ab,r1,g1,b1,x1,y1,z1) \ + { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \ + {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}} } +#define gdSPDefLights2(ar,ag,ab,r1,g1,b1,x1,y1,z1,r2,g2,b2,x2,y2,z2) \ + { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \ + {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}, \ + {{ {r2,g2,b2},0,{r2,g2,b2},0,{x2,y2,z2},0}}} } +#define gdSPDefLights3(ar,ag,ab,r1,g1,b1,x1,y1,z1,r2,g2,b2,x2,y2,z2,r3,g3,b3,x3,y3,z3) \ + { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \ + {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}, \ + {{ {r2,g2,b2},0,{r2,g2,b2},0,{x2,y2,z2},0}}, \ + {{ {r3,g3,b3},0,{r3,g3,b3},0,{x3,y3,z3},0}}} } +#define gdSPDefLights4(ar,ag,ab,r1,g1,b1,x1,y1,z1,r2,g2,b2,x2,y2,z2,r3,g3,b3,x3,y3,z3,r4,g4,b4,x4,y4,z4) \ + { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \ + {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}, \ + {{ {r2,g2,b2},0,{r2,g2,b2},0,{x2,y2,z2},0}}, \ + {{ {r3,g3,b3},0,{r3,g3,b3},0,{x3,y3,z3},0}}, \ + {{ {r4,g4,b4},0,{r4,g4,b4},0,{x4,y4,z4},0}}} } +#define gdSPDefLights5(ar,ag,ab,r1,g1,b1,x1,y1,z1,r2,g2,b2,x2,y2,z2,r3,g3,b3,x3,y3,z3,r4,g4,b4,x4,y4,z4,r5,g5,b5,x5,y5,z5) \ + { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \ + {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}, \ + {{ {r2,g2,b2},0,{r2,g2,b2},0,{x2,y2,z2},0}}, \ + {{ {r3,g3,b3},0,{r3,g3,b3},0,{x3,y3,z3},0}}, \ + {{ {r4,g4,b4},0,{r4,g4,b4},0,{x4,y4,z4},0}}, \ + {{ {r5,g5,b5},0,{r5,g5,b5},0,{x5,y5,z5},0}}} } + + +#define gdSPDefLights6(ar,ag,ab,r1,g1,b1,x1,y1,z1,r2,g2,b2,x2,y2,z2,r3,g3,b3,x3,y3,z3,r4,g4,b4,x4,y4,z4,r5,g5,b5,x5,y5,z5,r6,g6,b6,x6,y6,z6) \ + { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \ + {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}, \ + {{ {r2,g2,b2},0,{r2,g2,b2},0,{x2,y2,z2},0}}, \ + {{ {r3,g3,b3},0,{r3,g3,b3},0,{x3,y3,z3},0}}, \ + {{ {r4,g4,b4},0,{r4,g4,b4},0,{x4,y4,z4},0}}, \ + {{ {r5,g5,b5},0,{r5,g5,b5},0,{x5,y5,z5},0}}, \ + {{ {r6,g6,b6},0,{r6,g6,b6},0,{x6,y6,z6},0}}} } + + +#define gdSPDefLights7(ar,ag,ab,r1,g1,b1,x1,y1,z1,r2,g2,b2,x2,y2,z2,r3,g3,b3,x3,y3,z3,r4,g4,b4,x4,y4,z4,r5,g5,b5,x5,y5,z5,r6,g6,b6,x6,y6,z6,r7,g7,b7,x7,y7,z7) \ + { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \ + {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}, \ + {{ {r2,g2,b2},0,{r2,g2,b2},0,{x2,y2,z2},0}}, \ + {{ {r3,g3,b3},0,{r3,g3,b3},0,{x3,y3,z3},0}}, \ + {{ {r4,g4,b4},0,{r4,g4,b4},0,{x4,y4,z4},0}}, \ + {{ {r5,g5,b5},0,{r5,g5,b5},0,{x5,y5,z5},0}}, \ + {{ {r6,g6,b6},0,{r6,g6,b6},0,{x6,y6,z6},0}}, \ + {{ {r7,g7,b7},0,{r7,g7,b7},0,{x7,y7,z7},0}}} } + + +#define gdSPDefLookAt(rightx,righty,rightz,upx,upy,upz) \ + { {{ {{0,0,0},0,{0,0,0},0,{rightx,righty,rightz},0}}, \ + { {{0,0x80,0},0,{0,0x80,0},0,{upx,upy,upz},0}}} } + +/* Don't declare these for F3D_OLD to avoid bss reordering */ +#ifndef F3D_OLD +/* + * Graphics DMA Packet + */ +typedef struct { + int cmd:8; + unsigned int par:8; + unsigned int len:16; + uintptr_t addr; +} Gdma; + +/* + * Graphics Immediate Mode Packet types + */ +typedef struct { + int cmd:8; + int pad:24; + Tri tri; +} Gtri; + +typedef struct { + int cmd:8; + int pad1:24; + int pad2:24; + unsigned char param:8; +} Gpopmtx; + +/* + * typedef struct { + * int cmd:8; + * int pad0:24; + * int pad1:4; + * int number:4; + * int base:24; + * } Gsegment; + */ +typedef struct { + int cmd:8; + int pad0:8; + int mw_index:8; + int number:8; + int pad1:8; + int base:24; +} Gsegment; + +typedef struct { + int cmd:8; + int pad0:8; + int sft:8; + int len:8; + unsigned int data:32; +} GsetothermodeL; + +typedef struct { + int cmd:8; + int pad0:8; + int sft:8; + int len:8; + unsigned int data:32; +} GsetothermodeH; + +typedef struct { + unsigned char cmd; + unsigned char lodscale; + unsigned char tile; + unsigned char on; + unsigned short s; + unsigned short t; +} Gtexture; + +typedef struct { + int cmd:8; + int pad:24; + Tri line; +} Gline3D; + +typedef struct { + int cmd:8; + int pad1:24; + short int pad2; + short int scale; +} Gperspnorm; + + +/* + * RDP Packet types + */ +typedef struct { + int cmd:8; + unsigned int fmt:3; + unsigned int siz:2; + unsigned int pad:7; + unsigned int wd:12; /* really only 10 bits, extra */ + uintptr_t dram; /* to account for 1024 */ +} Gsetimg; + +typedef struct { + int cmd:8; + unsigned int muxs0:24; + unsigned int muxs1:32; +} Gsetcombine; + +typedef struct { + int cmd:8; + unsigned char pad; + unsigned char prim_min_level; + unsigned char prim_level; + unsigned long color; +} Gsetcolor; + +typedef struct { + int cmd:8; + int x0:10; + int x0frac:2; + int y0:10; + int y0frac:2; + unsigned int pad:8; + int x1:10; + int x1frac:2; + int y1:10; + int y1frac:2; +} Gfillrect; + +typedef struct { + int cmd:8; + unsigned int fmt:3; + unsigned int siz:2; + unsigned int pad0:1; + unsigned int line:9; + unsigned int tmem:9; + unsigned int pad1:5; + unsigned int tile:3; + unsigned int palette:4; + unsigned int ct:1; + unsigned int mt:1; + unsigned int maskt:4; + unsigned int shiftt:4; + unsigned int cs:1; + unsigned int ms:1; + unsigned int masks:4; + unsigned int shifts:4; +} Gsettile; + +typedef struct { + int cmd:8; + unsigned int sl:12; + unsigned int tl:12; + int pad:5; + unsigned int tile:3; + unsigned int sh:12; + unsigned int th:12; +} Gloadtile; + +typedef Gloadtile Gloadblock; + +typedef Gloadtile Gsettilesize; + +typedef Gloadtile Gloadtlut; + +typedef struct { + unsigned int cmd:8; /* command */ + unsigned int xl:12; /* X coordinate of upper left */ + unsigned int yl:12; /* Y coordinate of upper left */ + unsigned int pad1:5; /* Padding */ + unsigned int tile:3; /* Tile descriptor index */ + unsigned int xh:12; /* X coordinate of lower right */ + unsigned int yh:12; /* Y coordinate of lower right */ + unsigned int s:16; /* S texture coord at top left */ + unsigned int t:16; /* T texture coord at top left */ + unsigned int dsdx:16;/* Change in S per change in X */ + unsigned int dtdy:16;/* Change in T per change in Y */ +} Gtexrect; + +/* + * Textured rectangles are 128 bits not 64 bits + */ +typedef struct { + unsigned long w0; + unsigned long w1; + unsigned long w2; + unsigned long w3; +} TexRect; +#endif + +#define MakeTexRect(xh,yh,flip,tile,xl,yl,s,t,dsdx,dtdy) \ + G_TEXRECT, xh, yh, 0, flip, 0, tile, xl, yl, s, t, dsdx, dtdy + +/* + * Generic Gfx Packet + */ +typedef struct { + uint32_t w0; + uint32_t w1; +} Gwords; + +/* + * This union is the fundamental type of the display list. + * It is, by law, exactly 64 bits in size. + * + * (Edit: except on 64-bit, where it is exactly 128 bit. On little-endian or + * 64-bit systems, only the 'words' member may be accessed; the rest of the + * structs don't have matching layouts for now.) + */ +typedef union { + Gwords words; +#if !defined(F3D_OLD) && IS_BIG_ENDIAN && !IS_64_BIT + Gdma dma; + Gtri tri; + Gline3D line; + Gpopmtx popmtx; + Gsegment segment; + GsetothermodeH setothermodeH; + GsetothermodeL setothermodeL; + Gtexture texture; + Gperspnorm perspnorm; + Gsetimg setimg; + Gsetcombine setcombine; + Gsetcolor setcolor; + Gfillrect fillrect; /* use for setscissor also */ + Gsettile settile; + Gloadtile loadtile; /* use for loadblock also, th is dxt */ + Gsettilesize settilesize; + Gloadtlut loadtlut; +#endif + long long int force_structure_alignment; +} Gfx; + +/* + * Macros to assemble the graphics display list + */ + +/* + * DMA macros + */ +#define gDma0p(pkt, c, s, l) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL((c), 24, 8) | _SHIFTL((l), 0, 24); \ + _g->words.w1 = (uintptr_t)(s); \ +} + +#define gsDma0p(c, s, l) \ +{{ \ + _SHIFTL((c), 24, 8) | _SHIFTL((l), 0, 24), (uintptr_t)(s) \ +}} + +#define gDma1p(pkt, c, s, l, p) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL((c), 24, 8) | _SHIFTL((p), 16, 8) | \ + _SHIFTL((l), 0, 16)); \ + _g->words.w1 = (uintptr_t)(s); \ +} + +#define gsDma1p(c, s, l, p) \ +{{ \ + (_SHIFTL((c), 24, 8) | _SHIFTL((p), 16, 8) | \ + _SHIFTL((l), 0, 16)), \ + (uintptr_t)(s) \ +}} + +#define gDma2p(pkt, c, adrs, len, idx, ofs) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + _g->words.w0 = (_SHIFTL((c),24,8)|_SHIFTL(((len)-1)/8,19,5)| \ + _SHIFTL((ofs)/8,8,8)|_SHIFTL((idx),0,8)); \ + _g->words.w1 = (uintptr_t)(adrs); \ +} +#define gsDma2p(c, adrs, len, idx, ofs) \ +{{ \ + (_SHIFTL((c),24,8)|_SHIFTL(((len)-1)/8,19,5)| \ + _SHIFTL((ofs)/8,8,8)|_SHIFTL((idx),0,8)), \ + (uintptr_t)(adrs) \ +}} + +#define gSPNoOp(pkt) gDma0p(pkt, G_SPNOOP, 0, 0) +#define gsSPNoOp() gsDma0p(G_SPNOOP, 0, 0) + +#ifdef F3DEX_GBI_2 +# define gSPMatrix(pkt, m, p) \ + gDma2p((pkt),G_MTX,(m),sizeof(Mtx),(p)^G_MTX_PUSH,0) +# define gsSPMatrix(m, p) \ + gsDma2p( G_MTX,(m),sizeof(Mtx),(p)^G_MTX_PUSH,0) +#else /* F3DEX_GBI_2 */ +# define gSPMatrix(pkt, m, p) gDma1p(pkt, G_MTX, m, sizeof(Mtx), p) +# define gsSPMatrix(m, p) gsDma1p(G_MTX, m, sizeof(Mtx), p) +#endif /* F3DEX_GBI_2 */ + +#if defined(F3DEX_GBI_2) +/* + * F3DEX_GBI_2: G_VTX GBI format was changed. + * + * +--------+----+---+---+----+------+-+ + * G_VTX | cmd:8 |0000| n:8 |0000|v0+n:7|0| + * +-+---+--+----+---+---+----+------+-+ + * | |seg| address | + * +-+---+-----------------------------+ + */ +# define gSPVertex(pkt, v, n, v0) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + _g->words.w0 = \ + _SHIFTL(G_VTX,24,8)|_SHIFTL((n),12,8)|_SHIFTL((v0)+(n),1,7); \ + _g->words.w1 = (uintptr_t)(v); \ +} +# define gsSPVertex(v, n, v0) \ +{{ \ + (_SHIFTL(G_VTX,24,8)|_SHIFTL((n),12,8)|_SHIFTL((v0)+(n),1,7)), \ + (uintptr_t)(v) \ +}} +#elif (defined(F3DEX_GBI)||defined(F3DLP_GBI)) +/* + * F3DEX_GBI: G_VTX GBI format was changed to support 64 vertice. + * + * +--------+--------+------+----------+ + * G_VTX | cmd:8 | v0:8 | n:6 |length:10 | + * +-+---+--+--------+------+----------+ + * | |seg| address | + * +-+---+-----------------------------+ + */ +# define gSPVertex(pkt, v, n, v0) \ + gDma1p((pkt),G_VTX,(v),((n)<<10)|(sizeof(Vtx)*(n)-1),(v0)*2) +# define gsSPVertex(v, n, v0) \ + gsDma1p(G_VTX,(v),((n)<<10)|(sizeof(Vtx)*(n)-1),(v0)*2) +#else +# define gSPVertex(pkt, v, n, v0) \ + gDma1p(pkt, G_VTX, v, sizeof(Vtx)*(n),((n)-1)<<4|(v0)) +# define gsSPVertex(v, n, v0) \ + gsDma1p(G_VTX, v, sizeof(Vtx)*(n), ((n)-1)<<4|(v0)) +#endif + + +#ifdef F3DEX_GBI_2 +# define gSPViewport(pkt, v) \ + gDma2p((pkt), G_MOVEMEM, (v), sizeof(Vp), G_MV_VIEWPORT, 0) +# define gsSPViewport(v) \ + gsDma2p( G_MOVEMEM, (v), sizeof(Vp), G_MV_VIEWPORT, 0) +#else /* F3DEX_GBI_2 */ +# define gSPViewport(pkt,v) \ + gDma1p((pkt), G_MOVEMEM, (v), sizeof(Vp), G_MV_VIEWPORT) +# define gsSPViewport(v) \ + gsDma1p( G_MOVEMEM, (v), sizeof(Vp), G_MV_VIEWPORT) +#endif /* F3DEX_GBI_2 */ + +#define gSPDisplayList(pkt,dl) gDma1p(pkt,G_DL,dl,0,G_DL_PUSH) +#define gsSPDisplayList( dl) gsDma1p( G_DL,dl,0,G_DL_PUSH) + +#define gSPBranchList(pkt,dl) gDma1p(pkt,G_DL,dl,0,G_DL_NOPUSH) +#define gsSPBranchList( dl) gsDma1p( G_DL,dl,0,G_DL_NOPUSH) + +#define gSPSprite2DBase(pkt, s) gDma1p(pkt, G_SPRITE2D_BASE, s, sizeof(uSprite), 0) +#define gsSPSprite2DBase(s) gsDma1p(G_SPRITE2D_BASE, s, sizeof(uSprite), 0) + +/* + * RSP short command (no DMA required) macros + */ +#define gImmp0(pkt, c) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL((c), 24, 8); \ +} + +#define gsImmp0(c) \ +{{ \ + _SHIFTL((c), 24, 8) \ +}} + +#define gImmp1(pkt, c, p0) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL((c), 24, 8); \ + _g->words.w1 = (uintptr_t)(p0); \ +} + +#define gsImmp1(c, p0) \ +{{ \ + _SHIFTL((c), 24, 8), (uintptr_t)(p0) \ +}} + +#define gImmp2(pkt, c, p0, p1) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL((c), 24, 8); \ + _g->words.w1 = _SHIFTL((p0), 16, 16) | _SHIFTL((p1), 8, 8); \ +} + +#define gsImmp2(c, p0, p1) \ +{{ \ + _SHIFTL((c), 24, 8), _SHIFTL((p0), 16, 16) | _SHIFTL((p1), 8, 8)\ +}} + +#define gImmp3(pkt, c, p0, p1, p2) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL((c), 24, 8); \ + _g->words.w1 = (_SHIFTL((p0), 16, 16) | _SHIFTL((p1), 8, 8) | \ + _SHIFTL((p2), 0, 8)); \ +} + +#define gsImmp3(c, p0, p1, p2) \ +{{ \ + _SHIFTL((c), 24, 8), (_SHIFTL((p0), 16, 16) | \ + _SHIFTL((p1), 8, 8) | _SHIFTL((p2), 0, 8))\ +}} + +#define gImmp21(pkt, c, p0, p1, dat) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL((c), 24, 8) | _SHIFTL((p0), 8, 16) | \ + _SHIFTL((p1), 0, 8)); \ + _g->words.w1 = (uintptr_t) (dat); \ +} + +#define gsImmp21(c, p0, p1, dat) \ +{{ \ + _SHIFTL((c), 24, 8) | _SHIFTL((p0), 8, 16) | _SHIFTL((p1), 0, 8),\ + (uintptr_t) (dat) \ +}} + +#ifdef F3DEX_GBI_2 +#define gMoveWd(pkt, index, offset, data) \ + gDma1p((pkt), G_MOVEWORD, data, offset, index) +#define gsMoveWd( index, offset, data) \ + gsDma1p( G_MOVEWORD, data, offset, index) +#else /* F3DEX_GBI_2 */ +#define gMoveWd(pkt, index, offset, data) \ + gImmp21((pkt), G_MOVEWORD, offset, index, data) +#define gsMoveWd( index, offset, data) \ + gsImmp21( G_MOVEWORD, offset, index, data) +#endif /* F3DEX_GBI_2 */ + +/* Sprite immediate macros, there is also a sprite dma macro above */ + +#define gSPSprite2DScaleFlip(pkt, sx, sy, fx, fy) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_SPRITE2D_SCALEFLIP, 24, 8) | \ + _SHIFTL((fx), 8, 8) | \ + _SHIFTL((fy), 0, 8)); \ + _g->words.w1 = (_SHIFTL((sx), 16, 16) | \ + _SHIFTL((sy), 0, 16)); \ +} + +#define gsSPSprite2DScaleFlip(sx, sy, fx, fy) \ +{{ \ + (_SHIFTL(G_SPRITE2D_SCALEFLIP, 24, 8) | \ + _SHIFTL((fx), 8, 8) | \ + _SHIFTL((fy), 0, 8)), \ + (_SHIFTL((sx), 16, 16) | \ + _SHIFTL((sy), 0, 16)) \ +}} + +#define gSPSprite2DDraw(pkt, px, py) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_SPRITE2D_DRAW, 24, 8)); \ + _g->words.w1 = (_SHIFTL((px), 16, 16) | \ + _SHIFTL((py), 0, 16)); \ +} + +#define gsSPSprite2DDraw(px, py) \ +{{ \ + (_SHIFTL(G_SPRITE2D_DRAW, 24, 8)), \ + (_SHIFTL((px), 16, 16) | \ + _SHIFTL((py), 0, 16)) \ +}} + + +/* + * Note: the SP1Triangle() and line macros multiply the vertex indices + * by 10, this is an optimization for the microcode. + */ +#if (defined(F3DLP_GBI)||defined(F3DEX_GBI)) +# define __gsSP1Triangle_w1(v0, v1, v2) \ + (_SHIFTL((v0)*2,16,8)|_SHIFTL((v1)*2,8,8)|_SHIFTL((v2)*2,0,8)) +# define __gsSP1Triangle_w1f(v0, v1, v2, flag) \ + (((flag) == 0) ? __gsSP1Triangle_w1(v0, v1, v2): \ + ((flag) == 1) ? __gsSP1Triangle_w1(v1, v2, v0): \ + __gsSP1Triangle_w1(v2, v0, v1)) +# define __gsSPLine3D_w1(v0, v1, wd) \ + (_SHIFTL((v0)*2,16,8)|_SHIFT((v1)*2,8,8)|_SHIFT((wd),0,8)) +# define __gsSPLine3D_w1f(v0, v1, wd, flag) \ + (((flag) == 0) ? __gsSPLine3D_w1(v0, v1, wd): \ + __gsSPLine3D_w1(v1, v0, wd)) +# define __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag) \ + (((flag) == 0) ? __gsSP1Triangle_w1(v0, v1, v2): \ + ((flag) == 1) ? __gsSP1Triangle_w1(v1, v2, v3): \ + ((flag) == 2) ? __gsSP1Triangle_w1(v2, v3, v0): \ + __gsSP1Triangle_w1(v3, v0, v1)) +# define __gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag) \ + (((flag) == 0) ? __gsSP1Triangle_w1(v0, v2, v3): \ + ((flag) == 1) ? __gsSP1Triangle_w1(v1, v3, v0): \ + ((flag) == 2) ? __gsSP1Triangle_w1(v2, v0, v1): \ + __gsSP1Triangle_w1(v3, v1, v2)) +#else +# define __gsSP1Triangle_w1f(v0, v1, v2, flag) \ + (_SHIFTL((flag), 24,8)|_SHIFTL((v0)*10,16,8)| \ + _SHIFTL((v1)*10, 8,8)|_SHIFTL((v2)*10, 0,8)) +# define __gsSPLine3D_w1f(v0, v1, wd, flag) \ + (_SHIFTL((flag), 24,8)|_SHIFTL((v0)*10,16,8)| \ + _SHIFTL((v1)*10, 8,8)|_SHIFTL((wd), 0,8)) +#endif + +#ifdef F3DEX_GBI_2 +/*** + *** 1 Triangle + ***/ +#define gSP1Triangle(pkt, v0, v1, v2, flag) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_TRI1, 24, 8)| \ + __gsSP1Triangle_w1f(v0, v1, v2, flag); \ + _g->words.w1 = 0; \ +} +#define gsSP1Triangle(v0, v1, v2, flag) \ +{{ \ + _SHIFTL(G_TRI1, 24, 8)|__gsSP1Triangle_w1f(v0, v1, v2, flag), \ + 0 \ +}} + +/*** + *** Line + ***/ +#define gSPLine3D(pkt, v0, v1, flag) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_LINE3D, 24, 8)| \ + __gsSPLine3D_w1f(v0, v1, 0, flag); \ + _g->words.w1 = 0; \ +} +#define gsSPLine3D(v0, v1, flag) \ +{{ \ + _SHIFTL(G_LINE3D, 24, 8)|__gsSPLine3D_w1f(v0, v1, 0, flag), \ + 0 \ +}} + +/*** + *** LineW + ***/ +/* these macros are the same as SPLine3D, except they have an + * additional parameter for width. The width is added to the "minimum" + * thickness, which is 1.5 pixels. The units for width are in + * half-pixel units, so a width of 1 translates to (.5 + 1.5) or + * a 2.0 pixels wide line. + */ +#define gSPLineW3D(pkt, v0, v1, wd, flag) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_LINE3D, 24, 8)| \ + __gsSPLine3D_w1f(v0, v1, wd, flag); \ + _g->words.w1 = 0; \ +} +#define gsSPLineW3D(v0, v1, wd, flag) \ +{{ \ + _SHIFTL(G_LINE3D, 24, 8)|__gsSPLine3D_w1f(v0, v1, wd, flag), \ + 0 \ +}} + +/*** + *** 1 Quadrangle + ***/ +#define gSP1Quadrangle(pkt, v0, v1, v2, v3, flag) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_QUAD, 24, 8)| \ + __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag)); \ + _g->words.w1 = __gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag); \ +} + +#define gsSP1Quadrangle(v0, v1, v2, v3, flag) \ +{{ \ + (_SHIFTL(G_QUAD, 24, 8)| \ + __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag)), \ + __gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag) \ +}} +#else /* F3DEX_GBI_2 */ + +/*** + *** 1 Triangle + ***/ +#define gSP1Triangle(pkt, v0, v1, v2, flag) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_TRI1, 24, 8); \ + _g->words.w1 = __gsSP1Triangle_w1f(v0, v1, v2, flag); \ +} +#define gsSP1Triangle(v0, v1, v2, flag) \ +{{ \ + _SHIFTL(G_TRI1, 24, 8), \ + __gsSP1Triangle_w1f(v0, v1, v2, flag) \ +}} + +/*** + *** Line + ***/ +#define gSPLine3D(pkt, v0, v1, flag) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_LINE3D, 24, 8); \ + _g->words.w1 = __gsSPLine3D_w1f(v0, v1, 0, flag); \ +} +#define gsSPLine3D(v0, v1, flag) \ +{{ \ + _SHIFTL(G_LINE3D, 24, 8), \ + __gsSPLine3D_w1f(v0, v1, 0, flag) \ +}} + +/*** + *** LineW + ***/ +/* these macros are the same as SPLine3D, except they have an + * additional parameter for width. The width is added to the "minimum" + * thickness, which is 1.5 pixels. The units for width are in + * half-pixel units, so a width of 1 translates to (.5 + 1.5) or + * a 2.0 pixels wide line. + */ +#define gSPLineW3D(pkt, v0, v1, wd, flag) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_LINE3D, 24, 8); \ + _g->words.w1 = __gsSPLine3D_w1f(v0, v1, wd, flag); \ +} +#define gsSPLineW3D(v0, v1, wd, flag) \ +{{ \ + _SHIFTL(G_LINE3D, 24, 8), \ + __gsSPLine3D_w1f(v0, v1, wd, flag) \ +}} + +/*** + *** 1 Quadrangle + ***/ +#define gSP1Quadrangle(pkt, v0, v1, v2, v3, flag) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TRI2, 24, 8)| \ + __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag)); \ + _g->words.w1 = __gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag); \ +} + +#define gsSP1Quadrangle(v0, v1, v2, v3, flag) \ +{{ \ + (_SHIFTL(G_TRI2, 24, 8)| \ + __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag)), \ + __gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag) \ +}} +#endif /* F3DEX_GBI_2 */ + +#if (defined(F3DLP_GBI)||defined(F3DEX_GBI)) +/*** + *** 2 Triangles + ***/ +#define gSP2Triangles(pkt, v00, v01, v02, flag0, v10, v11, v12, flag1) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TRI2, 24, 8)| \ + __gsSP1Triangle_w1f(v00, v01, v02, flag0)); \ + _g->words.w1 = __gsSP1Triangle_w1f(v10, v11, v12, flag1); \ +} + +#define gsSP2Triangles(v00, v01, v02, flag0, v10, v11, v12, flag1) \ +{{ \ + (_SHIFTL(G_TRI2, 24, 8)| \ + __gsSP1Triangle_w1f(v00, v01, v02, flag0)), \ + __gsSP1Triangle_w1f(v10, v11, v12, flag1) \ +}} +#else +#define gSP2Triangles(pkt, v00, v01, v02, flag0, v10, v11, v12, flag1) \ +{ \ + gSP1Triangle(pkt, v00, v01, v02, flag0); \ + gSP1Triangle(pkt, v10, v11, v12, flag1); \ +} +#define gsSP2Triangles(v00, v01, v02, flag0, v10, v11, v12, flag1) \ + gsSP1Triangle(v00, v01, v02, flag0), \ + gsSP1Triangle(v10, v11, v12, flag1) +#endif /* F3DEX_GBI/F3DLP_GBI */ + +#if (defined(F3DEX_GBI)||defined(F3DLP_GBI)) +#define gSPCullDisplayList(pkt,vstart,vend) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_CULLDL, 24, 8) | \ + _SHIFTL((vstart)*2, 0, 16); \ + _g->words.w1 = _SHIFTL((vend)*2, 0, 16); \ +} + +#define gsSPCullDisplayList(vstart,vend) \ +{{ \ + _SHIFTL(G_CULLDL, 24, 8) | _SHIFTL((vstart)*2, 0, 16), \ + _SHIFTL((vend)*2, 0, 16) \ +}} + +#else +#define gSPCullDisplayList(pkt,vstart,vend) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_CULLDL, 24, 8) | \ + ((0x0f & (vstart))*40); \ + _g->words.w1 = (unsigned int)((0x0f & ((vend)+1))*40); \ +} + +#define gsSPCullDisplayList(vstart,vend) \ +{{ \ + _SHIFTL(G_CULLDL, 24, 8) | ((0x0f & (vstart))*40), \ + ((0x0f & ((vend)+1))*40) \ +}} +#endif + +#define gSPSegment(pkt, segment, base) \ + gMoveWd(pkt, G_MW_SEGMENT, (segment)*4, base) +#define gsSPSegment(segment, base) \ + gsMoveWd( G_MW_SEGMENT, (segment)*4, base) + +/* + * Clipping Macros + */ +#define FR_NEG_FRUSTRATIO_1 0x00000001 +#define FR_POS_FRUSTRATIO_1 0x0000ffff +#define FR_NEG_FRUSTRATIO_2 0x00000002 +#define FR_POS_FRUSTRATIO_2 0x0000fffe +#define FR_NEG_FRUSTRATIO_3 0x00000003 +#define FR_POS_FRUSTRATIO_3 0x0000fffd +#define FR_NEG_FRUSTRATIO_4 0x00000004 +#define FR_POS_FRUSTRATIO_4 0x0000fffc +#define FR_NEG_FRUSTRATIO_5 0x00000005 +#define FR_POS_FRUSTRATIO_5 0x0000fffb +#define FR_NEG_FRUSTRATIO_6 0x00000006 +#define FR_POS_FRUSTRATIO_6 0x0000fffa +/* + * r should be one of: FRUSTRATIO_1, FRUSTRATIO_2, FRUSTRATIO_3, ... FRUSTRATIO_6 + */ +#define gSPClipRatio(pkt, r) \ +{ \ + gMoveWd(pkt, G_MW_CLIP, G_MWO_CLIP_RNX, FR_NEG_##r); \ + gMoveWd(pkt, G_MW_CLIP, G_MWO_CLIP_RNY, FR_NEG_##r); \ + gMoveWd(pkt, G_MW_CLIP, G_MWO_CLIP_RPX, FR_POS_##r); \ + gMoveWd(pkt, G_MW_CLIP, G_MWO_CLIP_RPY, FR_POS_##r); \ +} + +#define gsSPClipRatio(r) \ + gsMoveWd(G_MW_CLIP, G_MWO_CLIP_RNX, FR_NEG_##r), \ + gsMoveWd(G_MW_CLIP, G_MWO_CLIP_RNY, FR_NEG_##r), \ + gsMoveWd(G_MW_CLIP, G_MWO_CLIP_RPX, FR_POS_##r), \ + gsMoveWd(G_MW_CLIP, G_MWO_CLIP_RPY, FR_POS_##r) + +/* + * Insert values into Matrix + * + * where = element of matrix (byte offset) + * num = new element (32 bit value replacing 2 int or 2 frac matrix + * componants + */ +#ifdef F3DEX_GBI_2 +#define gSPInsertMatrix(pkt, where, num) \ + ERROR!! gSPInsertMatrix is no longer supported. +#define gsSPInsertMatrix(where, num) \ + ERROR!! gsSPInsertMatrix is no longer supported. +#else +#define gSPInsertMatrix(pkt, where, num) \ + gMoveWd(pkt, G_MW_MATRIX, where, num) +#define gsSPInsertMatrix(where, num) \ + gsMoveWd(G_MW_MATRIX, where, num) +#endif + +/* + * Load new matrix directly + * + * mptr = pointer to matrix + */ +#ifdef F3DEX_GBI_2 +#define gSPForceMatrix(pkt, mptr) \ +{ gDma2p((pkt),G_MOVEMEM,(mptr),sizeof(Mtx),G_MV_MATRIX,0); \ + gMoveWd((pkt), G_MW_FORCEMTX,0,0x00010000); \ +} +#define gsSPForceMatrix(mptr) \ + gsDma2p(G_MOVEMEM,(mptr),sizeof(Mtx),G_MV_MATRIX,0), \ + gsMoveWd(G_MW_FORCEMTX,0,0x00010000) + +#else /* F3DEX_GBI_2 */ +#define gSPForceMatrix(pkt, mptr) \ +{ \ + gDma1p(pkt, G_MOVEMEM, mptr, 16, G_MV_MATRIX_1); \ + gDma1p(pkt, G_MOVEMEM, (char *)(mptr)+16, 16, G_MV_MATRIX_2); \ + gDma1p(pkt, G_MOVEMEM, (char *)(mptr)+32, 16, G_MV_MATRIX_3); \ + gDma1p(pkt, G_MOVEMEM, (char *)(mptr)+48, 16, G_MV_MATRIX_4); \ +} +#define gsSPForceMatrix(mptr) \ + gsDma1p( G_MOVEMEM, mptr, 16, G_MV_MATRIX_1), \ + gsDma1p( G_MOVEMEM, (char *)(mptr)+16, 16, G_MV_MATRIX_2), \ + gsDma1p( G_MOVEMEM, (char *)(mptr)+32, 16, G_MV_MATRIX_3), \ + gsDma1p( G_MOVEMEM, (char *)(mptr)+48, 16, G_MV_MATRIX_4) +#endif /* F3DEX_GBI_2 */ + +/* + * Insert values into Points + * + * point = point number 0-15 + * where = which element of point to modify (byte offset into point) + * num = new value (32 bit) + */ +#if (defined(F3DEX_GBI)||defined(F3DLP_GBI)) +# define gSPModifyVertex(pkt, vtx, where, val) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + _g->words.w0 = (_SHIFTL(G_MODIFYVTX,24,8)| \ + _SHIFTL((where),16,8)|_SHIFTL((vtx)*2,0,16)); \ + _g->words.w1 = (unsigned int)(val); \ +} +# define gsSPModifyVertex(vtx, where, val) \ +{{ \ + _SHIFTL(G_MODIFYVTX,24,8)| \ + _SHIFTL((where),16,8)|_SHIFTL((vtx)*2,0,16), \ + (unsigned int)(val) \ +}} +#else +# define gSPModifyVertex(pkt, vtx, where, val) \ + gMoveWd(pkt, G_MW_POINTS, (vtx)*40+(where), val) +# define gsSPModifyVertex(vtx, where, val) \ + gsMoveWd(G_MW_POINTS, (vtx)*40+(where), val) +#endif + +#if (defined(F3DEX_GBI)||defined(F3DLP_GBI)) +/* + * gSPBranchLessZ Branch DL if (vtx.z) less than or equal (zval). + * + * dl = DL branch to + * vtx = Vertex + * zval = Screen depth + * near = Near plane + * far = Far plane + * flag = G_BZ_PERSP or G_BZ_ORTHO + */ + +#define G_BZ_PERSP 0 +#define G_BZ_ORTHO 1 + +#define G_DEPTOZSrg(zval, near, far, flag, zmin, zmax) \ +(((unsigned int)FTOFIX32(((flag) == G_BZ_PERSP ? \ + (1.0f-(float)(near)/(float)(zval)) / \ + (1.0f-(float)(near)/(float)(far )) : \ + ((float)(zval) - (float)(near)) / \ + ((float)(far ) - (float)(near))))) * \ + (((int)((zmax) - (zmin)))&~1) + (int)FTOFIX32(zmin)) + +#define G_DEPTOZS(zval, near, far, flag) \ + G_DEPTOZSrg(zval, near, far, flag, 0, G_MAXZ) + +#define gSPBranchLessZrg(pkt, dl, vtx, zval, near, far, flag, zmin, zmax) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + _g->words.w0 = _SHIFTL(G_RDPHALF_1,24,8); \ + _g->words.w1 = (uintptr_t)(dl); \ + _g = (Gfx *)(pkt); \ + _g->words.w0 = (_SHIFTL(G_BRANCH_Z,24,8)| \ + _SHIFTL((vtx)*5,12,12)|_SHIFTL((vtx)*2,0,12)); \ + _g->words.w1 = G_DEPTOZSrg(zval, near, far, flag, zmin, zmax); \ +} + +#define gsSPBranchLessZrg(dl, vtx, zval, near, far, flag, zmin, zmax) \ +{{ _SHIFTL(G_RDPHALF_1,24,8), \ + (uintptr_t)(dl), }}, \ +{{ _SHIFTL(G_BRANCH_Z,24,8)|_SHIFTL((vtx)*5,12,12)|_SHIFTL((vtx)*2,0,12),\ + G_DEPTOZSrg(zval, near, far, flag, zmin, zmax), }} + +#define gSPBranchLessZ(pkt, dl, vtx, zval, near, far, flag) \ + gSPBranchLessZrg(pkt, dl, vtx, zval, near, far, flag, 0, G_MAXZ) +#define gsSPBranchLessZ(dl, vtx, zval, near, far, flag) \ + gsSPBranchLessZrg(dl, vtx, zval, near, far, flag, 0, G_MAXZ) + +/* + * gSPBranchLessZraw Branch DL if (vtx.z) less than or equal (raw zval). + * + * dl = DL branch to + * vtx = Vertex + * zval = Raw value of screen depth + */ +#define gSPBranchLessZraw(pkt, dl, vtx, zval) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + _g->words.w0 = _SHIFTL(G_RDPHALF_1,24,8); \ + _g->words.w1 = (uintptr_t)(dl); \ + _g = (Gfx *)(pkt); \ + _g->words.w0 = (_SHIFTL(G_BRANCH_Z,24,8)| \ + _SHIFTL((vtx)*5,12,12)|_SHIFTL((vtx)*2,0,12)); \ + _g->words.w1 = (unsigned int)(zval); \ +} + +#define gsSPBranchLessZraw(dl, vtx, zval) \ +{{ _SHIFTL(G_RDPHALF_1,24,8), \ + (uintptr_t)(dl), }}, \ +{{ _SHIFTL(G_BRANCH_Z,24,8)|_SHIFTL((vtx)*5,12,12)|_SHIFTL((vtx)*2,0,12),\ + (unsigned int)(zval), }} + +/* + * gSPLoadUcode RSP loads specified ucode. + * + * uc_start = ucode text section start + * uc_dstart = ucode data section start + */ +#define gSPLoadUcodeEx(pkt, uc_start, uc_dstart, uc_dsize) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + _g->words.w0 = _SHIFTL(G_RDPHALF_1,24,8); \ + _g->words.w1 = (uintptr_t)(uc_dstart); \ + _g = (Gfx *)(pkt); \ + _g->words.w0 = (_SHIFTL(G_LOAD_UCODE,24,8)| \ + _SHIFTL((int)(uc_dsize)-1,0,16)); \ + _g->words.w1 = (uintptr_t)(uc_start); \ +} + +#define gsSPLoadUcodeEx(uc_start, uc_dstart, uc_dsize) \ +{{ _SHIFTL(G_RDPHALF_1,24,8), \ + (uintptr_t)(uc_dstart), }}, \ +{{ _SHIFTL(G_LOAD_UCODE,24,8)| \ + _SHIFTL((int)(uc_dsize)-1,0,16), \ + (uintptr_t)(uc_start), }} + +#define gSPLoadUcode(pkt, uc_start, uc_dstart) \ + gSPLoadUcodeEx((pkt), (uc_start), (uc_dstart), SP_UCODE_DATA_SIZE) +#define gsSPLoadUcode(uc_start, uc_dstart) \ + gsSPLoadUcodeEx((uc_start), (uc_dstart), SP_UCODE_DATA_SIZE) + +#define gSPLoadUcodeL(pkt, ucode) \ + gSPLoadUcode((pkt), OS_K0_TO_PHYSICAL(&##ucode##TextStart), \ + OS_K0_TO_PHYSICAL(&##ucode##DataStart)) +#define gsSPLoadUcodeL(ucode) \ + gsSPLoadUcode(OS_K0_TO_PHYSICAL(&##ucode##TextStart), \ + OS_K0_TO_PHYSICAL(&##ucode##DataStart)) +#endif + +#ifdef F3DEX_GBI_2 +/* + * gSPDma_io DMA to/from DMEM/IMEM for DEBUG. + */ +#define gSPDma_io(pkt, flag, dmem, dram, size) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + _g->words.w0 = _SHIFTL(G_DMA_IO,24,8)|_SHIFTL((flag),23,1)| \ + _SHIFTL((dmem)/8,13,10)|_SHIFTL((size)-1,0,12); \ + _g->words.w1 = (uintptr_t)(dram); \ +} + +#define gsSPDma_io(flag, dmem, dram, size) \ +{{ \ + _SHIFTL(G_DMA_IO,24,8)|_SHIFTL((flag),23,1)| \ + _SHIFTL((dmem)/8,13,10)|_SHIFTL((size)-1,0,12), \ + (uintptr_t)(dram) \ +}} + +#define gSPDmaRead(pkt,dmem,dram,size) gSPDma_io((pkt),0,(dmem),(dram),(size)) +#define gsSPDmaRead(dmem,dram,size) gsSPDma_io(0,(dmem),(dram),(size)) +#define gSPDmaWrite(pkt,dmem,dram,size) gSPDma_io((pkt),1,(dmem),(dram),(size)) +#define gsSPDmaWrite(dmem,dram,size) gsSPDma_io(1,(dmem),(dram),(size)) +#endif + +/* + * Lighting Macros + */ +#ifdef F3DEX_GBI_2 +# define NUML(n) ((n)*24) +#else +# define NUML(n) (((n)+1)*32 + 0x80000000) +#endif +#define NUMLIGHTS_0 1 +#define NUMLIGHTS_1 1 +#define NUMLIGHTS_2 2 +#define NUMLIGHTS_3 3 +#define NUMLIGHTS_4 4 +#define NUMLIGHTS_5 5 +#define NUMLIGHTS_6 6 +#define NUMLIGHTS_7 7 +/* + * n should be one of: NUMLIGHTS_0, NUMLIGHTS_1, ..., NUMLIGHTS_7 + * NOTE: in addition to the number of directional lights specified, + * there is always 1 ambient light + */ +#define gSPNumLights(pkt, n) \ + gMoveWd(pkt, G_MW_NUMLIGHT, G_MWO_NUMLIGHT, NUML(n)) +#define gsSPNumLights(n) \ + gsMoveWd( G_MW_NUMLIGHT, G_MWO_NUMLIGHT, NUML(n)) + +#define LIGHT_1 1 +#define LIGHT_2 2 +#define LIGHT_3 3 +#define LIGHT_4 4 +#define LIGHT_5 5 +#define LIGHT_6 6 +#define LIGHT_7 7 +#define LIGHT_8 8 +/* + * l should point to a Light struct + * n should be one of: LIGHT_1, LIGHT_2, ..., LIGHT_8 + * NOTE: the highest numbered light is always the ambient light (eg if there are + * 3 directional lights defined: gsSPNumLights(NUMLIGHTS_3), then lights + * LIGHT_1 through LIGHT_3 will be the directional lights and light + * LIGHT_4 will be the ambient light. + */ +#ifdef F3DEX_GBI_2 +# define gSPLight(pkt, l, n) \ + gDma2p((pkt),G_MOVEMEM,(l),sizeof(Light),G_MV_LIGHT,(n)*24+24) +# define gsSPLight(l, n) \ + gsDma2p( G_MOVEMEM,(l),sizeof(Light),G_MV_LIGHT,(n)*24+24) +#else /* F3DEX_GBI_2 */ +# define gSPLight(pkt, l, n) \ + gDma1p(pkt, G_MOVEMEM, l, sizeof(Light),((n)-1)*2+G_MV_L0) +# define gsSPLight(l, n) \ + gsDma1p( G_MOVEMEM, l, sizeof(Light),((n)-1)*2+G_MV_L0) +#endif /* F3DEX_GBI_2 */ + +/* + * gSPLightColor changes color of light without recalculating light direction + * col is a 32 bit word with r,g,b,a (alpha is ignored) + * n should be one of LIGHT_1, LIGHT_2, ..., LIGHT_8 + */ +#define gSPLightColor(pkt, n, col) \ +{ \ + gMoveWd(pkt, G_MW_LIGHTCOL, G_MWO_a##n, col); \ + gMoveWd(pkt, G_MW_LIGHTCOL, G_MWO_b##n, col); \ +} +#define gsSPLightColor(n, col) \ + gsMoveWd(G_MW_LIGHTCOL, G_MWO_a##n, col), \ + gsMoveWd(G_MW_LIGHTCOL, G_MWO_b##n, col) + +/* These macros use a structure "name" which is init'd with the gdSPDefLights macros*/ + +#define gSPSetLights0(pkt,name) \ +{ \ + gSPNumLights(pkt,NUMLIGHTS_0); \ + gSPLight(pkt,&name.l[0],1); \ + gSPLight(pkt,&name.a,2); \ +} +#define gsSPSetLights0(name) \ + gsSPNumLights(NUMLIGHTS_0), \ + gsSPLight(&name.l[0],1), \ + gsSPLight(&name.a,2) + +#define gSPSetLights1(pkt,name) \ +{ \ + gSPNumLights(pkt,NUMLIGHTS_1); \ + gSPLight(pkt,&name.l[0],1); \ + gSPLight(pkt,&name.a,2); \ +} +#define gsSPSetLights1(name) \ + gsSPNumLights(NUMLIGHTS_1), \ + gsSPLight(&name.l[0],1), \ + gsSPLight(&name.a,2) + +#define gSPSetLights2(pkt,name) \ +{ \ + gSPNumLights(pkt,NUMLIGHTS_2); \ + gSPLight(pkt,&name.l[0],1); \ + gSPLight(pkt,&name.l[1],2); \ + gSPLight(pkt,&name.a,3); \ +} +#define gsSPSetLights2(name) \ + gsSPNumLights(NUMLIGHTS_2), \ + gsSPLight(&name.l[0],1), \ + gsSPLight(&name.l[1],2), \ + gsSPLight(&name.a,3) + +#define gSPSetLights3(pkt,name) \ +{ \ + gSPNumLights(pkt,NUMLIGHTS_3); \ + gSPLight(pkt,&name.l[0],1); \ + gSPLight(pkt,&name.l[1],2); \ + gSPLight(pkt,&name.l[2],3); \ + gSPLight(pkt,&name.a,4); \ +} +#define gsSPSetLights3(name) \ + gsSPNumLights(NUMLIGHTS_3), \ + gsSPLight(&name.l[0],1), \ + gsSPLight(&name.l[1],2), \ + gsSPLight(&name.l[2],3), \ + gsSPLight(&name.a,4) + +#define gSPSetLights4(pkt,name) \ +{ \ + gSPNumLights(pkt,NUMLIGHTS_4); \ + gSPLight(pkt,&name.l[0],1); \ + gSPLight(pkt,&name.l[1],2); \ + gSPLight(pkt,&name.l[2],3); \ + gSPLight(pkt,&name.l[3],4); \ + gSPLight(pkt,&name.a,5); \ +} +#define gsSPSetLights4(name) \ + gsSPNumLights(NUMLIGHTS_4), \ + gsSPLight(&name.l[0],1), \ + gsSPLight(&name.l[1],2), \ + gsSPLight(&name.l[2],3), \ + gsSPLight(&name.l[3],4), \ + gsSPLight(&name.a,5) + +#define gSPSetLights5(pkt,name) \ +{ \ + gSPNumLights(pkt,NUMLIGHTS_5); \ + gSPLight(pkt,&name.l[0],1); \ + gSPLight(pkt,&name.l[1],2); \ + gSPLight(pkt,&name.l[2],3); \ + gSPLight(pkt,&name.l[3],4); \ + gSPLight(pkt,&name.l[4],5); \ + gSPLight(pkt,&name.a,6); \ +} + +#define gsSPSetLights5(name) \ + gsSPNumLights(NUMLIGHTS_5), \ + gsSPLight(&name.l[0],1), \ + gsSPLight(&name.l[1],2), \ + gsSPLight(&name.l[2],3), \ + gsSPLight(&name.l[3],4), \ + gsSPLight(&name.l[4],5), \ + gsSPLight(&name.a,6) + +#define gSPSetLights6(pkt,name) \ +{ \ + gSPNumLights(pkt,NUMLIGHTS_6); \ + gSPLight(pkt,&name.l[0],1); \ + gSPLight(pkt,&name.l[1],2); \ + gSPLight(pkt,&name.l[2],3); \ + gSPLight(pkt,&name.l[3],4); \ + gSPLight(pkt,&name.l[4],5); \ + gSPLight(pkt,&name.l[5],6); \ + gSPLight(pkt,&name.a,7); \ +} + +#define gsSPSetLights6(name) \ + gsSPNumLights(NUMLIGHTS_6), \ + gsSPLight(&name.l[0],1), \ + gsSPLight(&name.l[1],2), \ + gsSPLight(&name.l[2],3), \ + gsSPLight(&name.l[3],4), \ + gsSPLight(&name.l[4],5), \ + gsSPLight(&name.l[5],6), \ + gsSPLight(&name.a,7) + +#define gSPSetLights7(pkt,name) \ +{ \ + gSPNumLights(pkt,NUMLIGHTS_7); \ + gSPLight(pkt,&name.l[0],1); \ + gSPLight(pkt,&name.l[1],2); \ + gSPLight(pkt,&name.l[2],3); \ + gSPLight(pkt,&name.l[3],4); \ + gSPLight(pkt,&name.l[4],5); \ + gSPLight(pkt,&name.l[5],6); \ + gSPLight(pkt,&name.l[6],7); \ + gSPLight(pkt,&name.a,8); \ +} + +#define gsSPSetLights7(name) \ + gsSPNumLights(NUMLIGHTS_7), \ + gsSPLight(&name.l[0],1), \ + gsSPLight(&name.l[1],2), \ + gsSPLight(&name.l[2],3), \ + gsSPLight(&name.l[3],4), \ + gsSPLight(&name.l[4],5), \ + gsSPLight(&name.l[5],6), \ + gsSPLight(&name.l[6],7), \ + gsSPLight(&name.a,8) + +/* + * Reflection/Hiliting Macros + */ +#ifdef F3DEX_GBI_2 +# define gSPLookAtX(pkt, l) \ + gDma2p((pkt),G_MOVEMEM,(l),sizeof(Light),G_MV_LIGHT,G_MVO_LOOKATX) +# define gsSPLookAtX(l) \ + gsDma2p( G_MOVEMEM,(l),sizeof(Light),G_MV_LIGHT,G_MVO_LOOKATX) +# define gSPLookAtY(pkt, l) \ + gDma2p((pkt),G_MOVEMEM,(l),sizeof(Light),G_MV_LIGHT,G_MVO_LOOKATY) +# define gsSPLookAtY(l) \ + gsDma2p( G_MOVEMEM,(l),sizeof(Light),G_MV_LIGHT,G_MVO_LOOKATY) +#else /* F3DEX_GBI_2 */ +# define gSPLookAtX(pkt, l) \ + gDma1p(pkt, G_MOVEMEM, l, sizeof(Light),G_MV_LOOKATX) +# define gsSPLookAtX(l) \ + gsDma1p( G_MOVEMEM, l, sizeof(Light),G_MV_LOOKATX) +# define gSPLookAtY(pkt, l) \ + gDma1p(pkt, G_MOVEMEM, l, sizeof(Light),G_MV_LOOKATY) +# define gsSPLookAtY(l) \ + gsDma1p( G_MOVEMEM, l, sizeof(Light),G_MV_LOOKATY) +#endif /* F3DEX_GBI_2 */ + +#define gSPLookAt(pkt, la) \ +{ \ + gSPLookAtX(pkt,la) \ + gSPLookAtY(pkt,(char *)(la)+16) \ +} +#define gsSPLookAt(la) \ + gsSPLookAtX(la), \ + gsSPLookAtY((char *)(la)+16) + +#define gDPSetHilite1Tile(pkt, tile, hilite, width, height) \ + gDPSetTileSize(pkt, tile, (hilite)->h.x1 & 0xfff, (hilite)->h.y1 & 0xfff, \ + ((((width)-1)*4)+(hilite)->h.x1) & 0xfff, ((((height)-1)*4)+(hilite)->h.y1) & 0xfff) + +#define gDPSetHilite2Tile(pkt, tile, hilite, width, height) \ + gDPSetTileSize(pkt, tile, (hilite)->h.x2 & 0xfff, (hilite)->h.y2 & 0xfff, \ + ((((width)-1)*4)+(hilite)->h.x2) & 0xfff, ((((height)-1)*4)+(hilite)->h.y2) & 0xfff) + + +/* + * FOG macros + * fm = z multiplier + * fo = z offset + * FOG FORMULA: alpha(fog) = (eyespace z) * fm + fo CLAMPED 0 to 255 + * note: (eyespace z) ranges -1 to 1 + * + * Alternate method of setting fog: + * min, max: range 0 to 1000: 0=nearplane, 1000=farplane + * min is where fog begins (usually less than max and often 0) + * max is where fog is thickest (usually 1000) + * + */ +#define gSPFogFactor(pkt, fm, fo) \ + gMoveWd(pkt, G_MW_FOG, G_MWO_FOG, \ + (_SHIFTL(fm,16,16) | _SHIFTL(fo,0,16))) + +#define gsSPFogFactor(fm, fo) \ + gsMoveWd(G_MW_FOG, G_MWO_FOG, \ + (_SHIFTL(fm,16,16) | _SHIFTL(fo,0,16))) + +#define gSPFogPosition(pkt, min, max) \ + gMoveWd(pkt, G_MW_FOG, G_MWO_FOG, \ + (_SHIFTL((128000/((max)-(min))),16,16) | \ + _SHIFTL(((500-(min))*256/((max)-(min))),0,16))) + +#define gsSPFogPosition(min, max) \ + gsMoveWd(G_MW_FOG, G_MWO_FOG, \ + (_SHIFTL((128000/((max)-(min))),16,16) | \ + _SHIFTL(((500-(min))*256/((max)-(min))),0,16))) + +#ifdef F3DEX_GBI_2 +/* + * Macros to turn texture on/off + */ +# define gSPTexture(pkt, s, t, level, tile, on) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TEXTURE,24,8) | \ + _SHIFTL(BOWTIE_VAL,16,8) | \ + _SHIFTL((level),11,3) | _SHIFTL((tile),8,3) | \ + _SHIFTL((on),1,7)); \ + _g->words.w1 = (_SHIFTL((s),16,16) | _SHIFTL((t),0,16)); \ +} +# define gsSPTexture(s, t, level, tile, on) \ +{{ \ + (_SHIFTL(G_TEXTURE,24,8) | _SHIFTL(BOWTIE_VAL,16,8) | \ + _SHIFTL((level),11,3) | _SHIFTL((tile),8,3) | _SHIFTL((on),1,7)),\ + (_SHIFTL((s),16,16) | _SHIFTL((t),0,16)) \ +}} +/* + * Different version of SPTexture macro, has an additional parameter + * which is currently reserved in the microcode. + */ +# define gSPTextureL(pkt, s, t, level, xparam, tile, on) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TEXTURE,24,8) | \ + _SHIFTL((xparam),16,8) | \ + _SHIFTL((level),11,3) | _SHIFTL((tile),8,3) | \ + _SHIFTL((on),1,7)); \ + _g->words.w1 = (_SHIFTL((s),16,16) | _SHIFTL((t),0,16)); \ +} +# define gsSPTextureL(s, t, level, xparam, tile, on) \ +{{ \ + (_SHIFTL(G_TEXTURE,24,8) | _SHIFTL((xparam),16,8) | \ + _SHIFTL((level),11,3) | _SHIFTL((tile),8,3) | _SHIFTL((on),1,7)),\ + (_SHIFTL((s),16,16) | _SHIFTL((t),0,16)) \ +}} +#else +/* + * Macros to turn texture on/off + */ +# define gSPTexture(pkt, s, t, level, tile, on) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TEXTURE,24,8)|_SHIFTL(BOWTIE_VAL,16,8)|\ + _SHIFTL((level),11,3)|_SHIFTL((tile),8,3)| \ + _SHIFTL((on),0,8)); \ + _g->words.w1 = (_SHIFTL((s),16,16)|_SHIFTL((t),0,16)); \ +} +# define gsSPTexture(s, t, level, tile, on) \ +{{ \ + (_SHIFTL(G_TEXTURE,24,8)|_SHIFTL(BOWTIE_VAL,16,8)| \ + _SHIFTL((level),11,3)|_SHIFTL((tile),8,3)|_SHIFTL((on),0,8)), \ + (_SHIFTL((s),16,16)|_SHIFTL((t),0,16)) \ +}} +/* + * Different version of SPTexture macro, has an additional parameter + * which is currently reserved in the microcode. + */ +# define gSPTextureL(pkt, s, t, level, xparam, tile, on) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TEXTURE,24,8)|_SHIFTL((xparam),16,8)| \ + _SHIFTL((level),11,3)|_SHIFTL((tile),8,3)| \ + _SHIFTL((on),0,8)); \ + _g->words.w1 = (_SHIFTL((s),16,16)|_SHIFTL((t),0,16)); \ +} +# define gsSPTextureL(s, t, level, xparam, tile, on) \ +{{ \ + (_SHIFTL(G_TEXTURE,24,8)|_SHIFTL((xparam),16,8)| \ + _SHIFTL((level),11,3)|_SHIFTL((tile),8,3)|_SHIFTL((on),0,8)), \ + (_SHIFTL((s),16,16)|_SHIFTL((t),0,16)) \ +}} +#endif + +#ifndef F3D_OLD +# define gSPPerspNormalize(pkt, s) gMoveWd(pkt, G_MW_PERSPNORM, 0, (s)) +# define gsSPPerspNormalize(s) gsMoveWd( G_MW_PERSPNORM, 0, (s)) +#else +# define gSPPerspNormalize(pkt, s) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_RDPHALF_1, 24, 8); \ + _g->words.w1 = (s); \ +} +# define gsSPPerspNormalize(s) \ +{{ \ + _SHIFTL(G_RDPHALF_1, 24, 8), \ + (s) \ +}} +#endif + +#ifdef F3DEX_GBI_2 +# define gSPPopMatrixN(pkt, n, num) gDma2p((pkt),G_POPMTX,(num)*64,64,2,0) +# define gsSPPopMatrixN(n, num) gsDma2p( G_POPMTX,(num)*64,64,2,0) +# define gSPPopMatrix(pkt, n) gSPPopMatrixN((pkt), (n), 1) +# define gsSPPopMatrix(n) gsSPPopMatrixN( (n), 1) +#else /* F3DEX_GBI_2 */ +# define gSPPopMatrix(pkt, n) gImmp1(pkt, G_POPMTX, n) +# define gsSPPopMatrix(n) gsImmp1( G_POPMTX, n) +#endif /* F3DEX_GBI_2 */ + +#define gSPEndDisplayList(pkt) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_ENDDL, 24, 8); \ + _g->words.w1 = 0; \ +} + +#define gsSPEndDisplayList() \ +{{ \ + _SHIFTL(G_ENDDL, 24, 8), 0 \ +}} + +#ifdef F3DEX_GBI_2 +/* + * One gSPGeometryMode(pkt,c,s) GBI is equal to these two GBIs. + * + * gSPClearGeometryMode(pkt,c) + * gSPSetGeometryMode(pkt,s) + * + * gSPLoadGeometryMode(pkt, word) sets GeometryMode directly. + */ +#define gSPGeometryMode(pkt, c, s) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + _g->words.w0 = _SHIFTL(G_GEOMETRYMODE,24,8)|_SHIFTL(~(u32)(c),0,24);\ + _g->words.w1 = (u32)(s); \ +} + +#define gsSPGeometryMode(c, s) \ +{{ \ + (_SHIFTL(G_GEOMETRYMODE,24,8)|_SHIFTL(~(u32)(c),0,24)),(u32)(s) \ +}} +#define gSPSetGeometryMode(pkt, word) gSPGeometryMode((pkt),0,(word)) +#define gsSPSetGeometryMode(word) gsSPGeometryMode(0,(word)) +#define gSPClearGeometryMode(pkt, word) gSPGeometryMode((pkt),(word),0) +#define gsSPClearGeometryMode(word) gsSPGeometryMode((word),0) +#define gSPLoadGeometryMode(pkt, word) gSPGeometryMode((pkt),-1,(word)) +#define gsSPLoadGeometryMode(word) gsSPGeometryMode(-1,(word)) +#define gsSPGeometryModeSetFirst(c, s) gsSPGeometryMode(c, s) +#else /* F3DEX_GBI_2 */ +#define gSPSetGeometryMode(pkt, word) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_SETGEOMETRYMODE, 24, 8); \ + _g->words.w1 = (unsigned int)(word); \ +} + +#define gsSPSetGeometryMode(word) \ +{{ \ + _SHIFTL(G_SETGEOMETRYMODE, 24, 8), (unsigned int)(word) \ +}} + +#define gSPClearGeometryMode(pkt, word) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_CLEARGEOMETRYMODE, 24, 8); \ + _g->words.w1 = (unsigned int)(word); \ +} + +#define gsSPClearGeometryMode(word) \ +{{ \ + _SHIFTL(G_CLEARGEOMETRYMODE, 24, 8), (unsigned int)(word) \ +}} + +/* + * gsSPGeometryMode + * In Fast3DEX2 it is better to use this, as the RSP geometry mode + * is able to be set and cleared in a single command. + */ +#define gsSPGeometryMode(c, s) \ + gsSPClearGeometryMode(c), \ + gsSPSetGeometryMode(s) +#define gsSPGeometryModeSetFirst(c, s) \ + gsSPSetGeometryMode(s), \ + gsSPClearGeometryMode(c) +#endif /* F3DEX_GBI_2 */ + +#ifdef F3DEX_GBI_2 +#define gSPSetOtherMode(pkt, cmd, sft, len, data) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + _g->words.w0 = (_SHIFTL(cmd,24,8)|_SHIFTL(32-(sft)-(len),8,8)| \ + _SHIFTL((len)-1,0,8)); \ + _g->words.w1 = (unsigned int)(data); \ +} + +#define gsSPSetOtherMode(cmd, sft, len, data) \ +{{ \ + _SHIFTL(cmd,24,8)|_SHIFTL(32-(sft)-(len),8,8)|_SHIFTL((len)-1,0,8), \ + (unsigned int)(data) \ +}} +#else +#define gSPSetOtherMode(pkt, cmd, sft, len, data) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(cmd, 24, 8) | _SHIFTL(sft, 8, 8) | \ + _SHIFTL(len, 0, 8)); \ + _g->words.w1 = (unsigned int)(data); \ +} + +#define gsSPSetOtherMode(cmd, sft, len, data) \ +{{ \ + _SHIFTL(cmd, 24, 8) | _SHIFTL(sft, 8, 8) | _SHIFTL(len, 0, 8), \ + (unsigned int)(data) \ +}} +#endif + +/* + * RDP setothermode register commands - register shadowed in RSP + */ +#define gDPPipelineMode(pkt, mode) \ + gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_PIPELINE, 1, mode) +#define gsDPPipelineMode(mode) \ + gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_PIPELINE, 1, mode) + +#define gDPSetCycleType(pkt, type) \ + gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_CYCLETYPE, 2, type) +#define gsDPSetCycleType(type) \ + gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_CYCLETYPE, 2, type) + +#define gDPSetTexturePersp(pkt, type) \ + gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTPERSP, 1, type) +#define gsDPSetTexturePersp(type) \ + gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTPERSP, 1, type) + +#define gDPSetTextureDetail(pkt, type) \ + gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTDETAIL, 2, type) +#define gsDPSetTextureDetail(type) \ + gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTDETAIL, 2, type) + +#define gDPSetTextureLOD(pkt, type) \ + gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTLOD, 1, type) +#define gsDPSetTextureLOD(type) \ + gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTLOD, 1, type) + +#define gDPSetTextureLUT(pkt, type) \ + gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTLUT, 2, type) +#define gsDPSetTextureLUT(type) \ + gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTLUT, 2, type) + +#define gDPSetTextureFilter(pkt, type) \ + gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTFILT, 2, type) +#define gsDPSetTextureFilter(type) \ + gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTFILT, 2, type) + +#define gDPSetTextureConvert(pkt, type) \ + gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTCONV, 3, type) +#define gsDPSetTextureConvert(type) \ + gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTCONV, 3, type) + +#define gDPSetCombineKey(pkt, type) \ + gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_COMBKEY, 1, type) +#define gsDPSetCombineKey(type) \ + gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_COMBKEY, 1, type) + +#ifndef _HW_VERSION_1 +#define gDPSetColorDither(pkt, mode) \ + gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_RGBDITHER, 2, mode) +#define gsDPSetColorDither(mode) \ + gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_RGBDITHER, 2, mode) +#else +#define gDPSetColorDither(pkt, mode) \ + gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_COLORDITHER, 1, mode) +#define gsDPSetColorDither(mode) \ + gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_COLORDITHER, 1, mode) +#endif + +#ifndef _HW_VERSION_1 +#define gDPSetAlphaDither(pkt, mode) \ + gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_ALPHADITHER, 2, mode) +#define gsDPSetAlphaDither(mode) \ + gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_ALPHADITHER, 2, mode) +#endif + +/* 'blendmask' is not supported anymore. + * The bits are reserved for future use. + * Fri May 26 13:45:55 PDT 1995 + */ +#define gDPSetBlendMask(pkt, mask) gDPNoOp(pkt) +#define gsDPSetBlendMask(mask) gsDPNoOp() + +#define gDPSetAlphaCompare(pkt, type) \ + gSPSetOtherMode(pkt, G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 2, type) +#define gsDPSetAlphaCompare(type) \ + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 2, type) + +#define gDPSetDepthSource(pkt, src) \ + gSPSetOtherMode(pkt, G_SETOTHERMODE_L, G_MDSFT_ZSRCSEL, 1, src) +#define gsDPSetDepthSource(src) \ + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ZSRCSEL, 1, src) + +#define gDPSetRenderMode(pkt, c0, c1) \ + gSPSetOtherMode(pkt, G_SETOTHERMODE_L, G_MDSFT_RENDERMODE, 29, \ + (c0) | (c1)) +#define gsDPSetRenderMode(c0, c1) \ + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_RENDERMODE, 29, \ + (c0) | (c1)) + +#define gSetImage(pkt, cmd, fmt, siz, width, i) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(cmd, 24, 8) | _SHIFTL(fmt, 21, 3) | \ + _SHIFTL(siz, 19, 2) | _SHIFTL((width)-1, 0, 12); \ + _g->words.w1 = (uintptr_t)(i); \ +} + +#define gsSetImage(cmd, fmt, siz, width, i) \ +{{ \ + _SHIFTL(cmd, 24, 8) | _SHIFTL(fmt, 21, 3) | \ + _SHIFTL(siz, 19, 2) | _SHIFTL((width)-1, 0, 12), \ + (uintptr_t)(i) \ +}} + +#define gDPSetColorImage(pkt, f, s, w, i) gSetImage(pkt, G_SETCIMG, f, s, w, i) +#define gsDPSetColorImage(f, s, w, i) gsSetImage(G_SETCIMG, f, s, w, i) + + +/* use these for new code */ +#define gDPSetDepthImage(pkt, i) gSetImage(pkt, G_SETZIMG, 0, 0, 1, i) +#define gsDPSetDepthImage(i) gsSetImage(G_SETZIMG, 0, 0, 1, i) +/* kept for compatibility */ +#define gDPSetMaskImage(pkt, i) gDPSetDepthImage(pkt, i) +#define gsDPSetMaskImage(i) gsDPSetDepthImage(i) + +#define gDPSetTextureImage(pkt, f, s, w, i) gSetImage(pkt, G_SETTIMG, f, s, w, i) +#define gsDPSetTextureImage(f, s, w, i) gsSetImage(G_SETTIMG, f, s, w, i) + +/* + * RDP macros + */ + +#define gDPSetCombine(pkt, muxs0, muxs1) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_SETCOMBINE, 24, 8) | _SHIFTL(muxs0, 0, 24);\ + _g->words.w1 = (unsigned int)(muxs1); \ +} + +#define gsDPSetCombine(muxs0, muxs1) \ +{{ \ + _SHIFTL(G_SETCOMBINE, 24, 8) | _SHIFTL(muxs0, 0, 24), \ + (unsigned int)(muxs1) \ +}} + +#define GCCc0w0(saRGB0, mRGB0, saA0, mA0) \ + (_SHIFTL((saRGB0), 20, 4) | _SHIFTL((mRGB0), 15, 5) | \ + _SHIFTL((saA0), 12, 3) | _SHIFTL((mA0), 9, 3)) + +#define GCCc1w0(saRGB1, mRGB1) \ + (_SHIFTL((saRGB1), 5, 4) | _SHIFTL((mRGB1), 0, 5)) + +#define GCCc0w1(sbRGB0, aRGB0, sbA0, aA0) \ + (_SHIFTL((sbRGB0), 28, 4) | _SHIFTL((aRGB0), 15, 3) | \ + _SHIFTL((sbA0), 12, 3) | _SHIFTL((aA0), 9, 3)) + +#define GCCc1w1(sbRGB1, saA1, mA1, aRGB1, sbA1, aA1) \ + (_SHIFTL((sbRGB1), 24, 4) | _SHIFTL((saA1), 21, 3) | \ + _SHIFTL((mA1), 18, 3) | _SHIFTL((aRGB1), 6, 3) | \ + _SHIFTL((sbA1), 3, 3) | _SHIFTL((aA1), 0, 3)) + +#define gDPSetCombineLERP(pkt, a0, b0, c0, d0, Aa0, Ab0, Ac0, Ad0, \ + a1, b1, c1, d1, Aa1, Ab1, Ac1, Ad1) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_SETCOMBINE, 24, 8) | \ + _SHIFTL(GCCc0w0(G_CCMUX_##a0, G_CCMUX_##c0, \ + G_ACMUX_##Aa0, G_ACMUX_##Ac0) | \ + GCCc1w0(G_CCMUX_##a1, G_CCMUX_##c1), \ + 0, 24); \ + _g->words.w1 = (unsigned int)(GCCc0w1(G_CCMUX_##b0, \ + G_CCMUX_##d0, \ + G_ACMUX_##Ab0, \ + G_ACMUX_##Ad0) | \ + GCCc1w1(G_CCMUX_##b1, \ + G_ACMUX_##Aa1, \ + G_ACMUX_##Ac1, \ + G_CCMUX_##d1, \ + G_ACMUX_##Ab1, \ + G_ACMUX_##Ad1)); \ +} + +#define gsDPSetCombineLERP(a0, b0, c0, d0, Aa0, Ab0, Ac0, Ad0, \ + a1, b1, c1, d1, Aa1, Ab1, Ac1, Ad1) \ +{{ \ + _SHIFTL(G_SETCOMBINE, 24, 8) | \ + _SHIFTL(GCCc0w0(G_CCMUX_##a0, G_CCMUX_##c0, \ + G_ACMUX_##Aa0, G_ACMUX_##Ac0) | \ + GCCc1w0(G_CCMUX_##a1, G_CCMUX_##c1), 0, 24), \ + (unsigned int)(GCCc0w1(G_CCMUX_##b0, G_CCMUX_##d0, \ + G_ACMUX_##Ab0, G_ACMUX_##Ad0) | \ + GCCc1w1(G_CCMUX_##b1, G_ACMUX_##Aa1, \ + G_ACMUX_##Ac1, G_CCMUX_##d1, \ + G_ACMUX_##Ab1, G_ACMUX_##Ad1)) \ +}} + +/* + * SetCombineMode macros are NOT redunant. It allow the C preprocessor + * to substitute single parameter which includes commas in the token and + * rescan for higher parameter count macro substitution. + * + * eg. gsDPSetCombineMode(G_CC_MODULATE, G_CC_MODULATE) turns into + * gsDPSetCombineLERP(TEXEL0, 0, SHADE, 0, TEXEL0, 0, SHADE, 0, + * TEXEL0, 0, SHADE, 0, TEXEL0, 0, SHADE, 0) + */ + +#define gDPSetCombineMode(pkt, a, b) gDPSetCombineLERP(pkt, a, b) +#define gsDPSetCombineMode(a, b) gsDPSetCombineLERP(a, b) + +#define gDPSetColor(pkt, c, d) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(c, 24, 8); \ + _g->words.w1 = (unsigned int)(d); \ +} + +#define gsDPSetColor(c, d) \ +{{ \ + _SHIFTL(c, 24, 8), (unsigned int)(d) \ +}} + +#define DPRGBColor(pkt, cmd, r, g, b, a) \ + gDPSetColor(pkt, cmd, \ + (_SHIFTL(r, 24, 8) | _SHIFTL(g, 16, 8) | \ + _SHIFTL(b, 8, 8) | _SHIFTL(a, 0, 8))) +#define sDPRGBColor(cmd, r, g, b, a) \ + gsDPSetColor(cmd, \ + (_SHIFTL(r, 24, 8) | _SHIFTL(g, 16, 8) | \ + _SHIFTL(b, 8, 8) | _SHIFTL(a, 0, 8))) + +#define gDPSetEnvColor(pkt, r, g, b, a) \ + DPRGBColor(pkt, G_SETENVCOLOR, r,g,b,a) +#define gsDPSetEnvColor(r, g, b, a) \ + sDPRGBColor(G_SETENVCOLOR, r,g,b,a) +#define gDPSetBlendColor(pkt, r, g, b, a) \ + DPRGBColor(pkt, G_SETBLENDCOLOR, r,g,b,a) +#define gsDPSetBlendColor(r, g, b, a) \ + sDPRGBColor(G_SETBLENDCOLOR, r,g,b,a) +#define gDPSetFogColor(pkt, r, g, b, a) \ + DPRGBColor(pkt, G_SETFOGCOLOR, r,g,b,a) +#define gsDPSetFogColor(r, g, b, a) \ + sDPRGBColor(G_SETFOGCOLOR, r,g,b,a) +#define gDPSetFillColor(pkt, d) \ + gDPSetColor(pkt, G_SETFILLCOLOR, (d)) +#define gsDPSetFillColor(d) \ + gsDPSetColor(G_SETFILLCOLOR, (d)) + +#define gDPSetPrimDepth(pkt, z, dz) \ + gDPSetColor(pkt, G_SETPRIMDEPTH, \ + _SHIFTL(z, 16, 16) | _SHIFTL(dz, 0, 16)) +#define gsDPSetPrimDepth(z, dz) \ + gsDPSetColor(G_SETPRIMDEPTH, _SHIFTL(z, 16, 16) | \ + _SHIFTL(dz, 0, 16)) + +#define gDPSetPrimColor(pkt, m, l, r, g, b, a) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_SETPRIMCOLOR, 24, 8) | \ + _SHIFTL(m, 8, 8) | _SHIFTL(l, 0, 8)); \ + _g->words.w1 = (_SHIFTL(r, 24, 8) | _SHIFTL(g, 16, 8) | \ + _SHIFTL(b, 8, 8) | _SHIFTL(a, 0, 8)); \ +} + +#define gsDPSetPrimColor(m, l, r, g, b, a) \ +{{ \ + (_SHIFTL(G_SETPRIMCOLOR, 24, 8) | _SHIFTL(m, 8, 8) | \ + _SHIFTL(l, 0, 8)), \ + (_SHIFTL(r, 24, 8) | _SHIFTL(g, 16, 8) | _SHIFTL(b, 8, 8) | \ + _SHIFTL(a, 0, 8)) \ +}} + +/* + * gDPSetOtherMode (This is for expert user.) + * + * This command makes all othermode parameters set. + * Do not use this command in the same DL with another g*SPSetOtherMode DLs. + * + * [Usage] + * gDPSetOtherMode(pkt, modeA, modeB) + * + * 'modeA' is described all parameters of GroupA GBI command. + * 'modeB' is also described all parameters of GroupB GBI command. + * + * GroupA: + * gDPPipelineMode, gDPSetCycleType, gSPSetTexturePersp, + * gDPSetTextureDetail, gDPSetTextureLOD, gDPSetTextureLUT, + * gDPSetTextureFilter, gDPSetTextureConvert, gDPSetCombineKey, + * gDPSetColorDither, gDPSetAlphaDither + * + * GroupB: + * gDPSetAlphaCompare, gDPSetDepthSource, gDPSetRenderMode + * + * Use 'OR' operation to get modeA and modeB. + * + * modeA = G_PM_* | G_CYC_* | G_TP_* | G_TD_* | G_TL_* | G_TT_* | G_TF_* + * G_TC_* | G_CK_* | G_CD_* | G_AD_*; + * + * modeB = G_AC_* | G_ZS_* | G_RM_* | G_RM_*2; + */ +#define gDPSetOtherMode(pkt, mode0, mode1) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_RDPSETOTHERMODE,24,8)|_SHIFTL(mode0,0,24);\ + _g->words.w1 = (unsigned int)(mode1); \ +} + +#define gsDPSetOtherMode(mode0, mode1) \ +{{ \ + _SHIFTL(G_RDPSETOTHERMODE,24,8)|_SHIFTL(mode0,0,24), \ + (unsigned int)(mode1) \ +}} + +/* + * Texturing macros + */ + +/* These are also defined defined above for Sprite Microcode */ + +#define G_TX_LOADTILE 7 +#define G_TX_RENDERTILE 0 + +#define G_TX_NOMIRROR 0 +#define G_TX_WRAP 0 +#define G_TX_MIRROR 0x1 +#define G_TX_CLAMP 0x2 +#define G_TX_NOMASK 0 +#define G_TX_NOLOD 0 + + +#ifndef MAX +#define MAX(a, b) ((a) > (b) ? (a) : (b)) +#endif + +#ifndef MIN +#define MIN(a, b) ((a) < (b) ? (a) : (b)) +#endif +/* + * Dxt is the inverse of the number of 64-bit words in a line of + * the texture being loaded using the load_block command. If + * there are any 1's to the right of the 11th fractional bit, + * dxt should be rounded up. The following macros accomplish + * this. The 4b macros are a special case since 4-bit textures + * are loaded as 8-bit textures. Dxt is fixed point 1.11. RJM + */ +#define G_TX_DXT_FRAC 11 + +/* + * For RCP 2.0, the maximum number of texels that can be loaded + * using a load_block command is 2048. In order to load the total + * 4kB of Tmem, change the texel size when loading to be G_IM_SIZ_16b, + * then change the tile to the proper texel size after the load. + * The g*DPLoadTextureBlock macros already do this, so this change + * will be transparent if you use these macros. If you use + * the g*DPLoadBlock macros directly, you will need to handle this + * tile manipulation yourself. RJM. + */ +#ifdef _HW_VERSION_1 +#define G_TX_LDBLK_MAX_TXL 4095 +#else +#define G_TX_LDBLK_MAX_TXL 2047 +#endif /* _HW_VERSION_1 */ + +#define TXL2WORDS(txls, b_txl) MAX(1, ((txls)*(b_txl)/8)) +#define CALC_DXT(width, b_txl) \ + (((1 << G_TX_DXT_FRAC) + TXL2WORDS(width, b_txl) - 1) / \ + TXL2WORDS(width, b_txl)) + +#define TXL2WORDS_4b(txls) MAX(1, ((txls)/16)) +#define CALC_DXT_4b(width) \ + (((1 << G_TX_DXT_FRAC) + TXL2WORDS_4b(width) - 1) / \ + TXL2WORDS_4b(width)) + +#define gDPLoadTileGeneric(pkt, c, tile, uls, ult, lrs, lrt) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(c, 24, 8) | _SHIFTL(uls, 12, 12) | \ + _SHIFTL(ult, 0, 12); \ + _g->words.w1 = _SHIFTL(tile, 24, 3) | _SHIFTL(lrs, 12, 12) | \ + _SHIFTL(lrt, 0, 12); \ +} + +#define gsDPLoadTileGeneric(c, tile, uls, ult, lrs, lrt) \ +{{ \ + _SHIFTL(c, 24, 8) | _SHIFTL(uls, 12, 12) | _SHIFTL(ult, 0, 12), \ + _SHIFTL(tile, 24, 3) | _SHIFTL(lrs, 12, 12) | _SHIFTL(lrt, 0, 12)\ +}} + +#define gDPSetTileSize(pkt, t, uls, ult, lrs, lrt) \ + gDPLoadTileGeneric(pkt, G_SETTILESIZE, t, uls, ult, lrs, lrt) +#define gsDPSetTileSize(t, uls, ult, lrs, lrt) \ + gsDPLoadTileGeneric(G_SETTILESIZE, t, uls, ult, lrs, lrt) +#define gDPLoadTile(pkt, t, uls, ult, lrs, lrt) \ + gDPLoadTileGeneric(pkt, G_LOADTILE, t, uls, ult, lrs, lrt) +#define gsDPLoadTile(t, uls, ult, lrs, lrt) \ + gsDPLoadTileGeneric(G_LOADTILE, t, uls, ult, lrs, lrt) + +#define gDPSetTile(pkt, fmt, siz, line, tmem, tile, palette, cmt, \ + maskt, shiftt, cms, masks, shifts) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_SETTILE, 24, 8) | _SHIFTL(fmt, 21, 3) |\ + _SHIFTL(siz, 19, 2) | _SHIFTL(line, 9, 9) | \ + _SHIFTL(tmem, 0, 9); \ + _g->words.w1 = _SHIFTL(tile, 24, 3) | _SHIFTL(palette, 20, 4) | \ + _SHIFTL(cmt, 18, 2) | _SHIFTL(maskt, 14, 4) | \ + _SHIFTL(shiftt, 10, 4) |_SHIFTL(cms, 8, 2) | \ + _SHIFTL(masks, 4, 4) | _SHIFTL(shifts, 0, 4); \ +} + +#define gsDPSetTile(fmt, siz, line, tmem, tile, palette, cmt, \ + maskt, shiftt, cms, masks, shifts) \ +{{ \ + (_SHIFTL(G_SETTILE, 24, 8) | _SHIFTL(fmt, 21, 3) | \ + _SHIFTL(siz, 19, 2) | _SHIFTL(line, 9, 9) | _SHIFTL(tmem, 0, 9)),\ + (_SHIFTL(tile, 24, 3) | _SHIFTL(palette, 20, 4) | \ + _SHIFTL(cmt, 18, 2) | _SHIFTL(maskt, 14, 4) | \ + _SHIFTL(shiftt, 10, 4) | _SHIFTL(cms, 8, 2) | \ + _SHIFTL(masks, 4, 4) | _SHIFTL(shifts, 0, 4)) \ +}} + +/* + * For RCP 2.0, the maximum number of texels that can be loaded + * using a load_block command is 2048. In order to load the total + * 4kB of Tmem, change the texel size when loading to be G_IM_SIZ_16b, + * then change the tile to the proper texel size after the load. + * The g*DPLoadTextureBlock macros already do this, so this change + * will be transparent if you use these macros. If you use + * the g*DPLoadBlock macros directly, you will need to handle this + * tile manipulation yourself. RJM. + */ +#define gDPLoadBlock(pkt, tile, uls, ult, lrs, dxt) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_LOADBLOCK, 24, 8) | \ + _SHIFTL(uls, 12, 12) | _SHIFTL(ult, 0, 12)); \ + _g->words.w1 = (_SHIFTL(tile, 24, 3) | \ + _SHIFTL((MIN(lrs,G_TX_LDBLK_MAX_TXL)), 12, 12) |\ + _SHIFTL(dxt, 0, 12)); \ +} + +#define gsDPLoadBlock(tile, uls, ult, lrs, dxt) \ +{{ \ + (_SHIFTL(G_LOADBLOCK, 24, 8) | _SHIFTL(uls, 12, 12) | \ + _SHIFTL(ult, 0, 12)), \ + (_SHIFTL(tile, 24, 3) | \ + _SHIFTL((MIN(lrs,G_TX_LDBLK_MAX_TXL)), 12, 12) | \ + _SHIFTL(dxt, 0, 12)) \ +}} + +#define gDPLoadTLUTCmd(pkt, tile, count) \ +{ \ + Gfx *_g = (Gfx *)pkt; \ + \ + _g->words.w0 = _SHIFTL(G_LOADTLUT, 24, 8); \ + _g->words.w1 = _SHIFTL((tile), 24, 3) | _SHIFTL((count), 14, 10);\ +} + +#define gsDPLoadTLUTCmd(tile, count) \ +{{ \ + _SHIFTL(G_LOADTLUT, 24, 8), \ + _SHIFTL((tile), 24, 3) | _SHIFTL((count), 14, 10) \ +}} + +#define gDPLoadTextureBlock(pkt, timg, fmt, siz, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ +{ \ + gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \ + gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \ + 0 , cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width)*(height) + siz##_INCR) >> siz##_SHIFT) -1, \ + CALC_DXT(width, siz##_BYTES)); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, siz, \ + (((width) * siz##_LINE_BYTES)+7)>>3, 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ +} + +#define gDPLoadTextureBlockYuv(pkt, timg, fmt, siz, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ +{ \ + gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \ + gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \ + 0 , cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width)*(height) + siz##_INCR) >> siz##_SHIFT) -1, \ + CALC_DXT(width, siz##_BYTES)); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, siz, \ + (((width) * 1)+7)>>3, 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ +} + +/* Load fix rww 27jun95 */ +/* The S at the end means odd lines are already word Swapped */ + +#define gDPLoadTextureBlockS(pkt, timg, fmt, siz, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ +{ \ + gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \ + gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \ + 0 , cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1,0); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, siz, \ + (((width) * siz##_LINE_BYTES)+7)>>3, 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ +} + +/* + * Allow tmem address and render tile to be specified. + * The S at the end means odd lines are already word Swapped + */ +#define gDPLoadMultiBlockS(pkt, timg, tmem, rtile, fmt, siz, width, \ + height, pal, cms, cmt, masks, maskt, shifts, shiftt) \ +{ \ + gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \ + gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \ + 0 , cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1,0); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, siz, \ + (((width) * siz##_LINE_BYTES)+7)>>3, tmem, \ + rtile, pal, cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPSetTileSize(pkt, rtile, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ +} + + +#define gDPLoadTextureBlockYuvS(pkt, timg, fmt, siz, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ +{ \ + gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \ + gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \ + 0 , cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1,0); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, siz, \ + (((width) * 1)+7)>>3, 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ +} + +/* + * allows tmem address to be specified + */ +#define _gDPLoadTextureBlock(pkt, timg, tmem, fmt, siz, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ +{ \ + gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \ + gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \ + 0, cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \ + CALC_DXT(width, siz##_BYTES)); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, siz, (((width) * siz##_LINE_BYTES)+7)>>3, \ + tmem, G_TX_RENDERTILE, pal, cmt, \ + maskt, shiftt, cms, masks, shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ +} + +/* + * allows tmem address and render tile to be specified + */ +#define _gDPLoadTextureBlockTile(pkt, timg, tmem, rtile, fmt, siz, width, \ + height, pal, cms, cmt, masks, maskt, shifts, shiftt) \ +{ \ + gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \ + gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, 0,\ + cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \ + CALC_DXT(width, siz##_BYTES)); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, siz, (((width) * siz##_LINE_BYTES)+7)>>3, \ + tmem, rtile, pal, cmt, \ + maskt, shiftt, cms, masks, shifts); \ + gDPSetTileSize(pkt, rtile, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ +} + +/* + * allows tmem address and render tile to be specified + */ +#define gDPLoadMultiBlock(pkt, timg, tmem, rtile, fmt, siz, width, \ + height, pal, cms, cmt, masks, maskt, shifts, shiftt) \ +{ \ + gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \ + gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, 0,\ + cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \ + CALC_DXT(width, siz##_BYTES)); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, siz, (((width) * siz##_LINE_BYTES)+7)>>3, \ + tmem, rtile, pal, cmt, \ + maskt, shiftt, cms, masks, shifts); \ + gDPSetTileSize(pkt, rtile, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ +} + +#define gsDPLoadTextureBlock(timg, fmt, siz, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ + \ + gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \ + gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, 0, \ + G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, \ + masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \ + (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \ + CALC_DXT(width, siz##_BYTES)), \ + gsDPPipeSync(), \ + gsDPSetTile(fmt, siz, ((((width) * siz##_LINE_BYTES)+7)>>3), 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) + +/* Here is the static form of the pre-swapped texture block loading */ +/* See gDPLoadTextureBlockS() for reference. Basically, just don't + calculate DxT, use 0 */ + +#define gsDPLoadTextureBlockS(timg, fmt, siz, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ + \ + gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \ + gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, 0 , \ + cmt, maskt,shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \ + (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, 0 ),\ + gsDPPipeSync(), \ + gsDPSetTile(fmt, siz, ((((width) * siz##_LINE_BYTES)+7)>>3), 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) + +/* + * Allow tmem address to be specified + */ +#define _gsDPLoadTextureBlock(timg, tmem, fmt, siz, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ + \ + gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \ + gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \ + 0 , cmt, maskt, shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \ + (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \ + CALC_DXT(width, siz##_BYTES)), \ + gsDPPipeSync(), \ + gsDPSetTile(fmt, siz, \ + ((((width) * siz##_LINE_BYTES)+7)>>3), tmem, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) + + +/* + * Allow tmem address and render_tile to be specified + */ +#define _gsDPLoadTextureBlockTile(timg, tmem, rtile, fmt, siz, width, \ + height, pal, cms, cmt, masks, maskt, shifts, shiftt) \ + \ + gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \ + gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \ + 0 , cmt, maskt, shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \ + (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \ + CALC_DXT(width, siz##_BYTES)), \ + gsDPPipeSync(), \ + gsDPSetTile(fmt, siz, \ + ((((width) * siz##_LINE_BYTES)+7)>>3), tmem, \ + rtile, pal, cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPSetTileSize(rtile, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) + + +/* + * Allow tmem address and render_tile to be specified, useful when loading + * mutilple tiles at a time. + */ +#define gsDPLoadMultiBlock(timg, tmem, rtile, fmt, siz, width, \ + height, pal, cms, cmt, masks, maskt, shifts, shiftt) \ + \ + gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \ + gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \ + 0 , cmt, maskt, shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \ + (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \ + CALC_DXT(width, siz##_BYTES)), \ + gsDPPipeSync(), \ + gsDPSetTile(fmt, siz, \ + ((((width) * siz##_LINE_BYTES)+7)>>3), tmem, \ + rtile, pal, cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPSetTileSize(rtile, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) + +/* + * Allows tmem and render tile to be specified. Useful when loading + * several tiles at a time. + * + * Here is the static form of the pre-swapped texture block loading + * See gDPLoadTextureBlockS() for reference. Basically, just don't + * calculate DxT, use 0 + */ + +#define gsDPLoadMultiBlockS(timg, tmem, rtile, fmt, siz, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ + \ + gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \ + gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, 0 , \ + cmt, maskt,shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \ + (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, 0 ),\ + gsDPPipeSync(), \ + gsDPSetTile(fmt, siz, ((((width) * siz##_LINE_BYTES)+7)>>3), tmem,\ + rtile, pal, cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPSetTileSize(rtile, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) + + +#define gDPLoadTextureBlock_4b(pkt, timg, fmt, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ +{ \ + gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0, \ + cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width)*(height)+3)>>2)-1, \ + CALC_DXT_4b(width)); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ +} + +/* Load fix rww 27jun95 */ +/* The S at the end means odd lines are already word Swapped */ + +#define gDPLoadTextureBlock_4bS(pkt, timg, fmt, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ +{ \ + gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0, \ + cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width)*(height)+3)>>2)-1, 0 ); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ +} + +/* + * 4-bit load block. Useful when loading multiple tiles + */ +#define gDPLoadMultiBlock_4b(pkt, timg, tmem, rtile, fmt, width, height,\ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ +{ \ + gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, 0, \ + cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width)*(height)+3)>>2)-1, \ + CALC_DXT_4b(width)); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), tmem, \ + rtile, pal, cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPSetTileSize(pkt, rtile, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ +} + +/* + * 4-bit load block. Allows tmem and render tile to be specified. Useful when + * loading multiple tiles. The S means odd lines are already word swapped. + */ +#define gDPLoadMultiBlock_4bS(pkt, timg, tmem, rtile, fmt, width, height,\ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ +{ \ + gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, 0, \ + cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width)*(height)+3)>>2)-1, 0 ); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), tmem, \ + rtile, pal, cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPSetTileSize(pkt, rtile, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ +} + + +#define _gDPLoadTextureBlock_4b(pkt, timg, tmem, fmt, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ +{ \ + gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, 0, \ + cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width)*(height)+3)>>2)-1, \ + CALC_DXT_4b(width)); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), tmem, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ +} + +#define gsDPLoadTextureBlock_4b(timg, fmt, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ + \ + gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \ + gsDPSetTile(fmt, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0 , cmt, \ + maskt, shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, (((width)*(height)+3)>>2)-1, \ + CALC_DXT_4b(width)), \ + gsDPPipeSync(), \ + gsDPSetTile(fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) + +#define gsDPLoadTextureBlock_4bS(timg, fmt, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ + \ + gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \ + gsDPSetTile(fmt, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0 , cmt, \ + maskt, shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, (((width)*(height)+3)>>2)-1,0),\ + gsDPPipeSync(), \ + gsDPSetTile(fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) + +/* + * 4-bit load block. Allows tmem address and render tile to be specified. + * Useful when loading multiple tiles. + */ +#define gsDPLoadMultiBlock_4b(timg, tmem, rtile, fmt, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ + \ + gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \ + gsDPSetTile(fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, 0 , cmt, \ + maskt, shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, (((width)*(height)+3)>>2)-1, \ + CALC_DXT_4b(width)), \ + gsDPPipeSync(), \ + gsDPSetTile(fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), tmem, \ + rtile, pal, cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPSetTileSize(rtile, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) + + +/* + * 4-bit load block. Allows tmem address and render tile to be specified. + * Useful when loading multiple tiles. S means odd lines are already swapped. + */ +#define gsDPLoadMultiBlock_4bS(timg, tmem, rtile, fmt, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ + \ + gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \ + gsDPSetTile(fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, 0 , cmt, \ + maskt, shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, (((width)*(height)+3)>>2)-1,0),\ + gsDPPipeSync(), \ + gsDPSetTile(fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), tmem, \ + rtile, pal, cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPSetTileSize(rtile, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) + + +/* + * Allows tmem address to be specified + */ +#define _gsDPLoadTextureBlock_4b(timg, tmem, fmt, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ + \ + gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \ + gsDPSetTile(fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, 0 , cmt, \ + maskt, shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, (((width)*(height)+3)>>2)-1, \ + CALC_DXT_4b(width)), \ + gsDPPipeSync(), \ + gsDPSetTile(fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), tmem, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) + +#ifndef _HW_VERSION_1 + +#define gDPLoadTextureTile(pkt, timg, fmt, siz, width, height, \ + uls, ult, lrs, lrt, pal, \ + cms, cmt, masks, maskt, shifts, shiftt) \ +{ \ + gDPSetTextureImage(pkt, fmt, siz, width, timg); \ + gDPSetTile(pkt, fmt, siz, \ + (((((lrs)-(uls)+1) * siz##_TILE_BYTES)+7)>>3), 0, \ + G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPLoadSync(pkt); \ + gDPLoadTile( pkt, G_TX_LOADTILE, \ + (uls)<>3), 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, \ + (uls)<>3), tmem, \ + G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPLoadSync(pkt); \ + gDPLoadTile( pkt, G_TX_LOADTILE, \ + (uls)<>3), tmem, \ + rtile, pal, cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPSetTileSize(pkt, rtile, \ + (uls)<>3), 0, \ + G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPLoadSync(), \ + gsDPLoadTile( G_TX_LOADTILE, \ + (uls)<>3), 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks,\ + shifts), \ + gsDPSetTileSize(G_TX_RENDERTILE, \ + (uls)<>3), \ + tmem, G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, \ + masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadTile( G_TX_LOADTILE, \ + (uls)<>3), \ + tmem, rtile, pal, cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPSetTileSize(rtile, \ + (uls)<>1), timg); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_8b, \ + (((((lrs)-(uls)+1)>>1)+7)>>3), 0, \ + G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPLoadSync(pkt); \ + gDPLoadTile( pkt, G_TX_LOADTILE, \ + (uls)<<(G_TEXTURE_IMAGE_FRAC-1), \ + (ult)<<(G_TEXTURE_IMAGE_FRAC), \ + (lrs)<<(G_TEXTURE_IMAGE_FRAC-1), \ + (lrt)<<(G_TEXTURE_IMAGE_FRAC)); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_4b, \ + (((((lrs)-(uls)+1)>>1)+7)>>3), 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, \ + masks, shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, \ + (uls)<>1), timg); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_8b, \ + (((((lrs)-(uls)+1)>>1)+7)>>3), tmem, \ + G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPLoadSync(pkt); \ + gDPLoadTile( pkt, G_TX_LOADTILE, \ + (uls)<<(G_TEXTURE_IMAGE_FRAC-1), \ + (ult)<<(G_TEXTURE_IMAGE_FRAC), \ + (lrs)<<(G_TEXTURE_IMAGE_FRAC-1), \ + (lrt)<<(G_TEXTURE_IMAGE_FRAC)); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_4b, \ + (((((lrs)-(uls)+1)>>1)+7)>>3), tmem, \ + rtile, pal, cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPSetTileSize(pkt, rtile, \ + (uls)<>1), timg), \ + gsDPSetTile(fmt, G_IM_SIZ_8b, (((((lrs)-(uls)+1)>>1)+7)>>3), 0, \ + G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPLoadSync(), \ + gsDPLoadTile( G_TX_LOADTILE, \ + (uls)<<(G_TEXTURE_IMAGE_FRAC-1), \ + (ult)<<(G_TEXTURE_IMAGE_FRAC), \ + (lrs)<<(G_TEXTURE_IMAGE_FRAC-1), \ + (lrt)<<(G_TEXTURE_IMAGE_FRAC)), \ + gsDPPipeSync(), \ + gsDPSetTile(fmt, G_IM_SIZ_4b, (((((lrs)-(uls)+1)>>1)+7)>>3), 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPSetTileSize(G_TX_RENDERTILE, \ + (uls)<>1), timg), \ + gsDPSetTile(fmt, G_IM_SIZ_8b, (((((lrs)-(uls)+1)>>1)+7)>>3), \ + tmem, G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, \ + masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadTile( G_TX_LOADTILE, \ + (uls)<<(G_TEXTURE_IMAGE_FRAC-1), \ + (ult)<<(G_TEXTURE_IMAGE_FRAC), \ + (lrs)<<(G_TEXTURE_IMAGE_FRAC-1), \ + (lrt)<<(G_TEXTURE_IMAGE_FRAC)), \ + gsDPPipeSync(), \ + gsDPSetTile(fmt, G_IM_SIZ_4b, (((((lrs)-(uls)+1)>>1)+7)>>3), \ + tmem, rtile, pal, cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPSetTileSize(rtile, \ + (uls)<words.w0 = _SHIFTL(G_SETSCISSOR, 24, 8) | \ + _SHIFTL((int)((float)(ulx)*4.0F), 12, 12) | \ + _SHIFTL((int)((float)(uly)*4.0F), 0, 12); \ + _g->words.w1 = _SHIFTL(mode, 24, 2) | \ + _SHIFTL((int)((float)(lrx)*4.0F), 12, 12) | \ + _SHIFTL((int)((float)(lry)*4.0F), 0, 12); \ +} + + +#define gDPSetScissorFrac(pkt, mode, ulx, uly, lrx, lry) \ +{ \ + Gfx *_g = (Gfx *)pkt; \ + \ + _g->words.w0 = _SHIFTL(G_SETSCISSOR, 24, 8) | \ + _SHIFTL((int)((ulx)), 12, 12) | \ + _SHIFTL((int)((uly)), 0, 12); \ + _g->words.w1 = _SHIFTL(mode, 24, 2) | \ + _SHIFTL((int)((lrx)), 12, 12) | \ + _SHIFTL((int)((lry)), 0, 12); \ +} + +#define gsDPSetScissor(mode, ulx, uly, lrx, lry) \ +{{ \ + _SHIFTL(G_SETSCISSOR, 24, 8) | \ + _SHIFTL((int)((float)(ulx)*4.0F), 12, 12) | \ + _SHIFTL((int)((float)(uly)*4.0F), 0, 12), \ + _SHIFTL(mode, 24, 2) | \ + _SHIFTL((int)((float)(lrx)*4.0F), 12, 12) | \ + _SHIFTL((int)((float)(lry)*4.0F), 0, 12) \ +}} + +#define gsDPSetScissorFrac(mode, ulx, uly, lrx, lry) \ +{{ \ + _SHIFTL(G_SETSCISSOR, 24, 8) | \ + _SHIFTL((int)((ulx)), 12, 12) | \ + _SHIFTL((int)((uly)), 0, 12), \ + _SHIFTL(mode, 24, 2) | \ + _SHIFTL((int)(lrx), 12, 12) | \ + _SHIFTL((int)(lry), 0, 12) \ +}} + +/* Fraction never used in fill */ +#ifdef F3DEX_GBI_2E +#define gDPFillRectangle(pkt, ulx, uly, lrx, lry) \ +{ \ + Gfx *_g0 = (Gfx *)(pkt), *_g1 = (Gfx *)(pkt); \ + _g0->words.w0 = _SHIFTL(G_FILLRECT, 24, 8) | \ + _SHIFTL((lrx), 2, 22); \ + _g0->words.w1 = _SHIFTL((lry), 2, 22); \ + _g1->words.w0 = _SHIFTL((ulx), 2, 22); \ + _g1->words.w1 = _SHIFTL((uly), 2, 22); \ +} +#define gsDPFillRectangle(ulx, uly, lrx, lry) \ +{{ \ + (_SHIFTL(G_FILLRECT, 24, 8) | _SHIFTL((lrx), 2, 22)), \ + _SHIFTL((lry), 2, 22), \ +}}, \ +{{ \ + _SHIFTL((ulx), 2, 22), \ + _SHIFTL((uly), 2, 22), \ +}} +#else +#define gDPFillRectangle(pkt, ulx, uly, lrx, lry) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_FILLRECT, 24, 8) | \ + _SHIFTL((lrx), 14, 10) | _SHIFTL((lry), 2, 10));\ + _g->words.w1 = (_SHIFTL((ulx), 14, 10) | _SHIFTL((uly), 2, 10));\ +} +#define gsDPFillRectangle(ulx, uly, lrx, lry) \ +{{ \ + (_SHIFTL(G_FILLRECT, 24, 8) | _SHIFTL((lrx), 14, 10) | \ + _SHIFTL((lry), 2, 10)), \ + (_SHIFTL((ulx), 14, 10) | _SHIFTL((uly), 2, 10)) \ +}} +#endif + +/* like gDPFillRectangle but accepts negative arguments */ +#ifndef F3DEX_GBI_2E +#define gDPScisFillRectangle(pkt, ulx, uly, lrx, lry) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_FILLRECT, 24, 8) | \ + _SHIFTL(MAX((lrx),0), 14, 10) | \ + _SHIFTL(MAX((lry),0), 2, 10)); \ + _g->words.w1 = (_SHIFTL(MAX((ulx),0), 14, 10) | \ + _SHIFTL(MAX((uly),0), 2, 10)); \ +} +#endif + +#define gDPSetConvert(pkt, k0, k1, k2, k3, k4, k5) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_SETCONVERT, 24, 8) | \ + _SHIFTL(k0, 13, 9) | _SHIFTL(k1, 4, 9) | \ + _SHIFTR(k2, 5, 4)); \ + _g->words.w1 = (_SHIFTL(k2, 27, 5) | _SHIFTL(k3, 18, 9) | \ + _SHIFTL(k4, 9, 9) | _SHIFTL(k5, 0, 9)); \ +} + +#define gsDPSetConvert(k0, k1, k2, k3, k4, k5) \ +{{ \ + (_SHIFTL(G_SETCONVERT, 24, 8) | \ + _SHIFTL(k0, 13, 9) | _SHIFTL(k1, 4, 9) | _SHIFTR(k2, 5, 4)), \ + (_SHIFTL(k2, 27, 5) | _SHIFTL(k3, 18, 9) | _SHIFTL(k4, 9, 9) | \ + _SHIFTL(k5, 0, 9)) \ +}} + +#define gDPSetKeyR(pkt, cR, sR, wR) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_SETKEYR, 24, 8); \ + _g->words.w1 = (_SHIFTL(wR, 16, 12) | _SHIFTL(cR, 8, 8) | \ + _SHIFTL(sR, 0, 8)); \ +} + +#define gsDPSetKeyR(cR, sR, wR) \ +{{ \ + _SHIFTL(G_SETKEYR, 24, 8), \ + _SHIFTL(wR, 16, 12) | _SHIFTL(cR, 8, 8) | _SHIFTL(sR, 0, 8) \ +}} + +#define gDPSetKeyGB(pkt, cG, sG, wG, cB, sB, wB) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_SETKEYGB, 24, 8) | \ + _SHIFTL(wG, 12, 12) | _SHIFTL(wB, 0, 12)); \ + _g->words.w1 = (_SHIFTL(cG, 24, 8) | _SHIFTL(sG, 16, 8) | \ + _SHIFTL(cB, 8, 8) | _SHIFTL(sB, 0, 8)); \ +} + +#define gsDPSetKeyGB(cG, sG, wG, cB, sB, wB) \ +{{ \ + (_SHIFTL(G_SETKEYGB, 24, 8) | _SHIFTL(wG, 12, 12) | \ + _SHIFTL(wB, 0, 12)), \ + (_SHIFTL(cG, 24, 8) | _SHIFTL(sG, 16, 8) | _SHIFTL(cB, 8, 8) | \ + _SHIFTL(sB, 0, 8)) \ +}} + +#define gDPNoParam(pkt, cmd) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(cmd, 24, 8); \ + _g->words.w1 = 0; \ +} + +#define gsDPNoParam(cmd) \ +{{ \ + _SHIFTL(cmd, 24, 8), 0 \ +}} + +#define gDPParam(pkt, cmd, param) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(cmd, 24, 8); \ + _g->words.w1 = (param); \ +} + +#define gsDPParam(cmd, param) \ +{{ \ + _SHIFTL(cmd, 24, 8), (param) \ +}} + +/* Notice that textured rectangles are 128-bit commands, therefore + * gsDPTextureRectangle() should not be used in display lists + * under normal circumstances (use gsSPTextureRectangle()). + * That is also why there is no gDPTextureRectangle() macros. + */ +#define gsDPTextureRectangle(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ +{{ \ + (_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL(xh, 12, 12) | \ + _SHIFTL(yh, 0, 12)), \ + (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | _SHIFTL(yl, 0, 12)), \ +}}, \ +{{ \ + _SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16), \ + _SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16) \ +}} + +#define gDPTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy)\ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + if (pkt); \ + _g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL(xh, 12, 12) | \ + _SHIFTL(yh, 0, 12)); \ + _g->words.w1 = (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | \ + _SHIFTL(yl, 0, 12)); \ + _g ++; \ + _g->words.w0 = (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16)); \ + _g->words.w1 = (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)); \ +} + +#define gsDPTextureRectangleFlip(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ +{{ \ + (_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) | \ + _SHIFTL(yh, 0, 12)), \ + (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | _SHIFTL(yl, 0, 12)), \ +}}, \ +{{ \ + _SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16), \ + _SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16) \ +}} + +#define gDPTextureRectangleFlip(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy)\ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + if (pkt); \ + _g->words.w0 = (_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) | \ + _SHIFTL(yh, 0, 12)); \ + _g->words.w1 = (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | \ + _SHIFTL(yl, 0, 12)); \ + _g ++; \ + _g->words.w0 = (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16)); \ + _g->words.w1 = (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)); \ +} + +#ifdef F3D_OLD +# define gSPTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy)\ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL(xh, 12, 12) | \ + _SHIFTL(yh, 0, 12)); \ + _g->words.w1 = (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | \ + _SHIFTL(yl, 0, 12)); \ + gImmp1(pkt, G_RDPHALF_2, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))); \ + gImmp1(pkt, G_RDPHALF_CONT, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)));\ +} + +#define gsSPTextureRectangle(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ + {{(_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL(xh, 12, 12) | _SHIFTL(yh, 0, 12)),\ + (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | _SHIFTL(yl, 0, 12))}}, \ + gsImmp1(G_RDPHALF_2, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))), \ + gsImmp1(G_RDPHALF_CONT, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16))) + +/* like gSPTextureRectangle but accepts negative position arguments */ +# define gSPScisTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | \ + _SHIFTL(MAX((s16)(xh),0), 12, 12) | \ + _SHIFTL(MAX((s16)(yh),0), 0, 12)); \ + _g->words.w1 = (_SHIFTL((tile), 24, 3) | \ + _SHIFTL(MAX((s16)(xl),0), 12, 12) | \ + _SHIFTL(MAX((s16)(yl),0), 0, 12)); \ + gImmp1(pkt, G_RDPHALF_2, \ + (_SHIFTL(((s) - \ + (((s16)(xl) < 0) ? \ + (((s16)(dsdx) < 0) ? \ + (MAX((((s16)(xl)*(s16)(dsdx))>>7),0)) : \ + (MIN((((s16)(xl)*(s16)(dsdx))>>7),0))) : 0)), \ + 16, 16) | \ + _SHIFTL(((t) - \ + (((yl) < 0) ? \ + (((s16)(dtdy) < 0) ? \ + (MAX((((s16)(yl)*(s16)(dtdy))>>7),0)) : \ + (MIN((((s16)(yl)*(s16)(dtdy))>>7),0))) : 0)), \ + 0, 16))); \ + gImmp1(pkt, G_RDPHALF_CONT, (_SHIFTL((dsdx), 16, 16) | \ + _SHIFTL((dtdy), 0, 16))); \ +} + +# define gsSPTextureRectangleFlip(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ + {{(_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) | \ + _SHIFTL(yh, 0, 12)), \ + (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | _SHIFTL(yl, 0, 12))}}, \ + gsImmp1(G_RDPHALF_2, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))), \ + gsImmp1(G_RDPHALF_CONT, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16))) + +# define gSPTextureRectangleFlip(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) |\ + _SHIFTL(yh, 0, 12)); \ + _g->words.w1 = (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | \ + _SHIFTL(yl, 0, 12)); \ + gImmp1(pkt, G_RDPHALF_2, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))); \ + gImmp1(pkt, G_RDPHALF_CONT, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16))); \ +} +#elif defined(F3DEX_GBI_2E) +# define gSPTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy)\ +{ \ + Gfx *_g0 = (Gfx *)(pkt), *_g1 = (Gfx *)(pkt), *_g2 = (Gfx *)(pkt); \ + \ + _g0->words.w0 = _SHIFTL(G_TEXRECT, 24, 8) | \ + _SHIFTL((xh), 0, 24); \ + _g0->words.w1 = _SHIFTL((yh), 0, 24); \ + _g1->words.w0 = (_SHIFTL(tile, 24, 3) | _SHIFTL((xl), 0, 24)); \ + _g1->words.w1 = _SHIFTL((yl), 0, 24); \ + _g2->words.w0 = (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16)); \ + _g2->words.w1 = (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)); \ +} + +# define gsSPTextureRectangle(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ +{{ \ + (_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL((xh), 0, 24)), \ + _SHIFTL((yh), 0, 24), \ +}}, \ +{{ \ + (_SHIFTL((tile), 24, 3) | _SHIFTL((xl), 0, 24)), \ + _SHIFTL((yl), 0, 24), \ +}}, \ +{{ \ + _SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16), \ + _SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16) \ +}} + +# define gSPTextureRectangleFlip(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ +{ \ + Gfx *_g0 = (Gfx *)(pkt), *_g1 = (Gfx *)(pkt), *_g2 = (Gfx *)(pkt); \ + \ + _g0->words.w0 = _SHIFTL(G_TEXRECTFLIP, 24, 8) | \ + _SHIFTL((xh), 0, 24); \ + _g0->words.w1 = _SHIFTL((yh), 0, 24); \ + _g1->words.w0 = (_SHIFTL(tile, 24, 3) | _SHIFTL((xl), 0, 24)); \ + _g1->words.w1 = _SHIFTL((yl), 0, 24); \ + _g2->words.w0 = (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16)); \ + _g2->words.w1 = (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)); \ +} +#else +# define gSPTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy)\ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL(xh, 12, 12) | \ + _SHIFTL(yh, 0, 12)); \ + _g->words.w1 = (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | \ + _SHIFTL(yl, 0, 12)); \ + gImmp1(pkt, G_RDPHALF_1, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))); \ + gImmp1(pkt, G_RDPHALF_2, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)));\ +} + +#define gsSPTextureRectangle(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ + {{(_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL(xh, 12, 12) | _SHIFTL(yh, 0, 12)),\ + (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | _SHIFTL(yl, 0, 12))}}, \ + gsImmp1(G_RDPHALF_1, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))), \ + gsImmp1(G_RDPHALF_2, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16))) + +/* like gSPTextureRectangle but accepts negative position arguments */ +# define gSPScisTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | \ + _SHIFTL(MAX((s16)(xh),0), 12, 12) | \ + _SHIFTL(MAX((s16)(yh),0), 0, 12)); \ + _g->words.w1 = (_SHIFTL((tile), 24, 3) | \ + _SHIFTL(MAX((s16)(xl),0), 12, 12) | \ + _SHIFTL(MAX((s16)(yl),0), 0, 12)); \ + gImmp1(pkt, G_RDPHALF_1, \ + (_SHIFTL(((s) - \ + (((s16)(xl) < 0) ? \ + (((s16)(dsdx) < 0) ? \ + (MAX((((s16)(xl)*(s16)(dsdx))>>7),0)) : \ + (MIN((((s16)(xl)*(s16)(dsdx))>>7),0))) : 0)), \ + 16, 16) | \ + _SHIFTL(((t) - \ + (((yl) < 0) ? \ + (((s16)(dtdy) < 0) ? \ + (MAX((((s16)(yl)*(s16)(dtdy))>>7),0)) : \ + (MIN((((s16)(yl)*(s16)(dtdy))>>7),0))) : 0)), \ + 0, 16))); \ + gImmp1(pkt, G_RDPHALF_2, (_SHIFTL((dsdx), 16, 16) | \ + _SHIFTL((dtdy), 0, 16))); \ +} + +# define gsSPTextureRectangleFlip(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ + {{(_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) | \ + _SHIFTL(yh, 0, 12)), \ + (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | _SHIFTL(yl, 0, 12))}}, \ + gsImmp1(G_RDPHALF_1, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))), \ + gsImmp1(G_RDPHALF_2, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16))) + +# define gSPTextureRectangleFlip(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) |\ + _SHIFTL(yh, 0, 12)); \ + _g->words.w1 = (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | \ + _SHIFTL(yl, 0, 12)); \ + gImmp1(pkt, G_RDPHALF_1, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))); \ + gImmp1(pkt, G_RDPHALF_2, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16))); \ +} +#endif + +#define gsDPWord(wordhi, wordlo) \ + gsImmp1(G_RDPHALF_1, (uintptr_t)(wordhi)), \ + gsImmp1(G_RDPHALF_2, (uintptr_t)(wordlo)) + +#define gDPWord(pkt, wordhi, wordlo) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + gImmp1(pkt, G_RDPHALF_1, (uintptr_t)(wordhi)); \ + gImmp1(pkt, G_RDPHALF_2, (uintptr_t)(wordlo)); \ +} + +#define gDPFullSync(pkt) gDPNoParam(pkt, G_RDPFULLSYNC) +#define gsDPFullSync() gsDPNoParam(G_RDPFULLSYNC) +#define gDPTileSync(pkt) gDPNoParam(pkt, G_RDPTILESYNC) +#define gsDPTileSync() gsDPNoParam(G_RDPTILESYNC) +#define gDPPipeSync(pkt) gDPNoParam(pkt, G_RDPPIPESYNC) +#define gsDPPipeSync() gsDPNoParam(G_RDPPIPESYNC) +#define gDPLoadSync(pkt) gDPNoParam(pkt, G_RDPLOADSYNC) +#define gsDPLoadSync() gsDPNoParam(G_RDPLOADSYNC) +#define gDPNoOp(pkt) gDPNoParam(pkt, G_NOOP) +#define gsDPNoOp() gsDPNoParam(G_NOOP) +#define gDPNoOpTag(pkt, tag) gDPParam(pkt, G_NOOP, tag) +#define gsDPNoOpTag(tag) gsDPParam(G_NOOP, tag) + +#endif /* _LANGUAGE_C */ + + +#endif /* _GBI_H_ */ \ No newline at end of file diff --git a/src/n64/types.h b/src/n64/types.h new file mode 100644 index 0000000..52ce306 --- /dev/null +++ b/src/n64/types.h @@ -0,0 +1,59 @@ +#ifndef ULTRA64_TYPES_H +#define ULTRA64_TYPES_H + +#include +#include +#include + +typedef signed char s8; +typedef unsigned char u8; +typedef signed short int s16; +typedef unsigned short int u16; +typedef signed int s32; +typedef unsigned int u32; +typedef signed long long int s64; +typedef unsigned long long int u64; + +typedef volatile u8 vu8; +typedef volatile u16 vu16; +typedef volatile u32 vu32; +typedef volatile u64 vu64; +typedef volatile s8 vs8; +typedef volatile s16 vs16; +typedef volatile s32 vs32; +typedef volatile s64 vs64; + +typedef float f32; +typedef double f64; +#if 0 + +typedef s32 ptrdiff_t; +typedef s32 intptr_t; +typedef u32 uintptr_t; +#endif + +#ifndef GBI_FLOATS +typedef int Mtx_t[4][4]; +typedef union { + Mtx_t m; + struct { + u16 intPart[4][4]; + u16 fracPart[4][4]; + }; + long long int forc_structure_alignment; +} Mtx; +#else +typedef struct { + float m[4][4]; +} Mtx; +#endif + +typedef float MtxF_t[4][4]; +typedef union { + MtxF_t mf; + struct { + float xx, yx, zx, wx, xy, yy, zy, wy, xz, yz, zz, wz, xw, yw, zw, ww; + }; +} MtxF; + +#endif diff --git a/src/storm/SWrapper.cpp b/src/storm/SWrapper.cpp index d17042f..fbb2329 100644 --- a/src/storm/SWrapper.cpp +++ b/src/storm/SWrapper.cpp @@ -1,8 +1,12 @@ #include "SWrapper.h" #include #include +#include + +#include "spdlog/spdlog.h" namespace fs = std::filesystem; +bool debugMode = true; SWrapper::SWrapper(const std::string& path) { if(fs::exists(path)) { @@ -17,6 +21,17 @@ SWrapper::SWrapper(const std::string& path) { } bool SWrapper::CreateFile(const std::string& path, std::vector data) { + if(debugMode){ + SPDLOG_INFO("Creating debug file: debug/{}", path); + std::string dpath = "debug/" + path; + if(!fs::exists(fs::path(dpath).parent_path())){ + fs::create_directories(fs::path(dpath).parent_path()); + } + std::ofstream stream(dpath, std::ios::binary); + stream.write((char*)data.data(), data.size()); + stream.close(); + } + HANDLE hFile; #ifdef _WIN32 SYSTEMTIME sysTime; @@ -32,6 +47,11 @@ bool SWrapper::CreateFile(const std::string& path, std::vector data) { char* raw = (char*) data.data(); size_t size = data.size(); + if(size == 0){ + std::cout << "File empty: " << path << std::endl; + return false; + } + if(size >> 32){ std::cout << "File too large: " << path << std::endl; return false; diff --git a/src/types/RawBuffer.h b/src/types/RawBuffer.h new file mode 100644 index 0000000..b3ac390 --- /dev/null +++ b/src/types/RawBuffer.h @@ -0,0 +1,12 @@ +#pragma once + +#include "../factories/BaseFactory.h" + +class RawBuffer : public IParsedData { +public: + std::vector mBuffer; + + RawBuffer(uint8_t* data, size_t size) : mBuffer(data, data + size) {} + explicit RawBuffer(std::vector& buffer) : mBuffer(std::move(buffer)) {} + RawBuffer(std::vector::iterator begin, std::vector::iterator end) : mBuffer(begin, end) {} +}; \ No newline at end of file diff --git a/src/types/SegmentedAddr.h b/src/types/SegmentedAddr.h new file mode 100644 index 0000000..8aa868e --- /dev/null +++ b/src/types/SegmentedAddr.h @@ -0,0 +1,7 @@ +#pragma once + +#include + +struct SegmentedAddr { + uint32_t offset; +}; \ No newline at end of file diff --git a/src/utils/MIODecoder.cpp b/src/utils/MIODecoder.cpp index 0a1698e..7574e55 100644 --- a/src/utils/MIODecoder.cpp +++ b/src/utils/MIODecoder.cpp @@ -1,14 +1,13 @@ #include "MIODecoder.h" +#include extern "C" { #include } -#include -#include -std::unordered_map> MIO0Decoder::gCachedChunks; +std::unordered_map> MIO0Decoder::gCachedChunks; -std::vector& MIO0Decoder::Decode(std::vector& buffer, uint32_t offset) { +std::vector& MIO0Decoder::Decode(std::vector& buffer, uint32_t offset) { const unsigned char* in_buf = buffer.data() + offset; mio0_header_t head; @@ -16,9 +15,9 @@ std::vector& MIO0Decoder::Decode(std::vector& buffer, uint32_t of throw std::runtime_error("Failed to decode MIO0 header"); } - uint8_t* decompressed = new uint8_t[head.dest_size]; + auto decompressed = new uint8_t[head.dest_size]; mio0_decode(in_buf, decompressed, nullptr); - gCachedChunks[offset] = std::vector(decompressed, decompressed + head.dest_size); + gCachedChunks[offset] = std::vector(decompressed, decompressed + head.dest_size); delete[] decompressed; return gCachedChunks[offset]; diff --git a/src/utils/MIODecoder.h b/src/utils/MIODecoder.h index 0d60ef9..ecf2ca4 100644 --- a/src/utils/MIODecoder.h +++ b/src/utils/MIODecoder.h @@ -6,7 +6,7 @@ class MIO0Decoder { public: - static std::unordered_map> gCachedChunks; - static std::vector& Decode(std::vector& buffer, uint32_t offset); + static std::unordered_map> gCachedChunks; + static std::vector& Decode(std::vector& buffer, uint32_t offset); static void ClearCache(); }; diff --git a/tools/anim_offsets.js b/tools/anim_offsets.js deleted file mode 100644 index 91e1ffb..0000000 --- a/tools/anim_offsets.js +++ /dev/null @@ -1,74 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const { off } = require('process'); - -let _parent = 'assets/reordered'; -let bytes = {}; - -function toHex(value) { - let hex = value.toString(16); - if ((hex.length % 2) > 0) { - hex = "0" + hex; - } - return `0x${hex.toUpperCase()}`; -} - -function toBEU16(num){ - let d = new Uint16Array(1); - d[0] = num; - return Buffer.from(d.buffer).swap16() -} - -async function parseAnim(file){ - let fimport = `../${file.replace('.js', '')}` - let data = require(fimport) - for(let id of fimport.split('_').slice(1)){ - let anim = data['anim_'+id]; - let offsets = {}; - - for(let key of Object.keys(bytes)){ - let rom = bytes[key]; - let hOffset = rom.indexOf(Buffer.concat(anim.slice(0, 6).map(toBEU16))); - - let bswValues = Buffer.concat(anim[6].map(toBEU16)); - let vsOffset = rom.indexOf(bswValues); - let bswIndices = Buffer.concat(anim[7].map(toBEU16)); - let idxOffset = rom.indexOf(bswIndices); - offsets[key] = { - header: [hOffset, 0x18], - values: [vsOffset, bswValues.length], - indices: [idxOffset, bswIndices.length], - }; - } - - console.log(`"assets/anims/anim_${id}.anim": ${JSON.stringify(offsets)},`); - } -} - -async function main(){ - let roms = fs.readdirSync('./').filter(f => f.endsWith('.z64')); - for(let rom of roms){ - bytes[rom.split('.')[1]] = fs.readFileSync(rom); - } - for(let file of fs.readdirSync(_parent)){ - let pdir = path.join(_parent, file); - let lines = fs.readFileSync(pdir, 'utf8').split('\n').map((line) => - line.replace('const u16', 'let') - .replace('const s16', 'let') - .replace('#include "animation_table.h"', '') - .replace('const struct Animation', 'let') - .replace('[] = {', ' = [') - .replace('};', ']') - ); - let func = "function ANIMINDEX_NUMPARTS(animindex) {\n return Math.floor(animindex.length / 6) - 1;\n}".split('\n'); - let output = path.join('assets/js', file).replace('.inc.c', '.js'); - fs.writeFileSync(output, [ - ...func, - ...lines, - `module.exports = { ${output.replace('.js', '').split('_').slice(1).map(m => `anim_${m}`).join(', ')} };`, - ].join('\n')); - await parseAnim(output); - } -} - -main(); \ No newline at end of file diff --git a/tools/asset_converter.js b/tools/asset_converter.js deleted file mode 100644 index 02c44e2..0000000 --- a/tools/asset_converter.js +++ /dev/null @@ -1,135 +0,0 @@ -const YAML = require('./yaml/dist/index') -const fs = require('fs'); -const path = require('path'); -const assets = require('./assets.json'); -const version = 'eu'; - -const map = { - png: texture, - anime: anim, - audio: audio, - aiff: audio, - bnk: audio, - bset: audio, - m64: audio, - bin: blob, - sbox: blob -} - -function toYAML(obj){ - let file = `${obj.file}`; - delete obj.file; - return YAML.stringify({ - [file]: obj - }); -} - -function texture(file, data){ - if(!data[3][version]) return; - let format = path.parse(file); - return { - file: path.join(format.dir, format.name), - type: 'TEXTURE', - size: data[2], - width: data[0], - height: data[1], - offset: data[3][version][0], - mio0: data[3][version][1], - format: format.ext.toUpperCase().slice(1), - }; -} - -function anim(file, data){ - return { - file: file, - type: 'SM64:ANIM', - header: { - offset: data[version].header[0], - size: data[version].header[1], - }, - values: { - offset: data[version].values[0], - size: data[version].values[1], - }, - indices: { - offset: data[version].indices[0], - size: data[version].indices[1], - } - }; -} - -function audio(file, data, ext){ - if(ext === 'audio'){ - if(!data[version]) return; - return { - file: 'header', - type: 'AUDIO:HEADER', - ctl: { - offset: data[version]['sound_ctl'][0], - size: data[version]['sound_ctl'][1], - }, - tbl: { - offset: data[version]['sound_tbl'][0], - size: data[version]['sound_tbl'][1], - }, - } - } - if(ext === 'aiff'){ - if(!data[1][version]) return; - return { - file: file, - type: 'SAMPLE', - id: data[1][version][1] - }; - } - if(ext === 'm64'){ - if(!data[version]) return; - return { - file: file, - type: 'SEQUENCE', - offset: data[version]['offset'][0], - size: data[version]['offset'][1], - banks: data['banks'], - }; - } - if(ext === 'bnk'){ - return { - file: file, - type: 'BANK', - id: data[0] - }; - } -} - -function blob(file, data){ - if(!data[1][version]) return; - let mio0 = data[1][version].length > 1; - let output = { - file: file, - type: 'BLOB', - size: data[0], - offset: data[1][version][0], - }; - if(mio0){ - output['mio0'] = data[1][version][1]; - } - return output; -} - -async function main(){ - let keys = Object.keys(assets).filter(f => f.includes('/')); - let output = path.join('assets/sm64', version); - fs.rmdirSync(output, { recursive: true }); - fs.mkdirSync(output, { recursive: true }); - for(let key of keys.sort()){ - let parent = key.split('/')[0]; - let ext = key.split('.').pop(); - let func = map[ext]; - let result = func(key.slice(parent.length + 1, key.indexOf(ext) - 1), assets[key], ext); - if(result){ - fs.appendFileSync(`${output}/${parent}.yml`, toYAML(result)); - } - } -} - -main(); \ No newline at end of file diff --git a/tools/assets.json b/tools/assets.json deleted file mode 100644 index b0d7b88..0000000 --- a/tools/assets.json +++ /dev/null @@ -1,2237 +0,0 @@ -{ -"@comment": "This file was generated by tools/gen_asset_list.cpp. When renaming a file, either change its name in this file directly, or regenerate this file using that script.", -"textures/ipl3_raw/ipl3_font_00.ia1.png": [13,14,23,{"jp":[2928],"us":[2928],"eu":[2928],"sh":[2928]}], -"textures/ipl3_raw/ipl3_font_01.ia1.png": [13,14,23,{"jp":[2951],"us":[2951],"eu":[2951],"sh":[2951]}], -"textures/ipl3_raw/ipl3_font_02.ia1.png": [13,14,23,{"jp":[2974],"us":[2974],"eu":[2974],"sh":[2974]}], -"textures/ipl3_raw/ipl3_font_03.ia1.png": [13,14,23,{"jp":[2997],"us":[2997],"eu":[2997],"sh":[2997]}], -"textures/ipl3_raw/ipl3_font_04.ia1.png": [13,14,23,{"jp":[3020],"us":[3020],"eu":[3020],"sh":[3020]}], -"textures/ipl3_raw/ipl3_font_05.ia1.png": [13,14,23,{"jp":[3043],"us":[3043],"eu":[3043],"sh":[3043]}], -"textures/ipl3_raw/ipl3_font_06.ia1.png": [13,14,23,{"jp":[3066],"us":[3066],"eu":[3066],"sh":[3066]}], -"textures/ipl3_raw/ipl3_font_07.ia1.png": [13,14,23,{"jp":[3089],"us":[3089],"eu":[3089],"sh":[3089]}], -"textures/ipl3_raw/ipl3_font_08.ia1.png": [13,14,23,{"jp":[3112],"us":[3112],"eu":[3112],"sh":[3112]}], -"textures/ipl3_raw/ipl3_font_09.ia1.png": [13,14,23,{"jp":[3135],"us":[3135],"eu":[3135],"sh":[3135]}], -"textures/ipl3_raw/ipl3_font_10.ia1.png": [13,14,23,{"jp":[3158],"us":[3158],"eu":[3158],"sh":[3158]}], -"textures/ipl3_raw/ipl3_font_11.ia1.png": [13,14,23,{"jp":[3181],"us":[3181],"eu":[3181],"sh":[3181]}], -"textures/ipl3_raw/ipl3_font_12.ia1.png": [13,14,23,{"jp":[3204],"us":[3204],"eu":[3204],"sh":[3204]}], -"textures/ipl3_raw/ipl3_font_13.ia1.png": [13,14,23,{"jp":[3227],"us":[3227],"eu":[3227],"sh":[3227]}], -"textures/ipl3_raw/ipl3_font_14.ia1.png": [13,14,23,{"jp":[3250],"us":[3250],"eu":[3250],"sh":[3250]}], -"textures/ipl3_raw/ipl3_font_15.ia1.png": [13,14,23,{"jp":[3273],"us":[3273],"eu":[3273],"sh":[3273]}], -"textures/ipl3_raw/ipl3_font_16.ia1.png": [13,14,23,{"jp":[3296],"us":[3296],"eu":[3296],"sh":[3296]}], -"textures/ipl3_raw/ipl3_font_17.ia1.png": [13,14,23,{"jp":[3319],"us":[3319],"eu":[3319],"sh":[3319]}], -"textures/ipl3_raw/ipl3_font_18.ia1.png": [13,14,23,{"jp":[3342],"us":[3342],"eu":[3342],"sh":[3342]}], -"textures/ipl3_raw/ipl3_font_19.ia1.png": [13,14,23,{"jp":[3365],"us":[3365],"eu":[3365],"sh":[3365]}], -"textures/ipl3_raw/ipl3_font_20.ia1.png": [13,14,23,{"jp":[3388],"us":[3388],"eu":[3388],"sh":[3388]}], -"textures/ipl3_raw/ipl3_font_21.ia1.png": [13,14,23,{"jp":[3411],"us":[3411],"eu":[3411],"sh":[3411]}], -"textures/ipl3_raw/ipl3_font_22.ia1.png": [13,14,23,{"jp":[3434],"us":[3434],"eu":[3434],"sh":[3434]}], -"textures/ipl3_raw/ipl3_font_23.ia1.png": [13,14,23,{"jp":[3457],"us":[3457],"eu":[3457],"sh":[3457]}], -"textures/ipl3_raw/ipl3_font_24.ia1.png": [13,14,23,{"jp":[3480],"us":[3480],"eu":[3480],"sh":[3480]}], -"textures/ipl3_raw/ipl3_font_25.ia1.png": [13,14,23,{"jp":[3503],"us":[3503],"eu":[3503],"sh":[3503]}], -"textures/ipl3_raw/ipl3_font_26.ia1.png": [13,14,23,{"jp":[3526],"us":[3526],"eu":[3526],"sh":[3526]}], -"textures/ipl3_raw/ipl3_font_27.ia1.png": [13,14,23,{"jp":[3549],"us":[3549],"eu":[3549],"sh":[3549]}], -"textures/ipl3_raw/ipl3_font_28.ia1.png": [13,14,23,{"jp":[3572],"us":[3572],"eu":[3572],"sh":[3572]}], -"textures/ipl3_raw/ipl3_font_29.ia1.png": [13,14,23,{"jp":[3595],"us":[3595],"eu":[3595],"sh":[3595]}], -"textures/ipl3_raw/ipl3_font_30.ia1.png": [13,14,23,{"jp":[3618],"us":[3618],"eu":[3618],"sh":[3618]}], -"textures/ipl3_raw/ipl3_font_31.ia1.png": [13,14,23,{"jp":[3641],"us":[3641],"eu":[3641],"sh":[3641]}], -"textures/ipl3_raw/ipl3_font_32.ia1.png": [13,14,23,{"jp":[3664],"us":[3664],"eu":[3664],"sh":[3664]}], -"textures/ipl3_raw/ipl3_font_33.ia1.png": [13,14,23,{"jp":[3687],"us":[3687],"eu":[3687],"sh":[3687]}], -"textures/ipl3_raw/ipl3_font_34.ia1.png": [13,14,23,{"jp":[3710],"us":[3710],"eu":[3710],"sh":[3710]}], -"textures/ipl3_raw/ipl3_font_35.ia1.png": [13,14,23,{"jp":[3733],"us":[3733],"eu":[3733],"sh":[3733]}], -"textures/ipl3_raw/ipl3_font_36.ia1.png": [13,14,23,{"jp":[3756],"us":[3756],"eu":[3756],"sh":[3756]}], -"textures/ipl3_raw/ipl3_font_37.ia1.png": [13,14,23,{"jp":[3779],"us":[3779],"eu":[3779],"sh":[3779]}], -"textures/ipl3_raw/ipl3_font_38.ia1.png": [13,14,23,{"jp":[3802],"us":[3802],"eu":[3802],"sh":[3802]}], -"textures/ipl3_raw/ipl3_font_39.ia1.png": [13,14,23,{"jp":[3825],"us":[3825],"eu":[3825],"sh":[3825]}], -"textures/ipl3_raw/ipl3_font_40.ia1.png": [13,14,23,{"jp":[3848],"us":[3848],"eu":[3848],"sh":[3848]}], -"textures/ipl3_raw/ipl3_font_41.ia1.png": [13,14,23,{"jp":[3871],"us":[3871],"eu":[3871],"sh":[3871]}], -"textures/ipl3_raw/ipl3_font_42.ia1.png": [13,14,23,{"jp":[3894],"us":[3894],"eu":[3894],"sh":[3894]}], -"textures/ipl3_raw/ipl3_font_43.ia1.png": [13,14,23,{"jp":[3917],"us":[3917],"eu":[3917],"sh":[3917]}], -"textures/ipl3_raw/ipl3_font_44.ia1.png": [13,14,23,{"jp":[3940],"us":[3940],"eu":[3940],"sh":[3940]}], -"textures/ipl3_raw/ipl3_font_45.ia1.png": [13,14,23,{"jp":[3963],"us":[3963],"eu":[3963],"sh":[3963]}], -"textures/ipl3_raw/ipl3_font_46.ia1.png": [13,14,23,{"jp":[3986],"us":[3986],"eu":[3986],"sh":[3986]}], -"textures/ipl3_raw/ipl3_font_47.ia1.png": [13,14,23,{"jp":[4009],"us":[4009],"eu":[4009],"sh":[4009]}], -"textures/ipl3_raw/ipl3_font_48.ia1.png": [13,14,23,{"jp":[4032],"us":[4032],"eu":[4032],"sh":[4032]}], -"textures/ipl3_raw/ipl3_font_49.ia1.png": [13,14,23,{"jp":[4055],"us":[4055],"eu":[4055],"sh":[4055]}], -"textures/crash_screen/crash_screen_font.ia1.png": [32,63,252,{"eu":[757168],"sh":[805680]}], -"actors/amp/amp_body.rgba16.png": [32,32,2048,{"jp":[2032944,6936],"us":[2040320,6936],"eu":[1912288,6936],"sh":[1888800,6936]}], -"actors/amp/amp_electricity.rgba16.png": [16,32,1024,{"jp":[2032944,3864],"us":[2040320,3864],"eu":[1912288,3864],"sh":[1888800,3864]}], -"actors/amp/amp_eyes.rgba16.png": [32,32,2048,{"jp":[2032944,4888],"us":[2040320,4888],"eu":[1912288,4888],"sh":[1888800,4888]}], -"actors/amp/amp_mouth.rgba16.png": [32,32,2048,{"jp":[2032944,8984],"us":[2040320,8984],"eu":[1912288,8984],"sh":[1888800,8984]}], -"actors/blue_coin_switch/blue_coin_switch_side.rgba16.png": [32,16,1024,{"jp":[2032944,24],"us":[2040320,24],"eu":[1912288,24],"sh":[1888800,24]}], -"actors/blue_coin_switch/blue_coin_switch_top.rgba16.png": [32,32,2048,{"jp":[2032944,1048],"us":[2040320,1048],"eu":[1912288,1048],"sh":[1888800,1048]}], -"actors/blue_fish/blue_fish.rgba16.png": [32,32,2048,{"jp":[2094912,112096],"us":[2102288,112096],"eu":[1974256,112096],"sh":[1950768,112096]}], -"actors/bobomb/bob-omb_buddy_left_side.rgba16.png": [32,64,4096,{"jp":[1257760,120],"us":[1264928,120],"eu":[1136896,120],"sh":[1113408,120]}], -"actors/bobomb/bob-omb_buddy_right_side.rgba16.png": [32,64,4096,{"jp":[1257760,4216],"us":[1264928,4216],"eu":[1136896,4216],"sh":[1113408,4216]}], -"actors/bobomb/bob-omb_eyes.rgba16.png": [32,32,2048,{"jp":[1257760,18552],"us":[1264928,18552],"eu":[1136896,18552],"sh":[1113408,18552]}], -"actors/bobomb/bob-omb_eyes_blink.rgba16.png": [32,32,2048,{"jp":[1257760,20600],"us":[1264928,20600],"eu":[1136896,20600],"sh":[1113408,20600]}], -"actors/bobomb/bob-omb_left_side.rgba16.png": [32,64,4096,{"jp":[2032944,121440],"us":[2040320,121440],"eu":[1912288,121440],"sh":[1888800,121440]}], -"actors/bobomb/bob-omb_right_side.rgba16.png": [32,64,4096,{"jp":[2032944,125536],"us":[2040320,125536],"eu":[1912288,125536],"sh":[1888800,125536]}], -"actors/bomb/bomb_left_side.rgba16.png": [32,64,4096,{"jp":[1599504,359104],"us":[1606720,359440],"eu":[1478688,359440],"sh":[1455200,359440]}], -"actors/bomb/bomb_right_side.rgba16.png": [32,64,4096,{"jp":[1599504,363200],"us":[1606720,363536],"eu":[1478688,363536],"sh":[1455200,363536]}], -"actors/bomb/bomb_spike.rgba16.png": [32,32,2048,{"jp":[1599504,367296],"us":[1606720,367632],"eu":[1478688,367632],"sh":[1455200,367632]}], -"actors/boo/boo_eyes.rgba16.png": [64,32,4096,{"jp":[1462368,39744],"us":[1469536,39744],"eu":[1341504,39744],"sh":[1318016,39744]}], -"actors/boo/boo_mouth.rgba16.png": [32,32,2048,{"jp":[1462368,43840],"us":[1469536,43840],"eu":[1341504,43840],"sh":[1318016,43840]}], -"actors/boo_castle/bbh_boo_eyes.rgba16.png": [64,32,4096,{"jp":[1462368,39744],"us":[1469536,39744],"eu":[1341504,39744],"sh":[1318016,39744]}], -"actors/boo_castle/bbh_boo_mouth.rgba16.png": [32,32,2048,{"jp":[1462368,43840],"us":[1469536,43840],"eu":[1341504,43840],"sh":[1318016,43840]}], -"actors/book/book_cover.rgba16.png": [32,32,2048,{"jp":[1462368,4192],"us":[1469536,4192],"eu":[1341504,4192],"sh":[1318016,4192]}], -"actors/bookend/bookend_cover.rgba16.png": [32,32,2048,{"jp":[1462368,4192],"us":[1469536,4192],"eu":[1341504,4192],"sh":[1318016,4192]}], -"actors/bookend/bookend_mouth.rgba16.png": [16,32,1024,{"jp":[1462368,2144],"us":[1469536,2144],"eu":[1341504,2144],"sh":[1318016,2144]}], -"actors/bookend/bookend_pages.rgba16.png": [16,32,1024,{"jp":[1462368,3168],"us":[1469536,3168],"eu":[1341504,3168],"sh":[1318016,3168]}], -"actors/bookend/bookend_spine.rgba16.png": [16,32,1024,{"jp":[1462368,96],"us":[1469536,96],"eu":[1341504,96],"sh":[1318016,96]}], -"actors/bookend/bookend_tooth.rgba16.png": [16,32,1024,{"jp":[1462368,1120],"us":[1469536,1120],"eu":[1341504,1120],"sh":[1318016,1120]}], -"actors/bowser/bowser_armband.rgba16.png": [32,32,2048,{"jp":[1599504,146488],"us":[1606720,146488],"eu":[1478688,146488],"sh":[1455200,146488]}], -"actors/bowser/bowser_armband_spike.rgba16.png": [64,32,4096,{"jp":[1599504,142392],"us":[1606720,142392],"eu":[1478688,142392],"sh":[1455200,142392]}], -"actors/bowser/bowser_blue_eye_unused.rgba16.png": [64,32,4096,{"jp":[1599504,156728],"us":[1606720,156728],"eu":[1478688,156728],"sh":[1455200,156728]}], -"actors/bowser/bowser_body.rgba16.png": [32,32,2048,{"jp":[1599504,140344],"us":[1606720,140344],"eu":[1478688,140344],"sh":[1455200,140344]}], -"actors/bowser/bowser_chest.rgba16.png": [32,32,2048,{"jp":[1599504,152632],"us":[1606720,152632],"eu":[1478688,152632],"sh":[1455200,152632]}], -"actors/bowser/bowser_claw_edge.rgba16.png": [32,64,4096,{"jp":[1599504,171064],"us":[1606720,171064],"eu":[1478688,171064],"sh":[1455200,171064]}], -"actors/bowser/bowser_claw_horn_angle.rgba16.png": [32,64,4096,{"jp":[1599504,179256],"us":[1606720,179256],"eu":[1478688,179256],"sh":[1455200,179256]}], -"actors/bowser/bowser_claw_horn_tooth.rgba16.png": [32,64,4096,{"jp":[1599504,175160],"us":[1606720,175160],"eu":[1478688,175160],"sh":[1455200,175160]}], -"actors/bowser/bowser_eye_center_0.rgba16.png": [64,32,4096,{"jp":[1599504,195640],"us":[1606720,195640],"eu":[1478688,195640],"sh":[1455200,195640]}], -"actors/bowser/bowser_eye_center_1.rgba16.png": [64,32,4096,{"jp":[1599504,195640],"us":[1606720,195640],"eu":[1478688,195640],"sh":[1455200,195640]}], -"actors/bowser/bowser_eye_closed_0.rgba16.png": [64,32,4096,{"jp":[1599504,191544],"us":[1606720,191544],"eu":[1478688,191544],"sh":[1455200,191544]}], -"actors/bowser/bowser_eye_closed_1.rgba16.png": [64,32,4096,{"jp":[1599504,191544],"us":[1606720,191544],"eu":[1478688,191544],"sh":[1455200,191544]}], -"actors/bowser/bowser_eye_far_left_0.rgba16.png": [64,32,4096,{"jp":[1599504,203832],"us":[1606720,203832],"eu":[1478688,203832],"sh":[1455200,203832]}], -"actors/bowser/bowser_eye_far_left_1.rgba16.png": [64,32,4096,{"jp":[1599504,203832],"us":[1606720,203832],"eu":[1478688,203832],"sh":[1455200,203832]}], -"actors/bowser/bowser_eye_half_closed_0.rgba16.png": [64,32,4096,{"jp":[1599504,187448],"us":[1606720,187448],"eu":[1478688,187448],"sh":[1455200,187448]}], -"actors/bowser/bowser_eye_half_closed_1.rgba16.png": [64,32,4096,{"jp":[1599504,187448],"us":[1606720,187448],"eu":[1478688,187448],"sh":[1455200,187448]}], -"actors/bowser/bowser_eye_left_0.rgba16.png": [64,32,4096,{"jp":[1599504,183352],"us":[1606720,183352],"eu":[1478688,183352],"sh":[1455200,183352]}], -"actors/bowser/bowser_eye_left_1.rgba16.png": [64,32,4096,{"jp":[1599504,183352],"us":[1606720,183352],"eu":[1478688,183352],"sh":[1455200,183352]}], -"actors/bowser/bowser_eye_right_0.rgba16.png": [64,32,4096,{"jp":[1599504,199736],"us":[1606720,199736],"eu":[1478688,199736],"sh":[1455200,199736]}], -"actors/bowser/bowser_eye_right_1.rgba16.png": [64,32,4096,{"jp":[1599504,199736],"us":[1606720,199736],"eu":[1478688,199736],"sh":[1455200,199736]}], -"actors/bowser/bowser_eyebrow.rgba16.png": [64,32,4096,{"jp":[1599504,130104],"us":[1606720,130104],"eu":[1478688,130104],"sh":[1455200,130104]}], -"actors/bowser/bowser_hair.rgba16.png": [32,64,4096,{"jp":[1599504,166968],"us":[1606720,166968],"eu":[1478688,166968],"sh":[1455200,166968]}], -"actors/bowser/bowser_mouth_unused.rgba16.png": [64,32,4096,{"jp":[1599504,160824],"us":[1606720,160824],"eu":[1478688,160824],"sh":[1455200,160824]}], -"actors/bowser/bowser_muzzle.rgba16.png": [32,32,2048,{"jp":[1599504,134200],"us":[1606720,134200],"eu":[1478688,134200],"sh":[1455200,134200]}], -"actors/bowser/bowser_nostrils.rgba16.png": [64,32,4096,{"jp":[1599504,136248],"us":[1606720,136248],"eu":[1478688,136248],"sh":[1455200,136248]}], -"actors/bowser/bowser_shell.rgba16.png": [32,32,2048,{"jp":[1599504,128056],"us":[1606720,128056],"eu":[1478688,128056],"sh":[1455200,128056]}], -"actors/bowser/bowser_shell_edge.rgba16.png": [32,32,2048,{"jp":[1599504,154680],"us":[1606720,154680],"eu":[1478688,154680],"sh":[1455200,154680]}], -"actors/bowser/bowser_tongue.rgba16.png": [32,64,4096,{"jp":[1599504,148536],"us":[1606720,148536],"eu":[1478688,148536],"sh":[1455200,148536]}], -"actors/bowser/bowser_upper_face.rgba16.png": [32,32,2048,{"jp":[1599504,164920],"us":[1606720,164920],"eu":[1478688,164920],"sh":[1455200,164920]}], -"actors/bowser_flame/bowser_flame_0.rgba16.png": [64,64,8192,{"jp":[1599504,0],"us":[1606720,0],"eu":[1478688,0],"sh":[1455200,0]}], -"actors/bowser_flame/bowser_flame_1.rgba16.png": [64,64,8192,{"jp":[1599504,8192],"us":[1606720,8192],"eu":[1478688,8192],"sh":[1455200,8192]}], -"actors/bowser_flame/bowser_flame_10.rgba16.png": [64,64,8192,{"jp":[1599504,81920],"us":[1606720,81920],"eu":[1478688,81920],"sh":[1455200,81920]}], -"actors/bowser_flame/bowser_flame_11.rgba16.png": [64,64,8192,{"jp":[1599504,90112],"us":[1606720,90112],"eu":[1478688,90112],"sh":[1455200,90112]}], -"actors/bowser_flame/bowser_flame_12.rgba16.png": [64,64,8192,{"jp":[1599504,98304],"us":[1606720,98304],"eu":[1478688,98304],"sh":[1455200,98304]}], -"actors/bowser_flame/bowser_flame_13.rgba16.png": [64,64,8192,{"jp":[1599504,106496],"us":[1606720,106496],"eu":[1478688,106496],"sh":[1455200,106496]}], -"actors/bowser_flame/bowser_flame_2.rgba16.png": [64,64,8192,{"jp":[1599504,16384],"us":[1606720,16384],"eu":[1478688,16384],"sh":[1455200,16384]}], -"actors/bowser_flame/bowser_flame_3.rgba16.png": [64,64,8192,{"jp":[1599504,24576],"us":[1606720,24576],"eu":[1478688,24576],"sh":[1455200,24576]}], -"actors/bowser_flame/bowser_flame_4.rgba16.png": [64,64,8192,{"jp":[1599504,32768],"us":[1606720,32768],"eu":[1478688,32768],"sh":[1455200,32768]}], -"actors/bowser_flame/bowser_flame_5.rgba16.png": [64,64,8192,{"jp":[1599504,40960],"us":[1606720,40960],"eu":[1478688,40960],"sh":[1455200,40960]}], -"actors/bowser_flame/bowser_flame_6.rgba16.png": [64,64,8192,{"jp":[1599504,49152],"us":[1606720,49152],"eu":[1478688,49152],"sh":[1455200,49152]}], -"actors/bowser_flame/bowser_flame_7.rgba16.png": [64,64,8192,{"jp":[1599504,57344],"us":[1606720,57344],"eu":[1478688,57344],"sh":[1455200,57344]}], -"actors/bowser_flame/bowser_flame_8.rgba16.png": [64,64,8192,{"jp":[1599504,65536],"us":[1606720,65536],"eu":[1478688,65536],"sh":[1455200,65536]}], -"actors/bowser_flame/bowser_flame_9.rgba16.png": [64,64,8192,{"jp":[1599504,73728],"us":[1606720,73728],"eu":[1478688,73728],"sh":[1455200,73728]}], -"actors/breakable_box/cork_box_surface.rgba16.png": [32,32,2048,{"jp":[2032944,74384],"us":[2040320,74384],"eu":[1912288,74384],"sh":[1888800,74384]}], -"actors/breakable_box/crazy_box_surface.rgba16.png": [32,32,2048,{"jp":[2032944,72336],"us":[2040320,72336],"eu":[1912288,72336],"sh":[1888800,72336]}], -"actors/bub/bub_eye_border.rgba16.png": [32,32,2048,{"jp":[1568640,5128],"us":[1575856,5128],"eu":[1447824,5128],"sh":[1424336,5128]}], -"actors/bub/bub_eyes.rgba16.png": [64,32,4096,{"jp":[1568640,1032],"us":[1575856,1032],"eu":[1447824,1032],"sh":[1424336,1032]}], -"actors/bub/bub_fins.rgba16.png": [32,32,2048,{"jp":[1568640,7176],"us":[1575856,7176],"eu":[1447824,7176],"sh":[1424336,7176]}], -"actors/bub/bub_scales.rgba16.png": [64,32,4096,{"jp":[1568640,9224],"us":[1575856,9224],"eu":[1447824,9224],"sh":[1424336,9224]}], -"actors/bubba/bubba_eye_border.rgba16.png": [32,32,2048,{"jp":[1568640,5128],"us":[1575856,5128],"eu":[1447824,5128],"sh":[1424336,5128]}], -"actors/bubba/bubba_eyes_unused.rgba16.png": [64,32,4096,{"jp":[1568640,1032],"us":[1575856,1032],"eu":[1447824,1032],"sh":[1424336,1032]}], -"actors/bubba/bubba_fins.rgba16.png": [32,32,2048,{"jp":[1568640,7176],"us":[1575856,7176],"eu":[1447824,7176],"sh":[1424336,7176]}], -"actors/bubba/bubba_scales.rgba16.png": [64,64,8192,{"jp":[1568640,9224],"us":[1575856,9224],"eu":[1447824,9224],"sh":[1424336,9224]}], -"actors/bubba/bubba_sunglasses.rgba16.png": [16,32,1024,{"jp":[1568640,8],"us":[1575856,8],"eu":[1447824,8],"sh":[1424336,8]}], -"actors/bubble/bubble.rgba16.png": [32,32,2048,{"jp":[1125200,118112],"us":[1132368,118112],"eu":[1004336,118112],"sh":[980848,118112]}], -"actors/bubble/mr_i_bubble.rgba16.png": [32,32,2048,{"jp":[1125200,120160],"us":[1132368,120160],"eu":[1004336,120160],"sh":[980848,120160]}], -"actors/bullet_bill/bullet_bill_eye.rgba16.png": [64,32,4096,{"jp":[1215456,47784],"us":[1222624,47784],"eu":[1094592,47784],"sh":[1071104,47784]}], -"actors/bullet_bill/bullet_bill_mouth.rgba16.png": [64,32,4096,{"jp":[1215456,51880],"us":[1222624,51880],"eu":[1094592,51880],"sh":[1071104,51880]}], -"actors/bully/bully_eye.rgba16.png": [32,32,2048,{"jp":[1249376,9320],"us":[1256544,9320],"eu":[1128512,9320],"sh":[1105024,9320]}], -"actors/bully/bully_horn.rgba16.png": [16,16,512,{"jp":[1249376,224],"us":[1256544,224],"eu":[1128512,224],"sh":[1105024,224]}], -"actors/bully/bully_left_side.rgba16.png": [32,64,4096,{"jp":[1249376,1128],"us":[1256544,1128],"eu":[1128512,1128],"sh":[1105024,1128]}], -"actors/bully/bully_right_side.rgba16.png": [32,64,4096,{"jp":[1249376,5224],"us":[1256544,5224],"eu":[1128512,5224],"sh":[1105024,5224]}], -"actors/burn_smoke/burn_smoke.ia16.png": [32,32,2048,{"jp":[1125200,137216],"us":[1132368,137216],"eu":[1004336,137216],"sh":[980848,137216]}], -"actors/butterfly/butterfly_wing.rgba16.png": [32,64,4096,{"jp":[2094912,17320],"us":[2102288,17320],"eu":[1974256,17320],"sh":[1950768,17320]}], -"actors/cannon_barrel/cannon_barrel.rgba16.png": [32,32,2048,{"jp":[2032944,22696],"us":[2040320,22696],"eu":[1912288,22696],"sh":[1888800,22696]}], -"actors/cannon_base/cannon_base.rgba16.png": [32,32,2048,{"jp":[2032944,18872],"us":[2040320,18872],"eu":[1912288,18872],"sh":[1888800,18872]}], -"actors/cannon_lid/cannon_lid.rgba16.png": [32,32,2048,{"jp":[2032944,16472],"us":[2040320,16472],"eu":[1912288,16472],"sh":[1888800,16472]}], -"actors/capswitch/cap_switch_base.rgba16.png": [16,4,128,{"jp":[1457744,11336],"us":[1464912,11336],"eu":[1336880,11336],"sh":[1313392,11336]}], -"actors/capswitch/cap_switch_head.ia16.png": [32,64,4096,{"jp":[1457744,7240],"us":[1464912,7240],"eu":[1336880,7240],"sh":[1313392,7240]}], -"actors/chain_ball/chain_ball.rgba16.png": [32,32,2048,{"jp":[1844608,133864],"us":[1851952,133864],"eu":[1723920,133864],"sh":[1700432,133864]}], -"actors/chain_chomp/chain_chomp_bright_shine.rgba16.png": [32,32,2048,{"jp":[1844608,136144],"us":[1851952,136144],"eu":[1723920,136144],"sh":[1700432,136144]}], -"actors/chain_chomp/chain_chomp_dull_shine.rgba16.png": [32,32,2048,{"jp":[1844608,138192],"us":[1851952,138192],"eu":[1723920,138192],"sh":[1700432,138192]}], -"actors/chain_chomp/chain_chomp_eye.rgba16.png": [32,32,2048,{"jp":[1844608,144336],"us":[1851952,144336],"eu":[1723920,144336],"sh":[1700432,144336]}], -"actors/chain_chomp/chain_chomp_tongue.rgba16.png": [32,32,2048,{"jp":[1844608,140240],"us":[1851952,140240],"eu":[1723920,140240],"sh":[1700432,140240]}], -"actors/chain_chomp/chain_chomp_tooth.rgba16.png": [32,32,2048,{"jp":[1462368,27376],"us":[1469536,27376],"eu":[1341504,27376],"sh":[1318016,27376]}], -"actors/chair/chair_bottom.rgba16.png": [32,16,1024,{"jp":[1462368,16480],"us":[1469536,16480],"eu":[1341504,16480],"sh":[1318016,16480]}], -"actors/chair/chair_front.rgba16.png": [32,32,2048,{"jp":[1462368,12384],"us":[1469536,12384],"eu":[1341504,12384],"sh":[1318016,12384]}], -"actors/chair/chair_leg.rgba16.png": [32,32,2048,{"jp":[1462368,14432],"us":[1469536,14432],"eu":[1341504,14432],"sh":[1318016,14432]}], -"actors/chair/chair_surface_unused.rgba16.png": [32,32,2048,{"jp":[1462368,17504],"us":[1469536,17504],"eu":[1341504,17504],"sh":[1318016,17504]}], -"actors/checkerboard_platform/checkerboard_platform.rgba16.png": [32,32,2048,{"jp":[2032944,52288],"us":[2040320,52288],"eu":[1912288,52288],"sh":[1888800,52288]}], -"actors/checkerboard_platform/checkerboard_platform_side.rgba16.png": [32,16,1024,{"jp":[2032944,51264],"us":[2040320,51264],"eu":[1912288,51264],"sh":[1888800,51264]}], -"actors/chillychief/chill_bully_eye.rgba16.png": [32,32,2048,{"jp":[1249376,9320],"us":[1256544,9320],"eu":[1128512,9320],"sh":[1105024,9320]}], -"actors/chillychief/chill_bully_left_side.rgba16.png": [32,64,4096,{"jp":[1979680,96],"us":[1987056,96],"eu":[1859024,96],"sh":[1835536,96]}], -"actors/chillychief/chill_bully_right_side.rgba16.png": [32,64,4096,{"jp":[1979680,4192],"us":[1987056,4192],"eu":[1859024,4192],"sh":[1835536,4192]}], -"actors/chuckya/chuckya_body_arm_left_side.rgba16.png": [32,64,4096,{"jp":[2032944,32632],"us":[2040320,32632],"eu":[1912288,32632],"sh":[1888800,32632]}], -"actors/chuckya/chuckya_body_arm_right_side.rgba16.png": [32,64,4096,{"jp":[2032944,36728],"us":[2040320,36728],"eu":[1912288,36728],"sh":[1888800,36728]}], -"actors/chuckya/chuckya_eyes.rgba16.png": [32,64,4096,{"jp":[2032944,26488],"us":[2040320,26488],"eu":[1912288,26488],"sh":[1888800,26488]}], -"actors/chuckya/chuckya_hand_antenna.rgba16.png": [32,32,2048,{"jp":[2032944,30584],"us":[2040320,30584],"eu":[1912288,30584],"sh":[1888800,30584]}], -"actors/clam_shell/clam_shell.rgba16.png": [32,32,2048,{"jp":[1285392,48],"us":[1292560,48],"eu":[1164528,48],"sh":[1141040,48]}], -"actors/clam_shell/clam_shell_mouth.rgba16.png": [32,32,2048,{"jp":[1285392,2096],"us":[1292560,2096],"eu":[1164528,2096],"sh":[1141040,2096]}], -"actors/coin/coin_front.ia16.png": [32,32,2048,{"jp":[2094912,22400],"us":[2102288,22400],"eu":[1974256,22400],"sh":[1950768,22400]}], -"actors/coin/coin_side.ia16.png": [32,32,2048,{"jp":[2094912,26496],"us":[2102288,26496],"eu":[1974256,26496],"sh":[1950768,26496]}], -"actors/coin/coin_tilt_left.ia16.png": [32,32,2048,{"jp":[2094912,28544],"us":[2102288,28544],"eu":[1974256,28544],"sh":[1950768,28544]}], -"actors/coin/coin_tilt_right.ia16.png": [32,32,2048,{"jp":[2094912,24448],"us":[2102288,24448],"eu":[1974256,24448],"sh":[1950768,24448]}], -"actors/cyan_fish/cyan_fish.rgba16.png": [32,32,2048,{"jp":[1802256,54376],"us":[1809600,54376],"eu":[1681568,54376],"sh":[1658080,54376]}], -"actors/dirt/dirt_particle.rgba16.png": [16,16,512,{"jp":[2094912,179704],"us":[2102288,179704],"eu":[1974256,179704],"sh":[1950768,179704]}], -"actors/door/bbh_door.rgba16.png": [32,64,4096,{"jp":[2094912,66832],"us":[2102288,66832],"eu":[1974256,66832],"sh":[1950768,66832]}], -"actors/door/bbh_door_overlay.rgba16.png": [32,32,2048,{"jp":[2094912,70928],"us":[2102288,70928],"eu":[1974256,70928],"sh":[1950768,70928]}], -"actors/door/door_lock.rgba16.png": [16,32,1024,{"jp":[2094912,79120],"us":[2102288,79120],"eu":[1974256,79120],"sh":[1950768,79120]}], -"actors/door/hmc_mural_door.rgba16.png": [32,64,4096,{"jp":[2094912,60688],"us":[2102288,60688],"eu":[1974256,60688],"sh":[1950768,60688]}], -"actors/door/hmc_mural_door_overlay.rgba16.png": [32,32,2048,{"jp":[2094912,64784],"us":[2102288,64784],"eu":[1974256,64784],"sh":[1950768,64784]}], -"actors/door/metal_door.rgba16.png": [32,64,4096,{"jp":[2094912,54544],"us":[2102288,54544],"eu":[1974256,54544],"sh":[1950768,54544]}], -"actors/door/metal_door_overlay.rgba16.png": [32,32,2048,{"jp":[2094912,58640],"us":[2102288,58640],"eu":[1974256,58640],"sh":[1950768,58640]}], -"actors/door/one_star_door_sign.rgba16.png": [32,32,2048,{"jp":[2094912,75024],"us":[2102288,75024],"eu":[1974256,75024],"sh":[1950768,75024]}], -"actors/door/polished_wooden_door.rgba16.png": [32,64,4096,{"jp":[2094912,40208],"us":[2102288,40208],"eu":[1974256,40208],"sh":[1950768,40208]}], -"actors/door/polished_wooden_door_overlay.rgba16.png": [32,64,4096,{"jp":[2094912,44304],"us":[2102288,44304],"eu":[1974256,44304],"sh":[1950768,44304]}], -"actors/door/rough_wooden_door.rgba16.png": [32,64,4096,{"jp":[2094912,48400],"us":[2102288,48400],"eu":[1974256,48400],"sh":[1950768,48400]}], -"actors/door/rough_wooden_door_overlay.rgba16.png": [32,32,2048,{"jp":[2094912,52496],"us":[2102288,52496],"eu":[1974256,52496],"sh":[1950768,52496]}], -"actors/door/three_star_door_sign.rgba16.png": [32,32,2048,{"jp":[2094912,77072],"us":[2102288,77072],"eu":[1974256,77072],"sh":[1950768,77072]}], -"actors/door/zero_star_door_sign.rgba16.png": [32,32,2048,{"jp":[2094912,72976],"us":[2102288,72976],"eu":[1974256,72976],"sh":[1950768,72976]}], -"actors/dorrie/dorrie_eye.rgba16.png": [16,16,512,{"jp":[1991184,39840],"us":[1998560,39840],"eu":[1870528,39840],"sh":[1847040,39840]}], -"actors/dorrie/dorrie_skin.rgba16.png": [32,64,4096,{"jp":[1991184,40352],"us":[1998560,40352],"eu":[1870528,40352],"sh":[1847040,40352]}], -"actors/dorrie/dorrie_tongue.rgba16.png": [32,32,2048,{"jp":[1844608,140240],"us":[1851952,140240],"eu":[1723920,140240],"sh":[1700432,140240]}], -"actors/exclamation_box/exclamation_box_front.rgba16.png": [32,32,2048,{"jp":[2032944,95784],"us":[2040320,95784],"eu":[1912288,95784],"sh":[1888800,95784]}], -"actors/exclamation_box/exclamation_box_side.rgba16.png": [64,32,4096,{"jp":[2032944,97832],"us":[2040320,97832],"eu":[1912288,97832],"sh":[1888800,97832]}], -"actors/exclamation_box/metal_cap_box_front.rgba16.png": [32,32,2048,{"jp":[2032944,83496],"us":[2040320,83496],"eu":[1912288,83496],"sh":[1888800,83496]}], -"actors/exclamation_box/metal_cap_box_side.rgba16.png": [64,32,4096,{"jp":[2032944,85544],"us":[2040320,85544],"eu":[1912288,85544],"sh":[1888800,85544]}], -"actors/exclamation_box/vanish_cap_box_front.rgba16.png": [32,32,2048,{"jp":[2032944,77352],"us":[2040320,77352],"eu":[1912288,77352],"sh":[1888800,77352]}], -"actors/exclamation_box/vanish_cap_box_side.rgba16.png": [32,64,4096,{"jp":[2032944,79400],"us":[2040320,79400],"eu":[1912288,79400],"sh":[1888800,79400]}], -"actors/exclamation_box/wing_cap_box_front.rgba16.png": [32,32,2048,{"jp":[2032944,89640],"us":[2040320,89640],"eu":[1912288,89640],"sh":[1888800,89640]}], -"actors/exclamation_box/wing_cap_box_side.rgba16.png": [32,64,4096,{"jp":[2032944,91688],"us":[2040320,91688],"eu":[1912288,91688],"sh":[1888800,91688]}], -"actors/exclamation_box_outline/exclamation_box_outline.rgba16.png": [32,32,2048,{"jp":[2032944,151912],"us":[2040320,151912],"eu":[1912288,151912],"sh":[1888800,151912]}], -"actors/exclamation_box_outline/exclamation_point.rgba16.png": [16,32,1024,{"jp":[2032944,154240],"us":[2040320,154240],"eu":[1912288,154240],"sh":[1888800,154240]}], -"actors/explosion/explosion_0.rgba16.png": [32,32,2048,{"jp":[2094912,2568],"us":[2102288,2568],"eu":[1974256,2568],"sh":[1950768,2568]}], -"actors/explosion/explosion_1.rgba16.png": [32,32,2048,{"jp":[2094912,4616],"us":[2102288,4616],"eu":[1974256,4616],"sh":[1950768,4616]}], -"actors/explosion/explosion_2.rgba16.png": [32,32,2048,{"jp":[2094912,6664],"us":[2102288,6664],"eu":[1974256,6664],"sh":[1950768,6664]}], -"actors/explosion/explosion_3.rgba16.png": [32,32,2048,{"jp":[2094912,8712],"us":[2102288,8712],"eu":[1974256,8712],"sh":[1950768,8712]}], -"actors/explosion/explosion_4.rgba16.png": [32,32,2048,{"jp":[2094912,10760],"us":[2102288,10760],"eu":[1974256,10760],"sh":[1950768,10760]}], -"actors/explosion/explosion_5.rgba16.png": [32,32,2048,{"jp":[2094912,12808],"us":[2102288,12808],"eu":[1974256,12808],"sh":[1950768,12808]}], -"actors/explosion/explosion_6.rgba16.png": [32,32,2048,{"jp":[2094912,14856],"us":[2102288,14856],"eu":[1974256,14856],"sh":[1950768,14856]}], -"actors/eyerok/eyerok_bricks.rgba16.png": [32,32,2048,{"jp":[1327760,36160],"us":[1334928,36160],"eu":[1206896,36160],"sh":[1183408,36160]}], -"actors/eyerok/eyerok_eye_closed.rgba16.png": [32,32,2048,{"jp":[1327760,44352],"us":[1334928,44352],"eu":[1206896,44352],"sh":[1183408,44352]}], -"actors/eyerok/eyerok_eye_mostly_closed.rgba16.png": [32,32,2048,{"jp":[1327760,42304],"us":[1334928,42304],"eu":[1206896,42304],"sh":[1183408,42304]}], -"actors/eyerok/eyerok_eye_mostly_open.rgba16.png": [32,32,2048,{"jp":[1327760,40256],"us":[1334928,40256],"eu":[1206896,40256],"sh":[1183408,40256]}], -"actors/eyerok/eyerok_eye_open.rgba16.png": [32,32,2048,{"jp":[1327760,38208],"us":[1334928,38208],"eu":[1206896,38208],"sh":[1183408,38208]}], -"actors/flame/flame_0.ia16.png": [32,32,2048,{"jp":[2094912,95008],"us":[2102288,95008],"eu":[1974256,95008],"sh":[1950768,95008]}], -"actors/flame/flame_1.ia16.png": [32,32,2048,{"jp":[2094912,97056],"us":[2102288,97056],"eu":[1974256,97056],"sh":[1950768,97056]}], -"actors/flame/flame_2.ia16.png": [32,32,2048,{"jp":[2094912,99104],"us":[2102288,99104],"eu":[1974256,99104],"sh":[1950768,99104]}], -"actors/flame/flame_3.ia16.png": [32,32,2048,{"jp":[2094912,101152],"us":[2102288,101152],"eu":[1974256,101152],"sh":[1950768,101152]}], -"actors/flame/flame_4.ia16.png": [32,32,2048,{"jp":[2094912,103200],"us":[2102288,103200],"eu":[1974256,103200],"sh":[1950768,103200]}], -"actors/flame/flame_5.ia16.png": [32,32,2048,{"jp":[2094912,105248],"us":[2102288,105248],"eu":[1974256,105248],"sh":[1950768,105248]}], -"actors/flame/flame_6.ia16.png": [32,32,2048,{"jp":[2094912,107296],"us":[2102288,107296],"eu":[1974256,107296],"sh":[1950768,107296]}], -"actors/flame/flame_7.ia16.png": [32,32,2048,{"jp":[2094912,109344],"us":[2102288,109344],"eu":[1974256,109344],"sh":[1950768,109344]}], -"actors/flyguy/flyguy_cloth_wrinkle.rgba16.png": [64,32,4096,{"jp":[2032944,57480],"us":[2040320,57480],"eu":[1912288,57480],"sh":[1888800,57480]}], -"actors/flyguy/flyguy_face.rgba16.png": [32,32,2048,{"jp":[2032944,61576],"us":[2040320,61576],"eu":[1912288,61576],"sh":[1888800,61576]}], -"actors/flyguy/flyguy_propeller.ia16.png": [32,32,2048,{"jp":[2032944,63624],"us":[2040320,63624],"eu":[1912288,63624],"sh":[1888800,63624]}], -"actors/fwoosh/fwoosh_face.ia16.png": [32,32,2048,{"jp":[1377744,88072],"us":[1384912,88072],"eu":[1256880,88072],"sh":[1233392,88072]}], -"actors/goomba/goomba_body.rgba16.png": [32,32,2048,{"jp":[2032944,103728],"us":[2040320,103728],"eu":[1912288,103728],"sh":[1888800,103728]}], -"actors/goomba/goomba_face.rgba16.png": [32,32,2048,{"jp":[2032944,105776],"us":[2040320,105776],"eu":[1912288,105776],"sh":[1888800,105776]}], -"actors/goomba/goomba_face_blink.rgba16.png": [32,32,2048,{"jp":[2032944,107824],"us":[2040320,107824],"eu":[1912288,107824],"sh":[1888800,107824]}], -"actors/haunted_cage/bbh_cage_bars.rgba16.png": [32,32,2048,{"jp":[1462368,55944],"us":[1469536,55944],"eu":[1341504,55944],"sh":[1318016,55944]}], -"actors/haunted_cage/bbh_cage_double_ornament.rgba16.png": [32,32,2048,{"jp":[1462368,51848],"us":[1469536,51848],"eu":[1341504,51848],"sh":[1318016,51848]}], -"actors/haunted_cage/bbh_cage_floor.rgba16.png": [32,32,2048,{"jp":[1462368,49800],"us":[1469536,49800],"eu":[1341504,49800],"sh":[1318016,49800]}], -"actors/haunted_cage/bbh_cage_garbage.rgba16.png": [32,32,2048,{"jp":[1462368,57992],"us":[1469536,57992],"eu":[1341504,57992],"sh":[1318016,57992]}], -"actors/haunted_cage/bbh_cage_ornament.rgba16.png": [32,16,1024,{"jp":[1462368,53896],"us":[1469536,53896],"eu":[1341504,53896],"sh":[1318016,53896]}], -"actors/haunted_cage/bbh_cage_wooden_base.rgba16.png": [32,16,1024,{"jp":[1462368,54920],"us":[1469536,54920],"eu":[1341504,54920],"sh":[1318016,54920]}], -"actors/heart/spinning_heart.rgba16.png": [32,32,2048,{"jp":[2032944,55264],"us":[2040320,55264],"eu":[1912288,55264],"sh":[1888800,55264]}], -"actors/heave_ho/heave-ho_arm_ornament.rgba16.png": [32,32,2048,{"jp":[1215456,68040],"us":[1222624,68040],"eu":[1094592,68040],"sh":[1071104,68040]}], -"actors/heave_ho/heave-ho_face.rgba16.png": [32,32,2048,{"jp":[1215456,59848],"us":[1222624,59848],"eu":[1094592,59848],"sh":[1071104,59848]}], -"actors/heave_ho/heave-ho_logo.rgba16.png": [64,32,4096,{"jp":[1215456,63944],"us":[1222624,63944],"eu":[1094592,63944],"sh":[1071104,63944]}], -"actors/heave_ho/heave-ho_platform.rgba16.png": [32,32,2048,{"jp":[1215456,61896],"us":[1222624,61896],"eu":[1094592,61896],"sh":[1071104,61896]}], -"actors/heave_ho/heave-ho_roller.rgba16.png": [16,16,512,{"jp":[1215456,70088],"us":[1222624,70088],"eu":[1094592,70088],"sh":[1071104,70088]}], -"actors/heave_ho/heave-ho_turnkey.rgba16.png": [32,32,2048,{"jp":[1215456,70600],"us":[1222624,70600],"eu":[1094592,70600],"sh":[1071104,70600]}], -"actors/hoot/hoot_eyes.rgba16.png": [32,32,2048,{"jp":[1215456,2592],"us":[1222624,2592],"eu":[1094592,2592],"sh":[1071104,2592]}], -"actors/hoot/hoot_wing.rgba16.png": [32,32,2048,{"jp":[1215456,7760],"us":[1222624,7760],"eu":[1094592,7760],"sh":[1071104,7760]}], -"actors/hoot/hoot_wing_tip.rgba16.png": [32,32,2048,{"jp":[1215456,9808],"us":[1222624,9808],"eu":[1094592,9808],"sh":[1071104,9808]}], -"actors/impact_ring/impact_ring_left_side.ia16.png": [32,64,4096,{"jp":[1599504,117328],"us":[1606720,117328],"eu":[1478688,117328],"sh":[1455200,117328]}], -"actors/impact_ring/impact_ring_right_side.ia16.png": [32,64,4096,{"jp":[1599504,121424],"us":[1606720,121424],"eu":[1478688,121424],"sh":[1455200,121424]}], -"actors/impact_smoke/impact_smoke_0.ia16.png": [64,64,8192,{"jp":[1599504,371240],"us":[1606720,371576],"eu":[1478688,371576],"sh":[1455200,371576]}], -"actors/impact_smoke/impact_smoke_1.ia16.png": [64,64,8192,{"jp":[1599504,379432],"us":[1606720,379768],"eu":[1478688,379768],"sh":[1455200,379768]}], -"actors/impact_smoke/impact_smoke_2.ia16.png": [64,64,8192,{"jp":[1599504,387624],"us":[1606720,387960],"eu":[1478688,387960],"sh":[1455200,387960]}], -"actors/impact_smoke/impact_smoke_3.ia16.png": [64,64,8192,{"jp":[1599504,395816],"us":[1606720,396152],"eu":[1478688,396152],"sh":[1455200,396152]}], -"actors/king_bobomb/bob-omb_buddy_body_unused.rgba16.png": [64,64,8192,{"jp":[1257760,25720],"us":[1264928,25720],"eu":[1136896,25720],"sh":[1113408,25720]}], -"actors/king_bobomb/bob-omb_buddy_left_side_unused.rgba16.png": [32,64,4096,{"jp":[1257760,120],"us":[1264928,120],"eu":[1136896,120],"sh":[1113408,120]}], -"actors/king_bobomb/bob-omb_buddy_right_side_unused.rgba16.png": [32,64,4096,{"jp":[1257760,4216],"us":[1264928,4216],"eu":[1136896,4216],"sh":[1113408,4216]}], -"actors/king_bobomb/king_bob-omb_arm.rgba16.png": [32,32,2048,{"jp":[1257760,8312],"us":[1264928,8312],"eu":[1136896,8312],"sh":[1113408,8312]}], -"actors/king_bobomb/king_bob-omb_body_unused.rgba16.png": [64,64,8192,{"jp":[1257760,10360],"us":[1264928,10360],"eu":[1136896,10360],"sh":[1113408,10360]}], -"actors/king_bobomb/king_bob-omb_crown_rim.rgba16.png": [32,16,1024,{"jp":[1257760,24696],"us":[1264928,24696],"eu":[1136896,24696],"sh":[1113408,24696]}], -"actors/king_bobomb/king_bob-omb_eyes.rgba16.png": [32,32,2048,{"jp":[1257760,18552],"us":[1264928,18552],"eu":[1136896,18552],"sh":[1113408,18552]}], -"actors/king_bobomb/king_bob-omb_eyes_blink.rgba16.png": [32,32,2048,{"jp":[1257760,20600],"us":[1264928,20600],"eu":[1136896,20600],"sh":[1113408,20600]}], -"actors/king_bobomb/king_bob-omb_hand.rgba16.png": [32,32,2048,{"jp":[1257760,22648],"us":[1264928,22648],"eu":[1136896,22648],"sh":[1113408,22648]}], -"actors/king_bobomb/king_bob-omb_left_side.rgba16.png": [32,64,4096,{"jp":[1257760,33912],"us":[1264928,33912],"eu":[1136896,33912],"sh":[1113408,33912]}], -"actors/king_bobomb/king_bob-omb_right_side.rgba16.png": [32,64,4096,{"jp":[1257760,38008],"us":[1264928,38008],"eu":[1136896,38008],"sh":[1113408,38008]}], -"actors/klepto/klepto_beak.rgba16.png": [32,64,4096,{"jp":[1327760,4104],"us":[1334928,4104],"eu":[1206896,4104],"sh":[1183408,4104]}], -"actors/klepto/klepto_chest_tuft.rgba16.png": [32,32,2048,{"jp":[1327760,8],"us":[1334928,8],"eu":[1206896,8],"sh":[1183408,8]}], -"actors/klepto/klepto_eye.rgba16.png": [32,32,2048,{"jp":[1327760,2056],"us":[1334928,2056],"eu":[1206896,2056],"sh":[1183408,2056]}], -"actors/klepto/klepto_wing.rgba16.png": [64,32,4096,{"jp":[1327760,8200],"us":[1334928,8200],"eu":[1206896,8200],"sh":[1183408,8200]}], -"actors/klepto/klepto_wing_flap.rgba16.png": [32,32,2048,{"jp":[1327760,12296],"us":[1334928,12296],"eu":[1206896,12296],"sh":[1183408,12296]}], -"actors/koopa/koopa_eye_border.rgba16.png": [32,32,2048,{"jp":[1844608,22088],"us":[1851952,22088],"eu":[1723920,22088],"sh":[1700432,22088]}], -"actors/koopa/koopa_eyes_closed.rgba16.png": [32,32,2048,{"jp":[1844608,20040],"us":[1851952,20040],"eu":[1723920,20040],"sh":[1700432,20040]}], -"actors/koopa/koopa_eyes_open.rgba16.png": [32,32,2048,{"jp":[1844608,17992],"us":[1851952,17992],"eu":[1723920,17992],"sh":[1700432,17992]}], -"actors/koopa/koopa_nostrils.rgba16.png": [64,32,4096,{"jp":[1844608,24136],"us":[1851952,24136],"eu":[1723920,24136],"sh":[1700432,24136]}], -"actors/koopa/koopa_shell_back.rgba16.png": [32,32,2048,{"jp":[1844608,11848],"us":[1851952,11848],"eu":[1723920,11848],"sh":[1700432,11848]}], -"actors/koopa/koopa_shell_front.rgba16.png": [32,32,2048,{"jp":[1844608,9800],"us":[1851952,9800],"eu":[1723920,9800],"sh":[1700432,9800]}], -"actors/koopa/koopa_shell_front_top.rgba16.png": [32,32,2048,{"jp":[1844608,15944],"us":[1851952,15944],"eu":[1723920,15944],"sh":[1700432,15944]}], -"actors/koopa/koopa_shoe.rgba16.png": [32,32,2048,{"jp":[1844608,13896],"us":[1851952,13896],"eu":[1723920,13896],"sh":[1700432,13896]}], -"actors/koopa_flag/koopa_flag_banner.rgba16.png": [32,32,2048,{"jp":[1844608,72],"us":[1851952,72],"eu":[1723920,72],"sh":[1700432,72]}], -"actors/koopa_shell/koopa_shell_back.rgba16.png": [32,32,2048,{"jp":[1844608,11848],"us":[1851952,11848],"eu":[1723920,11848],"sh":[1700432,11848]}], -"actors/koopa_shell/koopa_shell_front.rgba16.png": [32,32,2048,{"jp":[1844608,9800],"us":[1851952,9800],"eu":[1723920,9800],"sh":[1700432,9800]}], -"actors/lakitu_cameraman/lakitu_camera_lens.rgba16.png": [16,16,512,{"jp":[1926752,14336],"us":[1934096,14336],"eu":[1806064,14336],"sh":[1782576,14336]}], -"actors/lakitu_cameraman/lakitu_cameraman_cloud_face_unused.rgba16.png": [32,32,2048,{"jp":[1568640,60640],"us":[1575856,60640],"eu":[1447824,60640],"sh":[1424336,60640]}], -"actors/lakitu_cameraman/lakitu_cameraman_eyes_closed.rgba16.png": [64,32,4096,{"jp":[1568640,66784],"us":[1575856,66784],"eu":[1447824,66784],"sh":[1424336,66784]}], -"actors/lakitu_cameraman/lakitu_cameraman_eyes_open.rgba16.png": [64,32,4096,{"jp":[1568640,62688],"us":[1575856,62688],"eu":[1447824,62688],"sh":[1424336,62688]}], -"actors/lakitu_cameraman/lakitu_cameraman_frown.rgba16.png": [32,32,2048,{"jp":[1568640,72928],"us":[1575856,72928],"eu":[1447824,72928],"sh":[1424336,72928]}], -"actors/lakitu_cameraman/lakitu_cameraman_shell.rgba16.png": [32,32,2048,{"jp":[1568640,70880],"us":[1575856,70880],"eu":[1447824,70880],"sh":[1424336,70880]}], -"actors/lakitu_enemy/lakitu_enemy_cloud_face_unused.rgba16.png": [32,32,2048,{"jp":[1568640,60640],"us":[1575856,60640],"eu":[1447824,60640],"sh":[1424336,60640]}], -"actors/lakitu_enemy/lakitu_enemy_eyes_closed.rgba16.png": [64,32,4096,{"jp":[1568640,66784],"us":[1575856,66784],"eu":[1447824,66784],"sh":[1424336,66784]}], -"actors/lakitu_enemy/lakitu_enemy_eyes_open.rgba16.png": [64,32,4096,{"jp":[1568640,62688],"us":[1575856,62688],"eu":[1447824,62688],"sh":[1424336,62688]}], -"actors/lakitu_enemy/lakitu_enemy_frown.rgba16.png": [32,32,2048,{"jp":[1568640,72928],"us":[1575856,72928],"eu":[1447824,72928],"sh":[1424336,72928]}], -"actors/lakitu_enemy/lakitu_enemy_shell.rgba16.png": [32,32,2048,{"jp":[1568640,70880],"us":[1575856,70880],"eu":[1447824,70880],"sh":[1424336,70880]}], -"actors/leaves/leaf.rgba16.png": [16,16,512,{"jp":[2094912,117728],"us":[2102288,117728],"eu":[1974256,117728],"sh":[1950768,117728]}], -"actors/mad_piano/mad_piano_body.rgba16.png": [16,32,1024,{"jp":[1462368,29424],"us":[1469536,29424],"eu":[1341504,29424],"sh":[1318016,29424]}], -"actors/mad_piano/mad_piano_keys.rgba16.png": [32,16,1024,{"jp":[1462368,32496],"us":[1469536,32496],"eu":[1341504,32496],"sh":[1318016,32496]}], -"actors/mad_piano/mad_piano_keys_corner.rgba16.png": [32,16,1024,{"jp":[1462368,30448],"us":[1469536,30448],"eu":[1341504,30448],"sh":[1318016,30448]}], -"actors/mad_piano/mad_piano_keys_edge.rgba16.png": [32,16,1024,{"jp":[1462368,33520],"us":[1469536,33520],"eu":[1341504,33520],"sh":[1318016,33520]}], -"actors/mad_piano/mad_piano_mouth.rgba16.png": [16,32,1024,{"jp":[1462368,31472],"us":[1469536,31472],"eu":[1341504,31472],"sh":[1318016,31472]}], -"actors/mad_piano/mad_piano_tooth.rgba16.png": [32,32,2048,{"jp":[1462368,27376],"us":[1469536,27376],"eu":[1341504,27376],"sh":[1318016,27376]}], -"actors/manta/manta_eye.rgba16.png": [32,32,2048,{"jp":[1285392,12192],"us":[1292560,12192],"eu":[1164528,12192],"sh":[1141040,12192]}], -"actors/manta/manta_fin_corner.rgba16.png": [32,32,2048,{"jp":[1285392,6048],"us":[1292560,6048],"eu":[1164528,6048],"sh":[1141040,6048]}], -"actors/manta/manta_fin_edge.rgba16.png": [64,32,4096,{"jp":[1285392,14240],"us":[1292560,14240],"eu":[1164528,14240],"sh":[1141040,14240]}], -"actors/manta/manta_gills.rgba16.png": [32,64,4096,{"jp":[1285392,8096],"us":[1292560,8096],"eu":[1164528,8096],"sh":[1141040,8096]}], -"actors/mario/mario_eyes_center.rgba16.png": [32,32,2048,{"jp":[1125200,12432],"us":[1132368,12432],"eu":[1004336,12432],"sh":[980848,12432]}], -"actors/mario/mario_eyes_closed.rgba16.png": [32,32,2048,{"jp":[1125200,16528],"us":[1132368,16528],"eu":[1004336,16528],"sh":[980848,16528]}], -"actors/mario/mario_eyes_closed_unused_0.rgba16.png": [32,32,2048,{"jp":[1125200,16528],"us":[1132368,16528],"eu":[1004336,16528],"sh":[980848,16528]}], -"actors/mario/mario_eyes_closed_unused_1.rgba16.png": [32,32,2048,{"jp":[1125200,16528],"us":[1132368,16528],"eu":[1004336,16528],"sh":[980848,16528]}], -"actors/mario/mario_eyes_dead.rgba16.png": [32,32,2048,{"jp":[1125200,30864],"us":[1132368,30864],"eu":[1004336,30864],"sh":[980848,30864]}], -"actors/mario/mario_eyes_down_unused.rgba16.png": [32,32,2048,{"jp":[1125200,28816],"us":[1132368,28816],"eu":[1004336,28816],"sh":[980848,28816]}], -"actors/mario/mario_eyes_half_closed.rgba16.png": [32,32,2048,{"jp":[1125200,14480],"us":[1132368,14480],"eu":[1004336,14480],"sh":[980848,14480]}], -"actors/mario/mario_eyes_left_unused.rgba16.png": [32,32,2048,{"jp":[1125200,22672],"us":[1132368,22672],"eu":[1004336,22672],"sh":[980848,22672]}], -"actors/mario/mario_eyes_right_unused.rgba16.png": [32,32,2048,{"jp":[1125200,24720],"us":[1132368,24720],"eu":[1004336,24720],"sh":[980848,24720]}], -"actors/mario/mario_eyes_up_unused.rgba16.png": [32,32,2048,{"jp":[1125200,26768],"us":[1132368,26768],"eu":[1004336,26768],"sh":[980848,26768]}], -"actors/mario/mario_logo.rgba16.png": [32,32,2048,{"jp":[1125200,6288],"us":[1132368,6288],"eu":[1004336,6288],"sh":[980848,6288]}], -"actors/mario/mario_metal.rgba16.png": [64,32,4096,{"jp":[1125200,144],"us":[1132368,144],"eu":[1004336,144],"sh":[980848,144]}], -"actors/mario/mario_metal_wing_tip_unused.rgba16.png": [32,64,4096,{"jp":[1125200,45200],"us":[1132368,45200],"eu":[1004336,45200],"sh":[980848,45200]}], -"actors/mario/mario_metal_wing_unused.rgba16.png": [32,64,4096,{"jp":[1125200,41104],"us":[1132368,41104],"eu":[1004336,41104],"sh":[980848,41104]}], -"actors/mario/mario_mustache.rgba16.png": [32,32,2048,{"jp":[1125200,10384],"us":[1132368,10384],"eu":[1004336,10384],"sh":[980848,10384]}], -"actors/mario/mario_overalls_button.rgba16.png": [32,32,2048,{"jp":[1125200,4240],"us":[1132368,4240],"eu":[1004336,4240],"sh":[980848,4240]}], -"actors/mario/mario_sideburn.rgba16.png": [32,32,2048,{"jp":[1125200,8336],"us":[1132368,8336],"eu":[1004336,8336],"sh":[980848,8336]}], -"actors/mario/mario_wing.rgba16.png": [32,64,4096,{"jp":[1125200,32912],"us":[1132368,32912],"eu":[1004336,32912],"sh":[980848,32912]}], -"actors/mario/mario_wing_tip.rgba16.png": [32,64,4096,{"jp":[1125200,37008],"us":[1132368,37008],"eu":[1004336,37008],"sh":[980848,37008]}], -"actors/mario_cap/mario_cap_logo.rgba16.png": [32,32,2048,{"jp":[1125200,6288],"us":[1132368,6288],"eu":[1004336,6288],"sh":[980848,6288]}], -"actors/mario_cap/mario_cap_metal.rgba16.png": [64,32,4096,{"jp":[1125200,144],"us":[1132368,144],"eu":[1004336,144],"sh":[980848,144]}], -"actors/mario_cap/mario_cap_metal_wing_tip_unused.rgba16.png": [32,64,4096,{"jp":[1125200,45200],"us":[1132368,45200],"eu":[1004336,45200],"sh":[980848,45200]}], -"actors/mario_cap/mario_cap_metal_wing_unused.rgba16.png": [32,64,4096,{"jp":[1125200,41104],"us":[1132368,41104],"eu":[1004336,41104],"sh":[980848,41104]}], -"actors/mario_cap/mario_cap_wing.rgba16.png": [32,64,4096,{"jp":[1125200,32912],"us":[1132368,32912],"eu":[1004336,32912],"sh":[980848,32912]}], -"actors/mario_cap/mario_cap_wing_tip.rgba16.png": [32,64,4096,{"jp":[1125200,37008],"us":[1132368,37008],"eu":[1004336,37008],"sh":[980848,37008]}], -"actors/metal_box/metal_box_side.rgba16.png": [32,64,4096,{"jp":[2032944,145816],"us":[2040320,145816],"eu":[1912288,145816],"sh":[1888800,145816]}], -"actors/mips/mips_eyes.rgba16.png": [32,32,2048,{"jp":[1926752,64384],"us":[1934096,64624],"eu":[1806064,64624],"sh":[1782576,64624]}], -"actors/mist/mist.ia16.png": [32,32,2048,{"jp":[2094912,128],"us":[2102288,128],"eu":[1974256,128],"sh":[1950768,128]}], -"actors/moneybag/moneybag_eyes.rgba16.png": [32,32,2048,{"jp":[1979680,18864],"us":[1987056,18864],"eu":[1859024,18864],"sh":[1835536,18864]}], -"actors/moneybag/moneybag_mouth.rgba16.png": [64,32,4096,{"jp":[1979680,14768],"us":[1987056,14768],"eu":[1859024,14768],"sh":[1835536,14768]}], -"actors/monty_mole/monty_mole_cheek.rgba16.png": [32,32,2048,{"jp":[1377744,2416],"us":[1384912,2416],"eu":[1256880,2416],"sh":[1233392,2416]}], -"actors/monty_mole/monty_mole_claw.rgba16.png": [32,32,2048,{"jp":[1377744,10608],"us":[1384912,10608],"eu":[1256880,10608],"sh":[1233392,10608]}], -"actors/monty_mole/monty_mole_eye.rgba16.png": [32,32,2048,{"jp":[1377744,4464],"us":[1384912,4464],"eu":[1256880,4464],"sh":[1233392,4464]}], -"actors/monty_mole/monty_mole_nose.rgba16.png": [32,32,2048,{"jp":[1377744,6512],"us":[1384912,6512],"eu":[1256880,6512],"sh":[1233392,6512]}], -"actors/monty_mole/monty_mole_tooth.rgba16.png": [32,32,2048,{"jp":[1377744,8560],"us":[1384912,8560],"eu":[1256880,8560],"sh":[1233392,8560]}], -"actors/monty_mole_hole/monty_mole_hole.ia16.png": [32,32,2048,{"jp":[1377744,64],"us":[1384912,64],"eu":[1256880,64],"sh":[1233392,64]}], -"actors/mr_i_eyeball/mr_i_eyeball_left_side.rgba16.png": [32,64,4096,{"jp":[1991184,128],"us":[1998560,128],"eu":[1870528,128],"sh":[1847040,128]}], -"actors/mr_i_eyeball/mr_i_eyeball_right_side.rgba16.png": [32,64,4096,{"jp":[1991184,4224],"us":[1998560,4224],"eu":[1870528,4224],"sh":[1847040,4224]}], -"actors/mr_i_iris/mr_i_iris_closed.rgba16.png": [32,32,2048,{"jp":[1991184,14704],"us":[1998560,14704],"eu":[1870528,14704],"sh":[1847040,14704]}], -"actors/mr_i_iris/mr_i_iris_mostly_closed.rgba16.png": [32,32,2048,{"jp":[1991184,12656],"us":[1998560,12656],"eu":[1870528,12656],"sh":[1847040,12656]}], -"actors/mr_i_iris/mr_i_iris_mostly_open.rgba16.png": [32,32,2048,{"jp":[1991184,10608],"us":[1998560,10608],"eu":[1870528,10608],"sh":[1847040,10608]}], -"actors/mr_i_iris/mr_i_iris_open.rgba16.png": [32,32,2048,{"jp":[1991184,8560],"us":[1998560,8560],"eu":[1870528,8560],"sh":[1847040,8560]}], -"actors/mushroom_1up/1-up_mushroom.rgba16.png": [32,64,4096,{"jp":[2094912,169512],"us":[2102288,169512],"eu":[1974256,169512],"sh":[1950768,169512]}], -"actors/peach/peach_chest_jewel.rgba16.png": [16,16,512,{"jp":[1490032,11304],"us":[1497200,11304],"eu":[1369168,11304],"sh":[1345680,11304]}], -"actors/peach/peach_crown_jewel.rgba16.png": [16,16,512,{"jp":[1490032,10792],"us":[1497200,10792],"eu":[1369168,10792],"sh":[1345680,10792]}], -"actors/peach/peach_dress.rgba16.png": [32,32,2048,{"jp":[1490032,16424],"us":[1497200,16424],"eu":[1369168,16424],"sh":[1345680,16424]}], -"actors/peach/peach_eye_closed.rgba16.png": [32,32,2048,{"jp":[1490032,8744],"us":[1497200,8744],"eu":[1369168,8744],"sh":[1345680,8744]}], -"actors/peach/peach_eye_mostly_closed.rgba16.png": [32,32,2048,{"jp":[1490032,6696],"us":[1497200,6696],"eu":[1369168,6696],"sh":[1345680,6696]}], -"actors/peach/peach_eye_mostly_open.rgba16.png": [32,32,2048,{"jp":[1490032,4648],"us":[1497200,4648],"eu":[1369168,4648],"sh":[1345680,4648]}], -"actors/peach/peach_eye_open.rgba16.png": [32,32,2048,{"jp":[1490032,2600],"us":[1497200,2600],"eu":[1369168,2600],"sh":[1345680,2600]}], -"actors/peach/peach_lips.rgba16.png": [32,32,2048,{"jp":[1490032,13864],"us":[1497200,13864],"eu":[1369168,13864],"sh":[1345680,13864]}], -"actors/peach/peach_lips_scrunched.rgba16.png": [32,32,2048,{"jp":[1490032,11816],"us":[1497200,11816],"eu":[1369168,11816],"sh":[1345680,11816]}], -"actors/peach/peach_nostril.rgba16.png": [16,16,512,{"jp":[1490032,15912],"us":[1497200,15912],"eu":[1369168,15912],"sh":[1345680,15912]}], -"actors/pebble/pebble.rgba16.png": [32,32,2048,{"jp":[2094912,115456],"us":[2102288,115456],"eu":[1974256,115456],"sh":[1950768,115456]}], -"actors/penguin/penguin_beak.rgba16.png": [32,32,2048,{"jp":[1436272,21984],"us":[1443440,21984],"eu":[1315408,21984],"sh":[1291920,21984]}], -"actors/penguin/penguin_eye_angry.rgba16.png": [32,32,2048,{"jp":[1436272,17888],"us":[1443440,17888],"eu":[1315408,17888],"sh":[1291920,17888]}], -"actors/penguin/penguin_eye_angry_unused.rgba16.png": [32,32,2048,{"jp":[1436272,19936],"us":[1443440,19936],"eu":[1315408,19936],"sh":[1291920,19936]}], -"actors/penguin/penguin_eye_closed.rgba16.png": [32,32,2048,{"jp":[1436272,15840],"us":[1443440,15840],"eu":[1315408,15840],"sh":[1291920,15840]}], -"actors/penguin/penguin_eye_half_closed.rgba16.png": [32,32,2048,{"jp":[1436272,13792],"us":[1443440,13792],"eu":[1315408,13792],"sh":[1291920,13792]}], -"actors/penguin/penguin_eye_open.rgba16.png": [32,32,2048,{"jp":[1436272,11744],"us":[1443440,11744],"eu":[1315408,11744],"sh":[1291920,11744]}], -"actors/piranha_plant/piranha_plant_bottom_lip.rgba16.png": [32,32,2048,{"jp":[1844608,78840],"us":[1851952,78840],"eu":[1723920,78840],"sh":[1700432,78840]}], -"actors/piranha_plant/piranha_plant_leaf.rgba16.png": [32,64,4096,{"jp":[1844608,82936],"us":[1851952,82936],"eu":[1723920,82936],"sh":[1700432,82936]}], -"actors/piranha_plant/piranha_plant_skin.rgba16.png": [32,32,2048,{"jp":[1844608,74744],"us":[1851952,74744],"eu":[1723920,74744],"sh":[1700432,74744]}], -"actors/piranha_plant/piranha_plant_stem.rgba16.png": [32,32,2048,{"jp":[1844608,76792],"us":[1851952,76792],"eu":[1723920,76792],"sh":[1700432,76792]}], -"actors/piranha_plant/piranha_plant_tongue.rgba16.png": [32,64,4096,{"jp":[1599504,148536],"us":[1606720,148536],"eu":[1478688,148536],"sh":[1455200,148536]}], -"actors/piranha_plant/piranha_plant_tooth.rgba16.png": [32,32,2048,{"jp":[1844608,80888],"us":[1851952,80888],"eu":[1723920,80888],"sh":[1700432,80888]}], -"actors/pokey/pokey_body.rgba16.png": [32,32,2048,{"jp":[1327760,75896],"us":[1334928,75896],"eu":[1206896,75896],"sh":[1183408,75896]}], -"actors/pokey/pokey_face.rgba16.png": [32,32,2048,{"jp":[1327760,71504],"us":[1334928,71504],"eu":[1206896,71504],"sh":[1183408,71504]}], -"actors/pokey/pokey_face_blink.rgba16.png": [32,32,2048,{"jp":[1327760,73552],"us":[1334928,73552],"eu":[1206896,73552],"sh":[1183408,73552]}], -"actors/poundable_pole/poundable_pole_side.rgba16.png": [32,32,2048,{"jp":[1844608,6224],"us":[1851952,6224],"eu":[1723920,6224],"sh":[1700432,6224]}], -"actors/poundable_pole/poundable_pole_top.rgba16.png": [32,32,2048,{"jp":[1844608,4176],"us":[1851952,4176],"eu":[1723920,4176],"sh":[1700432,4176]}], -"actors/power_meter/power_meter_five_segments.rgba16.png": [32,32,2048,{"jp":[2094912,158688],"us":[2102288,158688],"eu":[1974256,158688],"sh":[1950768,158688]}], -"actors/power_meter/power_meter_four_segments.rgba16.png": [32,32,2048,{"jp":[2094912,160736],"us":[2102288,160736],"eu":[1974256,160736],"sh":[1950768,160736]}], -"actors/power_meter/power_meter_full.rgba16.png": [32,32,2048,{"jp":[2094912,152544],"us":[2102288,152544],"eu":[1974256,152544],"sh":[1950768,152544]}], -"actors/power_meter/power_meter_left_side.rgba16.png": [32,64,4096,{"jp":[2094912,144352],"us":[2102288,144352],"eu":[1974256,144352],"sh":[1950768,144352]}], -"actors/power_meter/power_meter_one_segment.rgba16.png": [32,32,2048,{"jp":[2094912,166880],"us":[2102288,166880],"eu":[1974256,166880],"sh":[1950768,166880]}], -"actors/power_meter/power_meter_right_side.rgba16.png": [32,64,4096,{"jp":[2094912,148448],"us":[2102288,148448],"eu":[1974256,148448],"sh":[1950768,148448]}], -"actors/power_meter/power_meter_seven_segments.rgba16.png": [32,32,2048,{"jp":[2094912,154592],"us":[2102288,154592],"eu":[1974256,154592],"sh":[1950768,154592]}], -"actors/power_meter/power_meter_six_segments.rgba16.png": [32,32,2048,{"jp":[2094912,156640],"us":[2102288,156640],"eu":[1974256,156640],"sh":[1950768,156640]}], -"actors/power_meter/power_meter_three_segments.rgba16.png": [32,32,2048,{"jp":[2094912,162784],"us":[2102288,162784],"eu":[1974256,162784],"sh":[1950768,162784]}], -"actors/power_meter/power_meter_two_segments.rgba16.png": [32,32,2048,{"jp":[2094912,164832],"us":[2102288,164832],"eu":[1974256,164832],"sh":[1950768,164832]}], -"actors/purple_switch/purple_switch_base.rgba16.png": [16,4,128,{"jp":[2032944,49320],"us":[2040320,49320],"eu":[1912288,49320],"sh":[1888800,49320]}], -"actors/purple_switch/purple_switch_exclamation_point.rgba16.png": [16,32,1024,{"jp":[2032944,49448],"us":[2040320,49448],"eu":[1912288,49448],"sh":[1888800,49448]}], -"actors/sand/sand_particle.rgba16.png": [16,16,512,{"jp":[2094912,178896],"us":[2102288,178896],"eu":[1974256,178896],"sh":[1950768,178896]}], -"actors/scuttlebug/scuttlebug_eye.rgba16.png": [32,32,2048,{"jp":[1991184,65800],"us":[1998560,65800],"eu":[1870528,65800],"sh":[1847040,65800]}], -"actors/scuttlebug/scuttlebug_iris.rgba16.png": [32,32,2048,{"jp":[1991184,76040],"us":[1998560,76040],"eu":[1870528,76040],"sh":[1847040,76040]}], -"actors/scuttlebug/scuttlebug_left_side.rgba16.png": [32,64,4096,{"jp":[1991184,67848],"us":[1998560,67848],"eu":[1870528,67848],"sh":[1847040,67848]}], -"actors/scuttlebug/scuttlebug_leg.rgba16.png": [32,32,2048,{"jp":[1991184,78088],"us":[1998560,78088],"eu":[1870528,78088],"sh":[1847040,78088]}], -"actors/scuttlebug/scuttlebug_right_side.rgba16.png": [32,64,4096,{"jp":[1991184,71944],"us":[1998560,71944],"eu":[1870528,71944],"sh":[1847040,71944]}], -"actors/seaweed/seaweed_base.rgba16.png": [32,32,2048,{"jp":[1802256,38416],"us":[1809600,38416],"eu":[1681568,38416],"sh":[1658080,38416]}], -"actors/seaweed/seaweed_lower_center.rgba16.png": [32,32,2048,{"jp":[1802256,36368],"us":[1809600,36368],"eu":[1681568,36368],"sh":[1658080,36368]}], -"actors/seaweed/seaweed_tip.rgba16.png": [32,32,2048,{"jp":[1802256,32272],"us":[1809600,32272],"eu":[1681568,32272],"sh":[1658080,32272]}], -"actors/seaweed/seaweed_upper_center.rgba16.png": [32,32,2048,{"jp":[1802256,34320],"us":[1809600,34320],"eu":[1681568,34320],"sh":[1658080,34320]}], -"actors/skeeter/skeeter_eye.rgba16.png": [32,32,2048,{"jp":[1802256,144],"us":[1809600,144],"eu":[1681568,144],"sh":[1658080,144]}], -"actors/skeeter/skeeter_iris.rgba16.png": [16,8,256,{"jp":[1802256,2192],"us":[1809600,2192],"eu":[1681568,2192],"sh":[1658080,2192]}], -"actors/smoke/smoke.ia16.png": [32,32,2048,{"jp":[1377744,29376],"us":[1384912,29376],"eu":[1256880,29376],"sh":[1233392,29376]}], -"actors/snowman/mr_blizzard_eye.rgba16.png": [32,32,2048,{"jp":[1436272,46192],"us":[1443440,46192],"eu":[1315408,46192],"sh":[1291920,46192]}], -"actors/snowman/mr_blizzard_left_side.rgba16.png": [32,64,4096,{"jp":[1436272,38000],"us":[1443440,38000],"eu":[1315408,38000],"sh":[1291920,38000]}], -"actors/snowman/mr_blizzard_mitten.rgba16.png": [32,32,2048,{"jp":[1436272,35952],"us":[1443440,35952],"eu":[1315408,35952],"sh":[1291920,35952]}], -"actors/snowman/mr_blizzard_mouth.rgba16.png": [32,32,2048,{"jp":[1436272,48240],"us":[1443440,48240],"eu":[1315408,48240],"sh":[1291920,48240]}], -"actors/snowman/mr_blizzard_right_side.rgba16.png": [32,64,4096,{"jp":[1436272,42096],"us":[1443440,42096],"eu":[1315408,42096],"sh":[1291920,42096]}], -"actors/snufit/snufit_body.rgba16.png": [32,32,2048,{"jp":[1991184,28896],"us":[1998560,28896],"eu":[1870528,28896],"sh":[1847040,28896]}], -"actors/snufit/snufit_eye.rgba16.png": [32,32,2048,{"jp":[1991184,30944],"us":[1998560,30944],"eu":[1870528,30944],"sh":[1847040,30944]}], -"actors/snufit/snufit_mask_strap.rgba16.png": [16,32,1024,{"jp":[1991184,32992],"us":[1998560,32992],"eu":[1870528,32992],"sh":[1847040,32992]}], -"actors/snufit/snufit_mouth.rgba16.png": [32,32,2048,{"jp":[1991184,34016],"us":[1998560,34016],"eu":[1870528,34016],"sh":[1847040,34016]}], -"actors/sparkle/sparkle_0.rgba16.png": [32,32,2048,{"jp":[1125200,160912],"us":[1132368,160912],"eu":[1004336,160912],"sh":[980848,160912]}], -"actors/sparkle/sparkle_1.rgba16.png": [32,32,2048,{"jp":[1125200,162960],"us":[1132368,162960],"eu":[1004336,162960],"sh":[980848,162960]}], -"actors/sparkle/sparkle_2.rgba16.png": [32,32,2048,{"jp":[1125200,165008],"us":[1132368,165008],"eu":[1004336,165008],"sh":[980848,165008]}], -"actors/sparkle/sparkle_3.rgba16.png": [32,32,2048,{"jp":[1125200,167056],"us":[1132368,167056],"eu":[1004336,167056],"sh":[980848,167056]}], -"actors/sparkle/sparkle_4.rgba16.png": [32,32,2048,{"jp":[1125200,169104],"us":[1132368,169104],"eu":[1004336,169104],"sh":[980848,169104]}], -"actors/sparkle/sparkle_5.rgba16.png": [32,32,2048,{"jp":[1125200,171152],"us":[1132368,171152],"eu":[1004336,171152],"sh":[980848,171152]}], -"actors/sparkle_animation/sparkle_animation_0.ia16.png": [32,32,2048,{"jp":[1125200,207496],"us":[1132368,207496],"eu":[1004336,207496],"sh":[980848,207496]}], -"actors/sparkle_animation/sparkle_animation_1.ia16.png": [32,32,2048,{"jp":[1125200,209544],"us":[1132368,209544],"eu":[1004336,209544],"sh":[980848,209544]}], -"actors/sparkle_animation/sparkle_animation_2.ia16.png": [32,32,2048,{"jp":[1125200,211592],"us":[1132368,211592],"eu":[1004336,211592],"sh":[980848,211592]}], -"actors/sparkle_animation/sparkle_animation_3.ia16.png": [32,32,2048,{"jp":[1125200,213640],"us":[1132368,213640],"eu":[1004336,213640],"sh":[980848,213640]}], -"actors/sparkle_animation/sparkle_animation_4.ia16.png": [32,32,2048,{"jp":[1125200,215688],"us":[1132368,215688],"eu":[1004336,215688],"sh":[980848,215688]}], -"actors/spindrift/spindrift_face.rgba16.png": [32,32,2048,{"jp":[1436272,1744],"us":[1443440,1744],"eu":[1315408,1744],"sh":[1291920,1744]}], -"actors/spindrift/spindrift_head.rgba16.png": [32,32,2048,{"jp":[1436272,7888],"us":[1443440,7888],"eu":[1315408,7888],"sh":[1291920,7888]}], -"actors/spindrift/spindrift_leaf.rgba16.png": [32,32,2048,{"jp":[1436272,5840],"us":[1443440,5840],"eu":[1315408,5840],"sh":[1291920,5840]}], -"actors/spindrift/spindrift_petal.rgba16.png": [32,32,2048,{"jp":[1436272,3792],"us":[1443440,3792],"eu":[1315408,3792],"sh":[1291920,3792]}], -"actors/springboard/springboard_base_unused.rgba16.png": [32,32,2048,{"jp":[1457744,2072],"us":[1464912,2072],"eu":[1336880,2072],"sh":[1313392,2072]}], -"actors/springboard/springboard_top_unused.rgba16.png": [32,32,2048,{"jp":[1457744,24],"us":[1464912,24],"eu":[1336880,24],"sh":[1313392,24]}], -"actors/star/star_eye.rgba16.png": [32,32,2048,{"jp":[1568640,31280],"us":[1575856,31280],"eu":[1447824,31280],"sh":[1424336,31280]}], -"actors/star/star_surface.rgba16.png": [32,32,2048,{"jp":[2094912,173808],"us":[2102288,173808],"eu":[1974256,173808],"sh":[1950768,173808]}], -"actors/stomp_smoke/stomp_smoke_0.ia16.png": [32,32,2048,{"jp":[1125200,139592],"us":[1132368,139592],"eu":[1004336,139592],"sh":[980848,139592]}], -"actors/stomp_smoke/stomp_smoke_1.ia16.png": [32,32,2048,{"jp":[1125200,141640],"us":[1132368,141640],"eu":[1004336,141640],"sh":[980848,141640]}], -"actors/stomp_smoke/stomp_smoke_2.ia16.png": [32,32,2048,{"jp":[1125200,143688],"us":[1132368,143688],"eu":[1004336,143688],"sh":[980848,143688]}], -"actors/stomp_smoke/stomp_smoke_3.ia16.png": [32,32,2048,{"jp":[1125200,145736],"us":[1132368,145736],"eu":[1004336,145736],"sh":[980848,145736]}], -"actors/stomp_smoke/stomp_smoke_4.ia16.png": [32,32,2048,{"jp":[1125200,147784],"us":[1132368,147784],"eu":[1004336,147784],"sh":[980848,147784]}], -"actors/stomp_smoke/stomp_smoke_5.ia16.png": [32,32,2048,{"jp":[1125200,149832],"us":[1132368,149832],"eu":[1004336,149832],"sh":[980848,149832]}], -"actors/sushi/sushi_eye.rgba16.png": [32,16,1024,{"jp":[1285392,38608],"us":[1292560,38608],"eu":[1164528,38608],"sh":[1141040,38608]}], -"actors/sushi/sushi_snout.rgba16.png": [32,32,2048,{"jp":[1285392,36560],"us":[1292560,36560],"eu":[1164528,36560],"sh":[1141040,36560]}], -"actors/sushi/sushi_tooth.rgba16.png": [8,8,128,{"jp":[1285392,39632],"us":[1292560,39632],"eu":[1164528,39632],"sh":[1141040,39632]}], -"actors/swoop/swoop_body.rgba16.png": [32,32,2048,{"jp":[1991184,17008],"us":[1998560,17008],"eu":[1870528,17008],"sh":[1847040,17008]}], -"actors/swoop/swoop_eye.rgba16.png": [32,32,2048,{"jp":[1991184,19056],"us":[1998560,19056],"eu":[1870528,19056],"sh":[1847040,19056]}], -"actors/swoop/swoop_nose.rgba16.png": [32,32,2048,{"jp":[1991184,21104],"us":[1998560,21104],"eu":[1870528,21104],"sh":[1847040,21104]}], -"actors/swoop/swoop_wing.rgba16.png": [32,32,2048,{"jp":[1991184,23152],"us":[1998560,23152],"eu":[1870528,23152],"sh":[1847040,23152]}], -"actors/thwomp/thwomp_face.rgba16.png": [32,64,4096,{"jp":[1215456,39168],"us":[1222624,39168],"eu":[1094592,39168],"sh":[1071104,39168]}], -"actors/thwomp/thwomp_surface.rgba16.png": [32,32,2048,{"jp":[1215456,43264],"us":[1222624,43264],"eu":[1094592,43264],"sh":[1071104,43264]}], -"actors/toad/toad_face.rgba16.png": [32,32,2048,{"jp":[1926752,22816],"us":[1934096,22816],"eu":[1806064,22816],"sh":[1782576,22816]}], -"actors/toad/toad_head.rgba16.png": [32,32,2048,{"jp":[1926752,24864],"us":[1934096,24864],"eu":[1806064,24864],"sh":[1782576,24864]}], -"actors/tornado/tornado.ia16.png": [32,64,4096,{"jp":[1285392,75848],"us":[1292560,75848],"eu":[1164528,75848],"sh":[1141040,75848]}], -"actors/treasure_chest/treasure_chest_front.rgba16.png": [64,32,4096,{"jp":[1802256,87976],"us":[1809600,87976],"eu":[1681568,87976],"sh":[1658080,87976]}], -"actors/treasure_chest/treasure_chest_lock.rgba16.png": [32,32,2048,{"jp":[1802256,81832],"us":[1809600,81832],"eu":[1681568,81832],"sh":[1658080,81832]}], -"actors/treasure_chest/treasure_chest_lock_top.rgba16.png": [32,32,2048,{"jp":[1802256,85928],"us":[1809600,85928],"eu":[1681568,85928],"sh":[1658080,85928]}], -"actors/treasure_chest/treasure_chest_side.rgba16.png": [32,32,2048,{"jp":[1802256,83880],"us":[1809600,83880],"eu":[1681568,83880],"sh":[1658080,83880]}], -"actors/tree/palm_tree.rgba16.png": [32,64,4096,{"jp":[2094912,205336],"us":[2102288,205336],"eu":[1974256,205336],"sh":[1950768,205336]}], -"actors/tree/pine_tree.rgba16.png": [32,64,4096,{"jp":[2094912,196448],"us":[2102288,196448],"eu":[1974256,196448],"sh":[1950768,196448]}], -"actors/tree/snowy_pine_tree.rgba16.png": [32,64,4096,{"jp":[2094912,200776],"us":[2102288,200776],"eu":[1974256,200776],"sh":[1950768,200776]}], -"actors/tree/tree_left_side.rgba16.png": [32,64,4096,{"jp":[2094912,187944],"us":[2102288,187944],"eu":[1974256,187944],"sh":[1950768,187944]}], -"actors/tree/tree_right_side.rgba16.png": [32,64,4096,{"jp":[2094912,192040],"us":[2102288,192040],"eu":[1974256,192040],"sh":[1950768,192040]}], -"actors/ukiki/ukiki_butt.rgba16.png": [32,32,2048,{"jp":[1377744,39872],"us":[1384912,39872],"eu":[1256880,39872],"sh":[1233392,39872]}], -"actors/ukiki/ukiki_face.rgba16.png": [64,32,4096,{"jp":[1377744,31680],"us":[1384912,31680],"eu":[1256880,31680],"sh":[1233392,31680]}], -"actors/ukiki/ukiki_face_blink.rgba16.png": [64,32,4096,{"jp":[1377744,35776],"us":[1384912,35776],"eu":[1256880,35776],"sh":[1233392,35776]}], -"actors/ukiki/ukiki_fur.rgba16.png": [32,32,2048,{"jp":[1377744,41920],"us":[1384912,41920],"eu":[1256880,41920],"sh":[1233392,41920]}], -"actors/unagi/unagi_body.rgba16.png": [32,32,2048,{"jp":[1285392,44832],"us":[1292560,44832],"eu":[1164528,44832],"sh":[1141040,44832]}], -"actors/unagi/unagi_eye.rgba16.png": [16,16,512,{"jp":[1285392,46880],"us":[1292560,46880],"eu":[1164528,46880],"sh":[1141040,46880]}], -"actors/unagi/unagi_head_base.rgba16.png": [32,32,2048,{"jp":[1285392,47392],"us":[1292560,47392],"eu":[1164528,47392],"sh":[1141040,47392]}], -"actors/unagi/unagi_mouth.rgba16.png": [8,8,128,{"jp":[1285392,49952],"us":[1292560,49952],"eu":[1164528,49952],"sh":[1141040,49952]}], -"actors/unagi/unagi_tail.rgba16.png": [32,32,2048,{"jp":[1285392,50080],"us":[1292560,50080],"eu":[1164528,50080],"sh":[1141040,50080]}], -"actors/unagi/unagi_tooth.rgba16.png": [16,16,512,{"jp":[1285392,49440],"us":[1292560,49440],"eu":[1164528,49440],"sh":[1141040,49440]}], -"actors/walk_smoke/walk_smoke_0.ia16.png": [32,32,2048,{"jp":[1125200,122528],"us":[1132368,122528],"eu":[1004336,122528],"sh":[980848,122528]}], -"actors/walk_smoke/walk_smoke_1.ia16.png": [32,32,2048,{"jp":[1125200,124576],"us":[1132368,124576],"eu":[1004336,124576],"sh":[980848,124576]}], -"actors/walk_smoke/walk_smoke_2.ia16.png": [32,32,2048,{"jp":[1125200,126624],"us":[1132368,126624],"eu":[1004336,126624],"sh":[980848,126624]}], -"actors/walk_smoke/walk_smoke_3.ia16.png": [32,32,2048,{"jp":[1125200,128672],"us":[1132368,128672],"eu":[1004336,128672],"sh":[980848,128672]}], -"actors/walk_smoke/walk_smoke_4.ia16.png": [32,32,2048,{"jp":[1125200,130720],"us":[1132368,130720],"eu":[1004336,130720],"sh":[980848,130720]}], -"actors/walk_smoke/walk_smoke_5.ia16.png": [32,32,2048,{"jp":[1125200,132768],"us":[1132368,132768],"eu":[1004336,132768],"sh":[980848,132768]}], -"actors/walk_smoke/walk_smoke_6.ia16.png": [32,32,2048,{"jp":[1125200,134816],"us":[1132368,134816],"eu":[1004336,134816],"sh":[980848,134816]}], -"actors/warp_pipe/warp_pipe_side.rgba16.png": [32,64,4096,{"jp":[2094912,32320],"us":[2102288,32320],"eu":[1974256,32320],"sh":[1950768,32320]}], -"actors/warp_pipe/warp_pipe_top.rgba16.png": [32,32,2048,{"jp":[2094912,37224],"us":[2102288,37224],"eu":[1974256,37224],"sh":[1950768,37224]}], -"actors/water_bubble/water_bubble.rgba16.png": [32,32,2048,{"jp":[1257760,65152],"us":[1264928,65152],"eu":[1136896,65152],"sh":[1113408,65152]}], -"actors/water_mine/water_mine_left_side_unused.rgba16.png": [32,64,4096,{"jp":[1599504,359104],"us":[1606720,359440],"eu":[1478688,359440],"sh":[1455200,359440]}], -"actors/water_mine/water_mine_right_side_unused.rgba16.png": [32,64,4096,{"jp":[1599504,363200],"us":[1606720,363536],"eu":[1478688,363536],"sh":[1455200,363536]}], -"actors/water_mine/water_mine_spike_unused.rgba16.png": [32,32,2048,{"jp":[1599504,367296],"us":[1606720,367632],"eu":[1478688,367632],"sh":[1455200,367632]}], -"actors/water_ring/water_ring.rgba16.png": [64,32,4096,{"jp":[1802256,74624],"us":[1809600,74624],"eu":[1681568,74624],"sh":[1658080,74624]}], -"actors/water_splash/water_splash_0.rgba16.png": [32,64,4096,{"jp":[1125200,173512],"us":[1132368,173512],"eu":[1004336,173512],"sh":[980848,173512]}], -"actors/water_splash/water_splash_1.rgba16.png": [32,64,4096,{"jp":[1125200,177608],"us":[1132368,177608],"eu":[1004336,177608],"sh":[980848,177608]}], -"actors/water_splash/water_splash_2.rgba16.png": [32,64,4096,{"jp":[1125200,181704],"us":[1132368,181704],"eu":[1004336,181704],"sh":[980848,181704]}], -"actors/water_splash/water_splash_3.rgba16.png": [32,64,4096,{"jp":[1125200,185800],"us":[1132368,185800],"eu":[1004336,185800],"sh":[980848,185800]}], -"actors/water_splash/water_splash_4.rgba16.png": [32,64,4096,{"jp":[1125200,189896],"us":[1132368,189896],"eu":[1004336,189896],"sh":[980848,189896]}], -"actors/water_splash/water_splash_5.rgba16.png": [32,64,4096,{"jp":[1125200,193992],"us":[1132368,193992],"eu":[1004336,193992],"sh":[980848,193992]}], -"actors/water_splash/water_splash_6.rgba16.png": [32,64,4096,{"jp":[1125200,198088],"us":[1132368,198088],"eu":[1004336,198088],"sh":[980848,198088]}], -"actors/water_splash/water_splash_7.rgba16.png": [32,64,4096,{"jp":[1125200,202184],"us":[1132368,202184],"eu":[1004336,202184],"sh":[980848,202184]}], -"actors/water_wave/water_wave_0.ia16.png": [32,32,2048,{"jp":[1125200,152408],"us":[1132368,152408],"eu":[1004336,152408],"sh":[980848,152408]}], -"actors/water_wave/water_wave_1.ia16.png": [32,32,2048,{"jp":[1125200,154456],"us":[1132368,154456],"eu":[1004336,154456],"sh":[980848,154456]}], -"actors/water_wave/water_wave_2.ia16.png": [32,32,2048,{"jp":[1125200,156504],"us":[1132368,156504],"eu":[1004336,156504],"sh":[980848,156504]}], -"actors/water_wave/water_wave_3.ia16.png": [32,32,2048,{"jp":[1125200,158552],"us":[1132368,158552],"eu":[1004336,158552],"sh":[980848,158552]}], -"actors/whirlpool/whirlpool.ia16.png": [32,64,4096,{"jp":[1285392,75848],"us":[1292560,75848],"eu":[1164528,75848],"sh":[1141040,75848]}], -"actors/white_particle/snow_particle.rgba16.png": [16,16,512,{"jp":[2094912,181920],"us":[2102288,181920],"eu":[1974256,181920],"sh":[1950768,181920]}], -"actors/white_particle_small/small_snow_particle.rgba16.png": [16,16,512,{"jp":[1125200,206720],"us":[1132368,206720],"eu":[1004336,206720],"sh":[980848,206720]}], -"actors/whomp/whomp_back.rgba16.png": [32,64,4096,{"jp":[1844608,115552],"us":[1851952,115552],"eu":[1723920,115552],"sh":[1700432,115552]}], -"actors/whomp/whomp_face.rgba16.png": [32,64,4096,{"jp":[1844608,119648],"us":[1851952,119648],"eu":[1723920,119648],"sh":[1700432,119648]}], -"actors/whomp/whomp_hand.rgba16.png": [32,32,2048,{"jp":[1844608,123744],"us":[1851952,123744],"eu":[1723920,123744],"sh":[1700432,123744]}], -"actors/whomp/whomp_surface.rgba16.png": [32,32,2048,{"jp":[1844608,125792],"us":[1851952,125792],"eu":[1723920,125792],"sh":[1700432,125792]}], -"actors/wiggler/wiggler_eye.rgba16.png": [32,32,2048,{"jp":[1568640,31280],"us":[1575856,31280],"eu":[1447824,31280],"sh":[1424336,31280]}], -"actors/wiggler/wiggler_flower.rgba16.png": [32,32,2048,{"jp":[1568640,33328],"us":[1575856,33328],"eu":[1447824,33328],"sh":[1424336,33328]}], -"actors/wiggler/wiggler_frown.rgba16.png": [32,32,2048,{"jp":[1568640,35376],"us":[1575856,35376],"eu":[1447824,35376],"sh":[1424336,35376]}], -"actors/wiggler/wiggler_nose_left_side.rgba16.png": [32,64,4096,{"jp":[1568640,37424],"us":[1575856,37424],"eu":[1447824,37424],"sh":[1424336,37424]}], -"actors/wiggler/wiggler_nose_right_side.rgba16.png": [32,64,4096,{"jp":[1568640,41520],"us":[1575856,41520],"eu":[1447824,41520],"sh":[1424336,41520]}], -"actors/wiggler/wiggler_segment_left_side.rgba16.png": [32,64,4096,{"jp":[1568640,23088],"us":[1575856,23088],"eu":[1447824,23088],"sh":[1424336,23088]}], -"actors/wiggler/wiggler_segment_right_side.rgba16.png": [32,64,4096,{"jp":[1568640,27184],"us":[1575856,27184],"eu":[1447824,27184],"sh":[1424336,27184]}], -"actors/wooden_signpost/wooden_signpost_back.rgba16.png": [32,32,2048,{"jp":[2094912,182728],"us":[2102288,182728],"eu":[1974256,182728],"sh":[1950768,182728]}], -"actors/wooden_signpost/wooden_signpost_front.rgba16.png": [32,32,2048,{"jp":[2094912,184776],"us":[2102288,184776],"eu":[1974256,184776],"sh":[1950768,184776]}], -"actors/yellow_sphere/yellow_sphere.rgba16.png": [32,32,2048,{"jp":[1215456,64],"us":[1222624,64],"eu":[1094592,64],"sh":[1071104,64]}], -"actors/yellow_sphere_small/small_yellow_sphere.rgba16.png": [32,32,2048,{"jp":[1215456,64],"us":[1222624,64],"eu":[1094592,64],"sh":[1071104,64]}], -"actors/yoshi/yoshi_eye.rgba16.png": [16,16,512,{"jp":[1490032,115872],"us":[1497200,116104],"eu":[1369168,116104],"sh":[1345680,116104]}], -"actors/yoshi/yoshi_eye_blink.rgba16.png": [16,16,512,{"jp":[1490032,116384],"us":[1497200,116616],"eu":[1369168,116616],"sh":[1345680,116616]}], -"actors/yoshi/yoshi_nostril.rgba16.png": [16,16,512,{"jp":[1490032,116896],"us":[1497200,117128],"eu":[1369168,117128],"sh":[1345680,117128]}], -"actors/yoshi_egg/yoshi_egg_0_unused.rgba16.png": [32,32,2048,{"jp":[1215456,22456],"us":[1222624,22456],"eu":[1094592,22456],"sh":[1071104,22456]}], -"actors/yoshi_egg/yoshi_egg_1_unused.rgba16.png": [32,32,2048,{"jp":[1215456,24504],"us":[1222624,24504],"eu":[1094592,24504],"sh":[1071104,24504]}], -"actors/yoshi_egg/yoshi_egg_2_unused.rgba16.png": [32,32,2048,{"jp":[1215456,26552],"us":[1222624,26552],"eu":[1094592,26552],"sh":[1071104,26552]}], -"actors/yoshi_egg/yoshi_egg_3_unused.rgba16.png": [32,32,2048,{"jp":[1215456,28600],"us":[1222624,28600],"eu":[1094592,28600],"sh":[1071104,28600]}], -"actors/yoshi_egg/yoshi_egg_4_unused.rgba16.png": [32,32,2048,{"jp":[1215456,30648],"us":[1222624,30648],"eu":[1094592,30648],"sh":[1071104,30648]}], -"actors/yoshi_egg/yoshi_egg_5_unused.rgba16.png": [32,32,2048,{"jp":[1215456,32696],"us":[1222624,32696],"eu":[1094592,32696],"sh":[1071104,32696]}], -"actors/yoshi_egg/yoshi_egg_6_unused.rgba16.png": [32,32,2048,{"jp":[1215456,34744],"us":[1222624,34744],"eu":[1094592,34744],"sh":[1071104,34744]}], -"actors/yoshi_egg/yoshi_egg_7_unused.rgba16.png": [32,32,2048,{"jp":[1215456,36792],"us":[1222624,36792],"eu":[1094592,36792],"sh":[1071104,36792]}], -"assets/demos/bbh.bin": [988,{"jp":[5733368],"us":[5741664],"eu":[5620584],"sh":[5589632]}], -"assets/demos/bitdw.bin": [1412,{"us":[5747100],"sh":[5595068]}], -"assets/demos/ccm.bin": [1320,{"jp":[5734356],"us":[5742652],"eu":[5621572],"sh":[5590620]}], -"assets/demos/hmc.bin": [980,{"jp":[5735676],"us":[5743972],"eu":[5622892],"sh":[5591940]}], -"assets/demos/jrb.bin": [620,{"jp":[5736656],"us":[5744952],"eu":[5623872],"sh":[5592920]}], -"assets/demos/pss.bin": [748,{"jp":[5737948],"us":[5746244],"eu":[5625164],"sh":[5594212]}], -"assets/demos/unused.bin": [108,{"jp":[5738696],"us":[5746992],"eu":[5625912],"sh":[5594960]}], -"assets/demos/wf.bin": [672,{"jp":[5737276],"us":[5745572],"eu":[5624492],"sh":[5593540]}], -"levels/bbh/0.rgba16.png": [32,64,4096,{"jp":[3604960,0],"us":[3611712,0],"eu":[3485312,0],"sh":[3459680,0]}], -"levels/bbh/1.rgba16.png": [32,32,2048,{"jp":[3604960,4096],"us":[3611712,4096],"eu":[3485312,4096],"sh":[3459680,4096]}], -"levels/bbh/2.rgba16.png": [32,32,2048,{"jp":[3604960,6144],"us":[3611712,6144],"eu":[3485312,6144],"sh":[3459680,6144]}], -"levels/bbh/3.rgba16.png": [32,64,4096,{"jp":[3604960,8192],"us":[3611712,8192],"eu":[3485312,8192],"sh":[3459680,8192]}], -"levels/bbh/4.rgba16.png": [16,32,1024,{"jp":[3604960,12288],"us":[3611712,12288],"eu":[3485312,12288],"sh":[3459680,12288]}], -"levels/bbh/5.rgba16.png": [32,64,4096,{"jp":[3604960,13312],"us":[3611712,13312],"eu":[3485312,13312],"sh":[3459680,13312]}], -"levels/bbh/6.rgba16.png": [16,32,1024,{"jp":[3604960,17408],"us":[3611712,17408],"eu":[3485312,17408],"sh":[3459680,17408]}], -"levels/bitdw/0.rgba16.png": [32,32,2048,{"jp":[4533568,0],"us":[4541952,0],"eu":[4415552,0],"sh":[4389920,0]}], -"levels/bitdw/1.rgba16.png": [32,32,2048,{"jp":[4533568,2048],"us":[4541952,2048],"eu":[4415552,2048],"sh":[4389920,2048]}], -"levels/bitdw/2.rgba16.png": [32,32,2048,{"jp":[4533568,4096],"us":[4541952,4096],"eu":[4415552,4096],"sh":[4389920,4096]}], -"levels/bitdw/3.rgba16.png": [32,32,2048,{"jp":[4533568,6144],"us":[4541952,6144],"eu":[4415552,6144],"sh":[4389920,6144]}], -"levels/bitfs/0.rgba16.png": [32,64,4096,{"jp":[4584464,0],"us":[4592848,0],"eu":[4466448,0],"sh":[4440816,0]}], -"levels/bitfs/1.rgba16.png": [32,32,2048,{"jp":[4584464,4096],"us":[4592848,4096],"eu":[4466448,4096],"sh":[4440816,4096]}], -"levels/bitfs/2.rgba16.png": [32,32,2048,{"jp":[4584464,6144],"us":[4592848,6144],"eu":[4466448,6144],"sh":[4440816,6144]}], -"levels/bits/0.rgba16.png": [32,64,4096,{"jp":[4629216,0],"us":[4637600,0],"eu":[4511200,0],"sh":[4485568,0]}], -"levels/bits/1.rgba16.png": [64,32,4096,{"jp":[4629216,4096],"us":[4637600,4096],"eu":[4511200,4096],"sh":[4485568,4096]}], -"levels/bits/2.rgba16.png": [32,32,2048,{"jp":[4629216,8192],"us":[4637600,8192],"eu":[4511200,8192],"sh":[4485568,8192]}], -"levels/bob/0.rgba16.png": [32,32,2048,{"jp":[4170512,0],"us":[4178608,0],"eu":[4052208,0],"sh":[4026576,0]}], -"levels/bob/1.rgba16.png": [32,32,2048,{"jp":[4170512,2048],"us":[4178608,2048],"eu":[4052208,2048],"sh":[4026576,2048]}], -"levels/bob/2.rgba16.png": [32,32,2048,{"jp":[4170512,4096],"us":[4178608,4096],"eu":[4052208,4096],"sh":[4026576,4096]}], -"levels/bob/3.rgba16.png": [32,32,2048,{"jp":[4170512,6144],"us":[4178608,6144],"eu":[4052208,6144],"sh":[4026576,6144]}], -"levels/bob/4.rgba16.png": [32,32,2048,{"jp":[4170512,8192],"us":[4178608,8192],"eu":[4052208,8192],"sh":[4026576,8192]}], -"levels/bowser_1/0.rgba16.png": [32,64,4096,{"jp":[4982976,0],"us":[4991264,0],"eu":[4870192,0],"sh":[4839232,0]}], -"levels/bowser_1/1.rgba16.png": [32,32,2048,{"jp":[4982976,4096],"us":[4991264,4096],"eu":[4870192,4096],"sh":[4839232,4096]}], -"levels/bowser_1/2.rgba16.png": [32,32,2048,{"jp":[4982976,6144],"us":[4991264,6144],"eu":[4870192,6144],"sh":[4839232,6144]}], -"levels/bowser_2/0.rgba16.png": [32,32,2048,{"jp":[5028720,0],"us":[5037008,0],"eu":[4915936,0],"sh":[4884976,0]}], -"levels/bowser_3/0.rgba16.png": [32,32,2048,{"jp":[5032864,0],"us":[5041152,0],"eu":[4920080,0],"sh":[4889120,0]}], -"levels/bowser_3/1.rgba16.png": [32,32,2048,{"jp":[5032864,2048],"us":[5041152,2048],"eu":[4920080,2048],"sh":[4889120,2048]}], -"levels/bowser_3/2.rgba16.png": [32,64,4096,{"jp":[5032864,4096],"us":[5041152,4096],"eu":[4920080,4096],"sh":[4889120,4096]}], -"levels/castle_grounds/0.rgba16.png": [32,64,4096,{"jp":[4492416,0],"us":[4500416,0],"eu":[4374016,0],"sh":[4348384,0]}], -"levels/castle_grounds/1.rgba16.png": [64,32,4096,{"jp":[4492416,4096],"us":[4500416,4096],"eu":[4374016,4096],"sh":[4348384,4096]}], -"levels/castle_grounds/2.rgba16.png": [64,32,4096,{"jp":[4492416,8192],"us":[4500416,8192],"eu":[4374016,8192],"sh":[4348384,8192]}], -"levels/castle_grounds/3.rgba16.png": [32,64,4096,{"jp":[4492416,51688],"us":[4500416,51688],"eu":[4374016,51688],"sh":[4348384,51688]}], -"levels/castle_grounds/4.rgba16.png": [32,64,4096,{"jp":[4492416,55784],"us":[4500416,55784],"eu":[4374016,55784],"sh":[4348384,55784]}], -"levels/castle_grounds/5.ia8.png": [64,32,2048,{"us":[4500416,60136],"eu":[4374016,60136],"sh":[4348384,60136]}], -"levels/castle_inside/1.rgba16.png": [32,32,2048,{"jp":[3754192,2048],"us":[3760960,2048],"eu":[3634560,2048],"sh":[3608928,2048]}], -"levels/castle_inside/10.rgba16.png": [32,32,2048,{"jp":[3754192,28672],"us":[3760960,28672],"eu":[3634560,28672],"sh":[3608928,28672]}], -"levels/castle_inside/11.rgba16.png": [32,32,2048,{"jp":[3754192,30720],"us":[3760960,30720],"eu":[3634560,30720],"sh":[3608928,30720]}], -"levels/castle_inside/12.rgba16.png": [32,32,2048,{"jp":[3754192,32768],"us":[3760960,32768],"eu":[3634560,32768],"sh":[3608928,32768]}], -"levels/castle_inside/13.rgba16.png": [32,32,2048,{"jp":[3754192,34816],"us":[3760960,34816],"eu":[3634560,34816],"sh":[3608928,34816]}], -"levels/castle_inside/14.rgba16.png": [32,32,2048,{"jp":[3754192,36864],"us":[3760960,36864],"eu":[3634560,36864],"sh":[3608928,36864]}], -"levels/castle_inside/15.rgba16.png": [32,32,2048,{"jp":[3754192,38912],"us":[3760960,38912],"eu":[3634560,38912],"sh":[3608928,38912]}], -"levels/castle_inside/16.ia16.png": [32,32,2048,{"jp":[3754192,40960],"us":[3760960,40960],"eu":[3634560,40960],"sh":[3608928,40960]}], -"levels/castle_inside/17.rgba16.png": [64,32,4096,{"jp":[3754192,43008],"us":[3760960,43008],"eu":[3634560,43008],"sh":[3608928,43008]}], -"levels/castle_inside/18.rgba16.png": [64,32,4096,{"jp":[3754192,47104],"us":[3760960,47104],"eu":[3634560,47104],"sh":[3608928,47104]}], -"levels/castle_inside/19.rgba16.png": [64,32,4096,{"jp":[3754192,51200],"us":[3760960,51200],"eu":[3634560,51200],"sh":[3608928,51200]}], -"levels/castle_inside/2.ia16.png": [32,64,4096,{"jp":[3298272,47104],"us":[3305024,47104],"eu":[3178624,47104],"sh":[3152992,47104]}], -"levels/castle_inside/20.rgba16.png": [64,32,4096,{"jp":[3754192,55296],"us":[3760960,55296],"eu":[3634560,55296],"sh":[3608928,55296]}], -"levels/castle_inside/21.rgba16.png": [64,32,4096,{"jp":[3754192,59392],"us":[3760960,59392],"eu":[3634560,59392],"sh":[3608928,59392]}], -"levels/castle_inside/22.rgba16.png": [64,32,4096,{"jp":[3754192,63488],"us":[3760960,63488],"eu":[3634560,63488],"sh":[3608928,63488]}], -"levels/castle_inside/23.rgba16.png": [64,32,4096,{"jp":[3754192,67584]}], -"levels/castle_inside/23_us.rgba16.png": [64,32,4096,{"us":[3760960,67584],"eu":[3634560,67584],"sh":[3608928,67584]}], -"levels/castle_inside/24.rgba16.png": [64,32,4096,{"jp":[3754192,71680]}], -"levels/castle_inside/24_us.rgba16.png": [64,32,4096,{"us":[3760960,71680],"eu":[3634560,71680],"sh":[3608928,71680]}], -"levels/castle_inside/25.rgba16.png": [64,32,4096,{"jp":[3754192,75776],"us":[3760960,75776],"eu":[3634560,75776],"sh":[3608928,75776]}], -"levels/castle_inside/26.rgba16.png": [64,32,4096,{"jp":[3754192,79872],"us":[3760960,79872],"eu":[3634560,79872],"sh":[3608928,79872]}], -"levels/castle_inside/27.rgba16.png": [64,32,4096,{"jp":[3754192,83968],"us":[3760960,83968],"eu":[3634560,83968],"sh":[3608928,83968]}], -"levels/castle_inside/28.rgba16.png": [64,32,4096,{"jp":[3754192,88064],"us":[3760960,88064],"eu":[3634560,88064],"sh":[3608928,88064]}], -"levels/castle_inside/29.rgba16.png": [32,32,2048,{"jp":[3754192,92160],"us":[3760960,92160],"eu":[3634560,92160],"sh":[3608928,92160]}], -"levels/castle_inside/3.rgba16.png": [32,64,4096,{"jp":[3754192,8192],"us":[3760960,8192],"eu":[3634560,8192],"sh":[3608928,8192]}], -"levels/castle_inside/30.rgba16.png": [32,32,2048,{"jp":[3754192,94208],"us":[3760960,94208],"eu":[3634560,94208],"sh":[3608928,94208]}], -"levels/castle_inside/31.rgba16.png": [64,32,4096,{"jp":[3754192,96256],"us":[3760960,96256],"eu":[3634560,96256],"sh":[3608928,96256]}], -"levels/castle_inside/32.rgba16.png": [64,32,4096,{"jp":[3754192,100352],"us":[3760960,100352],"eu":[3634560,100352],"sh":[3608928,100352]}], -"levels/castle_inside/33.rgba16.png": [64,32,4096,{"jp":[3754192,104448],"us":[3760960,104448],"eu":[3634560,104448],"sh":[3608928,104448]}], -"levels/castle_inside/34.rgba16.png": [64,32,4096,{"jp":[3754192,108544],"us":[3760960,108544],"eu":[3634560,108544],"sh":[3608928,108544]}], -"levels/castle_inside/35.rgba16.png": [64,32,4096,{"jp":[3754192,112640],"us":[3760960,112640],"eu":[3634560,112640],"sh":[3608928,112640]}], -"levels/castle_inside/36.rgba16.png": [64,32,4096,{"jp":[3754192,116736],"us":[3760960,116736],"eu":[3634560,116736],"sh":[3608928,116736]}], -"levels/castle_inside/37.rgba16.png": [64,32,4096,{"jp":[3754192,120832],"us":[3760960,120832],"eu":[3634560,120832],"sh":[3608928,120832]}], -"levels/castle_inside/38.rgba16.png": [64,32,4096,{"jp":[3754192,124928],"us":[3760960,124928],"eu":[3634560,124928],"sh":[3608928,124928]}], -"levels/castle_inside/39.rgba16.png": [64,32,4096,{"jp":[3754192,129024],"us":[3760960,129024],"eu":[3634560,129024],"sh":[3608928,129024]}], -"levels/castle_inside/4.rgba16.png": [32,32,2048,{"jp":[3754192,12288],"us":[3760960,12288],"eu":[3634560,12288],"sh":[3608928,12288]}], -"levels/castle_inside/40.rgba16.png": [64,32,4096,{"jp":[3754192,133120],"us":[3760960,133120],"eu":[3634560,133120],"sh":[3608928,133120]}], -"levels/castle_inside/5.rgba16.png": [32,64,4096,{"jp":[3754192,14336],"us":[3760960,14336],"eu":[3634560,14336],"sh":[3608928,14336]}], -"levels/castle_inside/6.rgba16.png": [32,64,4096,{"jp":[3754192,18432],"us":[3760960,18432],"eu":[3634560,18432],"sh":[3608928,18432]}], -"levels/castle_inside/7.rgba16.png": [32,32,2048,{"jp":[3754192,22528],"us":[3760960,22528],"eu":[3634560,22528],"sh":[3608928,22528]}], -"levels/castle_inside/8.rgba16.png": [32,32,2048,{"jp":[3754192,24576],"us":[3760960,24576],"eu":[3634560,24576],"sh":[3608928,24576]}], -"levels/castle_inside/9.rgba16.png": [32,32,2048,{"jp":[3754192,26624],"us":[3760960,26624],"eu":[3634560,26624],"sh":[3608928,26624]}], -"levels/castle_inside/castle_light.ia16.png": [32,32,2048,{"jp":[3432432,47104],"us":[3439184,47104],"eu":[3312784,47104],"sh":[3287152,47104]}], -"levels/ccm/0.rgba16.png": [32,32,2048,{"jp":[3677936,0],"us":[3684688,0],"eu":[3558288,0],"sh":[3532656,0]}], -"levels/ccm/1.rgba16.png": [32,4,256,{"jp":[3677936,2048],"us":[3684688,2048],"eu":[3558288,2048],"sh":[3532656,2048]}], -"levels/ccm/10.rgba16.png": [32,32,2048,{"jp":[3677936,17152],"us":[3684688,17152],"eu":[3558288,17152],"sh":[3532656,17152]}], -"levels/ccm/11.rgba16.png": [32,32,2048,{"jp":[3677936,19200],"us":[3684688,19200],"eu":[3558288,19200],"sh":[3532656,19200]}], -"levels/ccm/12.rgba16.png": [32,32,2048,{"jp":[3677936,72024],"us":[3684688,72024],"eu":[3558288,72024],"sh":[3532656,72024]}], -"levels/ccm/2.rgba16.png": [32,32,2048,{"jp":[3677936,2304],"us":[3684688,2304],"eu":[3558288,2304],"sh":[3532656,2304]}], -"levels/ccm/3.rgba16.png": [32,32,2048,{"jp":[3677936,4352],"us":[3684688,4352],"eu":[3558288,4352],"sh":[3532656,4352]}], -"levels/ccm/4.rgba16.png": [32,32,2048,{"jp":[3677936,6400],"us":[3684688,6400],"eu":[3558288,6400],"sh":[3532656,6400]}], -"levels/ccm/5.rgba16.png": [32,32,2048,{"jp":[1436272,48240],"us":[1443440,48240],"eu":[1315408,48240],"sh":[1291920,48240]}], -"levels/ccm/6.rgba16.png": [32,32,2048,{"jp":[1436272,46192],"us":[1443440,46192],"eu":[1315408,46192],"sh":[1291920,46192]}], -"levels/ccm/7.rgba16.png": [32,32,2048,{"jp":[3677936,12544],"us":[3684688,12544],"eu":[3558288,12544],"sh":[3532656,12544]}], -"levels/ccm/8.ia16.png": [16,16,512,{"jp":[3677936,14592],"us":[3684688,14592],"eu":[3558288,14592],"sh":[3532656,14592]}], -"levels/ccm/9.ia16.png": [32,32,2048,{"jp":[3677936,15104],"us":[3684688,15104],"eu":[3558288,15104],"sh":[3532656,15104]}], -"levels/cotmc/0.rgba16.png": [64,32,4096,{"jp":[4939888,0],"us":[4948176,0],"eu":[4827104,0],"sh":[4796144,0]}], -"levels/cotmc/1.rgba16.png": [32,32,2048,{"jp":[4939888,4096],"us":[4948176,4096],"eu":[4827104,4096],"sh":[4796144,4096]}], -"levels/cotmc/2.rgba16.png": [32,32,2048,{"jp":[4939888,6144],"us":[4948176,6144],"eu":[4827104,6144],"sh":[4796144,6144]}], -"levels/cotmc/3.rgba16.png": [32,32,2048,{"jp":[4939888,8192],"us":[4948176,8192],"eu":[4827104,8192],"sh":[4796144,8192]}], -"levels/cotmc/4.rgba16.png": [64,16,2048,{"jp":[4939888,10240],"us":[4948176,10240],"eu":[4827104,10240],"sh":[4796144,10240]}], -"levels/ddd/0.rgba16.png": [32,64,4096,{"jp":[4765904,0],"us":[4774192,0],"eu":[4647792,0],"sh":[4622160,0]}], -"levels/ddd/1.rgba16.png": [32,32,2048,{"jp":[3432432,4096],"us":[3439184,4096],"eu":[3312784,4096],"sh":[3287152,4096]}], -"levels/ddd/2.rgba16.png": [32,32,2048,{"jp":[4765904,6144],"us":[4774192,6144],"eu":[4647792,6144],"sh":[4622160,6144]}], -"levels/ddd/3.rgba16.png": [64,32,4096,{"jp":[4765904,8192],"us":[4774192,8192],"eu":[4647792,8192],"sh":[4622160,8192]}], -"levels/ddd/4.rgba16.png": [32,32,2048,{"jp":[4765904,12288],"us":[4774192,12288],"eu":[4647792,12288],"sh":[4622160,12288]}], -"levels/ending/cake.bin": [153600,{"jp":[4834992,0],"us":[4843280,0],"sh":[4691248,0]}], -"levels/ending/cake_eu.bin": [143360,{"eu":[4716880,0]}], -"levels/ending/eu_023000.rgba16.png": [64,32,4096,{"eu":[4716880,143360]}], -"levels/ending/eu_024000.rgba16.png": [64,32,4096,{"eu":[4716880,147456]}], -"levels/ending/eu_025000.rgba16.png": [64,32,4096,{"eu":[4716880,151552]}], -"levels/ending/eu_026000.rgba16.png": [64,32,4096,{"eu":[4716880,155648]}], -"levels/ending/eu_027000.rgba16.png": [64,32,4096,{"eu":[4716880,159744]}], -"levels/ending/eu_028000.rgba16.png": [64,32,4096,{"eu":[4716880,163840]}], -"levels/hmc/0.rgba16.png": [32,64,4096,{"jp":[3993136,0],"us":[4001216,0],"eu":[3874816,0],"sh":[3849184,0]}], -"levels/hmc/1.rgba16.png": [32,64,4096,{"jp":[3993136,4096],"us":[4001216,4096],"eu":[3874816,4096],"sh":[3849184,4096]}], -"levels/hmc/2.rgba16.png": [32,64,4096,{"jp":[3993136,8192],"us":[4001216,8192],"eu":[3874816,8192],"sh":[3849184,8192]}], -"levels/hmc/3.rgba16.png": [32,32,2048,{"jp":[3993136,12288],"us":[4001216,12288],"eu":[3874816,12288],"sh":[3849184,12288]}], -"levels/hmc/4.rgba16.png": [32,32,2048,{"jp":[3993136,14336],"us":[4001216,14336],"eu":[3874816,14336],"sh":[3849184,14336]}], -"levels/hmc/5.rgba16.png": [32,32,2048,{"jp":[3993136,16384],"us":[4001216,16384],"eu":[3874816,16384],"sh":[3849184,16384]}], -"levels/hmc/6.rgba16.png": [32,64,4096,{"jp":[3993136,18432],"us":[4001216,18432],"eu":[3874816,18432],"sh":[3849184,18432]}], -"levels/hmc/7.rgba16.png": [32,32,2048,{"jp":[3754192,92160],"us":[3760960,92160],"eu":[3634560,92160],"sh":[3608928,92160]}], -"levels/intro/0.rgba16.png": [32,32,2048,{"jp":[2524448,32416],"us":[2532256,32416],"eu":[2401056,32416],"sh":[2377888,32416]}], -"levels/intro/1.rgba16.png": [32,32,2048,{"jp":[2524448,34464],"us":[2532256,34464],"eu":[2401056,34464],"sh":[2377888,34464]}], -"levels/intro/2_copyright.rgba16.png": [128,16,4096,{"jp":[2524448,46240],"us":[2532256,46240]}], -"levels/intro/2_eu_copyright.rgba16.png": [128,16,4096,{"eu":[2401056,46240],"sh":[2377888,46240]}], -"levels/intro/3_eu_tm.rgba16.png": [16,16,512,{"eu":[2401056,50336]}], -"levels/intro/3_tm.rgba16.png": [16,16,512,{"jp":[2524448,50336],"us":[2532256,50336]}], -"levels/intro/3_sh_tm.rgba16.png": [16,16,512,{"sh":[2377888,50336]}], -"levels/jrb/0.rgba16.png": [32,32,2048,{"jp":[3432432,4096],"us":[3439184,4096],"eu":[3312784,4096],"sh":[3287152,4096]}], -"levels/jrb/1.rgba16.png": [64,32,4096,{"jp":[4294592,2048],"us":[4302688,2048],"eu":[4176288,2048],"sh":[4150656,2048]}], -"levels/jrb/2.rgba16.png": [32,32,2048,{"jp":[4294592,6144],"us":[4302688,6144],"eu":[4176288,6144],"sh":[4150656,6144]}], -"levels/jrb/3.rgba16.png": [32,32,2048,{"jp":[4294592,8192],"us":[4302688,8192],"eu":[4176288,8192],"sh":[4150656,8192]}], -"levels/lll/0.rgba16.png": [32,32,2048,{"jp":[4678592,0],"us":[4687008,0],"eu":[4560608,0],"sh":[4534976,0]}], -"levels/lll/1.rgba16.png": [32,32,2048,{"jp":[4678592,2048],"us":[4687008,2048],"eu":[4560608,2048],"sh":[4534976,2048]}], -"levels/lll/10.rgba16.png": [32,32,2048,{"jp":[4678592,20480],"us":[4687008,20480],"eu":[4560608,20480],"sh":[4534976,20480]}], -"levels/lll/11.rgba16.png": [32,32,2048,{"jp":[4678592,22528],"us":[4687008,22528],"eu":[4560608,22528],"sh":[4534976,22528]}], -"levels/lll/12.rgba16.png": [32,32,2048,{"jp":[4678592,24576],"us":[4687008,24576],"eu":[4560608,24576],"sh":[4534976,24576]}], -"levels/lll/13.rgba16.png": [32,32,2048,{"jp":[4678592,26624],"us":[4687008,26624],"eu":[4560608,26624],"sh":[4534976,26624]}], -"levels/lll/14.rgba16.png": [32,32,2048,{"jp":[4678592,28672],"us":[4687008,28672],"eu":[4560608,28672],"sh":[4534976,28672]}], -"levels/lll/15.rgba16.png": [32,32,2048,{"jp":[4678592,30720],"us":[4687008,30720],"eu":[4560608,30720],"sh":[4534976,30720]}], -"levels/lll/16.rgba16.png": [32,32,2048,{"jp":[4678592,32768],"us":[4687008,32768],"eu":[4560608,32768],"sh":[4534976,32768]}], -"levels/lll/17.rgba16.png": [32,32,2048,{"jp":[4678592,34816],"us":[4687008,34816],"eu":[4560608,34816],"sh":[4534976,34816]}], -"levels/lll/18.rgba16.png": [32,32,2048,{"jp":[4678592,36864],"us":[4687008,36864],"eu":[4560608,36864],"sh":[4534976,36864]}], -"levels/lll/19.rgba16.png": [32,32,2048,{"jp":[4678592,38912],"us":[4687008,38912],"eu":[4560608,38912],"sh":[4534976,38912]}], -"levels/lll/2.rgba16.png": [32,32,2048,{"jp":[4678592,4096],"us":[4687008,4096],"eu":[4560608,4096],"sh":[4534976,4096]}], -"levels/lll/20.rgba16.png": [32,32,2048,{"jp":[4678592,40960],"us":[4687008,40960],"eu":[4560608,40960],"sh":[4534976,40960]}], -"levels/lll/21.rgba16.png": [32,32,2048,{"jp":[4678592,43008],"us":[4687008,43008],"eu":[4560608,43008],"sh":[4534976,43008]}], -"levels/lll/22.rgba16.png": [32,32,2048,{"jp":[4678592,45056],"us":[4687008,45056],"eu":[4560608,45056],"sh":[4534976,45056]}], -"levels/lll/23.rgba16.png": [32,32,2048,{"jp":[4678592,47104],"us":[4687008,47104],"eu":[4560608,47104],"sh":[4534976,47104]}], -"levels/lll/24.rgba16.png": [32,32,2048,{"jp":[4678592,49152],"us":[4687008,49152],"eu":[4560608,49152],"sh":[4534976,49152]}], -"levels/lll/25.rgba16.png": [32,32,2048,{"jp":[4678592,51200],"us":[4687008,51200],"eu":[4560608,51200],"sh":[4534976,51200]}], -"levels/lll/26.rgba16.png": [16,16,512,{"jp":[4678592,53248],"us":[4687008,53248],"eu":[4560608,53248],"sh":[4534976,53248]}], -"levels/lll/27.ia16.png": [16,16,512,{"jp":[3677936,14592],"us":[3684688,14592],"eu":[3558288,14592],"sh":[3532656,14592]}], -"levels/lll/28.rgba16.png": [32,32,2048,{"jp":[4678592,54272],"us":[4687008,54272],"eu":[4560608,54272],"sh":[4534976,54272]}], -"levels/lll/29.rgba16.png": [32,32,2048,{"jp":[4678592,56320],"us":[4687008,56320],"eu":[4560608,56320],"sh":[4534976,56320]}], -"levels/lll/3.rgba16.png": [32,32,2048,{"jp":[4678592,6144],"us":[4687008,6144],"eu":[4560608,6144],"sh":[4534976,6144]}], -"levels/lll/30.rgba16.png": [32,32,2048,{"jp":[4678592,58368],"us":[4687008,58368],"eu":[4560608,58368],"sh":[4534976,58368]}], -"levels/lll/31.rgba16.png": [32,32,2048,{"jp":[4678592,60416],"us":[4687008,60416],"eu":[4560608,60416],"sh":[4534976,60416]}], -"levels/lll/32.rgba16.png": [64,16,2048,{"jp":[4678592,62464],"us":[4687008,62464],"eu":[4560608,62464],"sh":[4534976,62464]}], -"levels/lll/4.rgba16.png": [32,32,2048,{"jp":[4678592,8192],"us":[4687008,8192],"eu":[4560608,8192],"sh":[4534976,8192]}], -"levels/lll/5.rgba16.png": [32,32,2048,{"jp":[4678592,10240],"us":[4687008,10240],"eu":[4560608,10240],"sh":[4534976,10240]}], -"levels/lll/6.rgba16.png": [32,32,2048,{"jp":[4678592,12288],"us":[4687008,12288],"eu":[4560608,12288],"sh":[4534976,12288]}], -"levels/lll/7.rgba16.png": [32,32,2048,{"jp":[3262320,6144],"us":[3269072,6144],"eu":[3142672,6144],"sh":[3117040,6144]}], -"levels/lll/8.rgba16.png": [32,32,2048,{"jp":[4678592,16384],"us":[4687008,16384],"eu":[4560608,16384],"sh":[4534976,16384]}], -"levels/lll/9.rgba16.png": [32,32,2048,{"jp":[4678592,18432],"us":[4687008,18432],"eu":[4560608,18432],"sh":[4534976,18432]}], -"levels/menu/main_menu_seg7.00018.rgba16.png": [32,32,2048,{"jp":[2770736,24],"us":[2778544,24],"eu":[2647072,24],"sh":[2625456,24]}], -"levels/menu/main_menu_seg7.00818.rgba16.png": [32,32,2048,{"jp":[2770736,2072],"us":[2778544,2072],"eu":[2647072,2072],"sh":[2625456,2072]}], -"levels/menu/main_menu_seg7.01018.rgba16.png": [64,32,4096,{"jp":[2770736,4120],"us":[2778544,4120],"eu":[2647072,4120],"sh":[2625456,4120]}], -"levels/menu/main_menu_seg7.02018.rgba16.png": [64,32,4096,{"jp":[2770736,8216],"us":[2778544,8216],"eu":[2647072,8216],"sh":[2625456,8216]}], -"levels/menu/main_menu_seg7.03468.rgba16.png": [32,32,2048,{"jp":[2770736,13416],"us":[2778544,13416],"eu":[2647072,13416],"sh":[2625456,13416]}], -"levels/menu/main_menu_seg7.03C68.rgba16.png": [32,32,2048,{"jp":[2770736,15464],"us":[2778544,15464],"eu":[2647072,15464],"sh":[2625456,15464]}], -"levels/menu/main_menu_seg7.04468.rgba16.png": [32,32,2048,{"jp":[2770736,17512],"us":[2778544,17512],"eu":[2647072,17512],"sh":[2625456,17512]}], -"levels/menu/main_menu_seg7.04C68.rgba16.png": [32,32,2048,{"jp":[2770736,19560],"us":[2778544,19560],"eu":[2647072,19560],"sh":[2625456,19560]}], -"levels/menu/main_menu_seg7.05468.rgba16.png": [32,32,2048,{"jp":[2770736,21608],"us":[2778544,21608],"eu":[2647072,21608],"sh":[2625456,21608]}], -"levels/menu/main_menu_seg7.06328.rgba16.png": [32,32,2048,{"jp":[2770736,25384],"us":[2778544,25384],"eu":[2647072,25384],"sh":[2625456,25384]}], -"levels/menu/main_menu_seg7.06B28.rgba16.png": [32,32,2048,{"jp":[2770736,27432],"us":[2778544,27432],"eu":[2647072,27432],"sh":[2625456,27432]}], -"levels/menu/main_menu_seg7.073D0.rgba16.png": [16,16,512,{"jp":[2770736,29648],"us":[2778544,29648],"eu":[2647072,29648],"sh":[2625456,29648]}], -"levels/menu/main_menu_seg7.075D0.rgba16.png": [16,16,512,{"jp":[2770736,30160],"us":[2778544,30160],"eu":[2647072,30160],"sh":[2625456,30160]}], -"levels/menu/main_menu_seg7.077D0.rgba16.png": [16,16,512,{"jp":[2770736,30672],"us":[2778544,30672],"eu":[2647072,30672],"sh":[2625456,30672]}], -"levels/menu/main_menu_seg7.079D0.rgba16.png": [16,16,512,{"jp":[2770736,31184],"us":[2778544,31184],"eu":[2647072,31184],"sh":[2625456,31184]}], -"levels/menu/main_menu_seg7.07BD0.rgba16.png": [16,16,512,{"jp":[2770736,31696],"us":[2778544,31696],"eu":[2647072,31696],"sh":[2625456,31696]}], -"levels/menu/main_menu_seg7.07DD0.rgba16.png": [16,16,512,{"jp":[2770736,32208],"us":[2778544,32208],"eu":[2647072,32208],"sh":[2625456,32208]}], -"levels/menu/main_menu_seg7.07FD0.rgba16.png": [16,16,512,{"jp":[2770736,32720],"us":[2778544,32720],"eu":[2647072,32720],"sh":[2625456,32720]}], -"levels/menu/main_menu_seg7.081D0.rgba16.png": [16,16,512,{"jp":[2770736,33232],"us":[2778544,33232],"eu":[2647072,33232],"sh":[2625456,33232]}], -"levels/menu/main_menu_seg7.083D0.rgba16.png": [16,16,512,{"jp":[2770736,33744],"us":[2778544,33744],"eu":[2647072,33744],"sh":[2625456,33744]}], -"levels/menu/main_menu_seg7.085D0.rgba16.png": [16,16,512,{"jp":[2770736,34256],"us":[2778544,34256],"eu":[2647072,34256],"sh":[2625456,34256]}], -"levels/menu/main_menu_seg7.087D0.rgba16.png": [16,16,512,{"jp":[2770736,34768],"us":[2778544,34768],"eu":[2647072,34768],"sh":[2625456,34768]}], -"levels/menu/main_menu_seg7.089D0.rgba16.png": [16,16,512,{"jp":[2770736,35280],"us":[2778544,35280],"eu":[2647072,35280],"sh":[2625456,35280]}], -"levels/menu/main_menu_seg7.08BD0.rgba16.png": [16,16,512,{"jp":[2770736,35792],"us":[2778544,35792],"eu":[2647072,35792],"sh":[2625456,35792]}], -"levels/menu/main_menu_seg7.08DD0.rgba16.png": [16,16,512,{"jp":[2770736,36304],"us":[2778544,36304],"eu":[2647072,36304],"sh":[2625456,36304]}], -"levels/menu/main_menu_seg7.08FD0.rgba16.png": [16,16,512,{"jp":[2770736,36816],"us":[2778544,36816],"eu":[2647072,36816],"sh":[2625456,36816]}], -"levels/menu/main_menu_seg7.091D0.rgba16.png": [16,16,512,{"jp":[2770736,37328],"us":[2778544,37328],"eu":[2647072,37328],"sh":[2625456,37328]}], -"levels/menu/main_menu_seg7.093D0.rgba16.png": [16,16,512,{"jp":[2770736,37840],"us":[2778544,37840],"eu":[2647072,37840],"sh":[2625456,37840]}], -"levels/menu/main_menu_seg7.095D0.rgba16.png": [16,16,512,{"jp":[2770736,38352],"us":[2778544,38352],"eu":[2647072,38352],"sh":[2625456,38352]}], -"levels/menu/main_menu_seg7.097D0.rgba16.png": [16,16,512,{"jp":[2770736,38864],"us":[2778544,38864],"eu":[2647072,38864],"sh":[2625456,38864]}], -"levels/menu/main_menu_seg7.099D0.rgba16.png": [16,16,512,{"jp":[2770736,39376],"us":[2778544,39376],"eu":[2647072,39376],"sh":[2625456,39376]}], -"levels/menu/main_menu_seg7.09BD0.rgba16.png": [16,16,512,{"jp":[2770736,39888],"us":[2778544,39888],"eu":[2647072,39888],"sh":[2625456,39888]}], -"levels/menu/main_menu_seg7.09DD0.rgba16.png": [16,16,512,{"jp":[2770736,40400],"us":[2778544,40400],"eu":[2647072,40400],"sh":[2625456,40400]}], -"levels/menu/main_menu_seg7.09FD0.rgba16.png": [16,16,512,{"jp":[2770736,40912],"us":[2778544,40912],"eu":[2647072,40912],"sh":[2625456,40912]}], -"levels/menu/main_menu_seg7.0A1D0.rgba16.png": [16,16,512,{"jp":[1078992,20480],"us":[2778544,41424],"eu":[2647072,41424],"sh":[934640,20480]}], -"levels/menu/main_menu_seg7.0A3D0.rgba16.png": [16,16,512,{"jp":[2770736,41936],"us":[2778544,41936],"eu":[2647072,41936],"sh":[2625456,41936]}], -"levels/menu/main_menu_seg7.0A5D0.rgba16.png": [16,16,512,{"jp":[2770736,42448],"us":[2778544,42448],"eu":[2647072,42448],"sh":[2625456,42448]}], -"levels/menu/main_menu_seg7.0A7D0.rgba16.png": [16,16,512,{"jp":[2770736,42960],"us":[2778544,42960],"eu":[2647072,42960],"sh":[2625456,42960]}], -"levels/menu/main_menu_seg7.0A9D0.rgba16.png": [16,16,512,{"jp":[2770736,43472],"us":[2778544,43472],"eu":[2647072,43472],"sh":[2625456,43472]}], -"levels/menu/main_menu_seg7.0AC48.ia8.png": [8,8,64,{"jp":[2770736,44104],"sh":[2625456,44104]}], -"levels/menu/main_menu_seg7.0AC88.ia8.png": [8,8,64,{"jp":[2770736,44168],"sh":[2625456,44168]}], -"levels/menu/main_menu_seg7.0ACC8.ia8.png": [8,8,64,{"jp":[2770736,44232],"sh":[2625456,44232]}], -"levels/menu/main_menu_seg7.0AD08.ia8.png": [8,8,64,{"jp":[2770736,44296],"sh":[2625456,44296]}], -"levels/menu/main_menu_seg7.0AD48.ia8.png": [8,8,64,{"jp":[2770736,44360],"sh":[2625456,44360]}], -"levels/menu/main_menu_seg7.0AD88.ia8.png": [8,8,64,{"jp":[2770736,44424],"sh":[2625456,44424]}], -"levels/menu/main_menu_seg7.0ADC8.ia8.png": [8,8,64,{"jp":[2770736,44488],"sh":[2625456,44488]}], -"levels/menu/main_menu_seg7.0AE08.ia8.png": [8,8,64,{"jp":[2770736,44552],"sh":[2625456,44552]}], -"levels/menu/main_menu_seg7.0AE48.ia8.png": [8,8,64,{"jp":[2770736,44616],"sh":[2625456,44616]}], -"levels/menu/main_menu_seg7.0AE88.ia8.png": [8,8,64,{"jp":[2770736,44680],"sh":[2625456,44680]}], -"levels/menu/main_menu_seg7.0AEC8.ia8.png": [8,8,64,{"jp":[2770736,44744],"sh":[2625456,44744]}], -"levels/menu/main_menu_seg7.0AF08.ia8.png": [8,8,64,{"jp":[2770736,44808],"sh":[2625456,44808]}], -"levels/menu/main_menu_seg7.0AF48.ia8.png": [8,8,64,{"jp":[2770736,44872],"sh":[2625456,44872]}], -"levels/menu/main_menu_seg7.0AF88.ia8.png": [8,8,64,{"jp":[2770736,44936],"sh":[2625456,44936]}], -"levels/menu/main_menu_seg7.0AFC8.ia8.png": [8,8,64,{"jp":[2770736,45000],"sh":[2625456,45000]}], -"levels/menu/main_menu_seg7.0B008.ia8.png": [8,8,64,{"jp":[2770736,45064],"sh":[2625456,45064]}], -"levels/menu/main_menu_seg7.0B048.ia8.png": [8,8,64,{"jp":[2770736,45128],"sh":[2625456,45128]}], -"levels/menu/main_menu_seg7.0B088.ia8.png": [8,8,64,{"jp":[2770736,45192],"sh":[2625456,45192]}], -"levels/menu/main_menu_seg7.0B0C8.ia8.png": [8,8,64,{"jp":[2770736,45256],"sh":[2625456,45256]}], -"levels/menu/main_menu_seg7.0B108.ia8.png": [8,8,64,{"jp":[2770736,45320],"sh":[2625456,45320]}], -"levels/menu/main_menu_seg7.0B148.ia8.png": [8,8,64,{"jp":[2770736,45384],"sh":[2625456,45384]}], -"levels/menu/main_menu_seg7.0B188.ia8.png": [8,8,64,{"jp":[2770736,45448],"sh":[2625456,45448]}], -"levels/menu/main_menu_seg7.0B1C8.ia8.png": [8,8,64,{"jp":[2770736,45512],"sh":[2625456,45512]}], -"levels/menu/main_menu_seg7.0B208.ia8.png": [8,8,64,{"jp":[2770736,45576],"sh":[2625456,45576]}], -"levels/menu/main_menu_seg7.0B248.ia8.png": [8,8,64,{"jp":[2770736,45640],"sh":[2625456,45640]}], -"levels/menu/main_menu_seg7.0B288.ia8.png": [8,8,64,{"jp":[2770736,45704],"sh":[2625456,45704]}], -"levels/menu/main_menu_seg7.0B2C8.ia8.png": [8,8,64,{"jp":[2770736,45768],"sh":[2625456,45768]}], -"levels/menu/main_menu_seg7.0B308.ia8.png": [8,8,64,{"jp":[2770736,45832],"sh":[2625456,45832]}], -"levels/menu/main_menu_seg7.0B348.ia8.png": [8,8,64,{"jp":[2770736,45896],"sh":[2625456,45896]}], -"levels/menu/main_menu_seg7.0B388.ia8.png": [8,8,64,{"jp":[2770736,45960],"sh":[2625456,45960]}], -"levels/menu/main_menu_seg7.0B3C8.ia8.png": [8,8,64,{"jp":[2770736,46024],"sh":[2625456,46024]}], -"levels/menu/main_menu_seg7.0B408.ia8.png": [8,8,64,{"jp":[2770736,46088],"sh":[2625456,46088]}], -"levels/menu/main_menu_seg7.0B448.ia8.png": [8,8,64,{"jp":[2770736,46152],"sh":[2625456,46152]}], -"levels/menu/main_menu_seg7.0B488.ia8.png": [8,8,64,{"jp":[2770736,46216],"sh":[2625456,46216]}], -"levels/menu/main_menu_seg7.0B4C8.ia8.png": [8,8,64,{"jp":[2770736,46280],"sh":[2625456,46280]}], -"levels/menu/main_menu_seg7.0B508.ia8.png": [8,8,64,{"jp":[2770736,46344],"sh":[2625456,46344]}], -"levels/menu/main_menu_seg7.0B548.ia8.png": [8,8,64,{"jp":[2770736,46408],"sh":[2625456,46408]}], -"levels/menu/main_menu_seg7.0B588.ia8.png": [8,8,64,{"jp":[2770736,46472],"sh":[2625456,46472]}], -"levels/menu/main_menu_seg7.0B5C8.ia8.png": [8,8,64,{"jp":[2770736,46536],"sh":[2625456,46536]}], -"levels/menu/main_menu_seg7.0B608.ia8.png": [8,8,64,{"jp":[2770736,46600],"sh":[2625456,46600]}], -"levels/menu/main_menu_seg7.0B648.ia8.png": [8,8,64,{"jp":[2770736,46664],"sh":[2625456,46664]}], -"levels/menu/main_menu_seg7.0B688.ia8.png": [8,8,64,{"jp":[2770736,46728],"sh":[2625456,46728]}], -"levels/menu/main_menu_seg7.0B6C8.ia8.png": [8,8,64,{"jp":[2770736,46792],"sh":[2625456,46792]}], -"levels/menu/main_menu_seg7.0B708.ia8.png": [8,8,64,{"jp":[2770736,46856],"sh":[2625456,46856]}], -"levels/menu/main_menu_seg7.0B748.ia8.png": [8,8,64,{"jp":[2770736,46920],"sh":[2625456,46920]}], -"levels/menu/main_menu_seg7.0B788.ia8.png": [8,8,64,{"jp":[2770736,46984],"sh":[2625456,46984]}], -"levels/menu/main_menu_seg7.0B7C8.ia8.png": [8,8,64,{"jp":[2770736,47048],"sh":[2625456,47048]}], -"levels/menu/main_menu_seg7.0B808.ia8.png": [8,8,64,{"jp":[2770736,47112],"sh":[2625456,47112]}], -"levels/menu/main_menu_seg7.0B848.ia8.png": [8,8,64,{"jp":[2770736,47176],"sh":[2625456,47176]}], -"levels/menu/main_menu_seg7.0B888.ia8.png": [8,8,64,{"jp":[2770736,47240],"sh":[2625456,47240]}], -"levels/menu/main_menu_seg7.0B8C8.ia8.png": [8,8,64,{"jp":[2770736,47304],"sh":[2625456,47304]}], -"levels/menu/main_menu_seg7.0B908.ia8.png": [8,8,64,{"jp":[2770736,47368],"sh":[2625456,47368]}], -"levels/menu/main_menu_seg7.0B948.ia8.png": [8,8,64,{"jp":[2770736,47432],"sh":[2625456,47432]}], -"levels/menu/main_menu_seg7.0B988.ia8.png": [8,8,64,{"jp":[2770736,47496],"sh":[2625456,47496]}], -"levels/menu/main_menu_seg7.0B9C8.ia8.png": [8,8,64,{"jp":[2770736,47560],"sh":[2625456,47560]}], -"levels/menu/main_menu_seg7.0BA08.ia8.png": [8,8,64,{"jp":[2770736,47624],"sh":[2625456,47624]}], -"levels/menu/main_menu_seg7.0BA48.ia8.png": [8,8,64,{"jp":[2770736,47688],"sh":[2625456,47688]}], -"levels/menu/main_menu_seg7.0BA88.ia8.png": [8,8,64,{"jp":[2770736,47752],"sh":[2625456,47752]}], -"levels/menu/main_menu_seg7.0BAC8.ia8.png": [8,8,64,{"jp":[2770736,47816],"sh":[2625456,47816]}], -"levels/menu/main_menu_seg7.0BB08.ia8.png": [8,8,64,{"jp":[2770736,47880],"sh":[2625456,47880]}], -"levels/menu/main_menu_seg7.0BB48.ia8.png": [8,8,64,{"jp":[2770736,47944],"sh":[2625456,47944]}], -"levels/menu/main_menu_seg7.0BB88.ia8.png": [8,8,64,{"jp":[2770736,48008],"sh":[2625456,48008]}], -"levels/menu/main_menu_seg7.0BBC8.ia8.png": [8,8,64,{"jp":[2770736,48072],"sh":[2625456,48072]}], -"levels/menu/main_menu_seg7.0BC08.ia8.png": [8,8,64,{"jp":[2770736,48136],"sh":[2625456,48136]}], -"levels/menu/main_menu_seg7.0BC48.ia8.png": [8,8,64,{"jp":[2770736,48200],"sh":[2625456,48200]}], -"levels/menu/main_menu_seg7.0BC88.ia8.png": [8,8,64,{"jp":[2770736,48264],"sh":[2625456,48264]}], -"levels/menu/main_menu_seg7.0BCC8.ia8.png": [8,8,64,{"jp":[2770736,48328],"sh":[2625456,48328]}], -"levels/menu/main_menu_seg7.0BD08.ia8.png": [8,8,64,{"jp":[2770736,48392],"sh":[2625456,48392]}], -"levels/menu/main_menu_seg7.0BD48.ia8.png": [8,8,64,{"jp":[2770736,48456],"sh":[2625456,48456]}], -"levels/menu/main_menu_seg7.0BD88.ia8.png": [8,8,64,{"jp":[2770736,48520],"sh":[2625456,48520]}], -"levels/menu/main_menu_seg7.0BDC8.ia8.png": [8,8,64,{"jp":[2770736,48584],"sh":[2625456,48584]}], -"levels/menu/main_menu_seg7.0BE08.ia8.png": [8,8,64,{"jp":[2770736,48648],"sh":[2625456,48648]}], -"levels/menu/main_menu_seg7.0BE48.ia8.png": [8,8,64,{"jp":[2770736,48712],"sh":[2625456,48712]}], -"levels/menu/main_menu_seg7.0BE88.ia8.png": [8,8,64,{"jp":[2770736,48776],"sh":[2625456,48776]}], -"levels/menu/main_menu_seg7.0BEC8.ia8.png": [8,8,64,{"jp":[2770736,48840],"sh":[2625456,48840]}], -"levels/menu/main_menu_seg7.0BF08.ia8.png": [8,8,64,{"jp":[2770736,48904],"sh":[2625456,48904]}], -"levels/menu/main_menu_seg7.0BF48.ia8.png": [8,8,64,{"jp":[2770736,48968],"sh":[2625456,48968]}], -"levels/menu/main_menu_seg7.0BF88.ia8.png": [8,8,64,{"jp":[2770736,49032],"sh":[2625456,49032]}], -"levels/menu/main_menu_seg7.0BFC8.ia8.png": [8,8,64,{"jp":[2770736,49096],"sh":[2625456,49096]}], -"levels/menu/main_menu_seg7.0C008.ia8.png": [8,8,64,{"jp":[2770736,49160],"sh":[2625456,49160]}], -"levels/menu/main_menu_seg7.0C048.ia8.png": [8,8,64,{"jp":[2770736,49224],"sh":[2625456,49224]}], -"levels/menu/main_menu_seg7.0C088.ia8.png": [8,8,64,{"jp":[2770736,49288],"sh":[2625456,49288]}], -"levels/menu/main_menu_seg7.0C0C8.ia8.png": [8,8,64,{"jp":[2770736,49352],"sh":[2625456,49352]}], -"levels/menu/main_menu_seg7.0C108.ia8.png": [8,8,64,{"jp":[2770736,49416],"sh":[2625456,49416]}], -"levels/menu/main_menu_seg7.0C148.ia8.png": [8,8,64,{"jp":[2770736,49480],"sh":[2625456,49480]}], -"levels/menu/main_menu_seg7.0C188.ia8.png": [8,8,64,{"jp":[2770736,49544],"sh":[2625456,49544]}], -"levels/menu/main_menu_seg7.0C1C8.ia8.png": [8,8,64,{"jp":[2770736,49608],"sh":[2625456,49608]}], -"levels/menu/main_menu_seg7.0C208.ia8.png": [8,8,64,{"jp":[2770736,49672],"sh":[2625456,49672]}], -"levels/menu/main_menu_seg7.0C248.ia8.png": [8,8,64,{"jp":[2770736,49736],"sh":[2625456,49736]}], -"levels/menu/main_menu_seg7.0C288.ia8.png": [8,8,64,{"jp":[2770736,49800],"sh":[2625456,49800]}], -"levels/menu/main_menu_seg7.0C2C8.ia8.png": [8,8,64,{"jp":[2770736,49864],"sh":[2625456,49864]}], -"levels/menu/main_menu_seg7.0C308.ia8.png": [8,8,64,{"jp":[2770736,49928],"sh":[2625456,49928]}], -"levels/menu/main_menu_seg7.0C348.ia8.png": [8,8,64,{"jp":[2770736,49992],"sh":[2625456,49992]}], -"levels/menu/main_menu_seg7.0C388.ia8.png": [8,8,64,{"jp":[2770736,50056],"sh":[2625456,50056]}], -"levels/menu/main_menu_seg7.0C3C8.ia8.png": [8,8,64,{"jp":[2770736,50120],"sh":[2625456,50120]}], -"levels/menu/main_menu_seg7.0C408.ia8.png": [8,8,64,{"jp":[2770736,50184],"sh":[2625456,50184]}], -"levels/menu/main_menu_seg7.0C448.ia8.png": [8,8,64,{"jp":[2770736,46536],"sh":[2625456,46536]}], -"levels/menu/main_menu_seg7.0C488.ia8.png": [8,8,64,{"jp":[2770736,50312],"sh":[2625456,50312]}], -"levels/menu/main_menu_seg7.0C4C8.ia8.png": [8,8,64,{"jp":[2770736,50376],"sh":[2625456,50376]}], -"levels/menu/main_menu_seg7.0C508.ia8.png": [8,8,64,{"jp":[2770736,50440],"sh":[2625456,50440]}], -"levels/menu/main_menu_seg7.0C548.ia8.png": [8,8,64,{"jp":[2770736,50504],"sh":[2625456,50504]}], -"levels/menu/main_menu_seg7.0C588.ia8.png": [8,8,64,{"jp":[2770736,50568],"sh":[2625456,50568]}], -"levels/menu/main_menu_seg7.0C5C8.ia8.png": [8,8,64,{"jp":[2770736,50632],"sh":[2625456,50632]}], -"levels/menu/main_menu_seg7.0C608.ia8.png": [8,8,64,{"jp":[2770736,50696],"sh":[2625456,50696]}], -"levels/menu/main_menu_seg7.0C648.ia8.png": [8,8,64,{"jp":[2770736,50760],"sh":[2625456,50760]}], -"levels/menu/main_menu_seg7.0C688.ia8.png": [8,8,64,{"jp":[2770736,50824],"sh":[2625456,50824]}], -"levels/menu/main_menu_seg7.0C6C8.ia8.png": [8,8,64,{"jp":[2770736,50888],"sh":[2625456,50888]}], -"levels/menu/main_menu_seg7.0C708.ia8.png": [8,8,64,{"jp":[2770736,50952],"sh":[2625456,50952]}], -"levels/menu/main_menu_seg7.0C748.ia8.png": [8,8,64,{"jp":[2770736,51016],"sh":[2625456,51016]}], -"levels/menu/main_menu_seg7.0C788.ia8.png": [8,8,64,{"jp":[2770736,51080],"sh":[2625456,51080]}], -"levels/menu/main_menu_seg7.0C7C8.ia8.png": [8,8,64,{"jp":[2770736,51144],"sh":[2625456,51144]}], -"levels/menu/main_menu_seg7.0C808.ia8.png": [8,8,64,{"jp":[2770736,51208],"sh":[2625456,51208]}], -"levels/menu/main_menu_seg7.0C848.ia8.png": [8,8,64,{"jp":[2770736,51272],"sh":[2625456,51272]}], -"levels/menu/main_menu_seg7.0C888.ia8.png": [8,8,64,{"jp":[2770736,51336],"sh":[2625456,51336]}], -"levels/menu/main_menu_seg7.0C8C8.ia8.png": [8,8,64,{"jp":[2770736,51400],"sh":[2625456,51400]}], -"levels/menu/main_menu_seg7.0C908.ia8.png": [8,8,64,{"jp":[2770736,51464],"sh":[2625456,51464]}], -"levels/menu/main_menu_seg7.0C948.ia8.png": [8,8,64,{"jp":[2770736,51528],"sh":[2625456,51528]}], -"levels/menu/main_menu_seg7.0C988.ia8.png": [8,8,64,{"jp":[2770736,51592],"sh":[2625456,51592]}], -"levels/menu/main_menu_seg7.0C9C8.ia8.png": [8,8,64,{"jp":[2770736,51656],"sh":[2625456,51656]}], -"levels/menu/main_menu_seg7.0CA08.ia8.png": [8,8,64,{"jp":[2770736,51720],"sh":[2625456,51720]}], -"levels/menu/main_menu_seg7.0CA48.ia8.png": [8,8,64,{"jp":[2770736,51784],"sh":[2625456,51784]}], -"levels/menu/main_menu_seg7.0CA88.ia8.png": [8,8,64,{"jp":[2770736,51848],"sh":[2625456,51848]}], -"levels/menu/main_menu_seg7.0CAC8.ia8.png": [8,8,64,{"jp":[2770736,51912],"sh":[2625456,51912]}], -"levels/menu/main_menu_seg7.0CB08.ia8.png": [8,8,64,{"jp":[2770736,51976],"sh":[2625456,51976]}], -"levels/menu/main_menu_seg7.0CB48.ia8.png": [8,8,64,{"jp":[2770736,52040],"sh":[2625456,52040]}], -"levels/menu/main_menu_seg7.0CB88.ia8.png": [8,8,64,{"jp":[2770736,52104],"sh":[2625456,52104]}], -"levels/menu/main_menu_seg7.0CBC8.ia8.png": [8,8,64,{"jp":[2770736,52168],"sh":[2625456,52168]}], -"levels/menu/main_menu_seg7.0CC08.ia8.png": [8,8,64,{"jp":[2770736,52232],"sh":[2625456,52232]}], -"levels/menu/main_menu_seg7.0CC48.ia8.png": [8,8,64,{"jp":[2770736,52296],"sh":[2625456,52296]}], -"levels/menu/main_menu_seg7.0CC88.ia8.png": [8,8,64,{"jp":[2770736,52360],"sh":[2625456,52360]}], -"levels/menu/main_menu_seg7.0CCC8.ia8.png": [8,8,64,{"jp":[2770736,52424],"sh":[2625456,52424]}], -"levels/menu/main_menu_seg7.0D1A8.rgba16.png": [64,32,4096,{"jp":[2770736,53672],"us":[2778544,48352],"sh":[2625456,53672]}], -"levels/menu/main_menu_seg7.0E1A8.rgba16.png": [64,32,4096,{"jp":[2770736,57768],"us":[2778544,52448],"sh":[2625456,57768]}], -"levels/menu/main_menu_seg7_eu.0AF80.ia8.png": [8,8,64,{"eu":[2647072,44928]}], -"levels/menu/main_menu_seg7_eu.0B640.ia8.png": [8,8,64,{"eu":[2647072,46656]}], -"levels/menu/main_menu_seg7_eu.0B680.ia8.png": [8,8,64,{"eu":[2647072,46720]}], -"levels/menu/main_menu_seg7_eu.0B840.ia8.png": [8,8,64,{"eu":[2647072,47168]}], -"levels/menu/main_menu_seg7_eu.0B880.ia8.png": [8,8,64,{"eu":[2647072,47232]}], -"levels/menu/main_menu_seg7_eu.0B8C0.ia8.png": [8,8,64,{"eu":[2647072,47296]}], -"levels/menu/main_menu_seg7_eu.0BDA0.rgba16.png": [64,32,4096,{"eu":[2647072,48544]}], -"levels/menu/main_menu_seg7_eu.0CDA0.rgba16.png": [64,32,4096,{"eu":[2647072,52640]}], -"levels/menu/main_menu_seg7_eu.0DDA0.rgba16.png": [64,32,4096,{"eu":[2647072,56736]}], -"levels/menu/main_menu_seg7_eu.0EDA0.rgba16.png": [64,32,4096,{"eu":[2647072,60832]}], -"levels/menu/main_menu_seg7_us.0AC40.ia8.png": [8,8,64,{"us":[2778544,44096],"eu":[2647072,44096]}], -"levels/menu/main_menu_seg7_us.0AC80.ia8.png": [8,8,64,{"us":[2778544,44160],"eu":[2647072,44160]}], -"levels/menu/main_menu_seg7_us.0ACC0.ia8.png": [8,8,64,{"us":[2778544,44224],"eu":[2647072,44224]}], -"levels/menu/main_menu_seg7_us.0AD00.ia8.png": [8,8,64,{"us":[2778544,44288],"eu":[2647072,44288]}], -"levels/menu/main_menu_seg7_us.0AD40.ia8.png": [8,8,64,{"us":[2778544,44352],"eu":[2647072,44352]}], -"levels/menu/main_menu_seg7_us.0AD80.ia8.png": [8,8,64,{"us":[2778544,44416],"eu":[2647072,44416]}], -"levels/menu/main_menu_seg7_us.0ADC0.ia8.png": [8,8,64,{"us":[2778544,44480],"eu":[2647072,44480]}], -"levels/menu/main_menu_seg7_us.0AE00.ia8.png": [8,8,64,{"us":[2778544,44544],"eu":[2647072,44544]}], -"levels/menu/main_menu_seg7_us.0AE40.ia8.png": [8,8,64,{"us":[2778544,44608],"eu":[2647072,44608]}], -"levels/menu/main_menu_seg7_us.0AE80.ia8.png": [8,8,64,{"us":[2778544,44672],"eu":[2647072,44672]}], -"levels/menu/main_menu_seg7_us.0AEC0.ia8.png": [8,8,64,{"us":[2778544,44736],"eu":[2647072,44736]}], -"levels/menu/main_menu_seg7_us.0AF00.ia8.png": [8,8,64,{"us":[2778544,44800],"eu":[2647072,44800]}], -"levels/menu/main_menu_seg7_us.0AF40.ia8.png": [8,8,64,{"us":[2778544,44864],"eu":[2647072,44864]}], -"levels/menu/main_menu_seg7_us.0AF80.ia8.png": [8,8,64,{"us":[2778544,44928]}], -"levels/menu/main_menu_seg7_us.0AFC0.ia8.png": [8,8,64,{"us":[2778544,44992],"eu":[2647072,44992]}], -"levels/menu/main_menu_seg7_us.0B000.ia8.png": [8,8,64,{"us":[2778544,45056],"eu":[2647072,45056]}], -"levels/menu/main_menu_seg7_us.0B040.ia8.png": [8,8,64,{"us":[2778544,45120],"eu":[2647072,45120]}], -"levels/menu/main_menu_seg7_us.0B080.ia8.png": [8,8,64,{"us":[2778544,45184],"eu":[2647072,45184]}], -"levels/menu/main_menu_seg7_us.0B0C0.ia8.png": [8,8,64,{"us":[2778544,45248],"eu":[2647072,45248]}], -"levels/menu/main_menu_seg7_us.0B100.ia8.png": [8,8,64,{"us":[2778544,45312],"eu":[2647072,45312]}], -"levels/menu/main_menu_seg7_us.0B140.ia8.png": [8,8,64,{"us":[2778544,45376],"eu":[2647072,45376]}], -"levels/menu/main_menu_seg7_us.0B180.ia8.png": [8,8,64,{"us":[2778544,45440],"eu":[2647072,45440]}], -"levels/menu/main_menu_seg7_us.0B1C0.ia8.png": [8,8,64,{"us":[2778544,45504],"eu":[2647072,45504]}], -"levels/menu/main_menu_seg7_us.0B200.ia8.png": [8,8,64,{"us":[2778544,45568],"eu":[2647072,45568]}], -"levels/menu/main_menu_seg7_us.0B240.ia8.png": [8,8,64,{"us":[2778544,45632],"eu":[2647072,45632]}], -"levels/menu/main_menu_seg7_us.0B280.ia8.png": [8,8,64,{"us":[2778544,45696],"eu":[2647072,45696]}], -"levels/menu/main_menu_seg7_us.0B2C0.ia8.png": [8,8,64,{"us":[2778544,45760],"eu":[2647072,45760]}], -"levels/menu/main_menu_seg7_us.0B300.ia8.png": [8,8,64,{"us":[2778544,45824],"eu":[2647072,45824]}], -"levels/menu/main_menu_seg7_us.0B340.ia8.png": [8,8,64,{"us":[2778544,45888],"eu":[2647072,45888]}], -"levels/menu/main_menu_seg7_us.0B380.ia8.png": [8,8,64,{"us":[2778544,45952],"eu":[2647072,45952]}], -"levels/menu/main_menu_seg7_us.0B3C0.ia8.png": [8,8,64,{"us":[2778544,46016],"eu":[2647072,46016]}], -"levels/menu/main_menu_seg7_us.0B400.ia8.png": [8,8,64,{"us":[2778544,46080],"eu":[2647072,46080]}], -"levels/menu/main_menu_seg7_us.0B440.ia8.png": [8,8,64,{"us":[2778544,46144],"eu":[2647072,46144]}], -"levels/menu/main_menu_seg7_us.0B480.ia8.png": [8,8,64,{"us":[2778544,46208],"eu":[2647072,46208]}], -"levels/menu/main_menu_seg7_us.0B4C0.ia8.png": [8,8,64,{"us":[2778544,46272],"eu":[2647072,46272]}], -"levels/menu/main_menu_seg7_us.0B500.ia8.png": [8,8,64,{"us":[2778544,46336],"eu":[2647072,46336]}], -"levels/menu/main_menu_seg7_us.0B540.ia8.png": [8,8,64,{"us":[2778544,46400],"eu":[2647072,46400]}], -"levels/menu/main_menu_seg7_us.0B580.ia8.png": [8,8,64,{"us":[2778544,46464],"eu":[2647072,46464]}], -"levels/menu/main_menu_seg7_us.0B5C0.ia8.png": [8,8,64,{"us":[2778544,46528],"eu":[2647072,46528]}], -"levels/menu/main_menu_seg7_us.0B600.ia8.png": [8,8,64,{"us":[2778544,46592],"eu":[2647072,46592]}], -"levels/menu/main_menu_seg7_us.0B640.ia8.png": [8,8,64,{"us":[2778544,46656]}], -"levels/menu/main_menu_seg7_us.0B680.ia8.png": [8,8,64,{"us":[2778544,46720]}], -"levels/menu/main_menu_seg7_us.0B6C0.ia8.png": [8,8,64,{"us":[2778544,46784],"eu":[2647072,46784]}], -"levels/menu/main_menu_seg7_us.0B700.ia8.png": [8,8,64,{"us":[2778544,46848],"eu":[2647072,46848]}], -"levels/menu/main_menu_seg7_us.0B740.ia8.png": [8,8,64,{"us":[2778544,46912],"eu":[2647072,46912]}], -"levels/menu/main_menu_seg7_us.0B780.ia8.png": [8,8,64,{"us":[2778544,46976],"eu":[2647072,46976]}], -"levels/menu/main_menu_seg7_us.0B7C0.ia8.png": [8,8,64,{"us":[2778544,46648],"eu":[2647072,47040]}], -"levels/menu/main_menu_seg7_us.0B800.ia8.png": [8,8,64,{"us":[2778544,47104],"eu":[2647072,47104]}], -"levels/pss/0.rgba16.png": [32,32,2048,{"jp":[4905168,0],"us":[4913456,0],"eu":[4792384,0],"sh":[4761424,0]}], -"levels/pss/1.ia16.png": [32,32,2048,{"jp":[4905168,2048],"us":[4913456,2048],"eu":[4792384,2048],"sh":[4761424,2048]}], -"levels/pss/2.rgba16.png": [32,32,2048,{"jp":[4905168,4096],"us":[4913456,4096],"eu":[4792384,4096],"sh":[4761424,4096]}], -"levels/rr/1.rgba16.png": [64,32,4096,{"jp":[4413648,2048],"us":[4421744,2048],"eu":[4295344,2048],"sh":[4269712,2048]}], -"levels/rr/2.rgba16.png": [32,32,2048,{"jp":[4413648,6144],"us":[4421744,6144],"eu":[4295344,6144],"sh":[4269712,6144]}], -"levels/rr/quarter_flying_carpet.rgba16.png": [32,32,2048,{"jp":[4413648,0],"us":[4421744,0],"eu":[4295344,0],"sh":[4269712,0]}], -"levels/sl/0.rgba16.png": [32,32,2048,{"jp":[4210704,0],"us":[4218800,0],"eu":[4092400,0],"sh":[4066768,0]}], -"levels/sl/1.rgba16.png": [32,32,2048,{"jp":[4210704,2048],"us":[4218800,2048],"eu":[4092400,2048],"sh":[4066768,2048]}], -"levels/sl/2.rgba16.png": [32,32,2048,{"jp":[4210704,4096],"us":[4218800,4096],"eu":[4092400,4096],"sh":[4066768,4096]}], -"levels/sl/3.rgba16.png": [32,32,2048,{"jp":[4210704,6144],"us":[4218800,6144],"eu":[4092400,6144],"sh":[4066768,6144]}], -"levels/sl/4.rgba16.png": [32,32,2048,{"jp":[4210704,8192],"us":[4218800,8192],"eu":[4092400,8192],"sh":[4066768,8192]}], -"levels/ssl/0.rgba16.png": [32,32,2048,{"jp":[4085520,0],"us":[4093616,0],"eu":[3967216,0],"sh":[3941584,0]}], -"levels/ssl/1.ia16.png": [32,32,2048,{"jp":[4085520,2048],"us":[4093616,2048],"eu":[3967216,2048],"sh":[3941584,2048]}], -"levels/ssl/10.rgba16.png": [32,64,4096,{"jp":[4085520,55208],"us":[4093616,55208],"eu":[3967216,55208],"sh":[3941584,55208]}], -"levels/ssl/11.rgba16.png": [32,64,4096,{"jp":[4085520,59304],"us":[4093616,59304],"eu":[3967216,59304],"sh":[3941584,59304]}], -"levels/ssl/2.rgba16.png": [32,32,2048,{"jp":[4085520,4096],"us":[4093616,4096],"eu":[3967216,4096],"sh":[3941584,4096]}], -"levels/ssl/3.rgba16.png": [32,32,2048,{"jp":[4085520,6144],"us":[4093616,6144],"eu":[3967216,6144],"sh":[3941584,6144]}], -"levels/ssl/4.rgba16.png": [32,32,2048,{"jp":[4085520,8192],"us":[4093616,8192],"eu":[3967216,8192],"sh":[3941584,8192]}], -"levels/ssl/5.rgba16.png": [32,64,4096,{"jp":[4085520,10240],"us":[4093616,10240],"eu":[3967216,10240],"sh":[3941584,10240]}], -"levels/ssl/6.rgba16.png": [32,32,2048,{"jp":[4085520,14336],"us":[4093616,14336],"eu":[3967216,14336],"sh":[3941584,14336]}], -"levels/ssl/7.rgba16.png": [32,32,2048,{"jp":[3323408,32768],"us":[3330160,32768],"eu":[3203760,32768],"sh":[3178128,32768]}], -"levels/ssl/8.rgba16.png": [32,32,2048,{"jp":[4085520,49064],"us":[4093616,49064],"eu":[3967216,49064],"sh":[3941584,49064]}], -"levels/ssl/9.rgba16.png": [32,64,4096,{"jp":[4085520,51112],"us":[4093616,51112],"eu":[3967216,51112],"sh":[3941584,51112]}], -"levels/thi/0.rgba16.png": [32,32,2048,{"jp":[4335408,0],"us":[4343504,0],"eu":[4217104,0],"sh":[4191472,0]}], -"levels/thi/1.rgba16.png": [32,32,2048,{"jp":[4335408,2048],"us":[4343504,2048],"eu":[4217104,2048],"sh":[4191472,2048]}], -"levels/totwc/0.rgba16.png": [32,64,4096,{"jp":[4967376,0],"us":[4975664,0],"eu":[4854592,0],"sh":[4823632,0]}], -"levels/totwc/1.rgba16.png": [32,32,2048,{"jp":[4967376,4096],"us":[4975664,4096],"eu":[4854592,4096],"sh":[4823632,4096]}], -"levels/totwc/2.rgba16.png": [32,32,2048,{"jp":[4967376,6144],"us":[4975664,6144],"eu":[4854592,6144],"sh":[4823632,6144]}], -"levels/totwc/3.ia16.png": [32,32,2048,{"jp":[4967376,8192],"us":[4975664,8192],"eu":[4854592,8192],"sh":[4823632,8192]}], -"levels/ttc/0.rgba16.png": [32,32,2048,{"jp":[4370304,0],"us":[4378400,0],"eu":[4252000,0],"sh":[4226368,0]}], -"levels/ttc/1.rgba16.png": [16,64,2048,{"jp":[4370304,2048],"us":[4378400,2048],"eu":[4252000,2048],"sh":[4226368,2048]}], -"levels/ttc/2.rgba16.png": [32,32,2048,{"jp":[4370304,90000],"us":[4378400,90000],"eu":[4252000,90000],"sh":[4226368,90000]}], -"levels/ttm/0.ia16.png": [32,32,2048,{"jp":[5044400,0],"us":[5052688,0],"eu":[4931616,0],"sh":[4900656,0]}], -"levels/ttm/1.rgba16.png": [32,32,2048,{"jp":[5044400,2048],"us":[5052688,2048],"eu":[4931616,2048],"sh":[4900656,2048]}], -"levels/ttm/2.rgba16.png": [32,32,2048,{"jp":[5044400,4096],"us":[5052688,4096],"eu":[4931616,4096],"sh":[4900656,4096]}], -"levels/ttm/3.rgba16.png": [32,32,2048,{"jp":[5044400,6144],"us":[5052688,6144],"eu":[4931616,6144],"sh":[4900656,6144]}], -"levels/ttm/4.rgba16.png": [32,32,2048,{"jp":[5044400,8192],"us":[5052688,8192],"eu":[4931616,8192],"sh":[4900656,8192]}], -"levels/ttm/5.rgba16.png": [32,32,2048,{"jp":[5044400,10240],"us":[5052688,10240],"eu":[4931616,10240],"sh":[4900656,10240]}], -"levels/ttm/6.rgba16.png": [64,32,4096,{"jp":[5044400,12288],"us":[5052688,12288],"eu":[4931616,12288],"sh":[4900656,12288]}], -"levels/ttm/7.rgba16.png": [64,32,4096,{"jp":[5044400,16384],"us":[5052688,16384],"eu":[4931616,16384],"sh":[4900656,16384]}], -"levels/ttm/8.rgba16.png": [32,32,2048,{"jp":[3473152,43008],"us":[3479904,43008],"eu":[3353504,43008],"sh":[3327872,43008]}], -"levels/vcutm/0.rgba16.png": [32,32,2048,{"jp":[4564288,0],"us":[4572672,0],"eu":[4446272,0],"sh":[4420640,0]}], -"levels/vcutm/1.rgba16.png": [64,32,4096,{"jp":[4564288,2048],"us":[4572672,2048],"eu":[4446272,2048],"sh":[4420640,2048]}], -"levels/vcutm/2.rgba16.png": [32,64,4096,{"jp":[4564288,6144],"us":[4572672,6144],"eu":[4446272,6144],"sh":[4420640,6144]}], -"levels/vcutm/3.rgba16.png": [32,32,2048,{"jp":[4564288,10240],"us":[4572672,10240],"eu":[4446272,10240],"sh":[4420640,10240]}], -"levels/wdw/0.rgba16.png": [32,32,2048,{"jp":[4246992,0],"us":[4255088,0],"eu":[4128688,0],"sh":[4103056,0]}], -"levels/wdw/1.rgba16.png": [32,32,2048,{"jp":[4246992,2048],"us":[4255088,2048],"eu":[4128688,2048],"sh":[4103056,2048]}], -"levels/wdw/2.rgba16.png": [32,32,2048,{"jp":[4246992,4096],"us":[4255088,4096],"eu":[4128688,4096],"sh":[4103056,4096]}], -"levels/wdw/3.rgba16.png": [32,32,2048,{"jp":[4246992,6144],"us":[4255088,6144],"eu":[4128688,6144],"sh":[4103056,6144]}], -"levels/wdw/4.rgba16.png": [32,32,2048,{"jp":[4246992,8192],"us":[4255088,8192],"eu":[4128688,8192],"sh":[4103056,8192]}], -"levels/wf/0.rgba16.png": [32,32,2048,{"jp":[4800560,0],"us":[4808848,0],"eu":[4682448,0],"sh":[4656816,0]}], -"levels/wf/1.rgba16.png": [32,32,2048,{"jp":[4800560,2048],"us":[4808848,2048],"eu":[4682448,2048],"sh":[4656816,2048]}], -"levels/wf/2.rgba16.png": [32,32,2048,{"jp":[4800560,4096],"us":[4808848,4096],"eu":[4682448,4096],"sh":[4656816,4096]}], -"levels/wf/3.rgba16.png": [32,32,2048,{"jp":[4800560,6144],"us":[4808848,6144],"eu":[4682448,6144],"sh":[4656816,6144]}], -"levels/wf/4.rgba16.png": [32,32,2048,{"jp":[4800560,8192],"us":[4808848,8192],"eu":[4682448,8192],"sh":[4656816,8192]}], -"levels/wf/5.ia8.png": [16,16,256,{"jp":[1078992,62296],"us":[1083968,74168],"eu":[909712,30840],"sh":[934640,62296]}], -"levels/wmotr/0.rgba16.png": [32,32,2048,{"jp":[4989632,0],"us":[4997920,0],"eu":[4876848,0],"sh":[4845888,0]}], -"levels/wmotr/1.rgba16.png": [32,16,1024,{"jp":[4989632,2048],"us":[4997920,2048],"eu":[4876848,2048],"sh":[4845888,2048]}], -"levels/wmotr/2.rgba16.png": [32,32,2048,{"jp":[4989632,3072],"us":[4997920,3072],"eu":[4876848,3072],"sh":[4845888,3072]}], -"levels/wmotr/3.rgba16.png": [32,8,512,{"jp":[4989632,5120],"us":[4997920,5120],"eu":[4876848,5120],"sh":[4845888,5120]}], -"levels/wmotr/4.rgba16.png": [8,32,512,{"jp":[4989632,5632],"us":[4997920,5632],"eu":[4876848,5632],"sh":[4845888,5632]}], -"sound/sound_data.audio": { - "us": { - "sound_ctl": [5748512, 97856], - "sound_tbl": [5846368, 2216704] - }, - "eu": { - "sound_ctl": [5626032, 97856], - "sound_tbl": [5723888, 2216704] - }, - "jp": { - "sound_ctl": [5738816, 94400], - "sound_tbl": [5833216, 1793408] - } -}, -"sound/sequences/00_sound_player.m64": {"eu":{"offset":[7940880,13500]},"us":{"offset":[8063360,13452]},"jp":{"offset":[7626912,12800]},"banks":[0,1,2,3,4,5,6,7,8,9,10]}, -"sound/sequences/01_cutscene_collect_star.m64": {"eu":{"offset":[7954384,626]},"us":{"offset":[8076816,619]},"jp":{"offset":[7639712,633]},"banks":[34]}, -"sound/sequences/02_menu_title_screen.m64": {"eu":{"offset":[7955024,8282]},"us":{"offset":[8077440,8254]},"jp":{"offset":[7640352,8276]},"banks":[17]}, -"sound/sequences/03_level_grass.m64": {"eu":{"offset":[7963312,5131]},"us":{"offset":[8085696,5122]},"jp":{"offset":[7648640,5134]},"banks":[34]}, -"sound/sequences/04_level_inside_castle.m64": {"eu":{"offset":[7968448,2505]},"us":{"offset":[8090832,2494]},"jp":{"offset":[7653776,2504]},"banks":[14]}, -"sound/sequences/05_level_water.m64": {"eu":{"offset":[7970960,4788]},"us":{"offset":[8093328,4780]},"jp":{"offset":[7656288,4816]},"banks":[19]}, -"sound/sequences/06_level_hot.m64": {"eu":{"offset":[7975760,2455]},"us":{"offset":[8098112,2451]},"jp":{"offset":[7661104,2459]},"banks":[15]}, -"sound/sequences/07_level_boss_koopa.m64": {"eu":{"offset":[7978224,3424]},"us":{"offset":[8100576,3418]},"jp":{"offset":[7663568,3430]},"banks":[18]}, -"sound/sequences/08_level_snow.m64": {"eu":{"offset":[7981648,8150]},"us":{"offset":[8104000,8143]},"jp":{"offset":[7667008,8157]},"banks":[11]}, -"sound/sequences/09_level_slide.m64": {"eu":{"offset":[7989808,7445]},"us":{"offset":[8112144,7432]},"jp":{"offset":[7675168,7452]},"banks":[13]}, -"sound/sequences/0A_level_spooky.m64": {"eu":{"offset":[7997264,5681]},"us":{"offset":[8119584,5674]},"jp":{"offset":[7682624,5686]},"banks":[33,16]}, -"sound/sequences/0B_event_piranha_plant.m64": {"eu":{"offset":[8002960,1400]},"us":{"offset":[8125264,1395]},"jp":{"offset":[7688320,1405]},"banks":[20]}, -"sound/sequences/0C_level_underground.m64": {"eu":{"offset":[8004368,4899]},"us":{"offset":[8126672,4887]},"jp":{"offset":[7689728,4905]},"banks":[21]}, -"sound/sequences/0D_menu_star_select.m64": {"eu":{"offset":[8009280,138]},"us":{"offset":[8131568,134]},"jp":{"offset":[7694640,138]},"banks":[22]}, -"sound/sequences/0E_event_powerup.m64": {"eu":{"offset":[8009424,3137]},"us":{"offset":[8131712,3129]},"jp":{"offset":[7694784,3143]},"banks":[23]}, -"sound/sequences/0F_event_metal_cap.m64": {"eu":{"offset":[8012576,2779]},"us":{"offset":[8134848,2770]},"jp":{"offset":[7697936,2786]},"banks":[24]}, -"sound/sequences/10_event_koopa_message.m64": {"eu":{"offset":[8015360,558]},"us":{"offset":[8137632,552]},"jp":{"offset":[7700736,564]},"banks":[18]}, -"sound/sequences/11_level_koopa_road.m64": {"eu":{"offset":[8015920,4753]},"us":{"offset":[8138192,4741]},"jp":{"offset":[7701312,4763]},"banks":[25]}, -"sound/sequences/12_event_high_score.m64": {"eu":{"offset":[8020688,275]},"us":{"offset":[8142944,271]},"jp":{"offset":[7706080,279]},"banks":[31]}, -"sound/sequences/13_event_merry_go_round.m64": {"eu":{"offset":[8020976,1660]},"us":{"offset":[8143216,1657]},"jp":{"offset":[7706368,1663]},"banks":[33]}, -"sound/sequences/14_event_race.m64": {"eu":{"offset":[8022640,200]},"us":{"offset":[8144880,197]},"jp":{"offset":[7708032,203]},"banks":[26]}, -"sound/sequences/15_cutscene_star_spawn.m64": {"eu":{"offset":[8022848,649]},"us":{"offset":[8145088,644]},"jp":{"offset":[7708240,654]},"banks":[14]}, -"sound/sequences/16_event_boss.m64": {"eu":{"offset":[8023504,3444]},"us":{"offset":[8145744,3435]},"jp":{"offset":[7708896,3451]},"banks":[27]}, -"sound/sequences/17_cutscene_collect_key.m64": {"eu":{"offset":[8026960,677]},"us":{"offset":[8149184,671]},"jp":{"offset":[7712352,683]},"banks":[26]}, -"sound/sequences/18_event_endless_stairs.m64": {"eu":{"offset":[8027648,1783]},"us":{"offset":[8149856,1777]},"jp":{"offset":[7713040,1789]},"banks":[28]}, -"sound/sequences/19_level_boss_koopa_final.m64": {"eu":{"offset":[8029440,3521]},"us":{"offset":[8151648,3515]},"jp":{"offset":[7714832,3527]},"banks":[29]}, -"sound/sequences/1A_cutscene_credits.m64": {"eu":{"offset":[8032976,14328]},"us":{"offset":[8155168,14313]},"jp":{"offset":[7718368,14341]},"banks":[37]}, -"sound/sequences/1B_event_solve_puzzle.m64": {"eu":{"offset":[8047312,219]},"us":{"offset":[8169488,216]},"jp":{"offset":[7732720,222]},"banks":[20]}, -"sound/sequences/1C_event_toad_message.m64": {"eu":{"offset":[8047536,211]},"us":{"offset":[8169712,208]},"jp":{"offset":[7732944,214]},"banks":[32]}, -"sound/sequences/1D_event_peach_message.m64": {"eu":{"offset":[8047760,436]},"us":{"offset":[8169920,432]},"jp":{"offset":[7733168,440]},"banks":[30]}, -"sound/sequences/1E_cutscene_intro.m64": {"eu":{"offset":[8048208,1770]},"us":{"offset":[8170352,1764]},"jp":{"offset":[7733616,1774]},"banks":[27]}, -"sound/sequences/1F_cutscene_victory.m64": {"eu":{"offset":[8049984,2066]},"us":{"offset":[8172128,2058]},"jp":{"offset":[7735392,2074]},"banks":[26]}, -"sound/sequences/20_cutscene_ending.m64": {"eu":{"offset":[8052064,1887]},"us":{"offset":[8174192,1882]},"jp":{"offset":[7737472,1892]},"banks":[35]}, -"sound/sequences/21_menu_file_select.m64": {"eu":{"offset":[8053952,786]},"us":{"offset":[8176080,781]},"jp":{"offset":[7739376,789]},"banks":[36]}, -"sound/sequences/22_cutscene_lakitu.m64": {"eu":{"offset":[8054752,317]},"us":{"offset":[8176864,313]},"banks":[27]}, -"sound/banks/00_bank.bnk": [0], -"sound/banks/01_bank.bnk": [1], -"sound/banks/02_bank.bnk": [2], -"sound/banks/03_bank.bnk": [3], -"sound/banks/04_bank.bnk": [4], -"sound/banks/05_bank.bnk": [5], -"sound/banks/06_bank.bnk": [6], -"sound/banks/07_bank.bnk": [7], -"sound/banks/08_bank.bnk": [8], -"sound/banks/09_bank.bnk": [9], -"sound/banks/0A_bank.bnk": [10], -"sound/banks/0B_bank.bnk": [11], -"sound/banks/0C_bank.bnk": [12], -"sound/banks/0D_bank.bnk": [13], -"sound/banks/0E_bank.bnk": [14], -"sound/banks/0F_bank.bnk": [15], -"sound/banks/10_bank.bnk": [16], -"sound/banks/11_bank.bnk": [17], -"sound/banks/12_bank.bnk": [18], -"sound/banks/13_bank.bnk": [19], -"sound/banks/14_bank.bnk": [20], -"sound/banks/15_bank.bnk": [21], -"sound/banks/16_bank.bnk": [22], -"sound/banks/17_bank.bnk": [23], -"sound/banks/18_bank.bnk": [24], -"sound/banks/19_bank.bnk": [25], -"sound/banks/1A_bank.bnk": [26], -"sound/banks/1B_bank.bnk": [27], -"sound/banks/1C_bank.bnk": [28], -"sound/banks/1D_bank.bnk": [29], -"sound/banks/1E_bank.bnk": [30], -"sound/banks/1F_bank.bnk": [31], -"sound/banks/20_bank.bnk": [32], -"sound/banks/21_bank.bnk": [33], -"sound/banks/22_bank.bnk": [34], -"sound/banks/23_bank.bnk": [35], -"sound/banks/24_bank.bnk": [36], -"sound/banks/25_bank.bnk": [37], -"textures/cave/hmc_textures.00000.rgba16.png": [32,64,4096,{"jp":[3432432,0],"us":[3439184,0],"eu":[3312784,0],"sh":[3287152,0]}], -"textures/cave/hmc_textures.01000.rgba16.png": [32,32,2048,{"jp":[3432432,4096],"us":[3439184,4096],"eu":[3312784,4096],"sh":[3287152,4096]}], -"textures/cave/hmc_textures.01800.rgba16.png": [32,64,4096,{"jp":[3432432,6144],"us":[3439184,6144],"eu":[3312784,6144],"sh":[3287152,6144]}], -"textures/cave/hmc_textures.02800.rgba16.png": [32,32,2048,{"jp":[3432432,10240],"us":[3439184,10240],"eu":[3312784,10240],"sh":[3287152,10240]}], -"textures/cave/hmc_textures.03000.rgba16.png": [32,32,2048,{"jp":[3432432,12288],"us":[3439184,12288],"eu":[3312784,12288],"sh":[3287152,12288]}], -"textures/cave/hmc_textures.03800.rgba16.png": [32,64,4096,{"jp":[3432432,14336],"us":[3439184,14336],"eu":[3312784,14336],"sh":[3287152,14336]}], -"textures/cave/hmc_textures.04800.rgba16.png": [64,32,4096,{"jp":[3432432,18432],"us":[3439184,18432],"eu":[3312784,18432],"sh":[3287152,18432]}], -"textures/cave/hmc_textures.05800.rgba16.png": [32,64,4096,{"jp":[3432432,22528],"us":[3439184,22528],"eu":[3312784,22528],"sh":[3287152,22528]}], -"textures/cave/hmc_textures.06800.rgba16.png": [32,32,2048,{"jp":[3432432,26624],"us":[3439184,26624],"eu":[3312784,26624],"sh":[3287152,26624]}], -"textures/cave/hmc_textures.07000.rgba16.png": [32,32,2048,{"jp":[3432432,28672],"us":[3439184,28672],"eu":[3312784,28672],"sh":[3287152,28672]}], -"textures/cave/hmc_textures.07800.rgba16.png": [32,64,4096,{"jp":[3432432,30720],"us":[3439184,30720],"eu":[3312784,30720],"sh":[3287152,30720]}], -"textures/cave/hmc_textures.08800.rgba16.png": [32,64,4096,{"jp":[3432432,34816],"us":[3439184,34816],"eu":[3312784,34816],"sh":[3287152,34816]}], -"textures/cave/hmc_textures.09800.rgba16.png": [32,32,2048,{"jp":[3432432,38912],"us":[3439184,38912],"eu":[3312784,38912],"sh":[3287152,38912]}], -"textures/cave/hmc_textures.0A000.rgba16.png": [32,32,2048,{"jp":[3432432,40960],"us":[3439184,40960],"eu":[3312784,40960],"sh":[3287152,40960]}], -"textures/cave/hmc_textures.0A800.rgba16.png": [32,64,4096,{"jp":[3432432,43008],"us":[3439184,43008],"eu":[3312784,43008],"sh":[3287152,43008]}], -"textures/cave/hmc_textures.0B800.ia16.png": [32,32,2048,{"jp":[3432432,47104],"us":[3439184,47104],"eu":[3312784,47104],"sh":[3287152,47104]}], -"textures/cave/hmc_textures.0C000.ia16.png": [32,32,2048,{"jp":[3298272,43008],"us":[3305024,43008],"eu":[3178624,43008],"sh":[3152992,43008]}], -"textures/skyboxes/bbh.sbox": [84288,{"jp":[3118928,0],"us":[3125680,0],"eu":[2999280,0],"sh":[2973648,0]}], -"textures/skyboxes/bidw.sbox": [131392,{"jp":[3146352,0],"us":[3153104,0],"eu":[3026704,0],"sh":[3001072,0]}], -"textures/skyboxes/bitfs.sbox": [102720,{"jp":[2942432,0],"us":[2949184,0],"eu":[2822784,0],"sh":[2797152,0]}], -"textures/skyboxes/bits.sbox": [131392,{"jp":[3191904,0],"us":[3198656,0],"eu":[3072256,0],"sh":[3046624,0]}], -"textures/skyboxes/ccm.sbox": [131392,{"jp":[2847920,0],"us":[2854672,0],"eu":[2728272,0],"sh":[2702640,0]}], -"textures/skyboxes/cloud_floor.sbox": [131392,{"jp":[3038752,0],"us":[3045504,0],"eu":[2919104,0],"sh":[2893472,0]}], -"textures/skyboxes/clouds.sbox": [84288,{"jp":[2906480,0],"us":[2913232,0],"eu":[2786832,0],"sh":[2761200,0]}], -"textures/skyboxes/ssl.sbox": [131392,{"jp":[3078784,0],"us":[3085536,0],"eu":[2959136,0],"sh":[2933504,0]}], -"textures/skyboxes/water.sbox": [131392,{"jp":[2796624,0],"us":[2803376,0],"eu":[2676976,0],"sh":[2651344,0]}], -"textures/skyboxes/wdw.sbox": [131392,{"jp":[2968208,0],"us":[2974960,0],"eu":[2848560,0],"sh":[2822928,0]}], -"textures/effect/bubble.06048.rgba16.png": [32,32,2048,{"jp":[3594960,24648],"us":[3601712,24648],"eu":[3475312,24648],"sh":[3449680,24648]}], -"textures/effect/flower.00008.rgba16.png": [32,32,2048,{"jp":[3594960,8],"us":[3601712,8],"eu":[3475312,8],"sh":[3449680,8]}], -"textures/effect/flower.00808.rgba16.png": [32,32,2048,{"jp":[3594960,2056],"us":[3601712,2056],"eu":[3475312,2056],"sh":[3449680,2056]}], -"textures/effect/flower.01008.rgba16.png": [32,32,2048,{"jp":[3594960,4104],"us":[3601712,4104],"eu":[3475312,4104],"sh":[3449680,4104]}], -"textures/effect/flower.01808.rgba16.png": [32,32,2048,{"jp":[3594960,6152],"us":[3601712,6152],"eu":[3475312,6152],"sh":[3449680,6152]}], -"textures/effect/lava_bubble.02020.rgba16.png": [32,32,2048,{"jp":[3594960,8224],"us":[3601712,8224],"eu":[3475312,8224],"sh":[3449680,8224]}], -"textures/effect/lava_bubble.02820.rgba16.png": [32,32,2048,{"jp":[3594960,10272],"us":[3601712,10272],"eu":[3475312,10272],"sh":[3449680,10272]}], -"textures/effect/lava_bubble.03020.rgba16.png": [32,32,2048,{"jp":[3594960,12320],"us":[3601712,12320],"eu":[3475312,12320],"sh":[3449680,12320]}], -"textures/effect/lava_bubble.03820.rgba16.png": [32,32,2048,{"jp":[3594960,14368],"us":[3601712,14368],"eu":[3475312,14368],"sh":[3449680,14368]}], -"textures/effect/lava_bubble.04020.rgba16.png": [32,32,2048,{"jp":[3594960,16416],"us":[3601712,16416],"eu":[3475312,16416],"sh":[3449680,16416]}], -"textures/effect/lava_bubble.04820.rgba16.png": [32,32,2048,{"jp":[3594960,18464],"us":[3601712,18464],"eu":[3475312,18464],"sh":[3449680,18464]}], -"textures/effect/lava_bubble.05020.rgba16.png": [32,32,2048,{"jp":[3594960,20512],"us":[3601712,20512],"eu":[3475312,20512],"sh":[3449680,20512]}], -"textures/effect/lava_bubble.05820.rgba16.png": [32,32,2048,{"jp":[3594960,22560],"us":[3601712,22560],"eu":[3475312,22560],"sh":[3449680,22560]}], -"textures/effect/tiny_bubble.0684C.rgba16.png": [16,16,512,{"jp":[3594960,26700],"us":[3601712,26700],"eu":[3475312,26700],"sh":[3449680,26700]}], -"textures/effect/tiny_bubble.06AD8.rgba16.png": [16,16,512,{"jp":[3594960,27352],"us":[3601712,27352],"eu":[3475312,27352],"sh":[3449680,27352]}], -"textures/fire/lll_textures.00000.rgba16.png": [32,32,2048,{"jp":[3262320,0],"us":[3269072,0],"eu":[3142672,0],"sh":[3117040,0]}], -"textures/fire/lll_textures.00800.rgba16.png": [32,32,2048,{"jp":[3262320,2048],"us":[3269072,2048],"eu":[3142672,2048],"sh":[3117040,2048]}], -"textures/fire/lll_textures.01000.rgba16.png": [32,32,2048,{"jp":[3262320,4096],"us":[3269072,4096],"eu":[3142672,4096],"sh":[3117040,4096]}], -"textures/fire/lll_textures.01800.rgba16.png": [32,32,2048,{"jp":[3262320,6144],"us":[3269072,6144],"eu":[3142672,6144],"sh":[3117040,6144]}], -"textures/fire/lll_textures.02000.rgba16.png": [32,32,2048,{"jp":[3262320,8192],"us":[3269072,8192],"eu":[3142672,8192],"sh":[3117040,8192]}], -"textures/fire/lll_textures.02800.rgba16.png": [32,32,2048,{"jp":[3262320,10240],"us":[3269072,10240],"eu":[3142672,10240],"sh":[3117040,10240]}], -"textures/fire/lll_textures.03000.rgba16.png": [32,32,2048,{"jp":[3262320,12288],"us":[3269072,12288],"eu":[3142672,12288],"sh":[3117040,12288]}], -"textures/fire/lll_textures.03800.rgba16.png": [32,32,2048,{"jp":[3262320,14336],"us":[3269072,14336],"eu":[3142672,14336],"sh":[3117040,14336]}], -"textures/fire/lll_textures.04000.rgba16.png": [32,32,2048,{"jp":[3262320,16384],"us":[3269072,16384],"eu":[3142672,16384],"sh":[3117040,16384]}], -"textures/fire/lll_textures.04800.rgba16.png": [32,32,2048,{"jp":[3262320,18432],"us":[3269072,18432],"eu":[3142672,18432],"sh":[3117040,18432]}], -"textures/fire/lll_textures.05000.rgba16.png": [32,32,2048,{"jp":[3262320,20480],"us":[3269072,20480],"eu":[3142672,20480],"sh":[3117040,20480]}], -"textures/fire/lll_textures.05800.rgba16.png": [32,32,2048,{"jp":[3262320,22528],"us":[3269072,22528],"eu":[3142672,22528],"sh":[3117040,22528]}], -"textures/fire/lll_textures.06000.rgba16.png": [32,32,2048,{"jp":[3262320,24576],"us":[3269072,24576],"eu":[3142672,24576],"sh":[3117040,24576]}], -"textures/fire/lll_textures.06800.rgba16.png": [32,32,2048,{"jp":[3262320,26624],"us":[3269072,26624],"eu":[3142672,26624],"sh":[3117040,26624]}], -"textures/fire/lll_textures.07000.rgba16.png": [32,32,2048,{"jp":[3262320,28672],"us":[3269072,28672],"eu":[3142672,28672],"sh":[3117040,28672]}], -"textures/fire/lll_textures.07800.rgba16.png": [32,32,2048,{"jp":[3262320,30720],"us":[3269072,30720],"eu":[3142672,30720],"sh":[3117040,30720]}], -"textures/fire/lll_textures.08000.rgba16.png": [32,32,2048,{"jp":[3262320,32768],"us":[3269072,32768],"eu":[3142672,32768],"sh":[3117040,32768]}], -"textures/fire/lll_textures.08800.rgba16.png": [32,32,2048,{"jp":[3262320,34816],"us":[3269072,34816],"eu":[3142672,34816],"sh":[3117040,34816]}], -"textures/fire/lll_textures.09000.rgba16.png": [32,32,2048,{"jp":[1078992,80984],"us":[1083968,92856],"eu":[909712,49528],"sh":[934640,80984]}], -"textures/fire/lll_textures.09800.rgba16.png": [32,32,2048,{"jp":[3262320,38912],"us":[3269072,38912],"eu":[3142672,38912],"sh":[3117040,38912]}], -"textures/fire/lll_textures.0A000.rgba16.png": [32,32,2048,{"jp":[3262320,40960],"us":[3269072,40960],"eu":[3142672,40960],"sh":[3117040,40960]}], -"textures/fire/lll_textures.0A800.rgba16.png": [32,32,2048,{"jp":[3262320,43008],"us":[3269072,43008],"eu":[3142672,43008],"sh":[3117040,43008]}], -"textures/fire/lll_textures.0B000.rgba16.png": [32,32,2048,{"jp":[3262320,45056],"us":[3269072,45056],"eu":[3142672,45056],"sh":[3117040,45056]}], -"textures/fire/lll_textures.0B800.rgba16.png": [32,32,2048,{"jp":[3262320,47104],"us":[3269072,47104],"eu":[3142672,47104],"sh":[3117040,47104]}], -"textures/generic/bob_textures.00000.rgba16.png": [32,32,2048,{"jp":[3323408,0],"us":[3330160,0],"eu":[3203760,0],"sh":[3178128,0]}], -"textures/generic/bob_textures.00800.rgba16.png": [32,32,2048,{"jp":[1327760,36160],"us":[1334928,36160],"eu":[1206896,36160],"sh":[1183408,36160]}], -"textures/generic/bob_textures.01000.rgba16.png": [32,32,2048,{"jp":[3323408,4096],"us":[3330160,4096],"eu":[3203760,4096],"sh":[3178128,4096]}], -"textures/generic/bob_textures.01800.rgba16.png": [32,32,2048,{"jp":[3323408,6144],"us":[3330160,6144],"eu":[3203760,6144],"sh":[3178128,6144]}], -"textures/generic/bob_textures.02000.rgba16.png": [32,32,2048,{"jp":[3323408,8192],"us":[3330160,8192],"eu":[3203760,8192],"sh":[3178128,8192]}], -"textures/generic/bob_textures.02800.rgba16.png": [32,32,2048,{"jp":[3323408,10240],"us":[3330160,10240],"eu":[3203760,10240],"sh":[3178128,10240]}], -"textures/generic/bob_textures.03000.rgba16.png": [32,32,2048,{"jp":[3323408,12288],"us":[3330160,12288],"eu":[3203760,12288],"sh":[3178128,12288]}], -"textures/generic/bob_textures.03800.rgba16.png": [32,32,2048,{"jp":[3323408,14336],"us":[3330160,14336],"eu":[3203760,14336],"sh":[3178128,14336]}], -"textures/generic/bob_textures.04000.rgba16.png": [32,32,2048,{"jp":[3323408,16384],"us":[3330160,16384],"eu":[3203760,16384],"sh":[3178128,16384]}], -"textures/generic/bob_textures.04800.rgba16.png": [32,32,2048,{"jp":[3323408,18432],"us":[3330160,18432],"eu":[3203760,18432],"sh":[3178128,18432]}], -"textures/generic/bob_textures.05000.rgba16.png": [32,32,2048,{"jp":[3323408,20480],"us":[3330160,20480],"eu":[3203760,20480],"sh":[3178128,20480]}], -"textures/generic/bob_textures.05800.rgba16.png": [32,32,2048,{"jp":[3323408,22528],"us":[3330160,22528],"eu":[3203760,22528],"sh":[3178128,22528]}], -"textures/generic/bob_textures.06000.rgba16.png": [32,64,4096,{"jp":[3323408,24576],"us":[3330160,24576],"eu":[3203760,24576],"sh":[3178128,24576]}], -"textures/generic/bob_textures.07000.rgba16.png": [32,32,2048,{"jp":[3323408,28672],"us":[3330160,28672],"eu":[3203760,28672],"sh":[3178128,28672]}], -"textures/generic/bob_textures.07800.rgba16.png": [32,32,2048,{"jp":[3323408,30720],"us":[3330160,30720],"eu":[3203760,30720],"sh":[3178128,30720]}], -"textures/generic/bob_textures.08000.rgba16.png": [32,32,2048,{"jp":[3323408,32768],"us":[3330160,32768],"eu":[3203760,32768],"sh":[3178128,32768]}], -"textures/generic/bob_textures.08800.rgba16.png": [32,32,2048,{"jp":[3323408,34816],"us":[3330160,34816],"eu":[3203760,34816],"sh":[3178128,34816]}], -"textures/generic/bob_textures.09000.rgba16.png": [32,32,2048,{"jp":[3323408,36864],"us":[3330160,36864],"eu":[3203760,36864],"sh":[3178128,36864]}], -"textures/generic/bob_textures.09800.rgba16.png": [32,32,2048,{"jp":[3323408,38912],"us":[3330160,38912],"eu":[3203760,38912],"sh":[3178128,38912]}], -"textures/generic/bob_textures.0A000.rgba16.png": [32,32,2048,{"jp":[3323408,40960],"us":[3330160,40960],"eu":[3203760,40960],"sh":[3178128,40960]}], -"textures/generic/bob_textures.0A800.rgba16.png": [32,32,2048,{"jp":[3323408,43008],"us":[3330160,43008],"eu":[3203760,43008],"sh":[3178128,43008]}], -"textures/generic/bob_textures.0B000.ia16.png": [32,32,2048,{"jp":[3323408,45056],"us":[3330160,45056],"eu":[3203760,45056],"sh":[3178128,45056]}], -"textures/grass/wf_textures.00000.rgba16.png": [32,32,2048,{"jp":[3496176,0],"us":[3502928,0],"eu":[3376528,0],"sh":[3350896,0]}], -"textures/grass/wf_textures.00800.rgba16.png": [32,32,2048,{"jp":[3496176,2048],"us":[3502928,2048],"eu":[3376528,2048],"sh":[3350896,2048]}], -"textures/grass/wf_textures.01000.rgba16.png": [32,32,2048,{"jp":[3496176,4096],"us":[3502928,4096],"eu":[3376528,4096],"sh":[3350896,4096]}], -"textures/grass/wf_textures.01800.rgba16.png": [32,32,2048,{"jp":[3496176,6144],"us":[3502928,6144],"eu":[3376528,6144],"sh":[3350896,6144]}], -"textures/grass/wf_textures.02000.rgba16.png": [32,32,2048,{"jp":[3496176,8192],"us":[3502928,8192],"eu":[3376528,8192],"sh":[3350896,8192]}], -"textures/grass/wf_textures.02800.rgba16.png": [32,32,2048,{"jp":[3496176,10240],"us":[3502928,10240],"eu":[3376528,10240],"sh":[3350896,10240]}], -"textures/grass/wf_textures.03000.rgba16.png": [32,32,2048,{"jp":[3496176,12288],"us":[3502928,12288],"eu":[3376528,12288],"sh":[3350896,12288]}], -"textures/grass/wf_textures.03800.rgba16.png": [32,32,2048,{"jp":[3496176,14336],"us":[3502928,14336],"eu":[3376528,14336],"sh":[3350896,14336]}], -"textures/grass/wf_textures.04000.rgba16.png": [32,32,2048,{"jp":[3496176,16384],"us":[3502928,16384],"eu":[3376528,16384],"sh":[3350896,16384]}], -"textures/grass/wf_textures.04800.rgba16.png": [32,32,2048,{"jp":[3496176,18432],"us":[3502928,18432],"eu":[3376528,18432],"sh":[3350896,18432]}], -"textures/grass/wf_textures.05000.rgba16.png": [32,32,2048,{"jp":[3496176,20480],"us":[3502928,20480],"eu":[3376528,20480],"sh":[3350896,20480]}], -"textures/grass/wf_textures.05800.rgba16.png": [32,32,2048,{"jp":[3496176,22528],"us":[3502928,22528],"eu":[3376528,22528],"sh":[3350896,22528]}], -"textures/grass/wf_textures.06000.rgba16.png": [32,32,2048,{"jp":[3390640,20480],"us":[3397392,20480],"eu":[3270992,20480],"sh":[3245360,20480]}], -"textures/grass/wf_textures.06800.rgba16.png": [32,32,2048,{"jp":[3496176,26624],"us":[3502928,26624],"eu":[3376528,26624],"sh":[3350896,26624]}], -"textures/grass/wf_textures.07000.rgba16.png": [32,32,2048,{"jp":[3496176,28672],"us":[3502928,28672],"eu":[3376528,28672],"sh":[3350896,28672]}], -"textures/grass/wf_textures.07800.rgba16.png": [32,32,2048,{"jp":[3496176,30720],"us":[3502928,30720],"eu":[3376528,30720],"sh":[3350896,30720]}], -"textures/grass/wf_textures.08000.rgba16.png": [32,32,2048,{"jp":[3496176,32768],"us":[3502928,32768],"eu":[3376528,32768],"sh":[3350896,32768]}], -"textures/grass/wf_textures.08800.rgba16.png": [32,32,2048,{"jp":[3496176,34816],"us":[3502928,34816],"eu":[3376528,34816],"sh":[3350896,34816]}], -"textures/grass/wf_textures.09000.rgba16.png": [32,32,2048,{"jp":[3496176,36864],"us":[3502928,36864],"eu":[3376528,36864],"sh":[3350896,36864]}], -"textures/grass/wf_textures.09800.rgba16.png": [32,32,2048,{"jp":[3496176,38912],"us":[3502928,38912],"eu":[3376528,38912],"sh":[3350896,38912]}], -"textures/grass/wf_textures.0A000.rgba16.png": [32,32,2048,{"jp":[3496176,40960],"us":[3502928,40960],"eu":[3376528,40960],"sh":[3350896,40960]}], -"textures/grass/wf_textures.0A800.rgba16.png": [32,32,2048,{"jp":[3496176,43008],"us":[3502928,43008],"eu":[3376528,43008],"sh":[3350896,43008]}], -"textures/grass/wf_textures.0B000.ia16.png": [32,32,2048,{"jp":[3323408,45056],"us":[3330160,45056],"eu":[3203760,45056],"sh":[3178128,45056]}], -"textures/grass/wf_textures.0B800.ia16.png": [32,32,2048,{"jp":[3496176,47104],"us":[3502928,47104],"eu":[3376528,47104],"sh":[3350896,47104]}], -"textures/inside/inside_castle_textures.00000.rgba16.png": [64,32,4096,{"jp":[3555104,0],"us":[3561856,0],"eu":[3435456,0],"sh":[3409824,0]}], -"textures/inside/inside_castle_textures.01000.rgba16.png": [64,32,4096,{"jp":[3555104,4096],"us":[3561856,4096],"eu":[3435456,4096],"sh":[3409824,4096]}], -"textures/inside/inside_castle_textures.02000.rgba16.png": [32,64,4096,{"jp":[3555104,8192],"us":[3561856,8192],"eu":[3435456,8192],"sh":[3409824,8192]}], -"textures/inside/inside_castle_textures.03000.rgba16.png": [32,32,2048,{"jp":[3555104,12288],"us":[3561856,12288],"eu":[3435456,12288],"sh":[3409824,12288]}], -"textures/inside/inside_castle_textures.03800.rgba16.png": [32,32,2048,{"jp":[3555104,14336],"us":[3561856,14336],"eu":[3435456,14336],"sh":[3409824,14336]}], -"textures/inside/inside_castle_textures.04000.rgba16.png": [32,32,2048,{"jp":[3555104,16384],"us":[3561856,16384],"eu":[3435456,16384],"sh":[3409824,16384]}], -"textures/inside/inside_castle_textures.04800.rgba16.png": [32,32,2048,{"jp":[3460352,2048],"us":[3467104,2048],"eu":[3340704,2048],"sh":[3315072,2048]}], -"textures/inside/inside_castle_textures.05000.rgba16.png": [32,32,2048,{"jp":[3555104,20480],"us":[3561856,20480],"eu":[3435456,20480],"sh":[3409824,20480]}], -"textures/inside/inside_castle_textures.05800.rgba16.png": [32,32,2048,{"jp":[3555104,22528],"us":[3561856,22528],"eu":[3435456,22528],"sh":[3409824,22528]}], -"textures/inside/inside_castle_textures.06000.rgba16.png": [32,64,4096,{"jp":[3555104,24576],"us":[3561856,24576],"eu":[3435456,24576],"sh":[3409824,24576]}], -"textures/inside/inside_castle_textures.07000.rgba16.png": [32,64,4096,{"jp":[3555104,28672],"us":[3561856,28672],"eu":[3435456,28672],"sh":[3409824,28672]}], -"textures/inside/inside_castle_textures.08000.rgba16.png": [32,32,2048,{"jp":[3555104,32768],"us":[3561856,32768],"eu":[3435456,32768],"sh":[3409824,32768]}], -"textures/inside/inside_castle_textures.08800.rgba16.png": [32,32,2048,{"jp":[3555104,34816],"us":[3561856,34816],"eu":[3435456,34816],"sh":[3409824,34816]}], -"textures/inside/inside_castle_textures.09000.rgba16.png": [32,64,4096,{"jp":[3555104,36864],"us":[3561856,36864],"eu":[3435456,36864],"sh":[3409824,36864]}], -"textures/inside/inside_castle_textures.0A000.rgba16.png": [32,64,4096,{"jp":[3555104,40960],"us":[3561856,40960],"eu":[3435456,40960],"sh":[3409824,40960]}], -"textures/inside/inside_castle_textures.0B000.rgba16.png": [32,32,2048,{"jp":[3555104,45056],"us":[3561856,45056],"eu":[3435456,45056],"sh":[3409824,45056]}], -"textures/inside/inside_castle_textures.0B800.rgba16.png": [64,32,4096,{"jp":[3555104,47104],"us":[3561856,47104],"eu":[3435456,47104],"sh":[3409824,47104]}], -"textures/intro_raw/hand_closed.rgba16.png": [32,32,2048,{"jp":[2455304],"us":[2463112],"eu":[2331912],"sh":[2308680]}], -"textures/intro_raw/hand_open.rgba16.png": [32,32,2048,{"jp":[2453248],"us":[2461056],"eu":[2329856],"sh":[2306624]}], -"textures/intro_raw/mario_face_shine.ia8.png": [32,32,1024,{"jp":[2503888],"us":[2511696],"eu":[2380496],"sh":[2357264]}], -"textures/intro_raw/red_star_0.rgba16.png": [32,32,2048,{"jp":[2457352],"us":[2465160],"eu":[2333960],"sh":[2310728]}], -"textures/intro_raw/red_star_1.rgba16.png": [32,32,2048,{"jp":[2459400],"us":[2467208],"eu":[2336008],"sh":[2312776]}], -"textures/intro_raw/red_star_2.rgba16.png": [32,32,2048,{"jp":[2461448],"us":[2469256],"eu":[2338056],"sh":[2314824]}], -"textures/intro_raw/red_star_3.rgba16.png": [32,32,2048,{"jp":[2463496],"us":[2471304],"eu":[2340104],"sh":[2316872]}], -"textures/intro_raw/red_star_4.rgba16.png": [32,32,2048,{"jp":[2465544],"us":[2473352],"eu":[2342152],"sh":[2318920]}], -"textures/intro_raw/red_star_5.rgba16.png": [32,32,2048,{"jp":[2467592],"us":[2475400],"eu":[2344200],"sh":[2320968]}], -"textures/intro_raw/red_star_6.rgba16.png": [32,32,2048,{"jp":[2469640],"us":[2477448],"eu":[2346248],"sh":[2323016]}], -"textures/intro_raw/red_star_7.rgba16.png": [32,32,2048,{"jp":[2471688],"us":[2479496],"eu":[2348296],"sh":[2325064]}], -"textures/intro_raw/sparkle_0.rgba16.png": [32,32,2048,{"jp":[2490888],"us":[2498696],"eu":[2367496],"sh":[2344264]}], -"textures/intro_raw/sparkle_1.rgba16.png": [32,32,2048,{"jp":[2492936],"us":[2500744],"eu":[2369544],"sh":[2346312]}], -"textures/intro_raw/sparkle_2.rgba16.png": [32,32,2048,{"jp":[2494984],"us":[2502792],"eu":[2371592],"sh":[2348360]}], -"textures/intro_raw/sparkle_3.rgba16.png": [32,32,2048,{"jp":[2497032],"us":[2504840],"eu":[2373640],"sh":[2350408]}], -"textures/intro_raw/sparkle_4.rgba16.png": [32,32,2048,{"jp":[2499080],"us":[2506888],"eu":[2375688],"sh":[2352456]}], -"textures/intro_raw/sparkle_5.rgba16.png": [32,32,2048,{"jp":[2501128],"us":[2508936],"eu":[2377736],"sh":[2354504]}], -"textures/intro_raw/white_star_0.rgba16.png": [32,32,2048,{"jp":[2473736],"us":[2481544],"eu":[2350344],"sh":[2327112]}], -"textures/intro_raw/white_star_1.rgba16.png": [32,32,2048,{"jp":[2475784],"us":[2483592],"eu":[2352392],"sh":[2329160]}], -"textures/intro_raw/white_star_2.rgba16.png": [32,32,2048,{"jp":[2477832],"us":[2485640],"eu":[2354440],"sh":[2331208]}], -"textures/intro_raw/white_star_3.rgba16.png": [32,32,2048,{"jp":[2479880],"us":[2487688],"eu":[2356488],"sh":[2333256]}], -"textures/intro_raw/white_star_4.rgba16.png": [32,32,2048,{"jp":[2481928],"us":[2489736],"eu":[2358536],"sh":[2335304]}], -"textures/intro_raw/white_star_5.rgba16.png": [32,32,2048,{"jp":[2483976],"us":[2491784],"eu":[2360584],"sh":[2337352]}], -"textures/intro_raw/white_star_6.rgba16.png": [32,32,2048,{"jp":[2486024],"us":[2493832],"eu":[2362632],"sh":[2339400]}], -"textures/intro_raw/white_star_7.rgba16.png": [32,32,2048,{"jp":[2488072],"us":[2495880],"eu":[2364680],"sh":[2341448]}], -"textures/machine/ttc_textures.00000.rgba16.png": [32,32,2048,{"jp":[3460352,0],"us":[3467104,0],"eu":[3340704,0],"sh":[3315072,0]}], -"textures/machine/ttc_textures.00800.rgba16.png": [32,32,2048,{"jp":[3460352,2048],"us":[3467104,2048],"eu":[3340704,2048],"sh":[3315072,2048]}], -"textures/machine/ttc_textures.01000.rgba16.png": [32,32,2048,{"jp":[3460352,4096],"us":[3467104,4096],"eu":[3340704,4096],"sh":[3315072,4096]}], -"textures/machine/ttc_textures.01800.rgba16.png": [32,32,2048,{"jp":[3460352,6144],"us":[3467104,6144],"eu":[3340704,6144],"sh":[3315072,6144]}], -"textures/machine/ttc_textures.02000.rgba16.png": [32,32,2048,{"jp":[3460352,8192],"us":[3467104,8192],"eu":[3340704,8192],"sh":[3315072,8192]}], -"textures/machine/ttc_textures.02800.rgba16.png": [32,32,2048,{"jp":[3460352,10240],"us":[3467104,10240],"eu":[3340704,10240],"sh":[3315072,10240]}], -"textures/machine/ttc_textures.03000.rgba16.png": [32,32,2048,{"jp":[3460352,12288],"us":[3467104,12288],"eu":[3340704,12288],"sh":[3315072,12288]}], -"textures/machine/ttc_textures.03800.rgba16.png": [32,32,2048,{"jp":[3460352,14336],"us":[3467104,14336],"eu":[3340704,14336],"sh":[3315072,14336]}], -"textures/machine/ttc_textures.04000.rgba16.png": [32,64,4096,{"jp":[3460352,16384],"us":[3467104,16384],"eu":[3340704,16384],"sh":[3315072,16384]}], -"textures/machine/ttc_textures.05000.rgba16.png": [32,32,2048,{"jp":[3460352,20480],"us":[3467104,20480],"eu":[3340704,20480],"sh":[3315072,20480]}], -"textures/machine/ttc_textures.05800.rgba16.png": [32,32,2048,{"jp":[3460352,22528],"us":[3467104,22528],"eu":[3340704,22528],"sh":[3315072,22528]}], -"textures/machine/ttc_textures.06000.rgba16.png": [32,32,2048,{"jp":[3460352,24576],"us":[3467104,24576],"eu":[3340704,24576],"sh":[3315072,24576]}], -"textures/machine/ttc_textures.06800.rgba16.png": [32,32,2048,{"jp":[3460352,26624],"us":[3467104,26624],"eu":[3340704,26624],"sh":[3315072,26624]}], -"textures/machine/ttc_textures.07000.rgba16.png": [32,32,2048,{"jp":[3460352,28672],"us":[3467104,28672],"eu":[3340704,28672],"sh":[3315072,28672]}], -"textures/machine/ttc_textures.07800.rgba16.png": [16,64,2048,{"jp":[3460352,30720],"us":[3467104,30720],"eu":[3340704,30720],"sh":[3315072,30720]}], -"textures/machine/ttc_textures.08000.rgba16.png": [64,8,1024,{"jp":[3460352,32768],"us":[3467104,32768],"eu":[3340704,32768],"sh":[3315072,32768]}], -"textures/machine/ttc_textures.08400.rgba16.png": [32,32,2048,{"jp":[3460352,33792],"us":[3467104,33792],"eu":[3340704,33792],"sh":[3315072,33792]}], -"textures/mountain/ttm_textures.00000.rgba16.png": [32,32,2048,{"jp":[3473152,0],"us":[3479904,0],"eu":[3353504,0],"sh":[3327872,0]}], -"textures/mountain/ttm_textures.00800.rgba16.png": [64,32,4096,{"jp":[3473152,2048],"us":[3479904,2048],"eu":[3353504,2048],"sh":[3327872,2048]}], -"textures/mountain/ttm_textures.01800.rgba16.png": [32,64,4096,{"jp":[3473152,6144],"us":[3479904,6144],"eu":[3353504,6144],"sh":[3327872,6144]}], -"textures/mountain/ttm_textures.02800.rgba16.png": [32,32,2048,{"jp":[3473152,10240],"us":[3479904,10240],"eu":[3353504,10240],"sh":[3327872,10240]}], -"textures/mountain/ttm_textures.03000.rgba16.png": [32,32,2048,{"jp":[3473152,12288],"us":[3479904,12288],"eu":[3353504,12288],"sh":[3327872,12288]}], -"textures/mountain/ttm_textures.03800.rgba16.png": [32,32,2048,{"jp":[3473152,14336],"us":[3479904,14336],"eu":[3353504,14336],"sh":[3327872,14336]}], -"textures/mountain/ttm_textures.04000.rgba16.png": [32,32,2048,{"jp":[3473152,16384],"us":[3479904,16384],"eu":[3353504,16384],"sh":[3327872,16384]}], -"textures/mountain/ttm_textures.04800.rgba16.png": [32,32,2048,{"jp":[3473152,18432],"us":[3479904,18432],"eu":[3353504,18432],"sh":[3327872,18432]}], -"textures/mountain/ttm_textures.05000.rgba16.png": [32,32,2048,{"jp":[3473152,20480],"us":[3479904,20480],"eu":[3353504,20480],"sh":[3327872,20480]}], -"textures/mountain/ttm_textures.05800.rgba16.png": [32,64,4096,{"jp":[3473152,22528],"us":[3479904,22528],"eu":[3353504,22528],"sh":[3327872,22528]}], -"textures/mountain/ttm_textures.06800.rgba16.png": [32,32,2048,{"jp":[3473152,26624],"us":[3479904,26624],"eu":[3353504,26624],"sh":[3327872,26624]}], -"textures/mountain/ttm_textures.07000.rgba16.png": [32,32,2048,{"jp":[3473152,28672],"us":[3479904,28672],"eu":[3353504,28672],"sh":[3327872,28672]}], -"textures/mountain/ttm_textures.07800.rgba16.png": [32,32,2048,{"jp":[3473152,30720],"us":[3479904,30720],"eu":[3353504,30720],"sh":[3327872,30720]}], -"textures/mountain/ttm_textures.08000.rgba16.png": [32,32,2048,{"jp":[3473152,32768],"us":[3479904,32768],"eu":[3353504,32768],"sh":[3327872,32768]}], -"textures/mountain/ttm_textures.08800.rgba16.png": [64,32,4096,{"jp":[3473152,34816],"us":[3479904,34816],"eu":[3353504,34816],"sh":[3327872,34816]}], -"textures/mountain/ttm_textures.09800.rgba16.png": [32,32,2048,{"jp":[3473152,38912],"us":[3479904,38912],"eu":[3353504,38912],"sh":[3327872,38912]}], -"textures/mountain/ttm_textures.0A000.rgba16.png": [32,32,2048,{"jp":[3390640,24576],"us":[3397392,24576],"eu":[3270992,24576],"sh":[3245360,24576]}], -"textures/mountain/ttm_textures.0A800.rgba16.png": [32,32,2048,{"jp":[3473152,43008],"us":[3479904,43008],"eu":[3353504,43008],"sh":[3327872,43008]}], -"textures/mountain/ttm_textures.0B000.rgba16.png": [32,32,2048,{"jp":[3473152,45056],"us":[3479904,45056],"eu":[3353504,45056],"sh":[3327872,45056]}], -"textures/mountain/ttm_textures.0B800.rgba16.png": [32,32,2048,{"jp":[3473152,47104],"us":[3479904,47104],"eu":[3353504,47104],"sh":[3327872,47104]}], -"textures/mountain/ttm_textures.0C000.rgba16.png": [32,32,2048,{"jp":[3473152,49152],"us":[3479904,49152],"eu":[3353504,49152],"sh":[3327872,49152]}], -"textures/outside/castle_grounds_textures.00000.rgba16.png": [32,32,2048,{"jp":[3527344,0],"us":[3534096,0],"eu":[3407696,0],"sh":[3382064,0]}], -"textures/outside/castle_grounds_textures.00800.rgba16.png": [32,32,2048,{"jp":[3527344,2048],"us":[3534096,2048],"eu":[3407696,2048],"sh":[3382064,2048]}], -"textures/outside/castle_grounds_textures.01000.rgba16.png": [64,32,4096,{"jp":[3527344,4096],"us":[3534096,4096],"eu":[3407696,4096],"sh":[3382064,4096]}], -"textures/outside/castle_grounds_textures.02000.rgba16.png": [32,64,4096,{"jp":[3527344,8192],"us":[3534096,8192],"eu":[3407696,8192],"sh":[3382064,8192]}], -"textures/outside/castle_grounds_textures.03000.rgba16.png": [32,32,2048,{"jp":[3527344,12288],"us":[3534096,12288],"eu":[3407696,12288],"sh":[3382064,12288]}], -"textures/outside/castle_grounds_textures.03800.rgba16.png": [32,32,2048,{"jp":[3527344,14336],"us":[3534096,14336],"eu":[3407696,14336],"sh":[3382064,14336]}], -"textures/outside/castle_grounds_textures.04000.rgba16.png": [32,32,2048,{"jp":[3527344,16384],"us":[3534096,16384],"eu":[3407696,16384],"sh":[3382064,16384]}], -"textures/outside/castle_grounds_textures.04800.rgba16.png": [32,64,4096,{"jp":[3527344,18432],"us":[3534096,18432],"eu":[3407696,18432],"sh":[3382064,18432]}], -"textures/outside/castle_grounds_textures.05800.rgba16.png": [32,32,2048,{"jp":[3527344,22528],"us":[3534096,22528],"eu":[3407696,22528],"sh":[3382064,22528]}], -"textures/outside/castle_grounds_textures.06000.rgba16.png": [32,32,2048,{"jp":[3527344,24576],"us":[3534096,24576],"eu":[3407696,24576],"sh":[3382064,24576]}], -"textures/outside/castle_grounds_textures.06800.rgba16.png": [64,32,4096,{"jp":[3527344,26624],"us":[3534096,26624],"eu":[3407696,26624],"sh":[3382064,26624]}], -"textures/outside/castle_grounds_textures.07800.rgba16.png": [32,32,2048,{"jp":[3527344,30720],"us":[3534096,30720],"eu":[3407696,30720],"sh":[3382064,30720]}], -"textures/outside/castle_grounds_textures.08000.rgba16.png": [32,32,2048,{"jp":[3527344,32768],"us":[3534096,32768],"eu":[3407696,32768],"sh":[3382064,32768]}], -"textures/outside/castle_grounds_textures.08800.rgba16.png": [32,32,2048,{"jp":[3527344,34816],"us":[3534096,34816],"eu":[3407696,34816],"sh":[3382064,34816]}], -"textures/outside/castle_grounds_textures.09000.rgba16.png": [32,32,2048,{"jp":[3527344,36864],"us":[3534096,36864],"eu":[3407696,36864],"sh":[3382064,36864]}], -"textures/outside/castle_grounds_textures.09800.rgba16.png": [32,32,2048,{"jp":[3527344,38912],"us":[3534096,38912],"eu":[3407696,38912],"sh":[3382064,38912]}], -"textures/outside/castle_grounds_textures.0A000.rgba16.png": [32,32,2048,{"jp":[3527344,40960],"us":[3534096,40960],"eu":[3407696,40960],"sh":[3382064,40960]}], -"textures/outside/castle_grounds_textures.0A800.rgba16.png": [32,32,2048,{"jp":[3527344,43008],"us":[3534096,43008],"eu":[3407696,43008],"sh":[3382064,43008]}], -"textures/outside/castle_grounds_textures.0B000.rgba16.png": [16,32,1024,{"jp":[3527344,45056],"us":[3534096,45056],"eu":[3407696,45056],"sh":[3382064,45056]}], -"textures/outside/castle_grounds_textures.0B400.rgba16.png": [32,32,2048,{"jp":[3527344,46080],"us":[3534096,46080],"eu":[3407696,46080],"sh":[3382064,46080]}], -"textures/outside/castle_grounds_textures.0BC00.ia16.png": [32,32,2048,{"jp":[3323408,45056],"us":[3330160,45056],"eu":[3203760,45056],"sh":[3178128,45056]}], -"textures/segment2/font_graphics.05900.ia4.png": [16,8,64,{"us":[1083968,22784]}], -"textures/segment2/font_graphics.05940.ia4.png": [16,8,64,{"us":[1083968,22848]}], -"textures/segment2/font_graphics.05980.ia4.png": [16,8,64,{"us":[1083968,22912]}], -"textures/segment2/font_graphics.059C0.ia4.png": [16,8,64,{"us":[1083968,22976]}], -"textures/segment2/font_graphics.05A00.ia4.png": [16,8,64,{"us":[1083968,23040]}], -"textures/segment2/font_graphics.05A40.ia4.png": [16,8,64,{"us":[1083968,23104]}], -"textures/segment2/font_graphics.05A80.ia4.png": [16,8,64,{"us":[1083968,23168]}], -"textures/segment2/font_graphics.05AC0.ia4.png": [16,8,64,{"us":[1083968,23232]}], -"textures/segment2/font_graphics.05B00.ia4.png": [16,8,64,{"us":[1083968,23296]}], -"textures/segment2/font_graphics.05B40.ia4.png": [16,8,64,{"us":[1083968,23360]}], -"textures/segment2/font_graphics.05B80.ia4.png": [16,8,64,{"us":[1083968,23424]}], -"textures/segment2/font_graphics.05BC0.ia4.png": [16,8,64,{"us":[1083968,23488]}], -"textures/segment2/font_graphics.05C00.ia4.png": [16,8,64,{"us":[1083968,23552]}], -"textures/segment2/font_graphics.05C40.ia4.png": [16,8,64,{"us":[1083968,23616]}], -"textures/segment2/font_graphics.05C80.ia4.png": [16,8,64,{"us":[1083968,23680]}], -"textures/segment2/font_graphics.05CC0.ia4.png": [16,8,64,{"us":[1083968,23744]}], -"textures/segment2/font_graphics.05D00.ia4.png": [16,8,64,{"us":[1083968,23808]}], -"textures/segment2/font_graphics.05D40.ia4.png": [16,8,64,{"us":[1083968,23872]}], -"textures/segment2/font_graphics.05D80.ia4.png": [16,8,64,{"us":[1083968,23936]}], -"textures/segment2/font_graphics.05DC0.ia4.png": [16,8,64,{"us":[1083968,24000]}], -"textures/segment2/font_graphics.05E00.ia4.png": [16,8,64,{"us":[1083968,24064]}], -"textures/segment2/font_graphics.05E40.ia4.png": [16,8,64,{"us":[1083968,24128]}], -"textures/segment2/font_graphics.05E80.ia4.png": [16,8,64,{"us":[1083968,24192]}], -"textures/segment2/font_graphics.05EC0.ia4.png": [16,8,64,{"us":[1083968,24256]}], -"textures/segment2/font_graphics.05F00.ia1.png": [16,8,16,{"eu":[909712,24320]}], -"textures/segment2/font_graphics.05F00.ia4.png": [16,8,64,{"us":[1083968,24320]}], -"textures/segment2/font_graphics.05F10.ia1.png": [16,8,16,{"eu":[909712,24336]}], -"textures/segment2/font_graphics.05F20.ia1.png": [16,8,16,{"eu":[909712,24352]}], -"textures/segment2/font_graphics.05F30.ia1.png": [16,8,16,{"eu":[909712,24368]}], -"textures/segment2/font_graphics.05F40.ia1.png": [16,8,16,{"eu":[909712,24384]}], -"textures/segment2/font_graphics.05F40.ia4.png": [16,8,64,{"us":[1083968,24384]}], -"textures/segment2/font_graphics.05F50.ia1.png": [16,8,16,{"eu":[909712,24400]}], -"textures/segment2/font_graphics.05F60.ia1.png": [16,8,16,{"eu":[909712,24416]}], -"textures/segment2/font_graphics.05F70.ia1.png": [16,8,16,{"eu":[909712,24432]}], -"textures/segment2/font_graphics.05F80.ia1.png": [16,8,16,{"eu":[909712,24448]}], -"textures/segment2/font_graphics.05F80.ia4.png": [16,8,64,{"us":[1083968,24448]}], -"textures/segment2/font_graphics.05F90.ia1.png": [16,8,16,{"eu":[909712,24464]}], -"textures/segment2/font_graphics.05FA0.ia1.png": [16,8,16,{"eu":[909712,24480]}], -"textures/segment2/font_graphics.05FB0.ia1.png": [16,8,16,{"eu":[909712,24496]}], -"textures/segment2/font_graphics.05FC0.ia1.png": [16,8,16,{"eu":[909712,24512]}], -"textures/segment2/font_graphics.05FC0.ia4.png": [16,8,64,{"us":[1083968,24512]}], -"textures/segment2/font_graphics.05FD0.ia1.png": [16,8,16,{"eu":[909712,24528]}], -"textures/segment2/font_graphics.05FE0.ia1.png": [16,8,16,{"eu":[909712,24544]}], -"textures/segment2/font_graphics.05FF0.ia1.png": [16,8,16,{"eu":[909712,24560]}], -"textures/segment2/font_graphics.06000.ia1.png": [16,8,16,{"eu":[909712,24576]}], -"textures/segment2/font_graphics.06000.ia4.png": [16,8,64,{"us":[1083968,24576]}], -"textures/segment2/font_graphics.06010.ia1.png": [16,8,16,{"eu":[909712,24592]}], -"textures/segment2/font_graphics.06020.ia1.png": [16,8,16,{"eu":[909712,24608]}], -"textures/segment2/font_graphics.06030.ia1.png": [16,8,16,{"eu":[909712,24624]}], -"textures/segment2/font_graphics.06040.ia1.png": [16,8,16,{"eu":[909712,24640]}], -"textures/segment2/font_graphics.06040.ia4.png": [16,8,64,{"us":[1083968,24640]}], -"textures/segment2/font_graphics.06050.ia1.png": [16,8,16,{"eu":[909712,24656]}], -"textures/segment2/font_graphics.06060.ia1.png": [16,8,16,{"eu":[909712,24672]}], -"textures/segment2/font_graphics.06070.ia1.png": [16,8,16,{"eu":[909712,24688]}], -"textures/segment2/font_graphics.06080.ia1.png": [16,8,16,{"eu":[909712,24704]}], -"textures/segment2/font_graphics.06080.ia4.png": [16,8,64,{"us":[1083968,24704]}], -"textures/segment2/font_graphics.06090.ia1.png": [16,8,16,{"eu":[909712,24720]}], -"textures/segment2/font_graphics.060A0.ia1.png": [16,8,16,{"eu":[909712,24736]}], -"textures/segment2/font_graphics.060B0.ia1.png": [16,8,16,{"eu":[909712,24752]}], -"textures/segment2/font_graphics.060C0.ia1.png": [16,8,16,{"eu":[909712,24768]}], -"textures/segment2/font_graphics.060C0.ia4.png": [16,8,64,{"us":[1083968,24768]}], -"textures/segment2/font_graphics.060D0.ia1.png": [16,8,16,{"eu":[909712,24784]}], -"textures/segment2/font_graphics.060E0.ia1.png": [16,8,16,{"eu":[909712,24800]}], -"textures/segment2/font_graphics.060F0.ia1.png": [16,8,16,{"eu":[909712,24816]}], -"textures/segment2/font_graphics.06100.ia1.png": [16,8,16,{"eu":[909712,24832]}], -"textures/segment2/font_graphics.06100.ia4.png": [16,8,64,{"us":[1083968,24832]}], -"textures/segment2/font_graphics.06110.ia1.png": [16,8,16,{"eu":[909712,24848]}], -"textures/segment2/font_graphics.06120.ia1.png": [16,8,16,{"eu":[909712,24864]}], -"textures/segment2/font_graphics.06130.ia1.png": [16,8,16,{"eu":[909712,24880]}], -"textures/segment2/font_graphics.06140.ia1.png": [16,8,16,{"eu":[909712,24896]}], -"textures/segment2/font_graphics.06140.ia4.png": [16,8,64,{"us":[1083968,24896]}], -"textures/segment2/font_graphics.06150.ia1.png": [16,8,16,{"eu":[909712,24912]}], -"textures/segment2/font_graphics.06160.ia1.png": [16,8,16,{"eu":[909712,24928]}], -"textures/segment2/font_graphics.06170.ia1.png": [16,8,16,{"eu":[909712,24944]}], -"textures/segment2/font_graphics.06180.ia1.png": [16,8,16,{"eu":[909712,24960]}], -"textures/segment2/font_graphics.06180.ia4.png": [16,8,64,{"us":[1083968,24960]}], -"textures/segment2/font_graphics.06190.ia1.png": [16,8,16,{"eu":[909712,24976]}], -"textures/segment2/font_graphics.061A0.ia1.png": [16,8,16,{"eu":[909712,24992]}], -"textures/segment2/font_graphics.061B0.ia1.png": [16,8,16,{"eu":[909712,25008]}], -"textures/segment2/font_graphics.061C0.ia1.png": [16,8,16,{"eu":[909712,25024]}], -"textures/segment2/font_graphics.061C0.ia4.png": [16,8,64,{"us":[1083968,25024]}], -"textures/segment2/font_graphics.061D0.ia1.png": [16,8,16,{"eu":[909712,25040]}], -"textures/segment2/font_graphics.061E0.ia1.png": [16,8,16,{"eu":[909712,25056]}], -"textures/segment2/font_graphics.061F0.ia1.png": [16,8,16,{"eu":[909712,25072]}], -"textures/segment2/font_graphics.06200.ia1.png": [16,8,16,{"eu":[909712,25088]}], -"textures/segment2/font_graphics.06200.ia4.png": [16,8,64,{"us":[1083968,25088]}], -"textures/segment2/font_graphics.06210.ia1.png": [16,8,16,{"eu":[909712,25104]}], -"textures/segment2/font_graphics.06220.ia1.png": [16,8,16,{"eu":[909712,25120]}], -"textures/segment2/font_graphics.06230.ia1.png": [16,8,16,{"eu":[909712,25136]}], -"textures/segment2/font_graphics.06240.ia1.png": [16,8,16,{"eu":[909712,25152]}], -"textures/segment2/font_graphics.06240.ia4.png": [16,8,64,{"us":[1083968,25152]}], -"textures/segment2/font_graphics.06250.ia1.png": [16,8,16,{"eu":[909712,25168]}], -"textures/segment2/font_graphics.06260.ia1.png": [16,8,16,{"eu":[909712,25184]}], -"textures/segment2/font_graphics.06270.ia1.png": [16,8,16,{"eu":[909712,25200]}], -"textures/segment2/font_graphics.06280.ia1.png": [16,8,16,{"eu":[909712,25216]}], -"textures/segment2/font_graphics.06280.ia4.png": [16,8,64,{"us":[1083968,25216]}], -"textures/segment2/font_graphics.06290.ia1.png": [16,8,16,{"eu":[909712,25232]}], -"textures/segment2/font_graphics.062A0.ia1.png": [16,8,16,{"eu":[909712,25248]}], -"textures/segment2/font_graphics.062B0.ia1.png": [16,8,16,{"eu":[909712,25264]}], -"textures/segment2/font_graphics.062C0.ia1.png": [16,8,16,{"eu":[909712,25280]}], -"textures/segment2/font_graphics.062C0.ia4.png": [16,8,64,{"us":[1083968,25280]}], -"textures/segment2/font_graphics.062D0.ia1.png": [16,8,16,{"eu":[909712,25296]}], -"textures/segment2/font_graphics.062E0.ia1.png": [16,8,16,{"eu":[909712,25312]}], -"textures/segment2/font_graphics.062F0.ia1.png": [16,8,16,{"eu":[909712,25328]}], -"textures/segment2/font_graphics.06300.ia1.png": [16,8,16,{"eu":[909712,25344]}], -"textures/segment2/font_graphics.06300.ia4.png": [16,8,64,{"us":[1083968,25344]}], -"textures/segment2/font_graphics.06310.ia1.png": [16,8,16,{"eu":[909712,25360]}], -"textures/segment2/font_graphics.06320.ia1.png": [16,8,16,{"eu":[909712,25376]}], -"textures/segment2/font_graphics.06330.ia1.png": [16,8,16,{"eu":[909712,25392]}], -"textures/segment2/font_graphics.06340.ia1.png": [16,8,16,{"eu":[909712,25408]}], -"textures/segment2/font_graphics.06340.ia4.png": [16,8,64,{"us":[1083968,25408]}], -"textures/segment2/font_graphics.06350.ia1.png": [16,8,16,{"eu":[909712,25424]}], -"textures/segment2/font_graphics.06360.ia1.png": [16,8,16,{"eu":[909712,25440]}], -"textures/segment2/font_graphics.06370.ia1.png": [16,8,16,{"eu":[909712,25456]}], -"textures/segment2/font_graphics.06380.ia1.png": [16,8,16,{"eu":[909712,25472]}], -"textures/segment2/font_graphics.06380.ia4.png": [16,8,64,{"us":[1083968,25472]}], -"textures/segment2/font_graphics.06390.ia1.png": [16,8,16,{"eu":[909712,25488]}], -"textures/segment2/font_graphics.063A0.ia1.png": [16,8,16,{"eu":[909712,25504]}], -"textures/segment2/font_graphics.063B0.ia1.png": [16,8,16,{"eu":[909712,25520]}], -"textures/segment2/font_graphics.063C0.ia1.png": [16,8,16,{"eu":[909712,25536]}], -"textures/segment2/font_graphics.063C0.ia4.png": [16,8,64,{"us":[1083968,25536]}], -"textures/segment2/font_graphics.063D0.ia1.png": [16,8,16,{"eu":[909712,25552]}], -"textures/segment2/font_graphics.063E0.ia1.png": [16,8,16,{"eu":[909712,25568]}], -"textures/segment2/font_graphics.063F0.ia1.png": [16,8,16,{"eu":[909712,25584]}], -"textures/segment2/font_graphics.06400.ia1.png": [16,8,16,{"eu":[909712,25600]}], -"textures/segment2/font_graphics.06400.ia4.png": [16,8,64,{"us":[1083968,25600]}], -"textures/segment2/font_graphics.06410.ia1.png": [16,8,16,{"jp":[1599504,83574],"us":[1606720,83574],"eu":[909712,25616],"sh":[1455200,83574]}], -"textures/segment2/font_graphics.06420.ia1.png": [16,8,16,{"jp":[1844608,133979],"us":[1851952,133979],"eu":[909712,25632],"sh":[1700432,133979]}], -"textures/segment2/font_graphics.06430.ia1.png": [16,8,16,{"eu":[909712,25648]}], -"textures/segment2/font_graphics.06440.ia1.png": [16,8,16,{"eu":[909712,25664]}], -"textures/segment2/font_graphics.06440.ia4.png": [16,8,64,{"us":[1083968,25664]}], -"textures/segment2/font_graphics.06450.ia1.png": [16,8,16,{"eu":[909712,25680]}], -"textures/segment2/font_graphics.06460.ia1.png": [16,8,16,{"eu":[909712,25696]}], -"textures/segment2/font_graphics.06470.ia1.png": [16,8,16,{"eu":[909712,25712]}], -"textures/segment2/font_graphics.06480.ia1.png": [16,8,16,{"eu":[909712,25728]}], -"textures/segment2/font_graphics.06480.ia4.png": [16,8,64,{"us":[1083968,25728]}], -"textures/segment2/font_graphics.06490.ia1.png": [16,8,16,{"eu":[909712,25744]}], -"textures/segment2/font_graphics.064A0.ia1.png": [16,8,16,{"eu":[909712,25760]}], -"textures/segment2/font_graphics.064B0.ia1.png": [16,8,16,{"eu":[909712,25776]}], -"textures/segment2/font_graphics.064C0.ia1.png": [16,8,16,{"eu":[909712,25792]}], -"textures/segment2/font_graphics.064C0.ia4.png": [16,8,64,{"us":[1083968,25792]}], -"textures/segment2/font_graphics.064D0.ia1.png": [16,8,16,{"eu":[909712,25808]}], -"textures/segment2/font_graphics.064E0.ia1.png": [16,8,16,{"eu":[909712,25824]}], -"textures/segment2/font_graphics.064F0.ia1.png": [16,8,16,{"eu":[909712,25840]}], -"textures/segment2/font_graphics.06500.ia1.png": [16,8,16,{"eu":[909712,25856]}], -"textures/segment2/font_graphics.06500.ia4.png": [16,8,64,{"us":[1083968,25856]}], -"textures/segment2/font_graphics.06510.ia1.png": [16,8,16,{"eu":[909712,25872]}], -"textures/segment2/font_graphics.06520.ia1.png": [16,8,16,{"eu":[909712,25888]}], -"textures/segment2/font_graphics.06530.ia1.png": [16,8,16,{"eu":[909712,25904]}], -"textures/segment2/font_graphics.06540.ia4.png": [16,8,64,{"us":[1083968,25920]}], -"textures/segment2/font_graphics.06580.ia4.png": [16,8,64,{"us":[1083968,25984]}], -"textures/segment2/font_graphics.065C0.ia4.png": [16,8,64,{"us":[1083968,26048]}], -"textures/segment2/font_graphics.06600.ia4.png": [16,8,64,{"us":[1083968,26112]}], -"textures/segment2/font_graphics.06640.ia4.png": [16,8,64,{"us":[1083968,26176]}], -"textures/segment2/font_graphics.06680.ia4.png": [16,8,64,{"us":[1083968,26240]}], -"textures/segment2/font_graphics.066C0.ia4.png": [16,8,64,{"us":[1083968,26304]}], -"textures/segment2/font_graphics.06700.ia4.png": [16,8,64,{"us":[1083968,26368]}], -"textures/segment2/font_graphics.06740.ia4.png": [16,8,64,{"us":[1083968,26432]}], -"textures/segment2/font_graphics.06780.ia4.png": [16,8,64,{"us":[1083968,26496]}], -"textures/segment2/font_graphics.067C0.ia4.png": [16,8,64,{"us":[1083968,26560]}], -"textures/segment2/font_graphics.06800.ia4.png": [16,8,64,{"us":[1083968,26624]}], -"textures/segment2/font_graphics.06840.ia4.png": [16,8,64,{"us":[1083968,26688]}], -"textures/segment2/font_graphics.06880.ia4.png": [16,8,64,{"us":[1083968,26752]}], -"textures/segment2/font_graphics.068C0.ia4.png": [16,8,64,{"us":[1083968,26816]}], -"textures/segment2/font_graphics.06900.ia4.png": [16,8,64,{"us":[1083968,26880]}], -"textures/segment2/font_graphics.06940.ia4.png": [16,8,64,{"us":[1083968,26944]}], -"textures/segment2/font_graphics.06980.ia4.png": [16,8,64,{"us":[1083968,27008]}], -"textures/segment2/font_graphics.069C0.ia4.png": [16,8,64,{"us":[1083968,27072]}], -"textures/segment2/font_graphics.06A00.ia4.png": [16,8,64,{"us":[1083968,27136]}], -"textures/segment2/font_graphics.06A40.ia4.png": [16,8,64,{"us":[1083968,27200]}], -"textures/segment2/font_graphics.06A80.ia4.png": [16,8,64,{"us":[1083968,27264]}], -"textures/segment2/font_graphics.06AC0.ia4.png": [16,8,64,{"us":[1083968,27328]}], -"textures/segment2/font_graphics.06B00.ia4.png": [16,8,64,{"us":[1083968,27392]}], -"textures/segment2/font_graphics.06B40.ia4.png": [16,8,64,{"us":[1083968,27456]}], -"textures/segment2/font_graphics.06B80.ia4.png": [16,8,64,{"us":[1083968,27520]}], -"textures/segment2/font_graphics.06BC0.ia4.png": [16,8,64,{"us":[1083968,27584]}], -"textures/segment2/font_graphics.06C00.ia4.png": [16,8,64,{"us":[1083968,27648]}], -"textures/segment2/font_graphics.06C40.ia4.png": [16,8,64,{"us":[1083968,27712]}], -"textures/segment2/font_graphics.06C80.ia4.png": [16,8,64,{"us":[1083968,27776]}], -"textures/segment2/font_graphics.06CC0.ia4.png": [16,8,64,{"us":[1083968,27840]}], -"textures/segment2/font_graphics.06D00.ia4.png": [16,8,64,{"us":[1083968,27904]}], -"textures/segment2/font_graphics.06D40.ia4.png": [16,8,64,{"us":[1083968,27968]}], -"textures/segment2/font_graphics.06D80.ia4.png": [16,8,64,{"us":[1083968,28032]}], -"textures/segment2/font_graphics.06DC0.ia4.png": [16,8,64,{"us":[1083968,28096]}], -"textures/segment2/font_graphics.06E00.ia4.png": [16,8,64,{"us":[1083968,28160]}], -"textures/segment2/font_graphics.06E40.ia4.png": [16,8,64,{"us":[1083968,28224]}], -"textures/segment2/font_graphics.06E80.ia4.png": [16,8,64,{"us":[1083968,28288]}], -"textures/segment2/font_graphics.06EC0.ia4.png": [16,8,64,{"us":[1083968,28352]}], -"textures/segment2/font_graphics.06F00.ia4.png": [16,8,64,{"us":[1083968,28416]}], -"textures/segment2/font_graphics.06F40.ia4.png": [16,8,64,{"us":[1083968,28480]}], -"textures/segment2/font_graphics.06F80.ia4.png": [16,8,64,{"us":[1083968,28544]}], -"textures/segment2/font_graphics.06FC0.ia4.png": [16,8,64,{"us":[1083968,28608]}], -"textures/segment2/segment2.00000.rgba16.png": [16,16,512,{"jp":[1078992,0],"us":[1083968,0],"eu":[909712,0],"sh":[934640,0]}], -"textures/segment2/segment2.00200.rgba16.png": [16,16,512,{"jp":[1078992,512],"us":[1083968,512],"eu":[909712,512],"sh":[934640,512]}], -"textures/segment2/segment2.00400.rgba16.png": [16,16,512,{"jp":[1078992,1024],"us":[1083968,1024],"eu":[909712,1024],"sh":[934640,1024]}], -"textures/segment2/segment2.00600.rgba16.png": [16,16,512,{"jp":[1078992,1536],"us":[1083968,1536],"eu":[909712,1536],"sh":[934640,1536]}], -"textures/segment2/segment2.00800.rgba16.png": [16,16,512,{"jp":[1078992,2048],"us":[1083968,2048],"eu":[909712,2048],"sh":[934640,2048]}], -"textures/segment2/segment2.00A00.rgba16.png": [16,16,512,{"jp":[1078992,2560],"us":[1083968,2560],"eu":[909712,2560],"sh":[934640,2560]}], -"textures/segment2/segment2.00C00.rgba16.png": [16,16,512,{"jp":[1078992,3072],"us":[1083968,3072],"eu":[909712,3072],"sh":[934640,3072]}], -"textures/segment2/segment2.00E00.rgba16.png": [16,16,512,{"jp":[1078992,3584],"us":[1083968,3584],"eu":[909712,3584],"sh":[934640,3584]}], -"textures/segment2/segment2.01000.rgba16.png": [16,16,512,{"jp":[1078992,4096],"us":[1083968,4096],"eu":[909712,4096],"sh":[934640,4096]}], -"textures/segment2/segment2.01200.rgba16.png": [16,16,512,{"jp":[1078992,4608],"us":[1083968,4608],"eu":[909712,4608],"sh":[934640,4608]}], -"textures/segment2/segment2.01400.rgba16.png": [16,16,512,{"jp":[1078992,5120],"us":[1083968,5120],"eu":[909712,5120],"sh":[934640,5120]}], -"textures/segment2/segment2.01600.rgba16.png": [16,16,512,{"jp":[1078992,5632],"us":[1083968,5632],"eu":[909712,5632],"sh":[934640,5632]}], -"textures/segment2/segment2.01800.rgba16.png": [16,16,512,{"jp":[1078992,6144],"us":[1083968,6144],"eu":[909712,6144],"sh":[934640,6144]}], -"textures/segment2/segment2.01A00.rgba16.png": [16,16,512,{"jp":[1078992,6656],"us":[1083968,6656],"eu":[909712,6656],"sh":[934640,6656]}], -"textures/segment2/segment2.01C00.rgba16.png": [16,16,512,{"jp":[1078992,7168],"us":[1083968,7168],"eu":[909712,7168],"sh":[934640,7168]}], -"textures/segment2/segment2.01E00.rgba16.png": [16,16,512,{"jp":[1078992,7680],"us":[1083968,7680],"eu":[909712,7680],"sh":[934640,7680]}], -"textures/segment2/segment2.02000.rgba16.png": [16,16,512,{"jp":[1078992,8192],"us":[1083968,8192],"eu":[909712,8192],"sh":[934640,8192]}], -"textures/segment2/segment2.02200.rgba16.png": [16,16,512,{"jp":[1078992,8704],"us":[1083968,8704],"eu":[909712,8704],"sh":[934640,8704]}], -"textures/segment2/segment2.02400.rgba16.png": [16,16,512,{"jp":[1078992,9216],"us":[1083968,9216],"eu":[909712,9216],"sh":[934640,9216]}], -"textures/segment2/segment2.02600.rgba16.png": [16,16,512,{"jp":[1078992,9728],"sh":[934640,9728]}], -"textures/segment2/segment2.02800.rgba16.png": [16,16,512,{"jp":[1078992,10240],"us":[1083968,9728],"eu":[909712,9728],"sh":[934640,10240]}], -"textures/segment2/segment2.02A00.rgba16.png": [16,16,512,{"jp":[1078992,10752],"us":[1083968,10240],"eu":[909712,10240],"sh":[934640,10752]}], -"textures/segment2/segment2.02C00.rgba16.png": [16,16,512,{"jp":[1078992,11264],"us":[1083968,10752],"eu":[909712,10752],"sh":[934640,11264]}], -"textures/segment2/segment2.02E00.rgba16.png": [16,16,512,{"jp":[1078992,11776],"us":[1083968,11264],"eu":[909712,11264],"sh":[934640,11776]}], -"textures/segment2/segment2.03000.rgba16.png": [16,16,512,{"jp":[1078992,12288],"us":[1083968,11776],"eu":[909712,11776],"sh":[934640,12288]}], -"textures/segment2/segment2.03200.rgba16.png": [16,16,512,{"jp":[1078992,12800],"us":[1083968,12288],"eu":[909712,12288],"sh":[934640,12800]}], -"textures/segment2/segment2.03400.rgba16.png": [16,16,512,{"jp":[1078992,13312],"sh":[934640,13312]}], -"textures/segment2/segment2.03600.rgba16.png": [16,16,512,{"jp":[1078992,13824],"us":[1083968,12800],"eu":[909712,12800],"sh":[934640,13824]}], -"textures/segment2/segment2.03800.rgba16.png": [16,16,512,{"jp":[1078992,14336],"us":[1083968,13312],"eu":[909712,13312],"sh":[934640,14336]}], -"textures/segment2/segment2.03A00.rgba16.png": [16,16,512,{"jp":[1078992,14848],"us":[1083968,13824],"eu":[909712,13824],"sh":[934640,14848]}], -"textures/segment2/segment2.03C00.rgba16.png": [16,16,512,{"jp":[1078992,15360],"us":[1083968,14336],"eu":[909712,14336],"sh":[934640,15360]}], -"textures/segment2/segment2.03E00.rgba16.png": [16,16,512,{"jp":[1078992,15872],"eu":[909712,14848],"sh":[934640,15872]}], -"textures/segment2/segment2.04000.rgba16.png": [16,16,512,{"jp":[1078992,16384],"us":[1083968,14848],"eu":[909712,15360],"sh":[934640,16384]}], -"textures/segment2/segment2.04200.rgba16.png": [16,16,512,{"jp":[1078992,16896],"sh":[934640,16896]}], -"textures/segment2/segment2.04400.rgba16.png": [16,16,512,{"jp":[1078992,17408],"us":[1083968,15360],"eu":[909712,15872],"sh":[934640,17408]}], -"textures/segment2/segment2.04600.rgba16.png": [16,16,512,{"jp":[1078992,17920],"eu":[909712,16384],"sh":[934640,17920]}], -"textures/segment2/segment2.04800.rgba16.png": [16,16,512,{"jp":[1078992,18432],"us":[1083968,15872],"eu":[909712,16896],"sh":[934640,18432]}], -"textures/segment2/segment2.04A00.rgba16.png": [16,16,512,{"jp":[1078992,18944],"us":[1083968,16384],"eu":[909712,17408],"sh":[934640,18944]}], -"textures/segment2/segment2.04C00.rgba16.png": [16,16,512,{"jp":[1078992,19456],"sh":[934640,19456]}], -"textures/segment2/segment2.04E00.rgba16.png": [16,16,512,{"jp":[1078992,19968],"sh":[934640,19968]}], -"textures/segment2/segment2.05000.rgba16.png": [16,16,512,{"jp":[1078992,20480],"us":[2778544,41424],"eu":[2647072,41424],"sh":[934640,20480]}], -"textures/segment2/segment2.05200.rgba16.png": [16,16,512,{"jp":[1078992,20992],"sh":[934640,20992]}], -"textures/segment2/segment2.05400.rgba16.png": [16,16,512,{"jp":[1078992,21504],"sh":[934640,21504]}], -"textures/segment2/segment2.05600.rgba16.png": [16,16,512,{"jp":[1078992,22016],"us":[1083968,16896],"eu":[909712,18432],"sh":[934640,22016]}], -"textures/segment2/segment2.05800.rgba16.png": [16,16,512,{"jp":[1078992,22528],"us":[1083968,17408],"eu":[909712,18944],"sh":[934640,22528]}], -"textures/segment2/segment2.05A00.rgba16.png": [16,16,512,{"jp":[1078992,23040],"us":[1083968,17920],"eu":[909712,19456],"sh":[934640,23040]}], -"textures/segment2/segment2.05C00.rgba16.png": [16,16,512,{"jp":[1078992,23552],"us":[1083968,18432],"eu":[909712,19968],"sh":[934640,23552]}], -"textures/segment2/segment2.05E00.rgba16.png": [16,16,512,{"jp":[1078992,24064],"sh":[934640,24064]}], -"textures/segment2/segment2.06000.rgba16.png": [16,16,512,{"jp":[1078992,24576],"sh":[934640,24576]}], -"textures/segment2/segment2.06200.rgba16.png": [8,8,128,{"jp":[1078992,25088],"us":[1083968,18944],"eu":[909712,20480],"sh":[934640,25088]}], -"textures/segment2/segment2.06280.rgba16.png": [8,8,128,{"jp":[1078992,25216],"us":[1083968,19072],"eu":[909712,20608],"sh":[934640,25216]}], -"textures/segment2/segment2.06300.rgba16.png": [8,8,128,{"jp":[1078992,25344],"us":[1083968,19200],"eu":[909712,20736],"sh":[934640,25344]}], -"textures/segment2/segment2.06380.rgba16.png": [8,8,128,{"jp":[1078992,25472],"us":[1083968,19328],"eu":[909712,20864],"sh":[934640,25472]}], -"textures/segment2/segment2.06400.rgba16.png": [8,8,128,{"jp":[1078992,25600],"us":[1083968,19456],"eu":[909712,20992],"sh":[934640,25600]}], -"textures/segment2/segment2.06480.rgba16.png": [8,8,128,{"jp":[1078992,25728],"us":[1083968,19584],"eu":[909712,21120],"sh":[934640,25728]}], -"textures/segment2/segment2.06500.rgba16.png": [8,8,128,{"jp":[1078992,25856],"us":[1083968,19712],"eu":[909712,21248],"sh":[934640,25856]}], -"textures/segment2/segment2.06580.rgba16.png": [8,8,128,{"jp":[1078992,25984],"us":[1083968,19840],"eu":[909712,21376],"sh":[934640,25984]}], -"textures/segment2/segment2.06600.rgba16.png": [8,8,128,{"jp":[1078992,26112],"us":[1083968,19968],"eu":[909712,21504],"sh":[934640,26112]}], -"textures/segment2/segment2.06680.rgba16.png": [8,8,128,{"jp":[1078992,26240],"us":[1083968,20096],"eu":[909712,21632],"sh":[934640,26240]}], -"textures/segment2/segment2.06700.rgba16.png": [8,8,128,{"jp":[1078992,26368],"us":[1083968,20224],"eu":[909712,21760],"sh":[934640,26368]}], -"textures/segment2/segment2.06780.rgba16.png": [8,8,128,{"jp":[1078992,26496],"us":[1083968,20352],"eu":[909712,21888],"sh":[934640,26496]}], -"textures/segment2/segment2.06800.rgba16.png": [8,8,128,{"jp":[1078992,26624],"us":[1083968,20480],"eu":[909712,22016],"sh":[934640,26624]}], -"textures/segment2/segment2.06880.rgba16.png": [8,8,128,{"jp":[1078992,26752],"us":[1083968,20608],"eu":[909712,22144],"sh":[934640,26752]}], -"textures/segment2/segment2.06900.rgba16.png": [8,8,128,{"jp":[1078992,26880],"us":[1083968,20736],"eu":[909712,22272],"sh":[934640,26880]}], -"textures/segment2/segment2.06980.rgba16.png": [8,8,128,{"jp":[1078992,27008],"us":[1083968,20864],"eu":[909712,22400],"sh":[934640,27008]}], -"textures/segment2/segment2.06A00.rgba16.png": [8,8,128,{"jp":[1078992,27136],"us":[1083968,20992],"eu":[909712,22528],"sh":[934640,27136]}], -"textures/segment2/segment2.06A80.rgba16.png": [8,8,128,{"jp":[1078992,27264],"us":[1083968,21120],"eu":[909712,22656],"sh":[934640,27264]}], -"textures/segment2/segment2.06B00.rgba16.png": [8,8,128,{"jp":[1078992,27392],"us":[1083968,21248],"eu":[909712,22784],"sh":[934640,27392]}], -"textures/segment2/segment2.06B80.rgba16.png": [8,8,128,{"jp":[1078992,27520],"us":[1083968,21376],"eu":[909712,22912],"sh":[934640,27520]}], -"textures/segment2/segment2.06C00.rgba16.png": [8,8,128,{"jp":[1078992,27648],"us":[1083968,21504],"eu":[909712,23040],"sh":[934640,27648]}], -"textures/segment2/segment2.06C80.rgba16.png": [8,8,128,{"jp":[1078992,27776],"us":[1083968,21632],"eu":[909712,23168],"sh":[934640,27776]}], -"textures/segment2/segment2.06D00.rgba16.png": [8,8,128,{"jp":[1078992,27904],"us":[1083968,21760],"eu":[909712,23296],"sh":[934640,27904]}], -"textures/segment2/segment2.06D80.rgba16.png": [8,8,128,{"jp":[1078992,28032],"us":[1083968,21888],"eu":[909712,23424],"sh":[934640,28032]}], -"textures/segment2/segment2.06E00.rgba16.png": [8,8,128,{"jp":[1078992,28160],"us":[1083968,22016],"eu":[909712,23552],"sh":[934640,28160]}], -"textures/segment2/segment2.06E80.rgba16.png": [8,8,128,{"jp":[1078992,28288],"us":[1083968,22144],"eu":[909712,23680],"sh":[934640,28288]}], -"textures/segment2/segment2.06F00.rgba16.png": [8,8,128,{"jp":[1078992,28416],"us":[1083968,22272],"eu":[909712,23808],"sh":[934640,28416]}], -"textures/segment2/segment2.06F80.rgba16.png": [8,8,128,{"jp":[1078992,28544],"us":[1083968,22400],"eu":[909712,23936],"sh":[934640,28544]}], -"textures/segment2/segment2.07000.rgba16.png": [8,8,128,{"jp":[1078992,28672],"us":[1083968,22528],"eu":[909712,24064],"sh":[934640,28672]}], -"textures/segment2/segment2.07080.rgba16.png": [8,8,128,{"jp":[1078992,28800],"us":[1083968,22656],"eu":[909712,24192],"sh":[934640,28800]}], -"textures/segment2/segment2.07100.ia1.png": [8,16,16,{"jp":[1078992,28928],"sh":[934640,28928]}], -"textures/segment2/segment2.07110.ia1.png": [8,16,16,{"jp":[1078992,28944],"sh":[934640,28944]}], -"textures/segment2/segment2.07120.ia1.png": [8,16,16,{"jp":[1078992,28960],"sh":[934640,28960]}], -"textures/segment2/segment2.07130.ia1.png": [8,16,16,{"jp":[1078992,28976],"sh":[934640,28976]}], -"textures/segment2/segment2.07140.ia1.png": [8,16,16,{"jp":[1078992,28992],"sh":[934640,28992]}], -"textures/segment2/segment2.07150.ia1.png": [8,16,16,{"jp":[1078992,29008],"sh":[934640,29008]}], -"textures/segment2/segment2.07160.ia1.png": [8,16,16,{"jp":[1078992,29024],"sh":[934640,29024]}], -"textures/segment2/segment2.07170.ia1.png": [8,16,16,{"jp":[1078992,29040],"sh":[934640,29040]}], -"textures/segment2/segment2.07180.ia1.png": [8,16,16,{"jp":[1078992,29056],"sh":[934640,29056]}], -"textures/segment2/segment2.07190.ia1.png": [8,16,16,{"jp":[1078992,29072],"sh":[934640,29072]}], -"textures/segment2/segment2.071A0.ia1.png": [8,16,16,{"jp":[1078992,29088],"sh":[934640,29088]}], -"textures/segment2/segment2.071B0.ia1.png": [8,16,16,{"jp":[1078992,29104],"sh":[934640,29104]}], -"textures/segment2/segment2.071C0.ia1.png": [8,16,16,{"jp":[1078992,29120],"sh":[934640,29120]}], -"textures/segment2/segment2.071D0.ia1.png": [8,16,16,{"jp":[1078992,29136],"sh":[934640,29136]}], -"textures/segment2/segment2.071E0.ia1.png": [8,16,16,{"jp":[1078992,29152],"sh":[934640,29152]}], -"textures/segment2/segment2.071F0.ia1.png": [8,16,16,{"jp":[1078992,29168],"sh":[934640,29168]}], -"textures/segment2/segment2.07200.ia1.png": [8,16,16,{"jp":[1078992,29184],"sh":[934640,29184]}], -"textures/segment2/segment2.07210.ia1.png": [8,16,16,{"jp":[1078992,29200],"sh":[934640,29200]}], -"textures/segment2/segment2.07220.ia1.png": [8,16,16,{"jp":[1078992,29216],"sh":[934640,29216]}], -"textures/segment2/segment2.07230.ia1.png": [8,16,16,{"jp":[1078992,29232],"sh":[934640,29232]}], -"textures/segment2/segment2.07240.ia1.png": [8,16,16,{"jp":[1078992,29248],"sh":[934640,29248]}], -"textures/segment2/segment2.07250.ia1.png": [8,16,16,{"jp":[1078992,29264],"sh":[934640,29264]}], -"textures/segment2/segment2.07260.ia1.png": [8,16,16,{"jp":[1078992,29280],"sh":[934640,29280]}], -"textures/segment2/segment2.07270.ia1.png": [8,16,16,{"jp":[1078992,29296],"sh":[934640,29296]}], -"textures/segment2/segment2.07280.ia1.png": [8,16,16,{"jp":[1078992,29312],"sh":[934640,29312]}], -"textures/segment2/segment2.07290.ia1.png": [8,16,16,{"jp":[1078992,29328],"sh":[934640,29328]}], -"textures/segment2/segment2.072A0.ia1.png": [8,16,16,{"jp":[1078992,29344],"sh":[934640,29344]}], -"textures/segment2/segment2.072B0.ia1.png": [8,16,16,{"jp":[1078992,29360],"sh":[934640,29360]}], -"textures/segment2/segment2.072C0.ia1.png": [8,16,16,{"jp":[1078992,29376],"sh":[934640,29376]}], -"textures/segment2/segment2.072D0.ia1.png": [8,16,16,{"jp":[1078992,29392],"sh":[934640,29392]}], -"textures/segment2/segment2.072E0.ia1.png": [8,16,16,{"jp":[1078992,29408],"sh":[934640,29408]}], -"textures/segment2/segment2.072F0.ia1.png": [8,16,16,{"jp":[1078992,29424],"sh":[934640,29424]}], -"textures/segment2/segment2.07300.ia1.png": [8,16,16,{"jp":[1078992,29440],"sh":[934640,29440]}], -"textures/segment2/segment2.07310.ia1.png": [8,16,16,{"jp":[1078992,29456],"sh":[934640,29456]}], -"textures/segment2/segment2.07320.ia1.png": [8,16,16,{"jp":[1078992,29472],"sh":[934640,29472]}], -"textures/segment2/segment2.07330.ia1.png": [8,16,16,{"jp":[1078992,29488],"sh":[934640,29488]}], -"textures/segment2/segment2.07340.ia1.png": [8,16,16,{"jp":[1078992,29504],"us":[1083968,24050],"eu":[2647072,44317],"sh":[934640,29504]}], -"textures/segment2/segment2.07350.ia1.png": [8,16,16,{"jp":[1078992,29520],"sh":[934640,29520]}], -"textures/segment2/segment2.07360.ia1.png": [8,16,16,{"jp":[1078992,29536],"sh":[934640,29536]}], -"textures/segment2/segment2.07370.ia1.png": [8,16,16,{"jp":[1078992,29552],"sh":[934640,29552]}], -"textures/segment2/segment2.07380.ia1.png": [8,16,16,{"jp":[1078992,29568],"sh":[934640,29568]}], -"textures/segment2/segment2.07390.ia1.png": [8,16,16,{"jp":[1078992,29584],"sh":[934640,29584]}], -"textures/segment2/segment2.073A0.ia1.png": [8,16,16,{"jp":[1078992,29600],"sh":[934640,29600]}], -"textures/segment2/segment2.073B0.ia1.png": [8,16,16,{"jp":[1078992,29616],"sh":[934640,29616]}], -"textures/segment2/segment2.073C0.ia1.png": [8,16,16,{"jp":[1078992,29632],"sh":[934640,29632]}], -"textures/segment2/segment2.073D0.ia1.png": [8,16,16,{"jp":[1078992,29648],"sh":[934640,29648]}], -"textures/segment2/segment2.073E0.ia1.png": [8,16,16,{"jp":[1078992,29664],"sh":[934640,29664]}], -"textures/segment2/segment2.073F0.ia1.png": [8,16,16,{"jp":[1078992,29680],"sh":[934640,29680]}], -"textures/segment2/segment2.07400.ia1.png": [8,16,16,{"jp":[1078992,29696],"sh":[934640,29696]}], -"textures/segment2/segment2.07410.ia1.png": [8,16,16,{"jp":[1078992,29712],"sh":[934640,29712]}], -"textures/segment2/segment2.07420.ia1.png": [8,16,16,{"jp":[1078992,29728],"sh":[934640,29728]}], -"textures/segment2/segment2.07430.ia1.png": [8,16,16,{"jp":[1078992,29744],"sh":[934640,29744]}], -"textures/segment2/segment2.07440.ia1.png": [8,16,16,{"jp":[1078992,29760],"sh":[934640,29760]}], -"textures/segment2/segment2.07450.ia1.png": [8,16,16,{"jp":[1078992,29776],"sh":[934640,29776]}], -"textures/segment2/segment2.07460.ia1.png": [8,16,16,{"jp":[1078992,29792],"sh":[934640,29792]}], -"textures/segment2/segment2.07470.ia1.png": [8,16,16,{"jp":[1078992,29808],"sh":[934640,29808]}], -"textures/segment2/segment2.07480.ia1.png": [8,16,16,{"jp":[1078992,29824],"sh":[934640,29824]}], -"textures/segment2/segment2.07490.ia1.png": [8,16,16,{"jp":[1078992,29840],"sh":[934640,29840]}], -"textures/segment2/segment2.074A0.ia1.png": [8,16,16,{"jp":[1078992,29856],"sh":[934640,29856]}], -"textures/segment2/segment2.074B0.ia1.png": [8,16,16,{"jp":[1078992,29872],"sh":[934640,29872]}], -"textures/segment2/segment2.074C0.ia1.png": [8,16,16,{"jp":[1078992,29888],"sh":[934640,29888]}], -"textures/segment2/segment2.074D0.ia1.png": [8,16,16,{"jp":[1078992,29904],"sh":[934640,29904]}], -"textures/segment2/segment2.074E0.ia1.png": [8,16,16,{"jp":[1078992,29920],"sh":[934640,29920]}], -"textures/segment2/segment2.074F0.ia1.png": [8,16,16,{"jp":[1078992,29936],"sh":[934640,29936]}], -"textures/segment2/segment2.07500.ia1.png": [8,16,16,{"jp":[1078992,29952],"sh":[934640,29952]}], -"textures/segment2/segment2.07510.ia1.png": [8,16,16,{"jp":[1078992,29968],"sh":[934640,29968]}], -"textures/segment2/segment2.07520.ia1.png": [8,16,16,{"jp":[1078992,29984],"sh":[934640,29984]}], -"textures/segment2/segment2.07530.ia1.png": [8,16,16,{"jp":[1078992,30000],"sh":[934640,30000]}], -"textures/segment2/segment2.07540.ia1.png": [8,16,16,{"jp":[1078992,30016],"sh":[934640,30016]}], -"textures/segment2/segment2.07550.ia1.png": [8,16,16,{"jp":[1078992,30032],"sh":[934640,30032]}], -"textures/segment2/segment2.07560.ia1.png": [8,16,16,{"jp":[1078992,30048],"sh":[934640,30048]}], -"textures/segment2/segment2.07570.ia1.png": [8,16,16,{"jp":[1078992,30064],"sh":[934640,30064]}], -"textures/segment2/segment2.07580.ia1.png": [8,16,16,{"jp":[1078992,30080],"sh":[934640,30080]}], -"textures/segment2/segment2.07590.ia1.png": [8,16,16,{"jp":[1078992,30096],"sh":[934640,30096]}], -"textures/segment2/segment2.075A0.ia1.png": [8,16,16,{"jp":[1078992,30112],"sh":[934640,30112]}], -"textures/segment2/segment2.075B0.ia1.png": [8,16,16,{"jp":[1078992,30128],"sh":[934640,30128]}], -"textures/segment2/segment2.075C0.ia1.png": [8,16,16,{"jp":[1078992,30144],"sh":[934640,30144]}], -"textures/segment2/segment2.075D0.ia1.png": [8,16,16,{"jp":[1078992,30160],"sh":[934640,30160]}], -"textures/segment2/segment2.075E0.ia1.png": [8,16,16,{"jp":[1078992,30176],"sh":[934640,30176]}], -"textures/segment2/segment2.075F0.ia1.png": [8,16,16,{"jp":[1078992,30192],"sh":[934640,30192]}], -"textures/segment2/segment2.07600.ia1.png": [8,16,16,{"jp":[1078992,30208],"sh":[934640,30208]}], -"textures/segment2/segment2.07610.ia1.png": [8,16,16,{"jp":[1078992,30224],"sh":[934640,30224]}], -"textures/segment2/segment2.07620.ia1.png": [8,16,16,{"jp":[1078992,30240],"sh":[934640,30240]}], -"textures/segment2/segment2.07630.ia1.png": [8,16,16,{"jp":[1078992,30256],"sh":[934640,30256]}], -"textures/segment2/segment2.07640.ia1.png": [8,16,16,{"jp":[1078992,30272],"sh":[934640,30272]}], -"textures/segment2/segment2.07650.ia1.png": [8,16,16,{"jp":[1078992,30288],"sh":[934640,30288]}], -"textures/segment2/segment2.07660.ia1.png": [8,16,16,{"jp":[1078992,30304],"sh":[934640,30304]}], -"textures/segment2/segment2.07670.ia1.png": [8,16,16,{"jp":[1078992,30320],"sh":[934640,30320]}], -"textures/segment2/segment2.07680.ia1.png": [8,16,16,{"jp":[1078992,30336],"sh":[934640,30336]}], -"textures/segment2/segment2.07690.ia1.png": [8,16,16,{"jp":[1078992,30352],"sh":[934640,30352]}], -"textures/segment2/segment2.076A0.ia1.png": [8,16,16,{"jp":[1078992,30368],"sh":[934640,30368]}], -"textures/segment2/segment2.076B0.ia1.png": [8,16,16,{"jp":[1078992,30384],"sh":[934640,30384]}], -"textures/segment2/segment2.076C0.ia1.png": [8,16,16,{"jp":[1078992,30400],"sh":[934640,30400]}], -"textures/segment2/segment2.076D0.ia1.png": [8,16,16,{"jp":[1078992,30416],"sh":[934640,30416]}], -"textures/segment2/segment2.076E0.ia1.png": [8,16,16,{"jp":[1078992,30432],"sh":[934640,30432]}], -"textures/segment2/segment2.076F0.ia1.png": [8,16,16,{"jp":[1078992,30448],"sh":[934640,30448]}], -"textures/segment2/segment2.07700.ia1.png": [8,16,16,{"jp":[1078992,30464],"sh":[934640,30464]}], -"textures/segment2/segment2.07710.ia1.png": [8,16,16,{"jp":[1078992,30480],"sh":[934640,30480]}], -"textures/segment2/segment2.07720.ia1.png": [8,16,16,{"jp":[1078992,30496],"sh":[934640,30496]}], -"textures/segment2/segment2.07730.ia1.png": [8,16,16,{"jp":[1078992,30512],"sh":[934640,30512]}], -"textures/segment2/segment2.07740.ia1.png": [8,16,16,{"jp":[1078992,30528],"sh":[934640,30528]}], -"textures/segment2/segment2.07750.ia1.png": [8,16,16,{"jp":[1078992,30544],"sh":[934640,30544]}], -"textures/segment2/segment2.07760.ia1.png": [8,16,16,{"jp":[1078992,30560],"sh":[934640,30560]}], -"textures/segment2/segment2.07770.ia1.png": [8,16,16,{"jp":[1078992,30576],"sh":[934640,30576]}], -"textures/segment2/segment2.07780.ia1.png": [8,16,16,{"jp":[1078992,30592],"sh":[934640,30592]}], -"textures/segment2/segment2.07790.ia1.png": [8,16,16,{"jp":[1078992,30608],"sh":[934640,30608]}], -"textures/segment2/segment2.077A0.ia1.png": [8,16,16,{"jp":[1078992,30624],"sh":[934640,30624]}], -"textures/segment2/segment2.077B0.ia1.png": [8,16,16,{"jp":[1078992,30640],"sh":[934640,30640]}], -"textures/segment2/segment2.077C0.ia1.png": [8,16,16,{"jp":[1078992,30656],"sh":[934640,30656]}], -"textures/segment2/segment2.077D0.ia1.png": [8,16,16,{"jp":[1078992,30672],"sh":[934640,30672]}], -"textures/segment2/segment2.077E0.ia1.png": [8,16,16,{"jp":[1078992,30688],"sh":[934640,30688]}], -"textures/segment2/segment2.077F0.ia1.png": [8,16,16,{"jp":[1078992,30704],"sh":[934640,30704]}], -"textures/segment2/segment2.07800.ia1.png": [8,16,16,{"jp":[1078992,30720],"sh":[934640,30720]}], -"textures/segment2/segment2.07810.ia1.png": [8,16,16,{"jp":[1078992,30736],"sh":[934640,30736]}], -"textures/segment2/segment2.07820.ia1.png": [8,16,16,{"jp":[1078992,30752],"sh":[934640,30752]}], -"textures/segment2/segment2.07830.ia1.png": [8,16,16,{"jp":[1078992,30768],"sh":[934640,30768]}], -"textures/segment2/segment2.07840.ia1.png": [8,16,16,{"jp":[1078992,30784],"sh":[934640,30784]}], -"textures/segment2/segment2.07850.ia1.png": [8,16,16,{"jp":[1078992,30800],"sh":[934640,30800]}], -"textures/segment2/segment2.07860.ia1.png": [8,16,16,{"jp":[1078992,30816],"sh":[934640,30816]}], -"textures/segment2/segment2.07870.ia1.png": [8,16,16,{"jp":[1078992,30832],"sh":[934640,30832]}], -"textures/segment2/segment2.07880.ia1.png": [8,16,16,{"jp":[1078992,30848],"sh":[934640,30848]}], -"textures/segment2/segment2.07890.ia1.png": [8,16,16,{"jp":[1078992,30864],"sh":[934640,30864]}], -"textures/segment2/segment2.078A0.ia1.png": [8,16,16,{"jp":[1078992,30880],"sh":[934640,30880]}], -"textures/segment2/segment2.078B0.ia1.png": [8,16,16,{"jp":[1078992,30896],"sh":[934640,30896]}], -"textures/segment2/segment2.078C0.ia1.png": [8,16,16,{"jp":[1078992,30912],"sh":[934640,30912]}], -"textures/segment2/segment2.078D0.ia1.png": [8,16,16,{"jp":[1078992,30928],"sh":[934640,30928]}], -"textures/segment2/segment2.078E0.ia1.png": [8,16,16,{"jp":[1078992,30944],"sh":[934640,30944]}], -"textures/segment2/segment2.078F0.ia1.png": [8,16,16,{"jp":[1078992,30960],"sh":[934640,30960]}], -"textures/segment2/segment2.07900.ia1.png": [8,16,16,{"jp":[1078992,30976],"sh":[934640,30976]}], -"textures/segment2/segment2.07910.ia1.png": [8,16,16,{"jp":[1078992,30992],"sh":[934640,30992]}], -"textures/segment2/segment2.07920.ia1.png": [8,16,16,{"jp":[1078992,31008],"sh":[934640,31008]}], -"textures/segment2/segment2.07930.ia1.png": [8,16,16,{"jp":[1078992,31024],"sh":[934640,31024]}], -"textures/segment2/segment2.07940.ia1.png": [8,16,16,{"jp":[1078992,31040],"sh":[934640,31040]}], -"textures/segment2/segment2.07950.ia1.png": [8,16,16,{"jp":[1078992,31056],"sh":[934640,31056]}], -"textures/segment2/segment2.07960.ia1.png": [8,16,16,{"jp":[1078992,31072],"sh":[934640,31072]}], -"textures/segment2/segment2.07970.ia1.png": [8,16,16,{"jp":[1078992,31088],"sh":[934640,31088]}], -"textures/segment2/segment2.07980.ia1.png": [8,16,16,{"jp":[1078992,31104],"sh":[934640,31104]}], -"textures/segment2/segment2.07990.ia1.png": [8,16,16,{"jp":[1078992,31120],"sh":[934640,31120]}], -"textures/segment2/segment2.079A0.ia1.png": [8,16,16,{"jp":[1078992,31136],"sh":[934640,31136]}], -"textures/segment2/segment2.079B0.ia1.png": [8,16,16,{"jp":[1078992,31152],"sh":[934640,31152]}], -"textures/segment2/segment2.079C0.ia1.png": [8,16,16,{"jp":[1078992,31168],"sh":[934640,31168]}], -"textures/segment2/segment2.079D0.ia1.png": [8,16,16,{"jp":[1078992,31184],"sh":[934640,31184]}], -"textures/segment2/segment2.079E0.ia1.png": [8,16,16,{"jp":[1078992,31200],"sh":[934640,31200]}], -"textures/segment2/segment2.079F0.ia1.png": [8,16,16,{"jp":[1078992,31216],"sh":[934640,31216]}], -"textures/segment2/segment2.07A00.ia1.png": [8,16,16,{"jp":[1078992,31232],"sh":[934640,31232]}], -"textures/segment2/segment2.07A10.ia1.png": [8,16,16,{"jp":[1078992,31248],"sh":[934640,31248]}], -"textures/segment2/segment2.07A20.ia1.png": [8,16,16,{"jp":[1078992,31264],"sh":[934640,31264]}], -"textures/segment2/segment2.07A30.ia1.png": [8,16,16,{"jp":[1078992,31280],"sh":[934640,31280]}], -"textures/segment2/segment2.07A40.ia1.png": [8,16,16,{"jp":[1078992,31296],"sh":[934640,31296]}], -"textures/segment2/segment2.07A50.ia1.png": [8,16,16,{"jp":[1078992,31312],"sh":[934640,31312]}], -"textures/segment2/segment2.07A60.ia1.png": [8,16,16,{"jp":[1078992,31328],"sh":[934640,31328]}], -"textures/segment2/segment2.07A70.ia1.png": [8,16,16,{"jp":[1078992,31344],"sh":[934640,31344]}], -"textures/segment2/segment2.07A80.ia1.png": [8,16,16,{"jp":[1078992,31360],"sh":[934640,31360]}], -"textures/segment2/segment2.07A90.ia1.png": [8,16,16,{"jp":[1078992,31376],"sh":[934640,31376]}], -"textures/segment2/segment2.07AA0.ia1.png": [8,16,16,{"jp":[1078992,31392],"sh":[934640,31392]}], -"textures/segment2/segment2.07AB0.ia1.png": [8,16,16,{"jp":[1078992,31408],"sh":[934640,31408]}], -"textures/segment2/segment2.07AC0.ia1.png": [8,16,16,{"jp":[1078992,31424],"sh":[934640,31424]}], -"textures/segment2/segment2.07AD0.ia1.png": [8,16,16,{"jp":[1078992,31440],"sh":[934640,31440]}], -"textures/segment2/segment2.07AE0.ia1.png": [8,16,16,{"jp":[1078992,31456],"sh":[934640,31456]}], -"textures/segment2/segment2.07AF0.ia1.png": [8,16,16,{"jp":[1078992,31472],"sh":[934640,31472]}], -"textures/segment2/segment2.07B00.ia1.png": [8,16,16,{"jp":[1078992,31488],"sh":[934640,31488]}], -"textures/segment2/segment2.07B10.ia1.png": [8,16,16,{"jp":[1078992,31504],"sh":[934640,31504]}], -"textures/segment2/segment2.07B20.ia1.png": [8,16,16,{"jp":[1078992,31520],"sh":[934640,31520]}], -"textures/segment2/segment2.07B30.ia1.png": [8,16,16,{"jp":[1078992,31536],"sh":[934640,31536]}], -"textures/segment2/segment2.07B40.ia1.png": [8,16,16,{"jp":[1078992,31552],"sh":[934640,31552]}], -"textures/segment2/segment2.07B50.rgba16.png": [16,16,512,{"jp":[1078992,31568],"us":[1083968,28672],"eu":[909712,25920],"sh":[934640,31568]}], -"textures/segment2/segment2.07D50.rgba16.png": [16,16,512,{"jp":[1078992,32080],"us":[1083968,29184],"eu":[909712,26432],"sh":[934640,32080]}], -"textures/segment2/segment2.07F50.rgba16.png": [16,16,512,{"jp":[1078992,32592],"us":[1083968,29696],"eu":[909712,26944],"sh":[934640,32592]}], -"textures/segment2/segment2.08150.rgba16.png": [8,8,128,{"jp":[1078992,33104],"us":[1083968,30208],"eu":[909712,27456],"sh":[934640,33104]}], -"textures/segment2/segment2.081D0.rgba16.png": [8,8,128,{"jp":[1078992,33232],"us":[1083968,30336],"eu":[909712,27584],"sh":[934640,33232]}], -"textures/segment2/segment2.0F458.ia8.png": [32,64,2048,{"jp":[1078992,62552],"us":[1083968,74424],"eu":[909712,31096],"sh":[934640,62552]}], -"textures/segment2/segment2.0FC58.ia8.png": [32,64,2048,{"jp":[1078992,64600],"us":[1083968,76472],"eu":[909712,33144],"sh":[934640,64600]}], -"textures/segment2/segment2.10458.ia8.png": [64,64,4096,{"jp":[1078992,66648],"us":[1083968,78520],"eu":[909712,35192],"sh":[934640,66648]}], -"textures/segment2/segment2.11458.ia8.png": [32,64,2048,{"jp":[1078992,70744],"us":[1083968,82616],"eu":[909712,39288],"sh":[934640,70744]}], -"textures/segment2/segment2.11C58.rgba16.png": [32,32,2048,{"jp":[1078992,72792],"us":[1083968,84664],"eu":[909712,41336],"sh":[934640,72792]}], -"textures/segment2/segment2.12458.rgba16.png": [32,32,2048,{"jp":[1078992,74840],"us":[1083968,86712],"eu":[909712,43384],"sh":[934640,74840]}], -"textures/segment2/segment2.12C58.rgba16.png": [32,32,2048,{"jp":[1078992,76888],"us":[1083968,88760],"eu":[909712,45432],"sh":[934640,76888]}], -"textures/segment2/segment2.13458.ia16.png": [32,32,2048,{"jp":[1078992,78936],"us":[1083968,90808],"eu":[909712,47480],"sh":[934640,78936]}], -"textures/segment2/segment2.13C58.rgba16.png": [32,32,2048,{"jp":[1078992,80984],"us":[1083968,92856],"eu":[909712,49528],"sh":[934640,80984]}], -"textures/segment2/segment2.14838.ia8.png": [8,8,64,{"jp":[1078992,84024],"us":[1083968,95896],"eu":[909712,52568],"sh":[934640,84024]}], -"textures/segment2/segment2.umlaut.rgba16.png": [16,16,512,{"eu":[909712,17920]}], -"textures/segment2/shadow_quarter_circle.ia8.png": [16,16,256,{"jp":[1078992,62040],"us":[1083968,73912],"eu":[909712,30584],"sh":[934640,62040]}], -"textures/segment2/shadow_quarter_square.ia8.png": [16,16,256,{"jp":[1078992,62296],"us":[1083968,74168],"eu":[909712,30840],"sh":[934640,62296]}], -"textures/sky/metal_hole.rgba16.png": [32,32,2048,{"jp":[3390640,26624],"us":[3397392,26624],"eu":[3270992,26624],"sh":[3245360,26624]}], -"textures/sky/rr_textures.00000.rgba16.png": [32,32,2048,{"jp":[3390640,0],"us":[3397392,0],"eu":[3270992,0],"sh":[3245360,0]}], -"textures/sky/rr_textures.00800.rgba16.png": [32,32,2048,{"jp":[3390640,2048],"us":[3397392,2048],"eu":[3270992,2048],"sh":[3245360,2048]}], -"textures/sky/rr_textures.01000.rgba16.png": [32,32,2048,{"jp":[3390640,4096],"us":[3397392,4096],"eu":[3270992,4096],"sh":[3245360,4096]}], -"textures/sky/rr_textures.01800.rgba16.png": [32,32,2048,{"jp":[3390640,6144],"us":[3397392,6144],"eu":[3270992,6144],"sh":[3245360,6144]}], -"textures/sky/rr_textures.02000.rgba16.png": [32,64,4096,{"jp":[3390640,8192],"us":[3397392,8192],"eu":[3270992,8192],"sh":[3245360,8192]}], -"textures/sky/rr_textures.03000.rgba16.png": [32,32,2048,{"jp":[3390640,12288],"us":[3397392,12288],"eu":[3270992,12288],"sh":[3245360,12288]}], -"textures/sky/rr_textures.03800.rgba16.png": [64,32,4096,{"jp":[3390640,14336],"us":[3397392,14336],"eu":[3270992,14336],"sh":[3245360,14336]}], -"textures/sky/rr_textures.04800.rgba16.png": [32,32,2048,{"jp":[3390640,18432],"us":[3397392,18432],"eu":[3270992,18432],"sh":[3245360,18432]}], -"textures/sky/rr_textures.05000.rgba16.png": [32,32,2048,{"jp":[3390640,20480],"us":[3397392,20480],"eu":[3270992,20480],"sh":[3245360,20480]}], -"textures/sky/rr_textures.05800.rgba16.png": [32,32,2048,{"jp":[3390640,22528],"us":[3397392,22528],"eu":[3270992,22528],"sh":[3245360,22528]}], -"textures/sky/rr_textures.06000.rgba16.png": [32,32,2048,{"jp":[3390640,24576],"us":[3397392,24576],"eu":[3270992,24576],"sh":[3245360,24576]}], -"textures/sky/rr_textures.07000.rgba16.png": [32,32,2048,{"jp":[3390640,28672],"us":[3397392,28672],"eu":[3270992,28672],"sh":[3245360,28672]}], -"textures/sky/rr_textures.07800.rgba16.png": [32,32,2048,{"jp":[3390640,30720],"us":[3397392,30720],"eu":[3270992,30720],"sh":[3245360,30720]}], -"textures/sky/rr_textures.08000.rgba16.png": [32,32,2048,{"jp":[3390640,32768],"us":[3397392,32768],"eu":[3270992,32768],"sh":[3245360,32768]}], -"textures/snow/ccm_textures.00000.rgba16.png": [32,32,2048,{"jp":[3405536,0],"us":[3412288,0],"eu":[3285888,0],"sh":[3260256,0]}], -"textures/snow/ccm_textures.00800.rgba16.png": [32,32,2048,{"jp":[3405536,2048],"us":[3412288,2048],"eu":[3285888,2048],"sh":[3260256,2048]}], -"textures/snow/ccm_textures.01000.rgba16.png": [32,64,4096,{"jp":[3405536,4096],"us":[3412288,4096],"eu":[3285888,4096],"sh":[3260256,4096]}], -"textures/snow/ccm_textures.02000.rgba16.png": [32,32,2048,{"jp":[3405536,8192],"us":[3412288,8192],"eu":[3285888,8192],"sh":[3260256,8192]}], -"textures/snow/ccm_textures.02800.rgba16.png": [32,32,2048,{"jp":[3405536,10240],"us":[3412288,10240],"eu":[3285888,10240],"sh":[3260256,10240]}], -"textures/snow/ccm_textures.03000.rgba16.png": [32,32,2048,{"jp":[3405536,12288],"us":[3412288,12288],"eu":[3285888,12288],"sh":[3260256,12288]}], -"textures/snow/ccm_textures.03800.rgba16.png": [32,32,2048,{"jp":[3405536,14336],"us":[3412288,14336],"eu":[3285888,14336],"sh":[3260256,14336]}], -"textures/snow/ccm_textures.04000.rgba16.png": [32,32,2048,{"jp":[3405536,16384],"us":[3412288,16384],"eu":[3285888,16384],"sh":[3260256,16384]}], -"textures/snow/ccm_textures.04800.rgba16.png": [32,32,2048,{"jp":[3405536,18432],"us":[3412288,18432],"eu":[3285888,18432],"sh":[3260256,18432]}], -"textures/snow/ccm_textures.05000.rgba16.png": [32,32,2048,{"jp":[3405536,20480],"us":[3412288,20480],"eu":[3285888,20480],"sh":[3260256,20480]}], -"textures/snow/ccm_textures.05800.rgba16.png": [32,32,2048,{"jp":[3405536,22528],"us":[3412288,22528],"eu":[3285888,22528],"sh":[3260256,22528]}], -"textures/snow/ccm_textures.06000.rgba16.png": [32,32,2048,{"jp":[3405536,24576],"us":[3412288,24576],"eu":[3285888,24576],"sh":[3260256,24576]}], -"textures/snow/ccm_textures.06800.rgba16.png": [32,32,2048,{"jp":[3405536,26624],"us":[3412288,26624],"eu":[3285888,26624],"sh":[3260256,26624]}], -"textures/snow/ccm_textures.07000.rgba16.png": [64,32,4096,{"jp":[3405536,28672],"us":[3412288,28672],"eu":[3285888,28672],"sh":[3260256,28672]}], -"textures/snow/ccm_textures.08000.rgba16.png": [32,32,2048,{"jp":[3405536,32768],"us":[3412288,32768],"eu":[3285888,32768],"sh":[3260256,32768]}], -"textures/snow/ccm_textures.08800.rgba16.png": [32,32,2048,{"jp":[3405536,34816],"us":[3412288,34816],"eu":[3285888,34816],"sh":[3260256,34816]}], -"textures/snow/ccm_textures.09000.ia16.png": [32,32,2048,{"jp":[3405536,36864],"us":[3412288,36864],"eu":[3285888,36864],"sh":[3260256,36864]}], -"textures/snow/ccm_textures.09800.ia16.png": [32,32,2048,{"jp":[3405536,38912],"us":[3412288,38912],"eu":[3285888,38912],"sh":[3260256,38912]}], -"textures/spooky/bbh_textures.00000.rgba16.png": [32,32,2048,{"jp":[3298272,0],"us":[3305024,0],"eu":[3178624,0],"sh":[3152992,0]}], -"textures/spooky/bbh_textures.00800.rgba16.png": [32,64,4096,{"jp":[3298272,2048],"us":[3305024,2048],"eu":[3178624,2048],"sh":[3152992,2048]}], -"textures/spooky/bbh_textures.01800.rgba16.png": [32,64,4096,{"jp":[3298272,6144],"us":[3305024,6144],"eu":[3178624,6144],"sh":[3152992,6144]}], -"textures/spooky/bbh_textures.02800.rgba16.png": [32,64,4096,{"jp":[3298272,10240],"us":[3305024,10240],"eu":[3178624,10240],"sh":[3152992,10240]}], -"textures/spooky/bbh_textures.03800.rgba16.png": [32,64,4096,{"jp":[3298272,14336],"us":[3305024,14336],"eu":[3178624,14336],"sh":[3152992,14336]}], -"textures/spooky/bbh_textures.04800.rgba16.png": [32,32,2048,{"jp":[3298272,18432],"us":[3305024,18432],"eu":[3178624,18432],"sh":[3152992,18432]}], -"textures/spooky/bbh_textures.05000.rgba16.png": [32,64,4096,{"jp":[3298272,20480],"us":[3305024,20480],"eu":[3178624,20480],"sh":[3152992,20480]}], -"textures/spooky/bbh_textures.06000.rgba16.png": [32,32,2048,{"jp":[3298272,24576],"us":[3305024,24576],"eu":[3178624,24576],"sh":[3152992,24576]}], -"textures/spooky/bbh_textures.06800.rgba16.png": [32,32,2048,{"jp":[3298272,26624],"us":[3305024,26624],"eu":[3178624,26624],"sh":[3152992,26624]}], -"textures/spooky/bbh_textures.07000.rgba16.png": [64,32,4096,{"jp":[3298272,28672],"us":[3305024,28672],"eu":[3178624,28672],"sh":[3152992,28672]}], -"textures/spooky/bbh_textures.08000.rgba16.png": [32,32,2048,{"jp":[3298272,32768],"us":[3305024,32768],"eu":[3178624,32768],"sh":[3152992,32768]}], -"textures/spooky/bbh_textures.08800.rgba16.png": [32,32,2048,{"jp":[3298272,34816],"us":[3305024,34816],"eu":[3178624,34816],"sh":[3152992,34816]}], -"textures/spooky/bbh_textures.09000.rgba16.png": [64,32,4096,{"jp":[3298272,36864],"us":[3305024,36864],"eu":[3178624,36864],"sh":[3152992,36864]}], -"textures/spooky/bbh_textures.0A000.rgba16.png": [32,32,2048,{"jp":[1462368,49800],"us":[1469536,49800],"eu":[1341504,49800],"sh":[1318016,49800]}], -"textures/spooky/bbh_textures.0A800.ia16.png": [32,32,2048,{"jp":[3298272,43008],"us":[3305024,43008],"eu":[3178624,43008],"sh":[3152992,43008]}], -"textures/spooky/bbh_textures.0B000.ia16.png": [32,32,2048,{"jp":[3298272,45056],"us":[3305024,45056],"eu":[3178624,45056],"sh":[3152992,45056]}], -"textures/spooky/bbh_textures.0B800.ia16.png": [32,64,4096,{"jp":[3298272,47104],"us":[3305024,47104],"eu":[3178624,47104],"sh":[3152992,47104]}], -"textures/title_screen_bg/title_screen_bg.001C0.rgba16.png": [80,20,3200,{"jp":[2550336,448],"us":[2558144,448],"eu":[2426672,448],"sh":[2403488,448]}], -"textures/title_screen_bg/title_screen_bg.00E40.rgba16.png": [80,20,3200,{"jp":[2550336,3648],"us":[2558144,3648],"eu":[2426672,3648],"sh":[2403488,3648]}], -"textures/title_screen_bg/title_screen_bg.01AC0.rgba16.png": [80,20,3200,{"jp":[2550336,6848],"us":[2558144,6848],"eu":[2426672,6848],"sh":[2403488,6848]}], -"textures/title_screen_bg/title_screen_bg.02740.rgba16.png": [80,20,3200,{"jp":[2550336,10048],"us":[2558144,10048],"eu":[2426672,10048],"sh":[2403488,10048]}], -"textures/title_screen_bg/title_screen_bg.033C0.rgba16.png": [80,20,3200,{"jp":[2550336,13248],"us":[2558144,13248],"eu":[2426672,13248],"sh":[2403488,13248]}], -"textures/title_screen_bg/title_screen_bg.04040.rgba16.png": [80,20,3200,{"jp":[2550336,16448],"us":[2558144,16448],"eu":[2426672,16448],"sh":[2403488,16448]}], -"textures/title_screen_bg/title_screen_bg.04CC0.rgba16.png": [80,20,3200,{"jp":[2550336,19648],"us":[2558144,19648],"eu":[2426672,19648],"sh":[2403488,19648]}], -"textures/title_screen_bg/title_screen_bg.05940.rgba16.png": [80,20,3200,{"jp":[2550336,22848],"us":[2558144,22848],"eu":[2426672,22848],"sh":[2403488,22848]}], -"textures/title_screen_bg/title_screen_bg.06648.rgba16.png": [80,24,3840,{"sh":[2403488,26184]}], -"textures/water/jrb_textures.00000.rgba16.png": [32,32,2048,{"jp":[3354832,0],"us":[3361584,0],"eu":[3235184,0],"sh":[3209552,0]}], -"textures/water/jrb_textures.00800.rgba16.png": [64,32,4096,{"jp":[3354832,2048],"us":[3361584,2048],"eu":[3235184,2048],"sh":[3209552,2048]}], -"textures/water/jrb_textures.01800.rgba16.png": [64,32,4096,{"jp":[3354832,6144],"us":[3361584,6144],"eu":[3235184,6144],"sh":[3209552,6144]}], -"textures/water/jrb_textures.02800.rgba16.png": [64,32,4096,{"jp":[3354832,10240],"us":[3361584,10240],"eu":[3235184,10240],"sh":[3209552,10240]}], -"textures/water/jrb_textures.03800.rgba16.png": [64,32,4096,{"jp":[3354832,14336],"us":[3361584,14336],"eu":[3235184,14336],"sh":[3209552,14336]}], -"textures/water/jrb_textures.04800.rgba16.png": [64,32,4096,{"jp":[3354832,18432],"us":[3361584,18432],"eu":[3235184,18432],"sh":[3209552,18432]}], -"textures/water/jrb_textures.05800.rgba16.png": [32,32,2048,{"jp":[3354832,22528],"us":[3361584,22528],"eu":[3235184,22528],"sh":[3209552,22528]}], -"textures/water/jrb_textures.06000.rgba16.png": [32,32,2048,{"jp":[3354832,24576],"us":[3361584,24576],"eu":[3235184,24576],"sh":[3209552,24576]}], -"textures/water/jrb_textures.06800.rgba16.png": [64,32,4096,{"jp":[3354832,26624],"us":[3361584,26624],"eu":[3235184,26624],"sh":[3209552,26624]}], -"textures/water/jrb_textures.07800.rgba16.png": [64,32,4096,{"jp":[3354832,30720],"us":[3361584,30720],"eu":[3235184,30720],"sh":[3209552,30720]}], -"textures/water/jrb_textures.08800.rgba16.png": [32,32,2048,{"jp":[3354832,34816],"us":[3361584,34816],"eu":[3235184,34816],"sh":[3209552,34816]}], -"textures/water/jrb_textures.09000.rgba16.png": [64,32,4096,{"jp":[3354832,36864],"us":[3361584,36864],"eu":[3235184,36864],"sh":[3209552,36864]}], -"textures/water/jrb_textures.0A000.rgba16.png": [32,32,2048,{"jp":[3354832,40960],"us":[3361584,40960],"eu":[3235184,40960],"sh":[3209552,40960]}], -"textures/water/jrb_textures.0A800.rgba16.png": [64,32,4096,{"jp":[3354832,43008],"us":[3361584,43008],"eu":[3235184,43008],"sh":[3209552,43008]}], -"textures/water/jrb_textures.0B800.rgba16.png": [64,32,4096,{"jp":[3354832,47104],"us":[3361584,47104],"eu":[3235184,47104],"sh":[3209552,47104]}], -"sound/samples/bowser_organ/00_organ_1.aiff": [0,{"jp":["@sound",195],"us":["@sound",216],"eu":["@sound",216]}], -"sound/samples/bowser_organ/01_organ_1_lq.aiff": [0,{"jp":["@sound",196],"us":["@sound",217],"eu":["@sound",217]}], -"sound/samples/bowser_organ/02_boys_choir.aiff": [0,{"jp":["@sound",197],"us":["@sound",218],"eu":["@sound",218]}], -"sound/samples/course_start/00_la.aiff": [0,{"jp":["@sound",194],"us":["@sound",215],"eu":["@sound",215]}], -"sound/samples/instruments/00.aiff": [0,{"jp":["@sound",120],"us":["@sound",141],"eu":["@sound",141],"sh":["@sound",141]}], -"sound/samples/instruments/01_banjo_1.aiff": [0,{"jp":["@sound",121],"us":["@sound",142],"eu":["@sound",142],"sh":["@sound",142]}], -"sound/samples/instruments/02.aiff": [0,{"jp":["@sound",122],"us":["@sound",143],"eu":["@sound",143],"sh":["@sound",143]}], -"sound/samples/instruments/03_human_whistle.aiff": [0,{"jp":["@sound",123],"us":["@sound",144],"eu":["@sound",144],"sh":["@sound",144]}], -"sound/samples/instruments/04_bright_piano.aiff": [0,{"jp":["@sound",124],"us":["@sound",145],"eu":["@sound",145],"sh":["@sound",145]}], -"sound/samples/instruments/05_acoustic_bass.aiff": [0,{"jp":["@sound",125],"us":["@sound",146],"eu":["@sound",146],"sh":["@sound",146]}], -"sound/samples/instruments/06_kick_drum_1.aiff": [0,{"jp":["@sound",126],"us":["@sound",147],"eu":["@sound",147],"sh":["@sound",147]}], -"sound/samples/instruments/07_rimshot.aiff": [0,{"jp":["@sound",127],"us":["@sound",148],"eu":["@sound",148],"sh":["@sound",148]}], -"sound/samples/instruments/08.aiff": [0,{"jp":["@sound",128],"us":["@sound",149],"eu":["@sound",149],"sh":["@sound",149]}], -"sound/samples/instruments/09.aiff": [0,{"jp":["@sound",129],"us":["@sound",150],"eu":["@sound",150],"sh":["@sound",150]}], -"sound/samples/instruments/0A_tambourine.aiff": [0,{"jp":["@sound",130],"us":["@sound",151],"eu":["@sound",151],"sh":["@sound",151]}], -"sound/samples/instruments/0B.aiff": [0,{"jp":["@sound",131],"us":["@sound",152],"eu":["@sound",152],"sh":["@sound",152]}], -"sound/samples/instruments/0C_conga_stick.aiff": [0,{"jp":["@sound",132],"us":["@sound",153],"eu":["@sound",153],"sh":["@sound",153]}], -"sound/samples/instruments/0D_clave.aiff": [0,{"jp":["@sound",133],"us":["@sound",154],"eu":["@sound",154],"sh":["@sound",154]}], -"sound/samples/instruments/0E_hihat_closed.aiff": [0,{"jp":["@sound",134],"us":["@sound",155],"eu":["@sound",155],"sh":["@sound",155]}], -"sound/samples/instruments/0F_hihat_open.aiff": [0,{"jp":["@sound",135],"us":["@sound",156],"eu":["@sound",156],"sh":["@sound",156]}], -"sound/samples/instruments/10_cymbal_bell.aiff": [0,{"jp":["@sound",136],"us":["@sound",157],"eu":["@sound",157],"sh":["@sound",157]}], -"sound/samples/instruments/11_splash_cymbal.aiff": [0,{"jp":["@sound",137],"us":["@sound",158],"eu":["@sound",158],"sh":["@sound",158]}], -"sound/samples/instruments/12_snare_drum_1.aiff": [0,{"jp":["@sound",138],"us":["@sound",159],"eu":["@sound",159],"sh":["@sound",159]}], -"sound/samples/instruments/13_snare_drum_2.aiff": [0,{"jp":["@sound",139],"us":["@sound",160],"eu":["@sound",160],"sh":["@sound",160]}], -"sound/samples/instruments/14_strings_5.aiff": [0,{"jp":["@sound",140],"us":["@sound",161],"eu":["@sound",161],"sh":["@sound",161]}], -"sound/samples/instruments/15_strings_4.aiff": [0,{"jp":["@sound",141],"us":["@sound",162],"eu":["@sound",162],"sh":["@sound",162]}], -"sound/samples/instruments/16_french_horns.aiff": [0,{"jp":["@sound",142],"us":["@sound",163],"eu":["@sound",163],"sh":["@sound",163]}], -"sound/samples/instruments/17_trumpet.aiff": [0,{"jp":["@sound",143],"us":["@sound",164],"eu":["@sound",164],"sh":["@sound",164]}], -"sound/samples/instruments/18_timpani.aiff": [0,{"jp":["@sound",144],"us":["@sound",165],"eu":["@sound",165],"sh":["@sound",165]}], -"sound/samples/instruments/19_brass.aiff": [0,{"jp":["@sound",145],"us":["@sound",166],"eu":["@sound",166],"sh":["@sound",166]}], -"sound/samples/instruments/1A_slap_bass.aiff": [0,{"jp":["@sound",146],"us":["@sound",167],"eu":["@sound",167],"sh":["@sound",167]}], -"sound/samples/instruments/1B_organ_2.aiff": [0,{"jp":["@sound",147],"us":["@sound",168],"eu":["@sound",168],"sh":["@sound",168]}], -"sound/samples/instruments/1C.aiff": [0,{"jp":["@sound",148],"us":["@sound",169],"eu":["@sound",169],"sh":["@sound",169]}], -"sound/samples/instruments/1D.aiff": [0,{"jp":["@sound",149],"us":["@sound",170],"eu":["@sound",170],"sh":["@sound",170]}], -"sound/samples/instruments/1E_closed_triangle.aiff": [0,{"jp":["@sound",150],"us":["@sound",171],"eu":["@sound",171],"sh":["@sound",171]}], -"sound/samples/instruments/1F_open_triangle.aiff": [0,{"jp":["@sound",151],"us":["@sound",172],"eu":["@sound",172],"sh":["@sound",172]}], -"sound/samples/instruments/20_cabasa.aiff": [0,{"jp":["@sound",152],"us":["@sound",173],"eu":["@sound",173],"sh":["@sound",173]}], -"sound/samples/instruments/21_sine_bass.aiff": [0,{"jp":["@sound",153],"us":["@sound",174],"eu":["@sound",174],"sh":["@sound",174]}], -"sound/samples/instruments/22_boys_choir.aiff": [0,{"jp":["@sound",154],"us":["@sound",175],"eu":["@sound",175],"sh":["@sound",175]}], -"sound/samples/instruments/23_strings_1.aiff": [0,{"jp":["@sound",155],"us":["@sound",176],"eu":["@sound",176],"sh":["@sound",176]}], -"sound/samples/instruments/24_strings_2.aiff": [0,{"jp":["@sound",156],"us":["@sound",177],"eu":["@sound",177],"sh":["@sound",177]}], -"sound/samples/instruments/25_strings_3.aiff": [0,{"jp":["@sound",157],"us":["@sound",178],"eu":["@sound",178],"sh":["@sound",178]}], -"sound/samples/instruments/26_crystal_rhodes.aiff": [0,{"jp":["@sound",158],"us":["@sound",179],"eu":["@sound",179],"sh":["@sound",179]}], -"sound/samples/instruments/27_harpsichord.aiff": [0,{"jp":["@sound",159],"us":["@sound",180],"eu":["@sound",180],"sh":["@sound",180]}], -"sound/samples/instruments/28_sitar_1.aiff": [0,{"jp":["@sound",160],"us":["@sound",181],"eu":["@sound",181],"sh":["@sound",181]}], -"sound/samples/instruments/29_orchestra_hit.aiff": [0,{"jp":["@sound",161],"us":["@sound",182],"eu":["@sound",182],"sh":["@sound",182]}], -"sound/samples/instruments/2A.aiff": [0,{"jp":["@sound",162],"us":["@sound",183],"eu":["@sound",183],"sh":["@sound",183]}], -"sound/samples/instruments/2B.aiff": [0,{"jp":["@sound",163],"us":["@sound",184],"eu":["@sound",184],"sh":["@sound",184]}], -"sound/samples/instruments/2C.aiff": [0,{"jp":["@sound",164],"us":["@sound",185],"eu":["@sound",185],"sh":["@sound",185]}], -"sound/samples/instruments/2D_trombone.aiff": [0,{"jp":["@sound",165],"us":["@sound",186],"eu":["@sound",186],"sh":["@sound",186]}], -"sound/samples/instruments/2E_accordion.aiff": [0,{"jp":["@sound",166],"us":["@sound",187],"eu":["@sound",187],"sh":["@sound",187]}], -"sound/samples/instruments/2F_sleigh_bells.aiff": [0,{"jp":["@sound",167],"us":["@sound",188],"eu":["@sound",188],"sh":["@sound",188]}], -"sound/samples/instruments/30_rarefaction-lahna.aiff": [0,{"jp":["@sound",168],"us":["@sound",189],"eu":["@sound",189],"sh":["@sound",189]}], -"sound/samples/instruments/31_rarefaction-convolution.aiff": [0,{"jp":["@sound",169],"us":["@sound",190],"eu":["@sound",190],"sh":["@sound",190]}], -"sound/samples/instruments/32_metal_rimshot.aiff": [0,{"jp":["@sound",170],"us":["@sound",191],"eu":["@sound",191],"sh":["@sound",191]}], -"sound/samples/instruments/33_kick_drum_2.aiff": [0,{"jp":["@sound",171],"us":["@sound",192],"eu":["@sound",192],"sh":["@sound",192]}], -"sound/samples/instruments/34_alto_flute.aiff": [0,{"jp":["@sound",172],"us":["@sound",193],"eu":["@sound",193],"sh":["@sound",193]}], -"sound/samples/instruments/34b_organ.aiff": [0,{"sh":["@sound",194]}], -"sound/samples/instruments/34c_organ_lq.aiff": [0,{"sh":["@sound",195]}], -"sound/samples/instruments/35_gospel_organ.aiff": [0,{"jp":["@sound",173],"us":["@sound",194],"eu":["@sound",194],"sh":["@sound",196]}], -"sound/samples/instruments/36_sawtooth_synth.aiff": [0,{"jp":["@sound",174],"us":["@sound",195],"eu":["@sound",195],"sh":["@sound",197]}], -"sound/samples/instruments/37_square_synth.aiff": [0,{"jp":["@sound",175],"us":["@sound",196],"eu":["@sound",196],"sh":["@sound",198]}], -"sound/samples/instruments/38_electric_kick_drum.aiff": [0,{"jp":["@sound",176],"us":["@sound",197],"eu":["@sound",197],"sh":["@sound",199]}], -"sound/samples/instruments/39_sitar_2.aiff": [0,{"jp":["@sound",177],"us":["@sound",198],"eu":["@sound",198],"sh":["@sound",200]}], -"sound/samples/instruments/3A_music_box.aiff": [0,{"jp":["@sound",178],"us":["@sound",199],"eu":["@sound",199],"sh":["@sound",201]}], -"sound/samples/instruments/3B_banjo_2.aiff": [0,{"jp":["@sound",179],"us":["@sound",200],"eu":["@sound",200],"sh":["@sound",202]}], -"sound/samples/instruments/3C_acoustic_guitar.aiff": [0,{"jp":["@sound",180],"us":["@sound",201],"eu":["@sound",201],"sh":["@sound",203]}], -"sound/samples/instruments/3D.aiff": [0,{"jp":["@sound",181],"us":["@sound",202],"eu":["@sound",202],"sh":["@sound",204]}], -"sound/samples/instruments/3E_monk_choir.aiff": [0,{"jp":["@sound",182],"us":["@sound",203],"eu":["@sound",203],"sh":["@sound",205]}], -"sound/samples/instruments/3F.aiff": [0,{"jp":["@sound",183],"us":["@sound",204],"eu":["@sound",204],"sh":["@sound",206]}], -"sound/samples/instruments/40_bell.aiff": [0,{"jp":["@sound",184],"us":["@sound",205],"eu":["@sound",205],"sh":["@sound",207]}], -"sound/samples/instruments/41_pan_flute.aiff": [0,{"jp":["@sound",185],"us":["@sound",206],"eu":["@sound",206],"sh":["@sound",208]}], -"sound/samples/instruments/42_vibraphone.aiff": [0,{"jp":["@sound",186],"us":["@sound",207],"eu":["@sound",207],"sh":["@sound",209]}], -"sound/samples/instruments/43_harmonica.aiff": [0,{"jp":["@sound",187],"us":["@sound",208],"eu":["@sound",208],"sh":["@sound",210]}], -"sound/samples/instruments/44_grand_piano.aiff": [0,{"jp":["@sound",188],"us":["@sound",209],"eu":["@sound",209],"sh":["@sound",211]}], -"sound/samples/instruments/45_french_horns_lq.aiff": [0,{"jp":["@sound",189],"us":["@sound",210],"eu":["@sound",210],"sh":["@sound",212]}], -"sound/samples/instruments/45b_la.aiff": [0,{"sh":["@sound",213]}], -"sound/samples/instruments/46_pizzicato_strings_1.aiff": [0,{"jp":["@sound",190],"us":["@sound",211],"eu":["@sound",211],"sh":["@sound",214]}], -"sound/samples/instruments/47_pizzicato_strings_2.aiff": [0,{"jp":["@sound",191],"us":["@sound",212],"eu":["@sound",212],"sh":["@sound",215]}], -"sound/samples/instruments/48_steel_drum.aiff": [0,{"jp":["@sound",192],"us":["@sound",213],"eu":["@sound",213],"sh":["@sound",216]}], -"sound/samples/piranha_music_box/00_music_box.aiff": [0,{"jp":["@sound",193],"us":["@sound",214],"eu":["@sound",214]}], -"sound/samples/sfx_1/00_twirl.aiff": [0,{"jp":["@sound",0],"us":["@sound",0],"eu":["@sound",0],"sh":["@sound",0]}], -"sound/samples/sfx_1/01_brushing.aiff": [0,{"jp":["@sound",1],"us":["@sound",1],"eu":["@sound",1],"sh":["@sound",1]}], -"sound/samples/sfx_1/02_hand_touch.aiff": [0,{"jp":["@sound",2],"us":["@sound",2],"eu":["@sound",2],"sh":["@sound",2]}], -"sound/samples/sfx_1/03_yoshi.aiff": [0,{"jp":["@sound",3],"us":["@sound",3],"eu":["@sound",3],"sh":["@sound",3]}], -"sound/samples/sfx_1/04_plop.aiff": [0,{"jp":["@sound",4],"us":["@sound",4],"eu":["@sound",4],"sh":["@sound",4]}], -"sound/samples/sfx_1/05_heavy_landing.aiff": [0,{"jp":["@sound",5],"us":["@sound",5],"eu":["@sound",5],"sh":["@sound",5]}], -"sound/samples/sfx_4/00.aiff": [0,{"jp":["@sound",17],"us":["@sound",17],"eu":["@sound",17],"sh":["@sound",17]}], -"sound/samples/sfx_4/01.aiff": [0,{"jp":["@sound",18],"us":["@sound",18],"eu":["@sound",18],"sh":["@sound",18]}], -"sound/samples/sfx_4/02.aiff": [0,{"jp":["@sound",19],"us":["@sound",19],"eu":["@sound",19],"sh":["@sound",19]}], -"sound/samples/sfx_4/03.aiff": [0,{"jp":["@sound",20],"us":["@sound",20],"eu":["@sound",20],"sh":["@sound",20]}], -"sound/samples/sfx_4/04.aiff": [0,{"jp":["@sound",21],"us":["@sound",21],"eu":["@sound",21],"sh":["@sound",21]}], -"sound/samples/sfx_4/05.aiff": [0,{"jp":["@sound",22],"us":["@sound",22],"eu":["@sound",22],"sh":["@sound",22]}], -"sound/samples/sfx_4/06.aiff": [0,{"jp":["@sound",23],"us":["@sound",23],"eu":["@sound",23],"sh":["@sound",23]}], -"sound/samples/sfx_4/07.aiff": [0,{"jp":["@sound",24],"us":["@sound",24],"eu":["@sound",24],"sh":["@sound",24]}], -"sound/samples/sfx_4/08.aiff": [0,{"jp":["@sound",25],"us":["@sound",25],"eu":["@sound",25],"sh":["@sound",25]}], -"sound/samples/sfx_4/09.aiff": [0,{"jp":["@sound",26],"us":["@sound",26],"eu":["@sound",26],"sh":["@sound",26]}], -"sound/samples/sfx_5/00.aiff": [0,{"jp":["@sound",27],"us":["@sound",27],"eu":["@sound",27],"sh":["@sound",27]}], -"sound/samples/sfx_5/01.aiff": [0,{"jp":["@sound",28],"us":["@sound",28],"eu":["@sound",28],"sh":["@sound",28]}], -"sound/samples/sfx_5/02.aiff": [0,{"jp":["@sound",29],"us":["@sound",29],"eu":["@sound",29],"sh":["@sound",29]}], -"sound/samples/sfx_5/03.aiff": [0,{"jp":["@sound",30],"us":["@sound",30],"eu":["@sound",30],"sh":["@sound",30]}], -"sound/samples/sfx_5/04.aiff": [0,{"jp":["@sound",31],"us":["@sound",31],"eu":["@sound",31],"sh":["@sound",31]}], -"sound/samples/sfx_5/05.aiff": [0,{"jp":["@sound",32],"us":["@sound",32],"eu":["@sound",32],"sh":["@sound",32]}], -"sound/samples/sfx_5/06.aiff": [0,{"jp":["@sound",33],"us":["@sound",33],"eu":["@sound",33],"sh":["@sound",33]}], -"sound/samples/sfx_5/07.aiff": [0,{"jp":["@sound",34],"us":["@sound",34],"eu":["@sound",34],"sh":["@sound",34]}], -"sound/samples/sfx_5/08.aiff": [0,{"jp":["@sound",35],"us":["@sound",35],"eu":["@sound",35],"sh":["@sound",35]}], -"sound/samples/sfx_5/09.aiff": [0,{"jp":["@sound",36],"us":["@sound",36],"eu":["@sound",36],"sh":["@sound",36]}], -"sound/samples/sfx_5/0A.aiff": [0,{"jp":["@sound",37],"us":["@sound",37],"eu":["@sound",37],"sh":["@sound",37]}], -"sound/samples/sfx_5/0B.aiff": [0,{"jp":["@sound",38],"us":["@sound",38],"eu":["@sound",38],"sh":["@sound",38]}], -"sound/samples/sfx_5/0C.aiff": [0,{"jp":["@sound",39],"us":["@sound",39],"eu":["@sound",39],"sh":["@sound",39]}], -"sound/samples/sfx_5/0D.aiff": [0,{"jp":["@sound",40],"us":["@sound",40],"eu":["@sound",40],"sh":["@sound",40]}], -"sound/samples/sfx_5/0E.aiff": [0,{"jp":["@sound",41],"us":["@sound",41],"eu":["@sound",41],"sh":["@sound",41]}], -"sound/samples/sfx_5/0F.aiff": [0,{"jp":["@sound",42],"us":["@sound",42],"eu":["@sound",42],"sh":["@sound",42]}], -"sound/samples/sfx_5/10.aiff": [0,{"jp":["@sound",43],"us":["@sound",43],"eu":["@sound",43],"sh":["@sound",43]}], -"sound/samples/sfx_5/11.aiff": [0,{"jp":["@sound",44],"us":["@sound",44],"eu":["@sound",44],"sh":["@sound",44]}], -"sound/samples/sfx_5/12.aiff": [0,{"jp":["@sound",45],"us":["@sound",45],"eu":["@sound",45],"sh":["@sound",45]}], -"sound/samples/sfx_5/13.aiff": [0,{"jp":["@sound",46],"us":["@sound",46],"eu":["@sound",46],"sh":["@sound",46]}], -"sound/samples/sfx_5/14.aiff": [0,{"jp":["@sound",47],"us":["@sound",47],"eu":["@sound",47],"sh":["@sound",47]}], -"sound/samples/sfx_5/15.aiff": [0,{"jp":["@sound",48],"us":["@sound",48],"eu":["@sound",48],"sh":["@sound",48]}], -"sound/samples/sfx_5/16.aiff": [0,{"jp":["@sound",49],"us":["@sound",49],"eu":["@sound",49],"sh":["@sound",49]}], -"sound/samples/sfx_5/17.aiff": [0,{"jp":["@sound",50],"us":["@sound",50],"eu":["@sound",50],"sh":["@sound",50]}], -"sound/samples/sfx_5/18.aiff": [0,{"jp":["@sound",51],"us":["@sound",51],"eu":["@sound",51],"sh":["@sound",51]}], -"sound/samples/sfx_5/19.aiff": [0,{"jp":["@sound",52],"us":["@sound",52],"eu":["@sound",52],"sh":["@sound",52]}], -"sound/samples/sfx_5/1A.aiff": [0,{"jp":["@sound",53],"us":["@sound",53],"eu":["@sound",53],"sh":["@sound",53]}], -"sound/samples/sfx_5/1B.aiff": [0,{"jp":["@sound",54],"us":["@sound",54],"eu":["@sound",54],"sh":["@sound",54]}], -"sound/samples/sfx_5/1C.aiff": [0,{"jp":["@sound",55],"us":["@sound",55],"eu":["@sound",55],"sh":["@sound",55]}], -"sound/samples/sfx_6/00.aiff": [0,{"jp":["@sound",56],"us":["@sound",56],"eu":["@sound",56],"sh":["@sound",56]}], -"sound/samples/sfx_6/01.aiff": [0,{"jp":["@sound",57],"us":["@sound",57],"eu":["@sound",57],"sh":["@sound",57]}], -"sound/samples/sfx_6/02.aiff": [0,{"jp":["@sound",58],"us":["@sound",58],"eu":["@sound",58],"sh":["@sound",58]}], -"sound/samples/sfx_6/03.aiff": [0,{"jp":["@sound",59],"us":["@sound",59],"eu":["@sound",59],"sh":["@sound",59]}], -"sound/samples/sfx_6/04.aiff": [0,{"jp":["@sound",60],"us":["@sound",60],"eu":["@sound",60],"sh":["@sound",60]}], -"sound/samples/sfx_6/05.aiff": [0,{"jp":["@sound",61],"us":["@sound",61],"eu":["@sound",61],"sh":["@sound",61]}], -"sound/samples/sfx_6/06.aiff": [0,{"jp":["@sound",62],"us":["@sound",62],"eu":["@sound",62],"sh":["@sound",62]}], -"sound/samples/sfx_6/07.aiff": [0,{"jp":["@sound",63],"us":["@sound",63],"eu":["@sound",63],"sh":["@sound",63]}], -"sound/samples/sfx_6/08.aiff": [0,{"jp":["@sound",64],"us":["@sound",64],"eu":["@sound",64],"sh":["@sound",64]}], -"sound/samples/sfx_6/09.aiff": [0,{"jp":["@sound",65],"us":["@sound",65],"eu":["@sound",65],"sh":["@sound",65]}], -"sound/samples/sfx_6/0A.aiff": [0,{"jp":["@sound",66],"us":["@sound",66],"eu":["@sound",66],"sh":["@sound",66]}], -"sound/samples/sfx_6/0B.aiff": [0,{"jp":["@sound",67],"us":["@sound",67],"eu":["@sound",67],"sh":["@sound",67]}], -"sound/samples/sfx_6/0C.aiff": [0,{"jp":["@sound",68],"us":["@sound",68],"eu":["@sound",68],"sh":["@sound",68]}], -"sound/samples/sfx_6/0D.aiff": [0,{"jp":["@sound",69],"us":["@sound",69],"eu":["@sound",69],"sh":["@sound",69]}], -"sound/samples/sfx_7/00.aiff": [0,{"jp":["@sound",70],"us":["@sound",70],"eu":["@sound",70],"sh":["@sound",70]}], -"sound/samples/sfx_7/01.aiff": [0,{"jp":["@sound",71],"us":["@sound",71],"eu":["@sound",71],"sh":["@sound",71]}], -"sound/samples/sfx_7/02.aiff": [0,{"jp":["@sound",72],"us":["@sound",72],"eu":["@sound",72],"sh":["@sound",72]}], -"sound/samples/sfx_7/03.aiff": [0,{"jp":["@sound",73],"us":["@sound",73],"eu":["@sound",73],"sh":["@sound",73]}], -"sound/samples/sfx_7/04.aiff": [0,{"jp":["@sound",74],"us":["@sound",74],"eu":["@sound",74],"sh":["@sound",74]}], -"sound/samples/sfx_7/05.aiff": [0,{"jp":["@sound",75],"us":["@sound",75],"eu":["@sound",75],"sh":["@sound",75]}], -"sound/samples/sfx_7/06.aiff": [0,{"jp":["@sound",76],"us":["@sound",76],"eu":["@sound",76],"sh":["@sound",76]}], -"sound/samples/sfx_7/07.aiff": [0,{"jp":["@sound",77],"us":["@sound",77],"eu":["@sound",77],"sh":["@sound",77]}], -"sound/samples/sfx_7/08.aiff": [0,{"jp":["@sound",78],"us":["@sound",78],"eu":["@sound",78],"sh":["@sound",78]}], -"sound/samples/sfx_7/09.aiff": [0,{"jp":["@sound",79],"us":["@sound",79],"eu":["@sound",79],"sh":["@sound",79]}], -"sound/samples/sfx_7/0A.aiff": [0,{"jp":["@sound",80],"us":["@sound",80],"eu":["@sound",80],"sh":["@sound",80]}], -"sound/samples/sfx_7/0B.aiff": [0,{"jp":["@sound",81],"us":["@sound",81],"eu":["@sound",81],"sh":["@sound",81]}], -"sound/samples/sfx_7/0C.aiff": [0,{"jp":["@sound",82],"us":["@sound",82],"eu":["@sound",82],"sh":["@sound",82]}], -"sound/samples/sfx_7/0D_chain_chomp_bark.aiff": [0,{"us":["@sound",83],"eu":["@sound",83],"sh":["@sound",83]}], -"sound/samples/sfx_9/00.aiff": [0,{"jp":["@sound",99],"us":["@sound",111],"eu":["@sound",111],"sh":["@sound",111]}], -"sound/samples/sfx_9/01.aiff": [0,{"jp":["@sound",100],"us":["@sound",112],"eu":["@sound",112],"sh":["@sound",112]}], -"sound/samples/sfx_9/02.aiff": [0,{"jp":["@sound",101],"us":["@sound",113],"eu":["@sound",113],"sh":["@sound",113]}], -"sound/samples/sfx_9/03.aiff": [0,{"jp":["@sound",102],"us":["@sound",114],"eu":["@sound",114],"sh":["@sound",114]}], -"sound/samples/sfx_9/04_camera_buzz.aiff": [0,{"jp":["@sound",103],"us":["@sound",115],"eu":["@sound",115],"sh":["@sound",115]}], -"sound/samples/sfx_9/05_camera_shutter.aiff": [0,{"jp":["@sound",104],"us":["@sound",116],"eu":["@sound",116],"sh":["@sound",116]}], -"sound/samples/sfx_9/06.aiff": [0,{"jp":["@sound",105],"us":["@sound",117],"eu":["@sound",117],"sh":["@sound",117]}], -"sound/samples/sfx_mario/00_mario_jump_hoo.aiff": [0,{"jp":["@sound",83],"us":["@sound",84],"eu":["@sound",84],"sh":["@sound",84]}], -"sound/samples/sfx_mario/01_mario_jump_wah.aiff": [0,{"jp":["@sound",84],"us":["@sound",85],"eu":["@sound",85],"sh":["@sound",85]}], -"sound/samples/sfx_mario/02_mario_yah.aiff": [0,{"jp":["@sound",85],"us":["@sound",86],"eu":["@sound",86],"sh":["@sound",86]}], -"sound/samples/sfx_mario/03_mario_haha.aiff": [0,{"jp":["@sound",86],"us":["@sound",87],"eu":["@sound",87],"sh":["@sound",87]}], -"sound/samples/sfx_mario/04_mario_yahoo.aiff": [0,{"jp":["@sound",87],"us":["@sound",88],"eu":["@sound",88],"sh":["@sound",88]}], -"sound/samples/sfx_mario/05_mario_uh.aiff": [0,{"jp":["@sound",88],"us":["@sound",89],"eu":["@sound",89],"sh":["@sound",89]}], -"sound/samples/sfx_mario/06_mario_hrmm.aiff": [0,{"jp":["@sound",89],"us":["@sound",90],"eu":["@sound",90],"sh":["@sound",90]}], -"sound/samples/sfx_mario/07_mario_wah2.aiff": [0,{"jp":["@sound",90],"us":["@sound",91],"eu":["@sound",91],"sh":["@sound",91]}], -"sound/samples/sfx_mario/08_mario_whoa.aiff": [0,{"jp":["@sound",91],"us":["@sound",92],"eu":["@sound",92],"sh":["@sound",92]}], -"sound/samples/sfx_mario/09_mario_eeuh.aiff": [0,{"jp":["@sound",92],"us":["@sound",93],"eu":["@sound",93],"sh":["@sound",93]}], -"sound/samples/sfx_mario/0A_mario_attacked.aiff": [0,{"jp":["@sound",93],"us":["@sound",94],"eu":["@sound",94],"sh":["@sound",94]}], -"sound/samples/sfx_mario/0B_mario_ooof.aiff": [0,{"jp":["@sound",94],"us":["@sound",95],"eu":["@sound",95],"sh":["@sound",95]}], -"sound/samples/sfx_mario/0C_mario_here_we_go.aiff": [0,{"jp":["@sound",95],"us":["@sound",96],"eu":["@sound",96],"sh":["@sound",96]}], -"sound/samples/sfx_mario/0D_mario_yawning.aiff": [0,{"jp":["@sound",96],"us":["@sound",97],"eu":["@sound",97],"sh":["@sound",97]}], -"sound/samples/sfx_mario/0E_mario_snoring1.aiff": [0,{"jp":["@sound",97],"us":["@sound",98],"eu":["@sound",98],"sh":["@sound",98]}], -"sound/samples/sfx_mario/0F_mario_snoring2.aiff": [0,{"jp":["@sound",98],"us":["@sound",99],"eu":["@sound",99],"sh":["@sound",99]}], -"sound/samples/sfx_mario/10_mario_doh.aiff": [0,{"us":["@sound",100],"eu":["@sound",100],"sh":["@sound",100]}], -"sound/samples/sfx_mario/11_mario_game_over.aiff": [0,{"us":["@sound",101],"eu":["@sound",101],"sh":["@sound",101]}], -"sound/samples/sfx_mario/12_mario_hello.aiff": [0,{"us":["@sound",102],"eu":["@sound",102],"sh":["@sound",102]}], -"sound/samples/sfx_mario/13_mario_press_start_to_play.aiff": [0,{"us":["@sound",103],"eu":["@sound",103],"sh":["@sound",103]}], -"sound/samples/sfx_mario/14_mario_twirl_bounce.aiff": [0,{"us":["@sound",104],"eu":["@sound",104],"sh":["@sound",104]}], -"sound/samples/sfx_mario/15_mario_snoring3.aiff": [0,{"us":["@sound",105],"eu":["@sound",105],"sh":["@sound",105]}], -"sound/samples/sfx_mario/16_mario_so_longa_bowser.aiff": [0,{"us":["@sound",106],"eu":["@sound",106]}], -"sound/samples/sfx_mario/16_mario_bye_bye.aiff": [0,{"sh":["@sound",106]}], -"sound/samples/sfx_mario/17_mario_ima_tired.aiff": [0,{"us":["@sound",107],"eu":["@sound",107],"sh":["@sound",107]}], -"sound/samples/sfx_mario/18_mario_waha.aiff": [0,{"us":["@sound",108],"eu":["@sound",108],"sh":["@sound",108]}], -"sound/samples/sfx_mario/19_mario_yippee.aiff": [0,{"us":["@sound",109],"eu":["@sound",109],"sh":["@sound",109]}], -"sound/samples/sfx_mario/1A_mario_lets_a_go.aiff": [0,{"us":["@sound",110],"eu":["@sound",110],"sh":["@sound",110]}], -"sound/samples/sfx_mario_peach/00_mario_waaaooow.aiff": [0,{"jp":["@sound",106],"us":["@sound",118],"eu":["@sound",118],"sh":["@sound",118]}], -"sound/samples/sfx_mario_peach/01_mario_hoohoo.aiff": [0,{"jp":["@sound",107],"us":["@sound",119],"eu":["@sound",119],"sh":["@sound",119]}], -"sound/samples/sfx_mario_peach/02_mario_panting.aiff": [0,{"jp":["@sound",108],"us":["@sound",120],"eu":["@sound",120],"sh":["@sound",120]}], -"sound/samples/sfx_mario_peach/03_mario_dying.aiff": [0,{"jp":["@sound",109],"us":["@sound",121],"eu":["@sound",121],"sh":["@sound",121]}], -"sound/samples/sfx_mario_peach/04_mario_on_fire.aiff": [0,{"jp":["@sound",110],"us":["@sound",122],"eu":["@sound",122],"sh":["@sound",122]}], -"sound/samples/sfx_mario_peach/05_mario_uh2.aiff": [0,{"jp":["@sound",111],"us":["@sound",123],"eu":["@sound",123],"sh":["@sound",123]}], -"sound/samples/sfx_mario_peach/06_mario_coughing.aiff": [0,{"jp":["@sound",112],"us":["@sound",124],"eu":["@sound",124],"sh":["@sound",124]}], -"sound/samples/sfx_mario_peach/07_mario_its_a_me_mario.aiff": [0,{"jp":["@sound",113],"us":["@sound",125],"eu":["@sound",125],"sh":["@sound",125]}], -"sound/samples/sfx_mario_peach/08_mario_punch_yah.aiff": [0,{"jp":["@sound",114],"us":["@sound",126],"eu":["@sound",126],"sh":["@sound",126]}], -"sound/samples/sfx_mario_peach/09_mario_punch_hoo.aiff": [0,{"jp":["@sound",115],"us":["@sound",127],"eu":["@sound",127],"sh":["@sound",127]}], -"sound/samples/sfx_mario_peach/0A_mario_mama_mia.aiff": [0,{"jp":["@sound",116],"us":["@sound",128],"eu":["@sound",128],"sh":["@sound",128]}], -"sound/samples/sfx_mario_peach/0B_mario_okey_dokey.aiff": [0,{"jp":["@sound",117],"us":["@sound",129],"eu":["@sound",129],"sh":["@sound",129]}], -"sound/samples/sfx_mario_peach/0C_mario_drowning.aiff": [0,{"jp":["@sound",118],"us":["@sound",130],"eu":["@sound",130],"sh":["@sound",130]}], -"sound/samples/sfx_mario_peach/0D_mario_thank_you_playing_my_game.aiff": [0,{"jp":["@sound",119],"us":["@sound",131],"eu":["@sound",131],"sh":["@sound",131]}], -"sound/samples/sfx_mario_peach/0E_peach_dear_mario.aiff": [0,{"us":["@sound",132],"eu":["@sound",132],"sh":["@sound",132]}], -"sound/samples/sfx_mario_peach/0F_peach_mario.aiff": [0,{"us":["@sound",133],"eu":["@sound",133],"sh":["@sound",133]}], -"sound/samples/sfx_mario_peach/10_peach_power_of_the_stars.aiff": [0,{"us":["@sound",134],"eu":["@sound",134],"sh":["@sound",134]}], -"sound/samples/sfx_mario_peach/11_peach_thanks_to_you.aiff": [0,{"us":["@sound",135],"eu":["@sound",135],"sh":["@sound",135]}], -"sound/samples/sfx_mario_peach/12_peach_thank_you_mario.aiff": [0,{"us":["@sound",136],"eu":["@sound",136],"sh":["@sound",136]}], -"sound/samples/sfx_mario_peach/13_peach_something_special.aiff": [0,{"us":["@sound",137],"eu":["@sound",137],"sh":["@sound",137]}], -"sound/samples/sfx_mario_peach/14_peach_bake_a_cake.aiff": [0,{"us":["@sound",138],"eu":["@sound",138],"sh":["@sound",138]}], -"sound/samples/sfx_mario_peach/15_peach_for_mario.aiff": [0,{"us":["@sound",139],"eu":["@sound",139],"sh":["@sound",139]}], -"sound/samples/sfx_mario_peach/16_peach_mario2.aiff": [0,{"us":["@sound",140],"eu":["@sound",140],"sh":["@sound",140]}], -"sound/samples/sfx_terrain/00_step_default.aiff": [0,{"jp":["@sound",6],"us":["@sound",6],"eu":["@sound",6],"sh":["@sound",6]}], -"sound/samples/sfx_terrain/01_step_grass.aiff": [0,{"jp":["@sound",7],"us":["@sound",7],"eu":["@sound",7],"sh":["@sound",7]}], -"sound/samples/sfx_terrain/02_step_stone.aiff": [0,{"jp":["@sound",8],"us":["@sound",8],"eu":["@sound",8],"sh":["@sound",8]}], -"sound/samples/sfx_terrain/03_step_spooky.aiff": [0,{"jp":["@sound",9],"us":["@sound",9],"eu":["@sound",9],"sh":["@sound",9]}], -"sound/samples/sfx_terrain/04_step_snow.aiff": [0,{"jp":["@sound",10],"us":["@sound",10],"eu":["@sound",10],"sh":["@sound",10]}], -"sound/samples/sfx_terrain/05_step_ice.aiff": [0,{"jp":["@sound",11],"us":["@sound",11],"eu":["@sound",11],"sh":["@sound",11]}], -"sound/samples/sfx_terrain/06_step_metal.aiff": [0,{"jp":["@sound",12],"us":["@sound",12],"eu":["@sound",12],"sh":["@sound",12]}], -"sound/samples/sfx_terrain/07_step_sand.aiff": [0,{"jp":["@sound",13],"us":["@sound",13],"eu":["@sound",13],"sh":["@sound",13]}], -"sound/samples/sfx_water/00_plunge.aiff": [0,{"jp":["@sound",14],"us":["@sound",14],"eu":["@sound",14],"sh":["@sound",14]}], -"sound/samples/sfx_water/01_splash.aiff": [0,{"jp":["@sound",15],"us":["@sound",15],"eu":["@sound",15],"sh":["@sound",15]}], -"sound/samples/sfx_water/02_swim.aiff": [0,{"jp":["@sound",16],"us":["@sound",16],"eu":["@sound",16],"sh":["@sound",16]}], -"assets/anims/anim_00.anime": {"eu":{"header":[5041568,24],"values":[5041844,2604],"indices":[5041592,252]},"jp":{"header":[5154352,24],"values":[5154628,2604],"indices":[5154376,252]},"us":{"header":[5162640,24],"values":[5162916,2604],"indices":[5162664,252]}}, -"assets/anims/anim_01.anime": {"eu":{"header":[5044448,24],"values":[5044748,6576],"indices":[5044496,252]},"jp":{"header":[5157232,24],"values":[5157532,6576],"indices":[5157280,252]},"us":{"header":[5165520,24],"values":[5165820,6576],"indices":[5165568,252]}}, -"assets/anims/anim_02.anime": {"eu":{"header":[5044472,24],"values":[5044748,6576],"indices":[5044496,252]},"jp":{"header":[5157256,24],"values":[5157532,6576],"indices":[5157280,252]},"us":{"header":[5165544,24],"values":[5165820,6576],"indices":[5165568,252]}}, -"assets/anims/anim_03.anime": {"eu":{"header":[5051324,24],"values":[5051600,4372],"indices":[5051348,252]},"jp":{"header":[5164108,24],"values":[5164384,4372],"indices":[5164132,252]},"us":{"header":[5172396,24],"values":[5172672,4372],"indices":[5172420,252]}}, -"assets/anims/anim_04.anime": {"eu":{"header":[5055972,24],"values":[5056248,2264],"indices":[5055996,252]},"jp":{"header":[5168756,24],"values":[5169032,2264],"indices":[5168780,252]},"us":{"header":[5177044,24],"values":[5177320,2264],"indices":[5177068,252]}}, -"assets/anims/anim_05.anime": {"eu":{"header":[5058512,24],"values":[5058788,5796],"indices":[5058536,252]},"jp":{"header":[5171296,24],"values":[5171572,5796],"indices":[5171320,252]},"us":{"header":[5179584,24],"values":[5179860,5796],"indices":[5179608,252]}}, -"assets/anims/anim_06.anime": {"eu":{"header":[5064584,24],"values":[5064860,892],"indices":[5064608,252]},"jp":{"header":[5177368,24],"values":[5177644,892],"indices":[5177392,252]},"us":{"header":[5185656,24],"values":[5185932,892],"indices":[5185680,252]}}, -"assets/anims/anim_07.anime": {"eu":{"header":[5044472,24],"values":[5066052,1468],"indices":[5065800,252]},"jp":{"header":[5157256,24],"values":[5178836,1468],"indices":[5178584,252]},"us":{"header":[5165544,24],"values":[5187124,1468],"indices":[5186872,252]}}, -"assets/anims/anim_08.anime": {"eu":{"header":[5065776,24],"values":[5066052,1468],"indices":[5065800,252]},"jp":{"header":[5178560,24],"values":[5178836,1468],"indices":[5178584,252]},"us":{"header":[5186848,24],"values":[5187124,1468],"indices":[5186872,252]}}, -"assets/anims/anim_09.anime": {"eu":{"header":[5067520,24],"values":[5067796,3052],"indices":[5067544,252]},"jp":{"header":[5180304,24],"values":[5180580,3052],"indices":[5180328,252]},"us":{"header":[5188592,24],"values":[5188868,3052],"indices":[5188616,252]}}, -"assets/anims/anim_0A.anime": {"eu":{"header":[5070848,24],"values":[5071124,2544],"indices":[5070872,252]},"jp":{"header":[5183632,24],"values":[5183908,2544],"indices":[5183656,252]},"us":{"header":[5191920,24],"values":[5192196,2544],"indices":[5191944,252]}}, -"assets/anims/anim_0B.anime": {"eu":{"header":[5073668,24],"values":[5073968,1348],"indices":[5073716,252]},"jp":{"header":[5186452,24],"values":[5186752,1348],"indices":[5186500,252]},"us":{"header":[5194740,24],"values":[5195040,1348],"indices":[5194788,252]}}, -"assets/anims/anim_0C.anime": {"eu":{"header":[5073692,24],"values":[5073968,1348],"indices":[5073716,252]},"jp":{"header":[5186476,24],"values":[5186752,1348],"indices":[5186500,252]},"us":{"header":[5194764,24],"values":[5195040,1348],"indices":[5194788,252]}}, -"assets/anims/anim_0D.anime": {"eu":{"header":[5075316,24],"values":[5075592,770],"indices":[5075340,252]},"jp":{"header":[5188100,24],"values":[5188376,770],"indices":[5188124,252]},"us":{"header":[5196388,24],"values":[5196664,770],"indices":[5196412,252]}}, -"assets/anims/anim_0E.anime": {"eu":{"header":[5044472,24],"values":[5076640,80],"indices":[5076388,252]},"jp":{"header":[5157256,24],"values":[5189424,80],"indices":[5189172,252]},"us":{"header":[5165544,24],"values":[5197712,80],"indices":[5197460,252]}}, -"assets/anims/anim_0F.anime": {"eu":{"header":[5044472,24],"values":[5077020,1502],"indices":[5076768,252]},"jp":{"header":[5157256,24],"values":[5189804,1502],"indices":[5189552,252]},"us":{"header":[5165544,24],"values":[5198092,1502],"indices":[5197840,252]}}, -"assets/anims/anim_10.anime": {"eu":{"header":[5076744,24],"values":[5077020,1502],"indices":[5076768,252]},"jp":{"header":[5189528,24],"values":[5189804,1502],"indices":[5189552,252]},"us":{"header":[5197816,24],"values":[5198092,1502],"indices":[5197840,252]}}, -"assets/anims/anim_11.anime": {"eu":{"header":[5078524,24],"values":[5078800,1174],"indices":[5078548,252]},"jp":{"header":[5191308,24],"values":[5191584,1174],"indices":[5191332,252]},"us":{"header":[5199596,24],"values":[5199872,1174],"indices":[5199620,252]}}, -"assets/anims/anim_12.anime": {"eu":{"header":[5079976,24],"values":[5080252,1318],"indices":[5080000,252]},"jp":{"header":[5192760,24],"values":[5193036,1318],"indices":[5192784,252]},"us":{"header":[5201048,24],"values":[5201324,1318],"indices":[5201072,252]}}, -"assets/anims/anim_13.anime": {"eu":{"header":[5081572,24],"values":[5081848,1678],"indices":[5081596,252]},"jp":{"header":[5194356,24],"values":[5194632,1678],"indices":[5194380,252]},"us":{"header":[5202644,24],"values":[5202920,1678],"indices":[5202668,252]}}, -"assets/anims/anim_14.anime": {"eu":{"header":[5083528,24],"values":[5083804,1102],"indices":[5083552,252]},"jp":{"header":[5196312,24],"values":[5196588,1102],"indices":[5196336,252]},"us":{"header":[5204600,24],"values":[5204876,1102],"indices":[5204624,252]}}, -"assets/anims/anim_15.anime": {"eu":{"header":[5084908,24],"values":[5085184,930],"indices":[5084932,252]},"jp":{"header":[5197692,24],"values":[5197968,930],"indices":[5197716,252]},"us":{"header":[5205980,24],"values":[5206256,930],"indices":[5206004,252]}}, -"assets/anims/anim_16.anime": {"eu":{"header":[5086116,24],"values":[5086392,4452],"indices":[5086140,252]},"jp":{"header":[5198900,24],"values":[5199176,4452],"indices":[5198924,252]},"us":{"header":[5207188,24],"values":[5207464,4452],"indices":[5207212,252]}}, -"assets/anims/anim_17.anime": {"eu":{"header":[5090844,24],"values":[5091120,2942],"indices":[5090868,252]},"jp":{"header":[5203628,24],"values":[5203904,2942],"indices":[5203652,252]},"us":{"header":[5211916,24],"values":[5212192,2942],"indices":[5211940,252]}}, -"assets/anims/anim_18.anime": {"eu":{"header":[5094064,24],"values":[5094340,4452],"indices":[5086140,252]},"jp":{"header":[5206848,24],"values":[5207124,4452],"indices":[5198924,252]},"us":{"header":[5215136,24],"values":[5215412,4452],"indices":[5207212,252]}}, -"assets/anims/anim_19.anime": {"eu":{"header":[5098792,24],"values":[5099068,5354],"indices":[5098816,252]},"jp":{"header":[5211576,24],"values":[5211852,5354],"indices":[5211600,252]},"us":{"header":[5219864,24],"values":[5220140,5354],"indices":[5219888,252]}}, -"assets/anims/anim_1A.anime": {"eu":{"header":[5104424,24],"values":[5104700,1146],"indices":[5104448,252]},"jp":{"header":[5217208,24],"values":[5217484,1146],"indices":[5217232,252]},"us":{"header":[5225496,24],"values":[5225772,1146],"indices":[5225520,252]}}, -"assets/anims/anim_1B.anime": {"eu":{"header":[5105848,24],"values":[5106124,2858],"indices":[5105872,252]},"jp":{"header":[5218632,24],"values":[5218908,2858],"indices":[5218656,252]},"us":{"header":[5226920,24],"values":[5227196,2858],"indices":[5226944,252]}}, -"assets/anims/anim_1C.anime": {"eu":{"header":[5108984,24],"values":[5109260,780],"indices":[5109008,252]},"jp":{"header":[5221768,24],"values":[5222044,780],"indices":[5221792,252]},"us":{"header":[5230056,24],"values":[5230332,780],"indices":[5230080,252]}}, -"assets/anims/anim_1D.anime": {"eu":{"header":[5110040,24],"values":[5110316,1380],"indices":[5110064,252]},"jp":{"header":[5222824,24],"values":[5223100,1380],"indices":[5222848,252]},"us":{"header":[5231112,24],"values":[5231388,1380],"indices":[5231136,252]}}, -"assets/anims/anim_1E.anime": {"eu":{"header":[5111696,24],"values":[5111972,1530],"indices":[5111720,252]},"jp":{"header":[5224480,24],"values":[5224756,1530],"indices":[5224504,252]},"us":{"header":[5232768,24],"values":[5233044,1530],"indices":[5232792,252]}}, -"assets/anims/anim_1F.anime": {"eu":{"header":[5113504,24],"values":[5113780,846],"indices":[5113528,252]},"jp":{"header":[5226288,24],"values":[5226564,846],"indices":[5226312,252]},"us":{"header":[5234576,24],"values":[5234852,846],"indices":[5234600,252]}}, -"assets/anims/anim_20.anime": {"eu":{"header":[5114628,24],"values":[5114904,7124],"indices":[5114652,252]},"jp":{"header":[5227412,24],"values":[5227688,7124],"indices":[5227436,252]},"us":{"header":[5235700,24],"values":[5235976,7124],"indices":[5235724,252]}}, -"assets/anims/anim_21.anime": {"eu":{"header":[5122028,24],"values":[5122304,2610],"indices":[5122052,252]},"jp":{"header":[5234812,24],"values":[5235088,2610],"indices":[5234836,252]},"us":{"header":[5243100,24],"values":[5243376,2610],"indices":[5243124,252]}}, -"assets/anims/anim_22.anime": {"eu":{"header":[5124916,24],"values":[5125192,1750],"indices":[5124940,252]},"jp":{"header":[5237700,24],"values":[5237976,1750],"indices":[5237724,252]},"us":{"header":[5245988,24],"values":[5246264,1750],"indices":[5246012,252]}}, -"assets/anims/anim_23.anime": {"eu":{"header":[5126944,24],"values":[5127220,8216],"indices":[5126968,252]},"jp":{"header":[5239728,24],"values":[5240004,8216],"indices":[5239752,252]},"us":{"header":[5248016,24],"values":[5248292,8216],"indices":[5248040,252]}}, -"assets/anims/anim_24.anime": {"eu":{"header":[5135436,24],"values":[5135712,9376],"indices":[5135460,252]},"jp":{"header":[5248220,24],"values":[5248496,9376],"indices":[5248244,252]},"us":{"header":[5256508,24],"values":[5256784,9376],"indices":[5256532,252]}}, -"assets/anims/anim_25.anime": {"eu":{"header":[5145088,24],"values":[5145364,8018],"indices":[5145112,252]},"jp":{"header":[5257872,24],"values":[5258148,8018],"indices":[5257896,252]},"us":{"header":[5266160,24],"values":[5266436,8018],"indices":[5266184,252]}}, -"assets/anims/anim_26.anime": {"eu":{"header":[5153384,24],"values":[5153660,7352],"indices":[5153408,252]},"jp":{"header":[5266168,24],"values":[5266444,7352],"indices":[5266192,252]},"us":{"header":[5274456,24],"values":[5274732,7352],"indices":[5274480,252]}}, -"assets/anims/anim_27.anime": {"eu":{"header":[5161012,24],"values":[5161288,8980],"indices":[5161036,252]},"jp":{"header":[5273796,24],"values":[5274072,8980],"indices":[5273820,252]},"us":{"header":[5282084,24],"values":[5282360,8980],"indices":[5282108,252]}}, -"assets/anims/anim_28.anime": {"eu":{"header":[5083528,24],"values":[5170544,1010],"indices":[5170292,252]},"jp":{"header":[5196312,24],"values":[5283328,1010],"indices":[5283076,252]},"us":{"header":[5204600,24],"values":[5291616,1010],"indices":[5291364,252]}}, -"assets/anims/anim_29.anime": {"eu":{"header":[5171556,24],"values":[5171832,582],"indices":[5171580,252]},"jp":{"header":[5284340,24],"values":[5284616,582],"indices":[5284364,252]},"us":{"header":[5292628,24],"values":[5292904,582],"indices":[5292652,252]}}, -"assets/anims/anim_2A.anime": {"eu":{"header":[5172416,24],"values":[5172692,1252],"indices":[5172440,252]},"jp":{"header":[5285200,24],"values":[5285476,1252],"indices":[5285224,252]},"us":{"header":[5293488,24],"values":[5293764,1252],"indices":[5293512,252]}}, -"assets/anims/anim_2B.anime": {"eu":{"header":[5172416,24],"values":[5174220,1582],"indices":[5173968,252]},"jp":{"header":[5285200,24],"values":[5287004,1582],"indices":[5286752,252]},"us":{"header":[5293488,24],"values":[5295292,1582],"indices":[5295040,252]}}, -"assets/anims/anim_2C.anime": {"eu":{"header":[5044448,24],"values":[5176104,5620],"indices":[5175852,252]},"jp":{"header":[5157232,24],"values":[5288888,5620],"indices":[5288636,252]},"us":{"header":[5165520,24],"values":[5297176,5620],"indices":[5296924,252]}}, -"assets/anims/anim_2D.anime": {"eu":{"header":[5044472,24],"values":[5176104,5620],"indices":[5175852,252]},"jp":{"header":[5157256,24],"values":[5288888,5620],"indices":[5288636,252]},"us":{"header":[5165544,24],"values":[5297176,5620],"indices":[5296924,252]}}, -"assets/anims/anim_2E.anime": {"eu":{"header":[5181724,24],"values":[5182000,3028],"indices":[5181748,252]},"jp":{"header":[5294508,24],"values":[5294784,3028],"indices":[5294532,252]},"us":{"header":[5302796,24],"values":[5303072,3028],"indices":[5302820,252]}}, -"assets/anims/anim_2F.anime": {"eu":{"header":[5126944,24],"values":[5185304,7420],"indices":[5185052,252]},"jp":{"header":[5239728,24],"values":[5298088,7420],"indices":[5297836,252]},"us":{"header":[5248016,24],"values":[5306376,7420],"indices":[5306124,252]}}, -"assets/anims/anim_30.anime": {"eu":{"header":[5058512,24],"values":[5193000,5428],"indices":[5192748,252]},"jp":{"header":[5171296,24],"values":[5305784,5428],"indices":[5305532,252]},"us":{"header":[5179584,24],"values":[5314072,5428],"indices":[5313820,252]}}, -"assets/anims/anim_31.anime": {"eu":{"header":[5198428,24],"values":[5198704,10660],"indices":[5198452,252]},"jp":{"header":[5311212,24],"values":[5311488,10660],"indices":[5311236,252]},"us":{"header":[5319500,24],"values":[5319776,10660],"indices":[5319524,252]}}, -"assets/anims/anim_32.anime": {"eu":{"header":[5114628,24],"values":[5209640,7890],"indices":[5209388,252]},"jp":{"header":[5227412,24],"values":[5322424,7890],"indices":[5322172,252]},"us":{"header":[5235700,24],"values":[5330712,7890],"indices":[5330460,252]}}, -"assets/anims/anim_33.anime": {"eu":{"header":[5217532,24],"values":[5217808,2840],"indices":[5217556,252]},"jp":{"header":[5330316,24],"values":[5330592,2840],"indices":[5330340,252]},"us":{"header":[5338604,24],"values":[5338880,2840],"indices":[5338628,252]}}, -"assets/anims/anim_34.anime": {"eu":{"header":[5078524,24],"values":[5220924,1300],"indices":[5220672,252]},"jp":{"header":[5191308,24],"values":[5333708,1300],"indices":[5333456,252]},"us":{"header":[5199596,24],"values":[5341996,1300],"indices":[5341744,252]}}, -"assets/anims/anim_35.anime": {"eu":{"header":[5222224,24],"values":[5222500,3704],"indices":[5222248,252]},"jp":{"header":[5335008,24],"values":[5335284,3704],"indices":[5335032,252]},"us":{"header":[5343296,24],"values":[5343572,3704],"indices":[5343320,252]}}, -"assets/anims/anim_36.anime": {"eu":{"header":[5226204,24],"values":[5226480,3700],"indices":[5226228,252]},"jp":{"header":[5338988,24],"values":[5339264,3700],"indices":[5339012,252]},"us":{"header":[5347276,24],"values":[5347552,3700],"indices":[5347300,252]}}, -"assets/anims/anim_37.anime": {"eu":{"header":[5126944,24],"values":[5230456,6828],"indices":[5230204,252]},"jp":{"header":[5239728,24],"values":[5343240,6828],"indices":[5342988,252]},"us":{"header":[5248016,24],"values":[5351528,6828],"indices":[5351276,252]}}, -"assets/anims/anim_38.anime": {"eu":{"header":[5064584,24],"values":[5237560,844],"indices":[5237308,252]},"jp":{"header":[5177368,24],"values":[5350344,844],"indices":[5350092,252]},"us":{"header":[5185656,24],"values":[5358632,844],"indices":[5358380,252]}}, -"assets/anims/anim_39.anime": {"eu":{"header":[5238404,24],"values":[5238680,12418],"indices":[5238428,252]},"jp":{"header":[5351188,24],"values":[5351464,12418],"indices":[5351212,252]},"us":{"header":[5359476,24],"values":[5359752,12418],"indices":[5359500,252]}}, -"assets/anims/anim_3A.anime": {"eu":{"header":[5251100,24],"values":[5251376,374],"indices":[5251124,252]},"jp":{"header":[5363884,24],"values":[5364160,374],"indices":[5363908,252]},"us":{"header":[5372172,24],"values":[5372448,374],"indices":[5372196,252]}}, -"assets/anims/anim_3B.anime": {"eu":{"header":[5078524,24],"values":[5252028,1204],"indices":[5251776,252]},"jp":{"header":[5191308,24],"values":[5364812,1204],"indices":[5364560,252]},"us":{"header":[5199596,24],"values":[5373100,1204],"indices":[5372848,252]}}, -"assets/anims/anim_3C.anime": {"eu":{"header":[5253232,24],"values":[5253532,774],"indices":[5253280,252]},"jp":{"header":[5366016,24],"values":[5366316,774],"indices":[5366064,252]},"us":{"header":[5374304,24],"values":[5374604,774],"indices":[5374352,252]}}, -"assets/anims/anim_3D.anime": {"eu":{"header":[5253256,24],"values":[5253532,774],"indices":[5253280,252]},"jp":{"header":[5366040,24],"values":[5366316,774],"indices":[5366064,252]},"us":{"header":[5374328,24],"values":[5374604,774],"indices":[5374352,252]}}, -"assets/anims/anim_3E.anime": {"eu":{"header":[5238404,24],"values":[5254584,11490],"indices":[5254332,252]},"jp":{"header":[5351188,24],"values":[5367368,11490],"indices":[5367116,252]},"us":{"header":[5359476,24],"values":[5375656,11490],"indices":[5375404,252]}}, -"assets/anims/anim_3F.anime": {"eu":{"header":[5266076,24],"values":[5266352,3094],"indices":[5266100,252]},"jp":{"header":[5378860,24],"values":[5379136,3094],"indices":[5378884,252]},"us":{"header":[5387148,24],"values":[5387424,3094],"indices":[5387172,252]}}, -"assets/anims/anim_40.anime": {"eu":{"header":[5269448,24],"values":[5269724,1094],"indices":[5269472,252]},"jp":{"header":[5382232,24],"values":[5382508,1094],"indices":[5382256,252]},"us":{"header":[5390520,24],"values":[5390796,1094],"indices":[5390544,252]}}, -"assets/anims/anim_41.anime": {"eu":{"header":[5108984,24],"values":[5271096,536],"indices":[5270844,252]},"jp":{"header":[5221768,24],"values":[5383880,536],"indices":[5383628,252]},"us":{"header":[5230056,24],"values":[5392168,536],"indices":[5391916,252]}}, -"assets/anims/anim_42.anime": {"eu":{"header":[5271632,24],"values":[5271908,956],"indices":[5271656,252]},"jp":{"header":[5384416,24],"values":[5384692,956],"indices":[5384440,252]},"us":{"header":[5392704,24],"values":[5392980,956],"indices":[5392728,252]}}, -"assets/anims/anim_43.anime": {"eu":{"header":[5272864,24],"values":[5273140,84],"indices":[5272888,252]},"jp":{"header":[5385648,24],"values":[5385924,84],"indices":[5385672,252]},"us":{"header":[5393936,24],"values":[5394212,84],"indices":[5393960,252]}}, -"assets/anims/anim_44.anime": {"eu":{"header":[5083528,24],"values":[5273500,650],"indices":[5273248,252]},"jp":{"header":[5196312,24],"values":[5386284,650],"indices":[5386032,252]},"us":{"header":[5204600,24],"values":[5394572,650],"indices":[5394320,252]}}, -"assets/anims/anim_45.anime": {"eu":{"header":[5044472,24],"values":[5274452,1190],"indices":[5274200,252]},"jp":{"header":[5157256,24],"values":[5387236,1190],"indices":[5386984,252]},"us":{"header":[5165544,24],"values":[5395524,1190],"indices":[5395272,252]}}, -"assets/anims/anim_46.anime": {"eu":{"header":[5274176,24],"values":[5274452,1190],"indices":[5274200,252]},"jp":{"header":[5386960,24],"values":[5387236,1190],"indices":[5386984,252]},"us":{"header":[5395248,24],"values":[5395524,1190],"indices":[5395272,252]}}, -"assets/anims/anim_47.anime": {"eu":{"header":[5253232,24],"values":[5275920,838],"indices":[5275668,252]},"jp":{"header":[5366016,24],"values":[5388704,838],"indices":[5388452,252]},"us":{"header":[5374304,24],"values":[5396992,838],"indices":[5396740,252]}}, -"assets/anims/anim_48.anime": {"eu":{"header":[5276760,24],"values":[5277036,5098],"indices":[5276784,252]},"jp":{"header":[5389544,24],"values":[5389820,5098],"indices":[5389568,252]},"us":{"header":[5397832,24],"values":[5398108,5098],"indices":[5397856,252]}}, -"assets/anims/anim_49.anime": {"eu":{"header":[5078524,24],"values":[5282412,1298],"indices":[5282160,252]},"jp":{"header":[5191308,24],"values":[5395196,1298],"indices":[5394944,252]},"us":{"header":[5199596,24],"values":[5403484,1298],"indices":[5403232,252]}}, -"assets/anims/anim_4A.anime": {"eu":{"header":[5283712,24],"values":[5283988,616],"indices":[5283736,252]},"jp":{"header":[5396496,24],"values":[5396772,616],"indices":[5396520,252]},"us":{"header":[5404784,24],"values":[5405060,616],"indices":[5404808,252]}}, -"assets/anims/anim_4B.anime": {"eu":{"header":[5079976,24],"values":[5284880,1386],"indices":[5284628,252]},"jp":{"header":[5192760,24],"values":[5397664,1386],"indices":[5397412,252]},"us":{"header":[5201048,24],"values":[5405952,1386],"indices":[5405700,252]}}, -"assets/anims/anim_4C.anime": {"eu":{"header":[5286268,24],"values":[5286544,670],"indices":[5286292,252]},"jp":{"header":[5399052,24],"values":[5399328,670],"indices":[5399076,252]},"us":{"header":[5407340,24],"values":[5407616,670],"indices":[5407364,252]}}, -"assets/anims/anim_4D.anime": {"eu":{"header":[5064584,24],"values":[5287516,2456],"indices":[5287264,252]},"jp":{"header":[5177368,24],"values":[5400300,2456],"indices":[5400048,252]},"us":{"header":[5185656,24],"values":[5408588,2456],"indices":[5408336,252]}}, -"assets/anims/anim_4E.anime": {"eu":{"header":[5287240,24],"values":[5287516,2456],"indices":[5287264,252]},"jp":{"header":[5400024,24],"values":[5400300,2456],"indices":[5400048,252]},"us":{"header":[5408312,24],"values":[5408588,2456],"indices":[5408336,252]}}, -"assets/anims/anim_4F.anime": {"eu":{"header":[5113504,24],"values":[5290248,1578],"indices":[5289996,252]},"jp":{"header":[5226288,24],"values":[5403032,1578],"indices":[5402780,252]},"us":{"header":[5234576,24],"values":[5411320,1578],"indices":[5411068,252]}}, -"assets/anims/anim_50.anime": {"eu":{"header":[5251100,24],"values":[5292104,420],"indices":[5291852,252]},"jp":{"header":[5363884,24],"values":[5404888,420],"indices":[5404636,252]},"us":{"header":[5372172,24],"values":[5413176,420],"indices":[5412924,252]}}, -"assets/anims/anim_51.anime": {"eu":{"header":[5292524,24],"values":[5292800,1002],"indices":[5292548,252]},"jp":{"header":[5405308,24],"values":[5405584,1002],"indices":[5405332,252]},"us":{"header":[5413596,24],"values":[5413872,1002],"indices":[5413620,252]}}, -"assets/anims/anim_52.anime": {"eu":{"header":[5253232,24],"values":[5294080,878],"indices":[5293828,252]},"jp":{"header":[5366016,24],"values":[5406864,878],"indices":[5406612,252]},"us":{"header":[5374304,24],"values":[5415152,878],"indices":[5414900,252]}}, -"assets/anims/anim_53.anime": {"eu":{"header":[5294960,24],"values":[5295236,1970],"indices":[5294984,252]},"jp":{"header":[5407744,24],"values":[5408020,1970],"indices":[5407768,252]},"us":{"header":[5416032,24],"values":[5416308,1970],"indices":[5416056,252]}}, -"assets/anims/anim_54.anime": {"eu":{"header":[5297208,24],"values":[5297484,1314],"indices":[5297232,252]},"jp":{"header":[5409992,24],"values":[5410268,1314],"indices":[5410016,252]},"us":{"header":[5418280,24],"values":[5418556,1314],"indices":[5418304,252]}}, -"assets/anims/anim_55.anime": {"eu":{"header":[5298800,24],"values":[5299076,11268],"indices":[5298824,252]},"jp":{"header":[5411584,24],"values":[5411860,11268],"indices":[5411608,252]},"us":{"header":[5419872,24],"values":[5420148,11268],"indices":[5419896,252]}}, -"assets/anims/anim_56.anime": {"eu":{"header":[5044472,24],"values":[5310644,1560],"indices":[5310392,252]},"jp":{"header":[5157256,24],"values":[5423428,1560],"indices":[5423176,252]},"us":{"header":[5165544,24],"values":[5431716,1560],"indices":[5431464,252]}}, -"assets/anims/anim_57.anime": {"eu":{"header":[5310368,24],"values":[5310644,1560],"indices":[5310392,252]},"jp":{"header":[5423152,24],"values":[5423428,1560],"indices":[5423176,252]},"us":{"header":[5431440,24],"values":[5431716,1560],"indices":[5431464,252]}}, -"assets/anims/anim_58.anime": {"eu":{"header":[5312204,24],"values":[5312480,1082],"indices":[5312228,252]},"jp":{"header":[5424988,24],"values":[5425264,1082],"indices":[5425012,252]},"us":{"header":[5433276,24],"values":[5433552,1082],"indices":[5433300,252]}}, -"assets/anims/anim_59.anime": {"eu":{"header":[5313564,24],"values":[5313840,3052],"indices":[5313588,252]},"jp":{"header":[5426348,24],"values":[5426624,3052],"indices":[5426372,252]},"us":{"header":[5434636,24],"values":[5434912,3052],"indices":[5434660,252]}}, -"assets/anims/anim_5A.anime": {"eu":{"header":[5316892,24],"values":[5317168,3278],"indices":[5316916,252]},"jp":{"header":[5429676,24],"values":[5429952,3278],"indices":[5429700,252]},"us":{"header":[5437964,24],"values":[5438240,3278],"indices":[5437988,252]}}, -"assets/anims/anim_5B.anime": {"eu":{"header":[5108984,24],"values":[5320724,720],"indices":[5320472,252]},"jp":{"header":[5221768,24],"values":[5433508,720],"indices":[5433256,252]},"us":{"header":[5230056,24],"values":[5441796,720],"indices":[5441544,252]}}, -"assets/anims/anim_5C.anime": {"eu":{"header":[5321444,24],"values":[5321720,1258],"indices":[5321468,252]},"jp":{"header":[5434228,24],"values":[5434504,1258],"indices":[5434252,252]},"us":{"header":[5442516,24],"values":[5442792,1258],"indices":[5442540,252]}}, -"assets/anims/anim_5D.anime": {"eu":{"header":[5269448,24],"values":[5323256,1142],"indices":[5323004,252]},"jp":{"header":[5382232,24],"values":[5436040,1142],"indices":[5435788,252]},"us":{"header":[5390520,24],"values":[5444328,1142],"indices":[5444076,252]}}, -"assets/anims/anim_5E.anime": {"eu":{"header":[5238404,24],"values":[5324676,12110],"indices":[5324424,252]},"jp":{"header":[5351188,24],"values":[5437460,12110],"indices":[5437208,252]},"us":{"header":[5359476,24],"values":[5445748,12110],"indices":[5445496,252]}}, -"assets/anims/anim_5F.anime": {"eu":{"header":[5336788,24],"values":[5337064,5058],"indices":[5336812,252]},"jp":{"header":[5449572,24],"values":[5449848,5058],"indices":[5449596,252]},"us":{"header":[5457860,24],"values":[5458136,5058],"indices":[5457884,252]}}, -"assets/anims/anim_60.anime": {"eu":{"header":[5342124,24],"values":[5342400,4020],"indices":[5342148,252]},"jp":{"header":[5454908,24],"values":[5455184,4020],"indices":[5454932,252]},"us":{"header":[5463196,24],"values":[5463472,4020],"indices":[5463220,252]}}, -"assets/anims/anim_61.anime": {"eu":{"header":[5346420,24],"values":[5346696,12660],"indices":[5346444,252]},"jp":{"header":[5459204,24],"values":[5459480,12660],"indices":[5459228,252]},"us":{"header":[5467492,24],"values":[5467768,12660],"indices":[5467516,252]}}, -"assets/anims/anim_62.anime": {"eu":{"header":[5108984,24],"values":[5359632,742],"indices":[5359380,252]},"jp":{"header":[5221768,24],"values":[5472416,742],"indices":[5472164,252]},"us":{"header":[5230056,24],"values":[5480704,742],"indices":[5480452,252]}}, -"assets/anims/anim_63.anime": {"eu":{"header":[5360376,24],"values":[5360652,1626],"indices":[5360400,252]},"jp":{"header":[5473160,24],"values":[5473436,1626],"indices":[5473184,252]},"us":{"header":[5481448,24],"values":[5481724,1626],"indices":[5481472,252]}}, -"assets/anims/anim_64.anime": {"eu":{"header":[5362280,24],"values":[5362556,1246],"indices":[5362304,252]},"jp":{"header":[5475064,24],"values":[5475340,1246],"indices":[5475088,252]},"us":{"header":[5483352,24],"values":[5483628,1246],"indices":[5483376,252]}}, -"assets/anims/anim_65.anime": {"eu":{"header":[5113504,24],"values":[5364080,1700],"indices":[5363828,252]},"jp":{"header":[5226288,24],"values":[5476864,1700],"indices":[5476612,252]},"us":{"header":[5234576,24],"values":[5485152,1700],"indices":[5484900,252]}}, -"assets/anims/anim_66.anime": {"eu":{"header":[5365780,24],"values":[5366056,1948],"indices":[5365804,252]},"jp":{"header":[5478564,24],"values":[5478840,1948],"indices":[5478588,252]},"us":{"header":[5486852,24],"values":[5487128,1948],"indices":[5486876,252]}}, -"assets/anims/anim_67.anime": {"eu":{"header":[5368004,24],"values":[5368280,386],"indices":[5368028,252]},"jp":{"header":[5480788,24],"values":[5481064,386],"indices":[5480812,252]},"us":{"header":[5489076,24],"values":[5489352,386],"indices":[5489100,252]}}, -"assets/anims/anim_68.anime": {"eu":{"header":[5368668,24],"values":[5368944,340],"indices":[5368692,252]},"jp":{"header":[5481452,24],"values":[5481728,340],"indices":[5481476,252]},"us":{"header":[5489740,24],"values":[5490016,340],"indices":[5489764,252]}}, -"assets/anims/anim_69.anime": {"eu":{"header":[5108984,24],"values":[5369560,764],"indices":[5369308,252]},"jp":{"header":[5221768,24],"values":[5482344,764],"indices":[5482092,252]},"us":{"header":[5230056,24],"values":[5490632,764],"indices":[5490380,252]}}, -"assets/anims/anim_6A.anime": {"eu":{"header":[5370324,24],"values":[5370600,1060],"indices":[5370348,252]},"jp":{"header":[5483108,24],"values":[5483384,1060],"indices":[5483132,252]},"us":{"header":[5491396,24],"values":[5491672,1060],"indices":[5491420,252]}}, -"assets/anims/anim_6B.anime": {"eu":{"header":[5253232,24],"values":[5371936,940],"indices":[5371684,252]},"jp":{"header":[5366016,24],"values":[5484720,940],"indices":[5484468,252]},"us":{"header":[5374304,24],"values":[5493008,940],"indices":[5492756,252]}}, -"assets/anims/anim_6C.anime": {"eu":{"header":[5372876,24],"values":[5373152,1284],"indices":[5372900,252]},"jp":{"header":[5485660,24],"values":[5485936,1284],"indices":[5485684,252]},"us":{"header":[5493948,24],"values":[5494224,1284],"indices":[5493972,252]}}, -"assets/anims/anim_6D.anime": {"eu":{"header":[5079976,24],"values":[5374712,1286],"indices":[5374460,252]},"jp":{"header":[5192760,24],"values":[5487496,1286],"indices":[5487244,252]},"us":{"header":[5201048,24],"values":[5495784,1286],"indices":[5495532,252]}}, -"assets/anims/anim_6E.anime": {"eu":{"header":[5078524,24],"values":[5376276,1136],"indices":[5376024,252]},"jp":{"header":[5191308,24],"values":[5489060,1136],"indices":[5488808,252]},"us":{"header":[5199596,24],"values":[5497348,1136],"indices":[5497096,252]}}, -"assets/anims/anim_6F.anime": {"eu":{"header":[5171556,24],"values":[5377712,98],"indices":[5377460,252]},"jp":{"header":[5284340,24],"values":[5490496,98],"indices":[5490244,252]},"us":{"header":[5292628,24],"values":[5498784,98],"indices":[5498532,252]}}, -"assets/anims/anim_70.anime": {"eu":{"header":[5377436,24],"values":[5377712,98],"indices":[5377460,252]},"jp":{"header":[5490220,24],"values":[5490496,98],"indices":[5490244,252]},"us":{"header":[5498508,24],"values":[5498784,98],"indices":[5498532,252]}}, -"assets/anims/anim_71.anime": {"eu":{"header":[5377812,24],"values":[5378088,2078],"indices":[5377836,252]},"jp":{"header":[5490596,24],"values":[5490872,2078],"indices":[5490620,252]},"us":{"header":[5498884,24],"values":[5499160,2078],"indices":[5498908,252]}}, -"assets/anims/anim_72.anime": {"eu":{"header":[5380168,24],"values":[5380468,4342],"indices":[5380216,252]},"jp":{"header":[5492952,24],"values":[5493252,4342],"indices":[5493000,252]},"us":{"header":[5501240,24],"values":[5501540,4342],"indices":[5501288,252]}}, -"assets/anims/anim_73.anime": {"eu":{"header":[5380168,24],"values":[5380468,4342],"indices":[5380216,252]},"jp":{"header":[5492952,24],"values":[5493252,4342],"indices":[5493000,252]},"us":{"header":[5501240,24],"values":[5501540,4342],"indices":[5501288,252]}}, -"assets/anims/anim_74.anime": {"eu":{"header":[5377812,24],"values":[5385088,1844],"indices":[5384836,252]},"jp":{"header":[5490596,24],"values":[5497872,1844],"indices":[5497620,252]},"us":{"header":[5498884,24],"values":[5506160,1844],"indices":[5505908,252]}}, -"assets/anims/anim_75.anime": {"eu":{"header":[5377812,24],"values":[5387208,1892],"indices":[5386956,252]},"jp":{"header":[5490596,24],"values":[5499992,1892],"indices":[5499740,252]},"us":{"header":[5498884,24],"values":[5508280,1892],"indices":[5508028,252]}}, -"assets/anims/anim_76.anime": {"eu":{"header":[5126944,24],"values":[5389376,4648],"indices":[5389124,252]},"jp":{"header":[5239728,24],"values":[5502160,4648],"indices":[5501908,252]},"us":{"header":[5248016,24],"values":[5510448,4648],"indices":[5510196,252]}}, -"assets/anims/anim_77.anime": {"eu":{"header":[5086116,24],"values":[5394300,2464],"indices":[5394048,252]},"jp":{"header":[5198900,24],"values":[5507084,2464],"indices":[5506832,252]},"us":{"header":[5207188,24],"values":[5515372,2464],"indices":[5515120,252]}}, -"assets/anims/anim_78.anime": {"eu":{"header":[5396764,24],"values":[5397040,10454],"indices":[5396788,252]},"jp":{"header":[5509548,24],"values":[5509824,10454],"indices":[5509572,252]},"us":{"header":[5517836,24],"values":[5518112,10454],"indices":[5517860,252]}}, -"assets/anims/anim_79.anime": {"eu":{"header":[5407496,24],"values":[5407772,3634],"indices":[5407520,252]},"jp":{"header":[5520280,24],"values":[5520556,3634],"indices":[5520304,252]},"us":{"header":[5528568,24],"values":[5528844,3634],"indices":[5528592,252]}}, -"assets/anims/anim_7A.anime": {"eu":{"header":[5411408,24],"values":[5411684,402],"indices":[5411432,252]},"jp":{"header":[5524192,24],"values":[5524468,402],"indices":[5524216,252]},"us":{"header":[5532480,24],"values":[5532756,402],"indices":[5532504,252]}}, -"assets/anims/anim_7B.anime": {"eu":{"header":[5297208,24],"values":[5412364,2360],"indices":[5412112,252]},"jp":{"header":[5409992,24],"values":[5525148,2360],"indices":[5524896,252]},"us":{"header":[5418280,24],"values":[5533436,2360],"indices":[5533184,252]}}, -"assets/anims/anim_7C.anime": {"eu":{"header":[5297208,24],"values":[5415000,2300],"indices":[5414748,252]},"jp":{"header":[5409992,24],"values":[5527784,2300],"indices":[5527532,252]},"us":{"header":[5418280,24],"values":[5536072,2300],"indices":[5535820,252]}}, -"assets/anims/anim_7D.anime": {"eu":{"header":[5172416,24],"values":[5417576,1114],"indices":[5417324,252]},"jp":{"header":[5285200,24],"values":[5530360,1114],"indices":[5530108,252]},"us":{"header":[5293488,24],"values":[5538648,1114],"indices":[5538396,252]}}, -"assets/anims/anim_7E.anime": {"eu":{"header":[5058512,24],"values":[5418968,4538],"indices":[5418716,252]},"jp":{"header":[5171296,24],"values":[5531752,4538],"indices":[5531500,252]},"us":{"header":[5179584,24],"values":[5540040,4538],"indices":[5539788,252]}}, -"assets/anims/anim_7F.anime": {"eu":{"header":[5105848,24],"values":[5423784,3622],"indices":[5423532,252]},"jp":{"header":[5218632,24],"values":[5536568,3622],"indices":[5536316,252]},"us":{"header":[5226920,24],"values":[5544856,3622],"indices":[5544604,252]}}, -"assets/anims/anim_80.anime": {"eu":{"header":[5105848,24],"values":[5427684,4248],"indices":[5427432,252]},"jp":{"header":[5218632,24],"values":[5540468,4248],"indices":[5540216,252]},"us":{"header":[5226920,24],"values":[5548756,4248],"indices":[5548504,252]}}, -"assets/anims/anim_81.anime": {"eu":{"header":[5431932,24],"values":[5432208,4308],"indices":[5431956,252]},"jp":{"header":[5544716,24],"values":[5544992,4308],"indices":[5544740,252]},"us":{"header":[5553004,24],"values":[5553280,4308],"indices":[5553028,252]}}, -"assets/anims/anim_82.anime": {"eu":{"header":[5436516,24],"values":[5436792,5770],"indices":[5436540,252]},"jp":{"header":[5549300,24],"values":[5549576,5770],"indices":[5549324,252]},"us":{"header":[5557588,24],"values":[5557864,5770],"indices":[5557612,252]}}, -"assets/anims/anim_83.anime": {"eu":{"header":[5442564,24],"values":[5442840,4734],"indices":[5442588,252]},"jp":{"header":[5555348,24],"values":[5555624,4734],"indices":[5555372,252]},"us":{"header":[5563636,24],"values":[5563912,4734],"indices":[5563660,252]}}, -"assets/anims/anim_84.anime": {"eu":{"header":[5051324,24],"values":[5447852,4756],"indices":[5447600,252]},"jp":{"header":[5164108,24],"values":[5560636,4756],"indices":[5560384,252]},"us":{"header":[5172396,24],"values":[5568924,4756],"indices":[5568672,252]}}, -"assets/anims/anim_85.anime": {"eu":{"header":[5172416,24],"values":[5452884,324],"indices":[5452632,252]},"jp":{"header":[5285200,24],"values":[5565668,324],"indices":[5565416,252]},"us":{"header":[5293488,24],"values":[5573956,324],"indices":[5573704,252]}}, -"assets/anims/anim_86.anime": {"eu":{"header":[5453208,24],"values":[5453484,2902],"indices":[5453232,252]},"jp":{"header":[5565992,24],"values":[5566268,2902],"indices":[5566016,252]},"us":{"header":[5574280,24],"values":[5574556,2902],"indices":[5574304,252]}}, -"assets/anims/anim_87.anime": {"eu":{"header":[5217532,24],"values":[5456664,1564],"indices":[5456412,252]},"jp":{"header":[5330316,24],"values":[5569448,1564],"indices":[5569196,252]},"us":{"header":[5338604,24],"values":[5577736,1564],"indices":[5577484,252]}}, -"assets/anims/anim_88.anime": {"eu":{"header":[5321444,24],"values":[5458528,1260],"indices":[5458276,252]},"jp":{"header":[5434228,24],"values":[5571312,1260],"indices":[5571060,252]},"us":{"header":[5442516,24],"values":[5579600,1260],"indices":[5579348,252]}}, -"assets/anims/anim_89.anime": {"eu":{"header":[5458252,24],"values":[5458528,1260],"indices":[5458276,252]},"jp":{"header":[5571036,24],"values":[5571312,1260],"indices":[5571060,252]},"us":{"header":[5579324,24],"values":[5579600,1260],"indices":[5579348,252]}}, -"assets/anims/anim_8A.anime": {"eu":{"header":[5453208,24],"values":[5460064,2980],"indices":[5459812,252]},"jp":{"header":[5565992,24],"values":[5572848,2980],"indices":[5572596,252]},"us":{"header":[5574280,24],"values":[5581136,2980],"indices":[5580884,252]}}, -"assets/anims/anim_8B.anime": {"eu":{"header":[5313564,24],"values":[5463320,2970],"indices":[5463068,252]},"jp":{"header":[5426348,24],"values":[5576104,2970],"indices":[5575852,252]},"us":{"header":[5434636,24],"values":[5584392,2970],"indices":[5584140,252]}}, -"assets/anims/anim_8C.anime": {"eu":{"header":[5283712,24],"values":[5466568,646],"indices":[5466316,252]},"jp":{"header":[5396496,24],"values":[5579352,646],"indices":[5579100,252]},"us":{"header":[5404784,24],"values":[5587640,646],"indices":[5587388,252]}}, -"assets/anims/anim_8D.anime": {"eu":{"header":[5292524,24],"values":[5467492,1086],"indices":[5467240,252]},"jp":{"header":[5405308,24],"values":[5580276,1086],"indices":[5580024,252]},"us":{"header":[5413596,24],"values":[5588564,1086],"indices":[5588312,252]}}, -"assets/anims/anim_8E.anime": {"eu":{"header":[5044472,24],"values":[5468880,1618],"indices":[5468628,252]},"jp":{"header":[5157256,24],"values":[5581664,1618],"indices":[5581412,252]},"us":{"header":[5165544,24],"values":[5589952,1618],"indices":[5589700,252]}}, -"assets/anims/anim_8F.anime": {"eu":{"header":[5065776,24],"values":[5468880,1618],"indices":[5468628,252]},"jp":{"header":[5178560,24],"values":[5581664,1618],"indices":[5581412,252]},"us":{"header":[5186848,24],"values":[5589952,1618],"indices":[5589700,252]}}, -"assets/anims/anim_90.anime": {"eu":{"header":[5083528,24],"values":[5470776,1012],"indices":[5470524,252]},"jp":{"header":[5196312,24],"values":[5583560,1012],"indices":[5583308,252]},"us":{"header":[5204600,24],"values":[5591848,1012],"indices":[5591596,252]}}, -"assets/anims/anim_91.anime": {"eu":{"header":[5471788,24],"values":[5472064,266],"indices":[5471812,252]},"jp":{"header":[5584572,24],"values":[5584848,266],"indices":[5584596,252]},"us":{"header":[5592860,24],"values":[5593136,266],"indices":[5592884,252]}}, -"assets/anims/anim_92.anime": {"eu":{"header":[5472332,24],"values":[5472608,5600],"indices":[5472356,252]},"jp":{"header":[5585116,24],"values":[5585392,5600],"indices":[5585140,252]},"us":{"header":[5593404,24],"values":[5593680,5600],"indices":[5593428,252]}}, -"assets/anims/anim_93.anime": {"eu":{"header":[5108984,24],"values":[5478484,602],"indices":[5478232,252]},"jp":{"header":[5221768,24],"values":[5591268,602],"indices":[5591016,252]},"us":{"header":[5230056,24],"values":[5599556,602],"indices":[5599304,252]}}, -"assets/anims/anim_94.anime": {"eu":{"header":[5044472,24],"values":[5479364,80],"indices":[5076388,252]},"jp":{"header":[5157256,24],"values":[5592148,80],"indices":[5189172,252]},"us":{"header":[5165544,24],"values":[5600436,80],"indices":[5197460,252]}}, -"assets/anims/anim_95.anime": {"eu":{"header":[5368004,24],"values":[5479720,280],"indices":[5479468,252]},"jp":{"header":[5480788,24],"values":[5592504,280],"indices":[5592252,252]},"us":{"header":[5489076,24],"values":[5600792,280],"indices":[5600540,252]}}, -"assets/anims/anim_96.anime": {"eu":{"header":[5108984,24],"values":[5480276,680],"indices":[5480024,252]},"jp":{"header":[5221768,24],"values":[5593060,680],"indices":[5592808,252]},"us":{"header":[5230056,24],"values":[5601348,680],"indices":[5601096,252]}}, -"assets/anims/anim_97.anime": {"eu":{"header":[5251100,24],"values":[5481232,416],"indices":[5480980,252]},"jp":{"header":[5363884,24],"values":[5594016,416],"indices":[5593764,252]},"us":{"header":[5372172,24],"values":[5602304,416],"indices":[5602052,252]}}, -"assets/anims/anim_98.anime": {"eu":{"header":[5058512,24],"values":[5481924,2758],"indices":[5481672,252]},"jp":{"header":[5171296,24],"values":[5594708,2758],"indices":[5594456,252]},"us":{"header":[5179584,24],"values":[5602996,2758],"indices":[5602744,252]}}, -"assets/anims/anim_99.anime": {"eu":{"header":[5484684,24],"values":[5484960,7014],"indices":[5484708,252]},"jp":{"header":[5597468,24],"values":[5597744,7014],"indices":[5597492,252]},"us":{"header":[5605756,24],"values":[5606032,7014],"indices":[5605780,252]}}, -"assets/anims/anim_9A.anime": {"eu":{"header":[5283712,24],"values":[5492252,644],"indices":[5492000,252]},"jp":{"header":[5396496,24],"values":[5605036,644],"indices":[5604784,252]},"us":{"header":[5404784,24],"values":[5613324,644],"indices":[5613072,252]}}, -"assets/anims/anim_9B.anime": {"eu":{"header":[5283712,24],"values":[5493172,630],"indices":[5492920,252]},"jp":{"header":[5396496,24],"values":[5605956,630],"indices":[5605704,252]},"us":{"header":[5404784,24],"values":[5614244,630],"indices":[5613992,252]}}, -"assets/anims/anim_9C.anime": {"eu":{"header":[5493804,24],"values":[5494080,4884],"indices":[5493828,252]},"jp":{"header":[5606588,24],"values":[5606864,4884],"indices":[5606612,252]},"us":{"header":[5614876,24],"values":[5615152,4884],"indices":[5614900,252]}}, -"assets/anims/anim_9D.anime": {"eu":{"header":[5498964,24],"values":[5499240,1944],"indices":[5498988,252]},"jp":{"header":[5611748,24],"values":[5612024,1944],"indices":[5611772,252]},"us":{"header":[5620036,24],"values":[5620312,1944],"indices":[5620060,252]}}, -"assets/anims/anim_9E.anime": {"eu":{"header":[5431932,24],"values":[5501460,4008],"indices":[5501208,252]},"jp":{"header":[5544716,24],"values":[5614244,4008],"indices":[5613992,252]},"us":{"header":[5553004,24],"values":[5622532,4008],"indices":[5622280,252]}}, -"assets/anims/anim_9F.anime": {"eu":{"header":[5078524,24],"values":[5505744,774],"indices":[5505492,252]},"jp":{"header":[5191308,24],"values":[5618528,774],"indices":[5618276,252]},"us":{"header":[5199596,24],"values":[5626816,774],"indices":[5626564,252]}}, -"assets/anims/anim_A0.anime": {"eu":{"header":[5108984,24],"values":[5506796,390],"indices":[5506544,252]},"jp":{"header":[5221768,24],"values":[5619580,390],"indices":[5619328,252]},"us":{"header":[5230056,24],"values":[5627868,390],"indices":[5627616,252]}}, -"assets/anims/anim_A1.anime": {"eu":{"header":[5507188,24],"values":[5507464,920],"indices":[5507212,252]},"jp":{"header":[5619972,24],"values":[5620248,920],"indices":[5619996,252]},"us":{"header":[5628260,24],"values":[5628536,920],"indices":[5628284,252]}}, -"assets/anims/anim_A2.anime": {"eu":{"header":[5081572,24],"values":[5508660,1448],"indices":[5508408,252]},"jp":{"header":[5194356,24],"values":[5621444,1448],"indices":[5621192,252]},"us":{"header":[5202644,24],"values":[5629732,1448],"indices":[5629480,252]}}, -"assets/anims/anim_A3.anime": {"eu":{"header":[5297208,24],"values":[5510384,2590],"indices":[5510132,252]},"jp":{"header":[5409992,24],"values":[5623168,2590],"indices":[5622916,252]},"us":{"header":[5418280,24],"values":[5631456,2590],"indices":[5631204,252]}}, -"assets/anims/anim_A4.anime": {"eu":{"header":[5111696,24],"values":[5513252,1650],"indices":[5513000,252]},"jp":{"header":[5224480,24],"values":[5626036,1650],"indices":[5625784,252]},"us":{"header":[5232768,24],"values":[5634324,1650],"indices":[5634072,252]}}, -"assets/anims/anim_A5.anime": {"eu":{"header":[5044448,24],"values":[5515180,5148],"indices":[5514928,252]},"jp":{"header":[5157232,24],"values":[5627964,5148],"indices":[5627712,252]},"us":{"header":[5165520,24],"values":[5636252,5148],"indices":[5636000,252]}}, -"assets/anims/anim_A6.anime": {"eu":{"header":[5520328,24],"values":[5520604,4646],"indices":[5520352,252]},"jp":{"header":[5633112,24],"values":[5633388,4646],"indices":[5633136,252]},"us":{"header":[5641400,24],"values":[5641676,4646],"indices":[5641424,252]}}, -"assets/anims/anim_A7.anime": {"eu":{"header":[5453208,24],"values":[5525528,3060],"indices":[5525276,252]},"jp":{"header":[5565992,24],"values":[5638312,3060],"indices":[5638060,252]},"us":{"header":[5574280,24],"values":[5646600,3060],"indices":[5646348,252]}}, -"assets/anims/anim_A8.anime": {"eu":{"header":[5431932,24],"values":[5528864,3910],"indices":[5528612,252]},"jp":{"header":[5544716,24],"values":[5641648,3910],"indices":[5641396,252]},"us":{"header":[5553004,24],"values":[5649936,3910],"indices":[5649684,252]}}, -"assets/anims/anim_A9.anime": {"eu":{"header":[5321444,24],"values":[5533052,1728],"indices":[5532800,252]},"jp":{"header":[5434228,24],"values":[5645836,1728],"indices":[5645584,252]},"us":{"header":[5442516,24],"values":[5654124,1728],"indices":[5653872,252]}}, -"assets/anims/anim_AA.anime": {"eu":{"header":[5370324,24],"values":[5535056,972],"indices":[5534804,252]},"jp":{"header":[5483108,24],"values":[5647840,972],"indices":[5647588,252]},"us":{"header":[5491396,24],"values":[5656128,972],"indices":[5655876,252]}}, -"assets/anims/anim_AB.anime": {"eu":{"header":[5108984,24],"values":[5536304,750],"indices":[5536052,252]},"jp":{"header":[5221768,24],"values":[5649088,750],"indices":[5648836,252]},"us":{"header":[5230056,24],"values":[5657376,750],"indices":[5657124,252]}}, -"assets/anims/anim_AC.anime": {"eu":{"header":[5537056,24],"values":[5537332,1706],"indices":[5537080,252]},"jp":{"header":[5649840,24],"values":[5650116,1706],"indices":[5649864,252]},"us":{"header":[5658128,24],"values":[5658404,1706],"indices":[5658152,252]}}, -"assets/anims/anim_AD.anime": {"eu":{"header":[5294960,24],"values":[5539316,1860],"indices":[5539064,252]},"jp":{"header":[5407744,24],"values":[5652100,1860],"indices":[5651848,252]},"us":{"header":[5416032,24],"values":[5660388,1860],"indices":[5660136,252]}}, -"assets/anims/anim_AE.anime": {"eu":{"header":[5253232,24],"values":[5541452,956],"indices":[5541200,252]},"jp":{"header":[5366016,24],"values":[5654236,956],"indices":[5653984,252]},"us":{"header":[5374304,24],"values":[5662524,956],"indices":[5662272,252]}}, -"assets/anims/anim_AF.anime": {"eu":{"header":[5294960,24],"values":[5542684,2160],"indices":[5542432,252]},"jp":{"header":[5407744,24],"values":[5655468,2160],"indices":[5655216,252]},"us":{"header":[5416032,24],"values":[5663756,2160],"indices":[5663504,252]}}, -"assets/anims/anim_B0.anime": {"eu":{"header":[5368004,24],"values":[5545120,440],"indices":[5544868,252]},"jp":{"header":[5480788,24],"values":[5657904,440],"indices":[5657652,252]},"us":{"header":[5489076,24],"values":[5666192,440],"indices":[5665940,252]}}, -"assets/anims/anim_B1.anime": {"eu":{"header":[5545560,24],"values":[5545836,2418],"indices":[5545584,252]},"jp":{"header":[5658344,24],"values":[5658620,2418],"indices":[5658368,252]},"us":{"header":[5666632,24],"values":[5666908,2418],"indices":[5666656,252]}}, -"assets/anims/anim_B2.anime": {"eu":{"header":[5111696,24],"values":[5548532,1824],"indices":[5548280,252]},"jp":{"header":[5224480,24],"values":[5661316,1824],"indices":[5661064,252]},"us":{"header":[5232768,24],"values":[5669604,1824],"indices":[5669352,252]}}, -"assets/anims/anim_B3.anime": {"eu":{"header":[5550356,24],"values":[5550632,6494],"indices":[5550380,252]},"jp":{"header":[5663140,24],"values":[5663416,6494],"indices":[5663164,252]},"us":{"header":[5671428,24],"values":[5671704,6494],"indices":[5671452,252]}}, -"assets/anims/anim_B4.anime": {"eu":{"header":[5377812,24],"values":[5557404,1846],"indices":[5557152,252]},"jp":{"header":[5490596,24],"values":[5670188,1846],"indices":[5669936,252]},"us":{"header":[5498884,24],"values":[5678476,1846],"indices":[5678224,252]}}, -"assets/anims/anim_B5.anime": {"eu":{"header":[5321444,24],"values":[5559552,1382],"indices":[5559300,252]},"jp":{"header":[5434228,24],"values":[5672336,1382],"indices":[5672084,252]},"us":{"header":[5442516,24],"values":[5680624,1382],"indices":[5680372,252]}}, -"assets/anims/anim_B6.anime": {"eu":{"header":[5559276,24],"values":[5559552,1382],"indices":[5559300,252]},"jp":{"header":[5672060,24],"values":[5672336,1382],"indices":[5672084,252]},"us":{"header":[5680348,24],"values":[5680624,1382],"indices":[5680372,252]}}, -"assets/anims/anim_B7.anime": {"eu":{"header":[5453208,24],"values":[5561212,2980],"indices":[5560960,252]},"jp":{"header":[5565992,24],"values":[5673996,2980],"indices":[5673744,252]},"us":{"header":[5574280,24],"values":[5682284,2980],"indices":[5682032,252]}}, -"assets/anims/anim_B8.anime": {"eu":{"header":[5217532,24],"values":[5564468,776],"indices":[5564216,252]},"jp":{"header":[5330316,24],"values":[5677252,776],"indices":[5677000,252]},"us":{"header":[5338604,24],"values":[5685540,776],"indices":[5685288,252]}}, -"assets/anims/anim_B9.anime": {"eu":{"header":[5294960,24],"values":[5565520,2068],"indices":[5565268,252]},"jp":{"header":[5407744,24],"values":[5678304,2068],"indices":[5678052,252]},"us":{"header":[5416032,24],"values":[5686592,2068],"indices":[5686340,252]}}, -"assets/anims/anim_BA.anime": {"eu":{"header":[5312204,24],"values":[5567864,986],"indices":[5567612,252]},"jp":{"header":[5424988,24],"values":[5680648,986],"indices":[5680396,252]},"us":{"header":[5433276,24],"values":[5688936,986],"indices":[5688684,252]}}, -"assets/anims/anim_BB.anime": {"eu":{"header":[5568852,24],"values":[5569128,4132],"indices":[5568876,252]},"jp":{"header":[5681636,24],"values":[5681912,4132],"indices":[5681660,252]},"us":{"header":[5689924,24],"values":[5690200,4132],"indices":[5689948,252]}}, -"assets/anims/anim_BC.anime": {"eu":{"header":[5044472,24],"values":[5573560,1528],"indices":[5573308,252]},"jp":{"header":[5157256,24],"values":[5686344,1528],"indices":[5686092,252]},"us":{"header":[5165544,24],"values":[5694632,1528],"indices":[5694380,252]}}, -"assets/anims/anim_BD.anime": {"eu":{"header":[5076744,24],"values":[5573560,1528],"indices":[5573308,252]},"jp":{"header":[5189528,24],"values":[5686344,1528],"indices":[5686092,252]},"us":{"header":[5197816,24],"values":[5694632,1528],"indices":[5694380,252]}}, -"assets/anims/anim_BE.anime": {"eu":{"header":[5108984,24],"values":[5575364,760],"indices":[5575112,252]},"jp":{"header":[5221768,24],"values":[5688148,760],"indices":[5687896,252]},"us":{"header":[5230056,24],"values":[5696436,760],"indices":[5696184,252]}}, -"assets/anims/anim_BF.anime": {"eu":{"header":[5377812,24],"values":[5576400,1936],"indices":[5576148,252]},"jp":{"header":[5490596,24],"values":[5689184,1936],"indices":[5688932,252]},"us":{"header":[5498884,24],"values":[5697472,1936],"indices":[5697220,252]}}, -"assets/anims/anim_C0.anime": {"eu":{"header":[5578336,24],"values":[5578612,2452],"indices":[5578360,252]},"jp":{"header":[5691120,24],"values":[5691396,2452],"indices":[5691144,252]},"us":{"header":[5699408,24],"values":[5699684,2452],"indices":[5699432,252]}}, -"assets/anims/anim_C1.anime": {"eu":{"header":[5070848,24],"values":[5581340,2468],"indices":[5581088,252]},"jp":{"header":[5183632,24],"values":[5694124,2468],"indices":[5693872,252]},"us":{"header":[5191920,24],"values":[5702412,2468],"indices":[5702160,252]}}, -"assets/anims/anim_C2.anime": {"eu":{"header":[5058512,24],"values":[5584084,5422],"indices":[5583832,252]},"jp":{"header":[5171296,24],"values":[5696868,5422],"indices":[5696616,252]},"us":{"header":[5179584,24],"values":[5705156,5422],"indices":[5704904,252]}}, -"assets/anims/anim_C3.anime": {"eu":{"header":[5297208,24],"values":[5589784,1942],"indices":[5589532,252]},"jp":{"header":[5409992,24],"values":[5702568,1942],"indices":[5702316,252]},"us":{"header":[5418280,24],"values":[5710856,1942],"indices":[5710604,252]}}, -"assets/anims/anim_C4.anime": {"eu":{"header":[5297208,24],"values":[5592004,1942],"indices":[5589532,252]},"jp":{"header":[5409992,24],"values":[5704788,1942],"indices":[5702316,252]},"us":{"header":[5418280,24],"values":[5713076,1942],"indices":[5710604,252]}}, -"assets/anims/anim_C5.anime": {"eu":{"header":[5297208,24],"values":[5594224,1942],"indices":[5589532,252]},"jp":{"header":[5409992,24],"values":[5707008,1942],"indices":[5702316,252]},"us":{"header":[5418280,24],"values":[5715296,1942],"indices":[5710604,252]}}, -"assets/anims/anim_C6.anime": {"eu":{"header":[5217532,24],"values":[5596444,1666],"indices":[5596192,252]},"jp":{"header":[5330316,24],"values":[5709228,1666],"indices":[5708976,252]},"us":{"header":[5338604,24],"values":[5717516,1666],"indices":[5717264,252]}}, -"assets/anims/anim_C7.anime": {"eu":{"header":[5217532,24],"values":[5598388,2844],"indices":[5598136,252]},"jp":{"header":[5330316,24],"values":[5711172,2844],"indices":[5710920,252]},"us":{"header":[5338604,24],"values":[5719460,2844],"indices":[5719208,252]}}, -"assets/anims/anim_C8.anime": {"eu":{"header":[5601232,24],"values":[5601508,1648],"indices":[5601256,252]},"jp":{"header":[5714016,24],"values":[5714292,1648],"indices":[5714040,252]},"us":{"header":[5722304,24],"values":[5722580,1648],"indices":[5722328,252]}}, -"assets/anims/anim_C9.anime": {"eu":{"header":[5113504,24],"values":[5603432,1940],"indices":[5603180,252]},"jp":{"header":[5226288,24],"values":[5716216,1940],"indices":[5715964,252]},"us":{"header":[5234576,24],"values":[5724504,1940],"indices":[5724252,252]}}, -"assets/anims/anim_CA.anime": {"eu":{"header":[5605372,24],"values":[5605648,1998],"indices":[5605396,252]},"jp":{"header":[5718156,24],"values":[5718432,1998],"indices":[5718180,252]},"us":{"header":[5726444,24],"values":[5726720,1998],"indices":[5726468,252]}}, -"assets/anims/anim_CB.anime": {"eu":{"header":[5104424,24],"values":[5607948,1382],"indices":[5607696,252]},"jp":{"header":[5217208,24],"values":[5720732,1382],"indices":[5720480,252]},"us":{"header":[5225496,24],"values":[5729020,1382],"indices":[5728768,252]}}, -"assets/anims/anim_CC.anime": {"eu":{"header":[5044472,24],"values":[5607948,1382],"indices":[5607696,252]},"jp":{"header":[5157256,24],"values":[5720732,1382],"indices":[5720480,252]},"us":{"header":[5165544,24],"values":[5729020,1382],"indices":[5728768,252]}}, -"assets/anims/anim_CD.anime": {"eu":{"header":[5609332,24],"values":[5609608,5184],"indices":[5609356,252]},"jp":{"header":[5722116,24],"values":[5722392,5184],"indices":[5722140,252]},"us":{"header":[5730404,24],"values":[5730680,5184],"indices":[5730428,252]}}, -"assets/anims/anim_CE.anime": {"eu":{"header":[5079976,24],"values":[5615068,1460],"indices":[5614816,252]},"jp":{"header":[5192760,24],"values":[5727852,1460],"indices":[5727600,252]},"us":{"header":[5201048,24],"values":[5736140,1460],"indices":[5735888,252]}}, -"assets/anims/anim_CF.anime": {"eu":{"header":[5616528,24],"values":[5616804,2708],"indices":[5616552,252]},"jp":{"header":[5729312,24],"values":[5729588,2708],"indices":[5729336,252]},"us":{"header":[5737600,24],"values":[5737876,2708],"indices":[5737624,252]}}, -"assets/anims/anim_D0.anime": {"eu":{"header":[5292524,24],"values":[5619788,730],"indices":[5619536,252]},"jp":{"header":[5405308,24],"values":[5732572,730],"indices":[5732320,252]},"us":{"header":[5413596,24],"values":[5740860,730],"indices":[5740608,252]}} -} diff --git a/tools/gen_anim_offsets.py b/tools/gen_anim_offsets.py deleted file mode 100755 index d64396e..0000000 --- a/tools/gen_anim_offsets.py +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env python3 -import os - -# This script generates the offsets for the animation files. - -OFFSET = 0x4EC690 -HEADER_SIZE = 0x18 -ANIMS_SIZE = 3 - -# struct Animation { -# /*0x00*/ s16 flags; -# /*0x02*/ s16 animYTransDivisor; -# /*0x04*/ s16 startFrame; -# /*0x06*/ s16 loopStart; -# /*0x08*/ s16 loopEnd; -# /*0x0A*/ s16 unusedBoneCount; -# /*0x0C*/ const s16 *values; -# /*0x10*/ const u16 *index; -# /*0x14*/ u32 length; // only used with Mario animations to determine how much to load. 0 otherwise. -# }; - -# ./anim_01_02.inc.c./anim_07_08.inc.c./anim_0B_0C.inc.c./anim_0F_10.inc.c./anim_2C_2D.inc.c./anim_3C_3D.inc.c./anim_45_46.inc.c./anim_4D_4E.inc.c./anim_56_57.inc.c./anim_6F_70.inc.c./anim_72_73.inc.c./anim_88_89.inc.c./anim_8E_8F.inc.c./anim_B5_B6.inc.c./anim_BC_BD.inc.c./anim_CB_CC.inc.c% - -multi = [0x01, 0x07, 0x0B, 0x0F, 0x2C, 0x3C, 0x45, 0x4D, 0x56, 0x6F, 0x72, 0x88, 0x8E, 0xB5, 0xBC, 0xCB] - -if __name__ == "__main__": - with open("baserom.us.z64", "rb") as f: - f.seek(OFFSET) - for i in range(ANIMS_SIZE): - for j in range(2 if i in multi else 1): - flags = int.from_bytes(f.read(2), byteorder="big") - animYTransDivisor = int.from_bytes(f.read(2), byteorder="big") - startFrame = int.from_bytes(f.read(2), byteorder="big") - loopStart = int.from_bytes(f.read(2), byteorder="big") - loopEnd = int.from_bytes(f.read(2), byteorder="big") - unusedBoneCount = int.from_bytes(f.read(2), byteorder="big") - values = int.from_bytes(f.read(4), byteorder="little") - index = int.from_bytes(f.read(4), byteorder="little") - length = int.from_bytes(f.read(2), byteorder="big") - print(f"0x{OFFSET + i * HEADER_SIZE:08X}") - print(f" flags: {flags}") - print(f" animYTransDivisor: {animYTransDivisor}") - print(f" startFrame: {startFrame}") - print(f" loopStart: {loopStart}") - print(f" loopEnd: {loopEnd}") - print(f" unusedBoneCount: {unusedBoneCount}") - print(f" values: 0x{values:08X}") - print(f" index: 0x{index:08X}") - print(f" length: {length}") - f.seek(HEADER_SIZE, os.SEEK_CUR) - f.seek(0x18, os.SEEK_CUR) \ No newline at end of file diff --git a/tools/gen_banks.js b/tools/gen_banks.js deleted file mode 100644 index 6e1da48..0000000 --- a/tools/gen_banks.js +++ /dev/null @@ -1,37 +0,0 @@ -const fs = require('fs'); -const data = require('../assets.json'); - -const header = [ - '#pragma once', - '#include "align_asset_macro.h"', - '', -] -const banks = [] - -async function main(){ - const files = Object.keys(data).filter(f => f.endsWith(".bnk") && data[f]['us'] != undefined).map(m => { - return { - file: m, - offset: data[m]['us'][0] - } - }) - - files.sort((a, b) => a.offset - b.offset); - - for(const entry of files){ - const sampleId = entry.offset.toString(16).padStart(2, '0').toUpperCase(); - banks.push(`gBank${sampleId}`); - header.push(`#define dgBank${sampleId} "__OTR__${entry.file.replace('.bnk', '')}"`); - header.push(`static const ALIGN_ASSET(2) char gBank${sampleId}[] = dgBank${sampleId};\n`); - } - - header.push('static const char* gBankTable[] = {'); - for (const bank of banks) { - header.push(` ${bank},`); - } - header.push('};\n'); - - fs.writeFileSync('./banks_table.h', header.join('\n')); -} - -main(); \ No newline at end of file diff --git a/tools/gen_bankset.js b/tools/gen_bankset.js deleted file mode 100644 index 4b07141..0000000 --- a/tools/gen_bankset.js +++ /dev/null @@ -1,23 +0,0 @@ -const fs = require('fs'); -const data = require('../sequences.json'); - -const header = [ - '#pragma once', - '', -] -const bankset = [] - -async function main(){ - // header.push('static const uint8_t gBankIdxMap[][16] = {'); - let idx = 0; - for(const values of Object.values(data)){ - const indices = values.map(v => `${parseInt(v.split('_')[0], 16)}`); - // header.push(` // Bank: ${Object.keys(data)[idx++]}`); - header.push(`[${indices.join(', ')}],`); - } - // header.push('};\n'); - - fs.writeFileSync('./bankset_table.h', header.join('\n')); -} - -main(); \ No newline at end of file diff --git a/tools/gen_samples.js b/tools/gen_samples.js deleted file mode 100644 index 3563015..0000000 --- a/tools/gen_samples.js +++ /dev/null @@ -1,37 +0,0 @@ -const fs = require('fs'); -const data = require('./assets.json'); - -const header = [ - '#pragma once', - '#include "align_asset_macro.h"', - '', -] -const samples = [] - -async function main(){ - const files = Object.keys(data).filter(f => f.endsWith(".aiff") && data[f][1]['jp'] != undefined).map(m => { - return { - file: m, - offset: data[m][1]['jp'][1] - } - }) - - files.sort((a, b) => a.offset - b.offset); - - for(const entry of files){ - const sampleId = entry.offset.toString(16).padStart(2, '0').toUpperCase(); - samples.push(`gSample${sampleId}`); - header.push(`#define dgSample${sampleId} "__OTR__${entry.file.replace('.aiff', '')}"`); - header.push(`static const ALIGN_ASSET(2) char gSample${sampleId}[] = dgSample${sampleId};\n`); - } - - header.push('static const char* gSampleTable[] = {'); - for (const sample of samples) { - header.push(` ${sample},`); - } - header.push('};\n'); - - fs.writeFileSync('./samples_table.h', header.join('\n')); -} - -main(); \ No newline at end of file diff --git a/tools/m64test.js b/tools/m64test.js deleted file mode 100644 index 0e4a6f3..0000000 --- a/tools/m64test.js +++ /dev/null @@ -1,32 +0,0 @@ -const fs = require('fs'); - -const bytes = fs.readFileSync('./baserom.us.z64'); -const bpath = '../sound/sequences/us/' -const header = [ - '#pragma once', - '#include "align_asset_macro.h"', - '', -] -const sequences = [] - -fs.readdirSync(bpath).forEach(seq => { - const seqData = fs.readFileSync(bpath+seq); - const seqOffset = bytes.indexOf(seqData); - const output = `sound/sequences/${seq}` - const seqId = seq.split("_")[0] - console.log(`"${output}": ${JSON.stringify([ - seqData.length, - { "us": [ seqOffset ]} - ])},`); - sequences.push(`gSequence${seqId}`); - header.push(`#define dgSequence${seqId} "__OTR__${output}"`); - header.push(`static const ALIGN_ASSET(2) char gSequence${seqId}[] = dgSequence${seqId};\n`); -}); - -header.push('static const char* gSequenceTable[] = {'); -for (const seq of sequences.sort((a, b) => b.localeCompare(a))) { - header.push(` ${seq},`); -} -header.push('};\n'); - -fs.writeFileSync('./sequences_table.h', header.join('\n')); \ No newline at end of file diff --git a/tools/merge_assets.js b/tools/merge_assets.js deleted file mode 100644 index b54397e..0000000 --- a/tools/merge_assets.js +++ /dev/null @@ -1,37 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const assets = require('../assets.json'); -const files = {} - -async function main(){ - const m64s = Object.keys(assets).filter(f => f.endsWith('.m64')); - for(let entry of m64s){ - if(entry.includes('sh')) continue; - const size = assets[entry][0]; - const parent = assets[entry][1]; - const keys = Object.keys(parent); - const offset = parent[keys[0]][0]; - const key = `sound/sequences/${path.basename(entry)}` - if(!files[key]){ - files[key] = { - eu: {}, - us: {}, - jp: {}, - banks: [] - } - } - const output = { - offset: [offset, size] - } - - if(keys.length > 1){ - files[key][keys[1]] = parent[keys[1]]; - } - files[key][keys[0]] = output; - } - for(let entry of Object.keys(files)){ - console.log(`"${entry}": ${JSON.stringify(files[entry])},`); - } -} - -main(); \ No newline at end of file diff --git a/tools/offset_find.js b/tools/offset_find.js deleted file mode 100644 index 3cd7a3a..0000000 --- a/tools/offset_find.js +++ /dev/null @@ -1,9 +0,0 @@ -const fs = require('fs'); - -const bytes = fs.readFileSync('./baserom.jp.z64'); -const file = Buffer.from([0x8B,0xD5,0x71,0x98,0x55,0xF0,0x82,0x9F,0x7F,0xF0,0x45,0x40,0x67,0x5E,0x4D,0x6D,0xFF]); - -const offset = bytes.indexOf(file); -const size = file.length; - -console.log(offset, size) \ No newline at end of file diff --git a/tools/samples_table.h b/tools/samples_table.h deleted file mode 100644 index 5f1a3ae..0000000 --- a/tools/samples_table.h +++ /dev/null @@ -1,717 +0,0 @@ -#pragma once -#include "align_asset_macro.h" - -#define dgSample00 "__OTR__sound/samples/sfx_1/00_twirl" -static const ALIGN_ASSET(2) char gSample00[] = dgSample00; - -#define dgSample01 "__OTR__sound/samples/sfx_1/01_brushing" -static const ALIGN_ASSET(2) char gSample01[] = dgSample01; - -#define dgSample02 "__OTR__sound/samples/sfx_1/02_hand_touch" -static const ALIGN_ASSET(2) char gSample02[] = dgSample02; - -#define dgSample03 "__OTR__sound/samples/sfx_1/03_yoshi" -static const ALIGN_ASSET(2) char gSample03[] = dgSample03; - -#define dgSample04 "__OTR__sound/samples/sfx_1/04_plop" -static const ALIGN_ASSET(2) char gSample04[] = dgSample04; - -#define dgSample05 "__OTR__sound/samples/sfx_1/05_heavy_landing" -static const ALIGN_ASSET(2) char gSample05[] = dgSample05; - -#define dgSample06 "__OTR__sound/samples/sfx_terrain/00_step_default" -static const ALIGN_ASSET(2) char gSample06[] = dgSample06; - -#define dgSample07 "__OTR__sound/samples/sfx_terrain/01_step_grass" -static const ALIGN_ASSET(2) char gSample07[] = dgSample07; - -#define dgSample08 "__OTR__sound/samples/sfx_terrain/02_step_stone" -static const ALIGN_ASSET(2) char gSample08[] = dgSample08; - -#define dgSample09 "__OTR__sound/samples/sfx_terrain/03_step_spooky" -static const ALIGN_ASSET(2) char gSample09[] = dgSample09; - -#define dgSample0A "__OTR__sound/samples/sfx_terrain/04_step_snow" -static const ALIGN_ASSET(2) char gSample0A[] = dgSample0A; - -#define dgSample0B "__OTR__sound/samples/sfx_terrain/05_step_ice" -static const ALIGN_ASSET(2) char gSample0B[] = dgSample0B; - -#define dgSample0C "__OTR__sound/samples/sfx_terrain/06_step_metal" -static const ALIGN_ASSET(2) char gSample0C[] = dgSample0C; - -#define dgSample0D "__OTR__sound/samples/sfx_terrain/07_step_sand" -static const ALIGN_ASSET(2) char gSample0D[] = dgSample0D; - -#define dgSample0E "__OTR__sound/samples/sfx_water/00_plunge" -static const ALIGN_ASSET(2) char gSample0E[] = dgSample0E; - -#define dgSample0F "__OTR__sound/samples/sfx_water/01_splash" -static const ALIGN_ASSET(2) char gSample0F[] = dgSample0F; - -#define dgSample10 "__OTR__sound/samples/sfx_water/02_swim" -static const ALIGN_ASSET(2) char gSample10[] = dgSample10; - -#define dgSample11 "__OTR__sound/samples/sfx_4/00" -static const ALIGN_ASSET(2) char gSample11[] = dgSample11; - -#define dgSample12 "__OTR__sound/samples/sfx_4/01" -static const ALIGN_ASSET(2) char gSample12[] = dgSample12; - -#define dgSample13 "__OTR__sound/samples/sfx_4/02" -static const ALIGN_ASSET(2) char gSample13[] = dgSample13; - -#define dgSample14 "__OTR__sound/samples/sfx_4/03" -static const ALIGN_ASSET(2) char gSample14[] = dgSample14; - -#define dgSample15 "__OTR__sound/samples/sfx_4/04" -static const ALIGN_ASSET(2) char gSample15[] = dgSample15; - -#define dgSample16 "__OTR__sound/samples/sfx_4/05" -static const ALIGN_ASSET(2) char gSample16[] = dgSample16; - -#define dgSample17 "__OTR__sound/samples/sfx_4/06" -static const ALIGN_ASSET(2) char gSample17[] = dgSample17; - -#define dgSample18 "__OTR__sound/samples/sfx_4/07" -static const ALIGN_ASSET(2) char gSample18[] = dgSample18; - -#define dgSample19 "__OTR__sound/samples/sfx_4/08" -static const ALIGN_ASSET(2) char gSample19[] = dgSample19; - -#define dgSample1A "__OTR__sound/samples/sfx_4/09" -static const ALIGN_ASSET(2) char gSample1A[] = dgSample1A; - -#define dgSample1B "__OTR__sound/samples/sfx_5/00" -static const ALIGN_ASSET(2) char gSample1B[] = dgSample1B; - -#define dgSample1C "__OTR__sound/samples/sfx_5/01" -static const ALIGN_ASSET(2) char gSample1C[] = dgSample1C; - -#define dgSample1D "__OTR__sound/samples/sfx_5/02" -static const ALIGN_ASSET(2) char gSample1D[] = dgSample1D; - -#define dgSample1E "__OTR__sound/samples/sfx_5/03" -static const ALIGN_ASSET(2) char gSample1E[] = dgSample1E; - -#define dgSample1F "__OTR__sound/samples/sfx_5/04" -static const ALIGN_ASSET(2) char gSample1F[] = dgSample1F; - -#define dgSample20 "__OTR__sound/samples/sfx_5/05" -static const ALIGN_ASSET(2) char gSample20[] = dgSample20; - -#define dgSample21 "__OTR__sound/samples/sfx_5/06" -static const ALIGN_ASSET(2) char gSample21[] = dgSample21; - -#define dgSample22 "__OTR__sound/samples/sfx_5/07" -static const ALIGN_ASSET(2) char gSample22[] = dgSample22; - -#define dgSample23 "__OTR__sound/samples/sfx_5/08" -static const ALIGN_ASSET(2) char gSample23[] = dgSample23; - -#define dgSample24 "__OTR__sound/samples/sfx_5/09" -static const ALIGN_ASSET(2) char gSample24[] = dgSample24; - -#define dgSample25 "__OTR__sound/samples/sfx_5/0A" -static const ALIGN_ASSET(2) char gSample25[] = dgSample25; - -#define dgSample26 "__OTR__sound/samples/sfx_5/0B" -static const ALIGN_ASSET(2) char gSample26[] = dgSample26; - -#define dgSample27 "__OTR__sound/samples/sfx_5/0C" -static const ALIGN_ASSET(2) char gSample27[] = dgSample27; - -#define dgSample28 "__OTR__sound/samples/sfx_5/0D" -static const ALIGN_ASSET(2) char gSample28[] = dgSample28; - -#define dgSample29 "__OTR__sound/samples/sfx_5/0E" -static const ALIGN_ASSET(2) char gSample29[] = dgSample29; - -#define dgSample2A "__OTR__sound/samples/sfx_5/0F" -static const ALIGN_ASSET(2) char gSample2A[] = dgSample2A; - -#define dgSample2B "__OTR__sound/samples/sfx_5/10" -static const ALIGN_ASSET(2) char gSample2B[] = dgSample2B; - -#define dgSample2C "__OTR__sound/samples/sfx_5/11" -static const ALIGN_ASSET(2) char gSample2C[] = dgSample2C; - -#define dgSample2D "__OTR__sound/samples/sfx_5/12" -static const ALIGN_ASSET(2) char gSample2D[] = dgSample2D; - -#define dgSample2E "__OTR__sound/samples/sfx_5/13" -static const ALIGN_ASSET(2) char gSample2E[] = dgSample2E; - -#define dgSample2F "__OTR__sound/samples/sfx_5/14" -static const ALIGN_ASSET(2) char gSample2F[] = dgSample2F; - -#define dgSample30 "__OTR__sound/samples/sfx_5/15" -static const ALIGN_ASSET(2) char gSample30[] = dgSample30; - -#define dgSample31 "__OTR__sound/samples/sfx_5/16" -static const ALIGN_ASSET(2) char gSample31[] = dgSample31; - -#define dgSample32 "__OTR__sound/samples/sfx_5/17" -static const ALIGN_ASSET(2) char gSample32[] = dgSample32; - -#define dgSample33 "__OTR__sound/samples/sfx_5/18" -static const ALIGN_ASSET(2) char gSample33[] = dgSample33; - -#define dgSample34 "__OTR__sound/samples/sfx_5/19" -static const ALIGN_ASSET(2) char gSample34[] = dgSample34; - -#define dgSample35 "__OTR__sound/samples/sfx_5/1A" -static const ALIGN_ASSET(2) char gSample35[] = dgSample35; - -#define dgSample36 "__OTR__sound/samples/sfx_5/1B" -static const ALIGN_ASSET(2) char gSample36[] = dgSample36; - -#define dgSample37 "__OTR__sound/samples/sfx_5/1C" -static const ALIGN_ASSET(2) char gSample37[] = dgSample37; - -#define dgSample38 "__OTR__sound/samples/sfx_6/00" -static const ALIGN_ASSET(2) char gSample38[] = dgSample38; - -#define dgSample39 "__OTR__sound/samples/sfx_6/01" -static const ALIGN_ASSET(2) char gSample39[] = dgSample39; - -#define dgSample3A "__OTR__sound/samples/sfx_6/02" -static const ALIGN_ASSET(2) char gSample3A[] = dgSample3A; - -#define dgSample3B "__OTR__sound/samples/sfx_6/03" -static const ALIGN_ASSET(2) char gSample3B[] = dgSample3B; - -#define dgSample3C "__OTR__sound/samples/sfx_6/04" -static const ALIGN_ASSET(2) char gSample3C[] = dgSample3C; - -#define dgSample3D "__OTR__sound/samples/sfx_6/05" -static const ALIGN_ASSET(2) char gSample3D[] = dgSample3D; - -#define dgSample3E "__OTR__sound/samples/sfx_6/06" -static const ALIGN_ASSET(2) char gSample3E[] = dgSample3E; - -#define dgSample3F "__OTR__sound/samples/sfx_6/07" -static const ALIGN_ASSET(2) char gSample3F[] = dgSample3F; - -#define dgSample40 "__OTR__sound/samples/sfx_6/08" -static const ALIGN_ASSET(2) char gSample40[] = dgSample40; - -#define dgSample41 "__OTR__sound/samples/sfx_6/09" -static const ALIGN_ASSET(2) char gSample41[] = dgSample41; - -#define dgSample42 "__OTR__sound/samples/sfx_6/0A" -static const ALIGN_ASSET(2) char gSample42[] = dgSample42; - -#define dgSample43 "__OTR__sound/samples/sfx_6/0B" -static const ALIGN_ASSET(2) char gSample43[] = dgSample43; - -#define dgSample44 "__OTR__sound/samples/sfx_6/0C" -static const ALIGN_ASSET(2) char gSample44[] = dgSample44; - -#define dgSample45 "__OTR__sound/samples/sfx_6/0D" -static const ALIGN_ASSET(2) char gSample45[] = dgSample45; - -#define dgSample46 "__OTR__sound/samples/sfx_7/00" -static const ALIGN_ASSET(2) char gSample46[] = dgSample46; - -#define dgSample47 "__OTR__sound/samples/sfx_7/01" -static const ALIGN_ASSET(2) char gSample47[] = dgSample47; - -#define dgSample48 "__OTR__sound/samples/sfx_7/02" -static const ALIGN_ASSET(2) char gSample48[] = dgSample48; - -#define dgSample49 "__OTR__sound/samples/sfx_7/03" -static const ALIGN_ASSET(2) char gSample49[] = dgSample49; - -#define dgSample4A "__OTR__sound/samples/sfx_7/04" -static const ALIGN_ASSET(2) char gSample4A[] = dgSample4A; - -#define dgSample4B "__OTR__sound/samples/sfx_7/05" -static const ALIGN_ASSET(2) char gSample4B[] = dgSample4B; - -#define dgSample4C "__OTR__sound/samples/sfx_7/06" -static const ALIGN_ASSET(2) char gSample4C[] = dgSample4C; - -#define dgSample4D "__OTR__sound/samples/sfx_7/07" -static const ALIGN_ASSET(2) char gSample4D[] = dgSample4D; - -#define dgSample4E "__OTR__sound/samples/sfx_7/08" -static const ALIGN_ASSET(2) char gSample4E[] = dgSample4E; - -#define dgSample4F "__OTR__sound/samples/sfx_7/09" -static const ALIGN_ASSET(2) char gSample4F[] = dgSample4F; - -#define dgSample50 "__OTR__sound/samples/sfx_7/0A" -static const ALIGN_ASSET(2) char gSample50[] = dgSample50; - -#define dgSample51 "__OTR__sound/samples/sfx_7/0B" -static const ALIGN_ASSET(2) char gSample51[] = dgSample51; - -#define dgSample52 "__OTR__sound/samples/sfx_7/0C" -static const ALIGN_ASSET(2) char gSample52[] = dgSample52; - -#define dgSample53 "__OTR__sound/samples/sfx_7/0D_chain_chomp_bark" -static const ALIGN_ASSET(2) char gSample53[] = dgSample53; - -#define dgSample54 "__OTR__sound/samples/sfx_mario/00_mario_jump_hoo" -static const ALIGN_ASSET(2) char gSample54[] = dgSample54; - -#define dgSample55 "__OTR__sound/samples/sfx_mario/01_mario_jump_wah" -static const ALIGN_ASSET(2) char gSample55[] = dgSample55; - -#define dgSample56 "__OTR__sound/samples/sfx_mario/02_mario_yah" -static const ALIGN_ASSET(2) char gSample56[] = dgSample56; - -#define dgSample57 "__OTR__sound/samples/sfx_mario/03_mario_haha" -static const ALIGN_ASSET(2) char gSample57[] = dgSample57; - -#define dgSample58 "__OTR__sound/samples/sfx_mario/04_mario_yahoo" -static const ALIGN_ASSET(2) char gSample58[] = dgSample58; - -#define dgSample59 "__OTR__sound/samples/sfx_mario/05_mario_uh" -static const ALIGN_ASSET(2) char gSample59[] = dgSample59; - -#define dgSample5A "__OTR__sound/samples/sfx_mario/06_mario_hrmm" -static const ALIGN_ASSET(2) char gSample5A[] = dgSample5A; - -#define dgSample5B "__OTR__sound/samples/sfx_mario/07_mario_wah2" -static const ALIGN_ASSET(2) char gSample5B[] = dgSample5B; - -#define dgSample5C "__OTR__sound/samples/sfx_mario/08_mario_whoa" -static const ALIGN_ASSET(2) char gSample5C[] = dgSample5C; - -#define dgSample5D "__OTR__sound/samples/sfx_mario/09_mario_eeuh" -static const ALIGN_ASSET(2) char gSample5D[] = dgSample5D; - -#define dgSample5E "__OTR__sound/samples/sfx_mario/0A_mario_attacked" -static const ALIGN_ASSET(2) char gSample5E[] = dgSample5E; - -#define dgSample5F "__OTR__sound/samples/sfx_mario/0B_mario_ooof" -static const ALIGN_ASSET(2) char gSample5F[] = dgSample5F; - -#define dgSample60 "__OTR__sound/samples/sfx_mario/0C_mario_here_we_go" -static const ALIGN_ASSET(2) char gSample60[] = dgSample60; - -#define dgSample61 "__OTR__sound/samples/sfx_mario/0D_mario_yawning" -static const ALIGN_ASSET(2) char gSample61[] = dgSample61; - -#define dgSample62 "__OTR__sound/samples/sfx_mario/0E_mario_snoring1" -static const ALIGN_ASSET(2) char gSample62[] = dgSample62; - -#define dgSample63 "__OTR__sound/samples/sfx_mario/0F_mario_snoring2" -static const ALIGN_ASSET(2) char gSample63[] = dgSample63; - -#define dgSample64 "__OTR__sound/samples/sfx_mario/10_mario_doh" -static const ALIGN_ASSET(2) char gSample64[] = dgSample64; - -#define dgSample65 "__OTR__sound/samples/sfx_mario/11_mario_game_over" -static const ALIGN_ASSET(2) char gSample65[] = dgSample65; - -#define dgSample66 "__OTR__sound/samples/sfx_mario/12_mario_hello" -static const ALIGN_ASSET(2) char gSample66[] = dgSample66; - -#define dgSample67 "__OTR__sound/samples/sfx_mario/13_mario_press_start_to_play" -static const ALIGN_ASSET(2) char gSample67[] = dgSample67; - -#define dgSample68 "__OTR__sound/samples/sfx_mario/14_mario_twirl_bounce" -static const ALIGN_ASSET(2) char gSample68[] = dgSample68; - -#define dgSample69 "__OTR__sound/samples/sfx_mario/15_mario_snoring3" -static const ALIGN_ASSET(2) char gSample69[] = dgSample69; - -#define dgSample6A "__OTR__sound/samples/sfx_mario/16_mario_so_longa_bowser" -static const ALIGN_ASSET(2) char gSample6A[] = dgSample6A; - -#define dgSample6B "__OTR__sound/samples/sfx_mario/17_mario_ima_tired" -static const ALIGN_ASSET(2) char gSample6B[] = dgSample6B; - -#define dgSample6C "__OTR__sound/samples/sfx_mario/18_mario_waha" -static const ALIGN_ASSET(2) char gSample6C[] = dgSample6C; - -#define dgSample6D "__OTR__sound/samples/sfx_mario/19_mario_yippee" -static const ALIGN_ASSET(2) char gSample6D[] = dgSample6D; - -#define dgSample6E "__OTR__sound/samples/sfx_mario/1A_mario_lets_a_go" -static const ALIGN_ASSET(2) char gSample6E[] = dgSample6E; - -#define dgSample6F "__OTR__sound/samples/sfx_9/00" -static const ALIGN_ASSET(2) char gSample6F[] = dgSample6F; - -#define dgSample70 "__OTR__sound/samples/sfx_9/01" -static const ALIGN_ASSET(2) char gSample70[] = dgSample70; - -#define dgSample71 "__OTR__sound/samples/sfx_9/02" -static const ALIGN_ASSET(2) char gSample71[] = dgSample71; - -#define dgSample72 "__OTR__sound/samples/sfx_9/03" -static const ALIGN_ASSET(2) char gSample72[] = dgSample72; - -#define dgSample73 "__OTR__sound/samples/sfx_9/04_camera_buzz" -static const ALIGN_ASSET(2) char gSample73[] = dgSample73; - -#define dgSample74 "__OTR__sound/samples/sfx_9/05_camera_shutter" -static const ALIGN_ASSET(2) char gSample74[] = dgSample74; - -#define dgSample75 "__OTR__sound/samples/sfx_9/06" -static const ALIGN_ASSET(2) char gSample75[] = dgSample75; - -#define dgSample76 "__OTR__sound/samples/sfx_mario_peach/00_mario_waaaooow" -static const ALIGN_ASSET(2) char gSample76[] = dgSample76; - -#define dgSample77 "__OTR__sound/samples/sfx_mario_peach/01_mario_hoohoo" -static const ALIGN_ASSET(2) char gSample77[] = dgSample77; - -#define dgSample78 "__OTR__sound/samples/sfx_mario_peach/02_mario_panting" -static const ALIGN_ASSET(2) char gSample78[] = dgSample78; - -#define dgSample79 "__OTR__sound/samples/sfx_mario_peach/03_mario_dying" -static const ALIGN_ASSET(2) char gSample79[] = dgSample79; - -#define dgSample7A "__OTR__sound/samples/sfx_mario_peach/04_mario_on_fire" -static const ALIGN_ASSET(2) char gSample7A[] = dgSample7A; - -#define dgSample7B "__OTR__sound/samples/sfx_mario_peach/05_mario_uh2" -static const ALIGN_ASSET(2) char gSample7B[] = dgSample7B; - -#define dgSample7C "__OTR__sound/samples/sfx_mario_peach/06_mario_coughing" -static const ALIGN_ASSET(2) char gSample7C[] = dgSample7C; - -#define dgSample7D "__OTR__sound/samples/sfx_mario_peach/07_mario_its_a_me_mario" -static const ALIGN_ASSET(2) char gSample7D[] = dgSample7D; - -#define dgSample7E "__OTR__sound/samples/sfx_mario_peach/08_mario_punch_yah" -static const ALIGN_ASSET(2) char gSample7E[] = dgSample7E; - -#define dgSample7F "__OTR__sound/samples/sfx_mario_peach/09_mario_punch_hoo" -static const ALIGN_ASSET(2) char gSample7F[] = dgSample7F; - -#define dgSample80 "__OTR__sound/samples/sfx_mario_peach/0A_mario_mama_mia" -static const ALIGN_ASSET(2) char gSample80[] = dgSample80; - -#define dgSample81 "__OTR__sound/samples/sfx_mario_peach/0B_mario_okey_dokey" -static const ALIGN_ASSET(2) char gSample81[] = dgSample81; - -#define dgSample82 "__OTR__sound/samples/sfx_mario_peach/0C_mario_drowning" -static const ALIGN_ASSET(2) char gSample82[] = dgSample82; - -#define dgSample83 "__OTR__sound/samples/sfx_mario_peach/0D_mario_thank_you_playing_my_game" -static const ALIGN_ASSET(2) char gSample83[] = dgSample83; - -#define dgSample84 "__OTR__sound/samples/sfx_mario_peach/0E_peach_dear_mario" -static const ALIGN_ASSET(2) char gSample84[] = dgSample84; - -#define dgSample85 "__OTR__sound/samples/sfx_mario_peach/0F_peach_mario" -static const ALIGN_ASSET(2) char gSample85[] = dgSample85; - -#define dgSample86 "__OTR__sound/samples/sfx_mario_peach/10_peach_power_of_the_stars" -static const ALIGN_ASSET(2) char gSample86[] = dgSample86; - -#define dgSample87 "__OTR__sound/samples/sfx_mario_peach/11_peach_thanks_to_you" -static const ALIGN_ASSET(2) char gSample87[] = dgSample87; - -#define dgSample88 "__OTR__sound/samples/sfx_mario_peach/12_peach_thank_you_mario" -static const ALIGN_ASSET(2) char gSample88[] = dgSample88; - -#define dgSample89 "__OTR__sound/samples/sfx_mario_peach/13_peach_something_special" -static const ALIGN_ASSET(2) char gSample89[] = dgSample89; - -#define dgSample8A "__OTR__sound/samples/sfx_mario_peach/14_peach_bake_a_cake" -static const ALIGN_ASSET(2) char gSample8A[] = dgSample8A; - -#define dgSample8B "__OTR__sound/samples/sfx_mario_peach/15_peach_for_mario" -static const ALIGN_ASSET(2) char gSample8B[] = dgSample8B; - -#define dgSample8C "__OTR__sound/samples/sfx_mario_peach/16_peach_mario2" -static const ALIGN_ASSET(2) char gSample8C[] = dgSample8C; - -#define dgSample8D "__OTR__sound/samples/instruments/00" -static const ALIGN_ASSET(2) char gSample8D[] = dgSample8D; - -#define dgSample8E "__OTR__sound/samples/instruments/01_banjo_1" -static const ALIGN_ASSET(2) char gSample8E[] = dgSample8E; - -#define dgSample8F "__OTR__sound/samples/instruments/02" -static const ALIGN_ASSET(2) char gSample8F[] = dgSample8F; - -#define dgSample90 "__OTR__sound/samples/instruments/03_human_whistle" -static const ALIGN_ASSET(2) char gSample90[] = dgSample90; - -#define dgSample91 "__OTR__sound/samples/instruments/04_bright_piano" -static const ALIGN_ASSET(2) char gSample91[] = dgSample91; - -#define dgSample92 "__OTR__sound/samples/instruments/05_acoustic_bass" -static const ALIGN_ASSET(2) char gSample92[] = dgSample92; - -#define dgSample93 "__OTR__sound/samples/instruments/06_kick_drum_1" -static const ALIGN_ASSET(2) char gSample93[] = dgSample93; - -#define dgSample94 "__OTR__sound/samples/instruments/07_rimshot" -static const ALIGN_ASSET(2) char gSample94[] = dgSample94; - -#define dgSample95 "__OTR__sound/samples/instruments/08" -static const ALIGN_ASSET(2) char gSample95[] = dgSample95; - -#define dgSample96 "__OTR__sound/samples/instruments/09" -static const ALIGN_ASSET(2) char gSample96[] = dgSample96; - -#define dgSample97 "__OTR__sound/samples/instruments/0A_tambourine" -static const ALIGN_ASSET(2) char gSample97[] = dgSample97; - -#define dgSample98 "__OTR__sound/samples/instruments/0B" -static const ALIGN_ASSET(2) char gSample98[] = dgSample98; - -#define dgSample99 "__OTR__sound/samples/instruments/0C_conga_stick" -static const ALIGN_ASSET(2) char gSample99[] = dgSample99; - -#define dgSample9A "__OTR__sound/samples/instruments/0D_clave" -static const ALIGN_ASSET(2) char gSample9A[] = dgSample9A; - -#define dgSample9B "__OTR__sound/samples/instruments/0E_hihat_closed" -static const ALIGN_ASSET(2) char gSample9B[] = dgSample9B; - -#define dgSample9C "__OTR__sound/samples/instruments/0F_hihat_open" -static const ALIGN_ASSET(2) char gSample9C[] = dgSample9C; - -#define dgSample9D "__OTR__sound/samples/instruments/10_cymbal_bell" -static const ALIGN_ASSET(2) char gSample9D[] = dgSample9D; - -#define dgSample9E "__OTR__sound/samples/instruments/11_splash_cymbal" -static const ALIGN_ASSET(2) char gSample9E[] = dgSample9E; - -#define dgSample9F "__OTR__sound/samples/instruments/12_snare_drum_1" -static const ALIGN_ASSET(2) char gSample9F[] = dgSample9F; - -#define dgSampleA0 "__OTR__sound/samples/instruments/13_snare_drum_2" -static const ALIGN_ASSET(2) char gSampleA0[] = dgSampleA0; - -#define dgSampleA1 "__OTR__sound/samples/instruments/14_strings_5" -static const ALIGN_ASSET(2) char gSampleA1[] = dgSampleA1; - -#define dgSampleA2 "__OTR__sound/samples/instruments/15_strings_4" -static const ALIGN_ASSET(2) char gSampleA2[] = dgSampleA2; - -#define dgSampleA3 "__OTR__sound/samples/instruments/16_french_horns" -static const ALIGN_ASSET(2) char gSampleA3[] = dgSampleA3; - -#define dgSampleA4 "__OTR__sound/samples/instruments/17_trumpet" -static const ALIGN_ASSET(2) char gSampleA4[] = dgSampleA4; - -#define dgSampleA5 "__OTR__sound/samples/instruments/18_timpani" -static const ALIGN_ASSET(2) char gSampleA5[] = dgSampleA5; - -#define dgSampleA6 "__OTR__sound/samples/instruments/19_brass" -static const ALIGN_ASSET(2) char gSampleA6[] = dgSampleA6; - -#define dgSampleA7 "__OTR__sound/samples/instruments/1A_slap_bass" -static const ALIGN_ASSET(2) char gSampleA7[] = dgSampleA7; - -#define dgSampleA8 "__OTR__sound/samples/instruments/1B_organ_2" -static const ALIGN_ASSET(2) char gSampleA8[] = dgSampleA8; - -#define dgSampleA9 "__OTR__sound/samples/instruments/1C" -static const ALIGN_ASSET(2) char gSampleA9[] = dgSampleA9; - -#define dgSampleAA "__OTR__sound/samples/instruments/1D" -static const ALIGN_ASSET(2) char gSampleAA[] = dgSampleAA; - -#define dgSampleAB "__OTR__sound/samples/instruments/1E_closed_triangle" -static const ALIGN_ASSET(2) char gSampleAB[] = dgSampleAB; - -#define dgSampleAC "__OTR__sound/samples/instruments/1F_open_triangle" -static const ALIGN_ASSET(2) char gSampleAC[] = dgSampleAC; - -#define dgSampleAD "__OTR__sound/samples/instruments/20_cabasa" -static const ALIGN_ASSET(2) char gSampleAD[] = dgSampleAD; - -#define dgSampleAE "__OTR__sound/samples/instruments/21_sine_bass" -static const ALIGN_ASSET(2) char gSampleAE[] = dgSampleAE; - -#define dgSampleAF "__OTR__sound/samples/instruments/22_boys_choir" -static const ALIGN_ASSET(2) char gSampleAF[] = dgSampleAF; - -#define dgSampleB0 "__OTR__sound/samples/instruments/23_strings_1" -static const ALIGN_ASSET(2) char gSampleB0[] = dgSampleB0; - -#define dgSampleB1 "__OTR__sound/samples/instruments/24_strings_2" -static const ALIGN_ASSET(2) char gSampleB1[] = dgSampleB1; - -#define dgSampleB2 "__OTR__sound/samples/instruments/25_strings_3" -static const ALIGN_ASSET(2) char gSampleB2[] = dgSampleB2; - -#define dgSampleB3 "__OTR__sound/samples/instruments/26_crystal_rhodes" -static const ALIGN_ASSET(2) char gSampleB3[] = dgSampleB3; - -#define dgSampleB4 "__OTR__sound/samples/instruments/27_harpsichord" -static const ALIGN_ASSET(2) char gSampleB4[] = dgSampleB4; - -#define dgSampleB5 "__OTR__sound/samples/instruments/28_sitar_1" -static const ALIGN_ASSET(2) char gSampleB5[] = dgSampleB5; - -#define dgSampleB6 "__OTR__sound/samples/instruments/29_orchestra_hit" -static const ALIGN_ASSET(2) char gSampleB6[] = dgSampleB6; - -#define dgSampleB7 "__OTR__sound/samples/instruments/2A" -static const ALIGN_ASSET(2) char gSampleB7[] = dgSampleB7; - -#define dgSampleB8 "__OTR__sound/samples/instruments/2B" -static const ALIGN_ASSET(2) char gSampleB8[] = dgSampleB8; - -#define dgSampleB9 "__OTR__sound/samples/instruments/2C" -static const ALIGN_ASSET(2) char gSampleB9[] = dgSampleB9; - -#define dgSampleBA "__OTR__sound/samples/instruments/2D_trombone" -static const ALIGN_ASSET(2) char gSampleBA[] = dgSampleBA; - -#define dgSampleBB "__OTR__sound/samples/instruments/2E_accordion" -static const ALIGN_ASSET(2) char gSampleBB[] = dgSampleBB; - -#define dgSampleBC "__OTR__sound/samples/instruments/2F_sleigh_bells" -static const ALIGN_ASSET(2) char gSampleBC[] = dgSampleBC; - -#define dgSampleBD "__OTR__sound/samples/instruments/30_rarefaction-lahna" -static const ALIGN_ASSET(2) char gSampleBD[] = dgSampleBD; - -#define dgSampleBE "__OTR__sound/samples/instruments/31_rarefaction-convolution" -static const ALIGN_ASSET(2) char gSampleBE[] = dgSampleBE; - -#define dgSampleBF "__OTR__sound/samples/instruments/32_metal_rimshot" -static const ALIGN_ASSET(2) char gSampleBF[] = dgSampleBF; - -#define dgSampleC0 "__OTR__sound/samples/instruments/33_kick_drum_2" -static const ALIGN_ASSET(2) char gSampleC0[] = dgSampleC0; - -#define dgSampleC1 "__OTR__sound/samples/instruments/34_alto_flute" -static const ALIGN_ASSET(2) char gSampleC1[] = dgSampleC1; - -#define dgSampleC2 "__OTR__sound/samples/instruments/35_gospel_organ" -static const ALIGN_ASSET(2) char gSampleC2[] = dgSampleC2; - -#define dgSampleC3 "__OTR__sound/samples/instruments/36_sawtooth_synth" -static const ALIGN_ASSET(2) char gSampleC3[] = dgSampleC3; - -#define dgSampleC4 "__OTR__sound/samples/instruments/37_square_synth" -static const ALIGN_ASSET(2) char gSampleC4[] = dgSampleC4; - -#define dgSampleC5 "__OTR__sound/samples/instruments/38_electric_kick_drum" -static const ALIGN_ASSET(2) char gSampleC5[] = dgSampleC5; - -#define dgSampleC6 "__OTR__sound/samples/instruments/39_sitar_2" -static const ALIGN_ASSET(2) char gSampleC6[] = dgSampleC6; - -#define dgSampleC7 "__OTR__sound/samples/instruments/3A_music_box" -static const ALIGN_ASSET(2) char gSampleC7[] = dgSampleC7; - -#define dgSampleC8 "__OTR__sound/samples/instruments/3B_banjo_2" -static const ALIGN_ASSET(2) char gSampleC8[] = dgSampleC8; - -#define dgSampleC9 "__OTR__sound/samples/instruments/3C_acoustic_guitar" -static const ALIGN_ASSET(2) char gSampleC9[] = dgSampleC9; - -#define dgSampleCA "__OTR__sound/samples/instruments/3D" -static const ALIGN_ASSET(2) char gSampleCA[] = dgSampleCA; - -#define dgSampleCB "__OTR__sound/samples/instruments/3E_monk_choir" -static const ALIGN_ASSET(2) char gSampleCB[] = dgSampleCB; - -#define dgSampleCC "__OTR__sound/samples/instruments/3F" -static const ALIGN_ASSET(2) char gSampleCC[] = dgSampleCC; - -#define dgSampleCD "__OTR__sound/samples/instruments/40_bell" -static const ALIGN_ASSET(2) char gSampleCD[] = dgSampleCD; - -#define dgSampleCE "__OTR__sound/samples/instruments/41_pan_flute" -static const ALIGN_ASSET(2) char gSampleCE[] = dgSampleCE; - -#define dgSampleCF "__OTR__sound/samples/instruments/42_vibraphone" -static const ALIGN_ASSET(2) char gSampleCF[] = dgSampleCF; - -#define dgSampleD0 "__OTR__sound/samples/instruments/43_harmonica" -static const ALIGN_ASSET(2) char gSampleD0[] = dgSampleD0; - -#define dgSampleD1 "__OTR__sound/samples/instruments/44_grand_piano" -static const ALIGN_ASSET(2) char gSampleD1[] = dgSampleD1; - -#define dgSampleD2 "__OTR__sound/samples/instruments/45_french_horns_lq" -static const ALIGN_ASSET(2) char gSampleD2[] = dgSampleD2; - -#define dgSampleD3 "__OTR__sound/samples/instruments/46_pizzicato_strings_1" -static const ALIGN_ASSET(2) char gSampleD3[] = dgSampleD3; - -#define dgSampleD4 "__OTR__sound/samples/instruments/47_pizzicato_strings_2" -static const ALIGN_ASSET(2) char gSampleD4[] = dgSampleD4; - -#define dgSampleD5 "__OTR__sound/samples/instruments/48_steel_drum" -static const ALIGN_ASSET(2) char gSampleD5[] = dgSampleD5; - -#define dgSampleD6 "__OTR__sound/samples/piranha_music_box/00_music_box" -static const ALIGN_ASSET(2) char gSampleD6[] = dgSampleD6; - -#define dgSampleD7 "__OTR__sound/samples/course_start/00_la" -static const ALIGN_ASSET(2) char gSampleD7[] = dgSampleD7; - -#define dgSampleD8 "__OTR__sound/samples/bowser_organ/00_organ_1" -static const ALIGN_ASSET(2) char gSampleD8[] = dgSampleD8; - -#define dgSampleD9 "__OTR__sound/samples/bowser_organ/01_organ_1_lq" -static const ALIGN_ASSET(2) char gSampleD9[] = dgSampleD9; - -#define dgSampleDA "__OTR__sound/samples/bowser_organ/02_boys_choir" -static const ALIGN_ASSET(2) char gSampleDA[] = dgSampleDA; - -static const char* gSampleTable[] = { - gSample00, gSample01, gSample02, gSample03, - gSample04, gSample05, gSample06, gSample07, - gSample08, gSample09, gSample0A, gSample0B, - gSample0C, gSample0D, gSample0E, gSample0F, - gSample10, gSample11, gSample12, gSample13, - gSample14, gSample15, gSample16, gSample17, - gSample18, gSample19, gSample1A, gSample1B, - gSample1C, gSample1D, gSample1E, gSample1F, - gSample20, gSample21, gSample22, gSample23, - gSample24, gSample25, gSample26, gSample27, - gSample28, gSample29, gSample2A, gSample2B, - gSample2C, gSample2D, gSample2E, gSample2F, - gSample30, gSample31, gSample32, gSample33, - gSample34, gSample35, gSample36, gSample37, - gSample38, gSample39, gSample3A, gSample3B, - gSample3C, gSample3D, gSample3E, gSample3F, - gSample40, gSample41, gSample42, gSample43, - gSample44, gSample45, gSample46, gSample47, - gSample48, gSample49, gSample4A, gSample4B, - gSample4C, gSample4D, gSample4E, gSample4F, - gSample50, gSample51, gSample52, gSample53, - gSample54, gSample55, gSample56, gSample57, - gSample58, gSample59, gSample5A, gSample5B, - gSample5C, gSample5D, gSample5E, gSample5F, - gSample60, gSample61, gSample62, gSample63, - gSample64, gSample65, gSample66, gSample67, - gSample68, gSample69, gSample6A, gSample6B, - gSample6C, gSample6D, gSample6E, gSample6F, - gSample70, gSample71, gSample72, gSample73, - gSample74, gSample75, gSample76, gSample77, - gSample78, gSample79, gSample7A, gSample7B, - gSample7C, gSample7D, gSample7E, gSample7F, - gSample80, gSample81, gSample82, gSample83, - gSample84, gSample85, gSample86, gSample87, - gSample88, gSample89, gSample8A, gSample8B, - gSample8C, gSample8D, gSample8E, gSample8F, - gSample90, gSample91, gSample92, gSample93, - gSample94, gSample95, gSample96, gSample97, - gSample98, gSample99, gSample9A, gSample9B, - gSample9C, gSample9D, gSample9E, gSample9F, - gSampleA0, gSampleA1, gSampleA2, gSampleA3, - gSampleA4, gSampleA5, gSampleA6, gSampleA7, - gSampleA8, gSampleA9, gSampleAA, gSampleAB, - gSampleAC, gSampleAD, gSampleAE, gSampleAF, - gSampleB0, gSampleB1, gSampleB2, gSampleB3, - gSampleB4, gSampleB5, gSampleB6, gSampleB7, - gSampleB8, gSampleB9, gSampleBA, gSampleBB, - gSampleBC, gSampleBD, gSampleBE, gSampleBF, - gSampleC0, gSampleC1, gSampleC2, gSampleC3, - gSampleC4, gSampleC5, gSampleC6, gSampleC7, - gSampleC8, gSampleC9, gSampleCA, gSampleCB, - gSampleCC, gSampleCD, gSampleCE, gSampleCF, - gSampleD0, gSampleD1, gSampleD2, gSampleD3, - gSampleD4, gSampleD5, gSampleD6, gSampleD7, - gSampleD8, gSampleD9, gSampleDA, -}; diff --git a/tools/sequences.json b/tools/sequences.json deleted file mode 100644 index 13e7895..0000000 --- a/tools/sequences.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "00_sound_player": ["00", "01_terrain", "02_water", "03", "04", "05", "06", "07", "08_mario", "09", "0A_mario_peach"], - "01_cutscene_collect_star": ["22"], - "02_menu_title_screen": ["11"], - "03_level_grass": ["22"], - "04_level_inside_castle": ["0E"], - "05_level_water": ["13"], - "06_level_hot": ["0F"], - "07_level_boss_koopa": ["12"], - "08_level_snow": ["0B"], - "09_level_slide": ["0D"], - "0A_level_spooky": ["10", "21"], - "0B_event_piranha_plant": ["14_piranha_music_box"], - "0C_level_underground": ["15"], - "0D_menu_star_select": ["16_course_start"], - "0E_event_powerup": ["17"], - "0F_event_metal_cap": ["18"], - "10_event_koopa_message": ["12"], - "11_level_koopa_road": ["19"], - "12_event_high_score": ["1F"], - "13_event_merry_go_round": ["21"], - "14_event_race": ["1A"], - "15_cutscene_star_spawn": ["0E"], - "16_event_boss": ["1B"], - "17_cutscene_collect_key": ["1A"], - "18_event_endless_stairs": ["1C_endless_stairs"], - "19_level_boss_koopa_final": ["1D_bowser_organ"], - "1A_cutscene_credits": ["25"], - "1B_event_solve_puzzle": ["14_piranha_music_box"], - "1C_event_toad_message": ["20"], - "1D_event_peach_message": ["1E"], - "1E_cutscene_intro": ["1B"], - "1F_cutscene_victory": ["1A"], - "20_cutscene_ending": ["23"], - "21_menu_file_select": ["24"], - "22_cutscene_lakitu": ["1B"] -} diff --git a/tools/sequences_table.h b/tools/sequences_table.h deleted file mode 100644 index f252b20..0000000 --- a/tools/sequences_table.h +++ /dev/null @@ -1,141 +0,0 @@ -#pragma once -#include "align_asset_macro.h" - -#define dgSequence01 "__OTR__sound/sequences/01_cutscene_collect_star.m64" -static const ALIGN_ASSET(2) char gSequence01[] = dgSequence01; - -#define dgSequence02 "__OTR__sound/sequences/02_menu_title_screen.m64" -static const ALIGN_ASSET(2) char gSequence02[] = dgSequence02; - -#define dgSequence03 "__OTR__sound/sequences/03_level_grass.m64" -static const ALIGN_ASSET(2) char gSequence03[] = dgSequence03; - -#define dgSequence04 "__OTR__sound/sequences/04_level_inside_castle.m64" -static const ALIGN_ASSET(2) char gSequence04[] = dgSequence04; - -#define dgSequence05 "__OTR__sound/sequences/05_level_water.m64" -static const ALIGN_ASSET(2) char gSequence05[] = dgSequence05; - -#define dgSequence06 "__OTR__sound/sequences/06_level_hot.m64" -static const ALIGN_ASSET(2) char gSequence06[] = dgSequence06; - -#define dgSequence07 "__OTR__sound/sequences/07_level_boss_koopa.m64" -static const ALIGN_ASSET(2) char gSequence07[] = dgSequence07; - -#define dgSequence08 "__OTR__sound/sequences/08_level_snow.m64" -static const ALIGN_ASSET(2) char gSequence08[] = dgSequence08; - -#define dgSequence09 "__OTR__sound/sequences/09_level_slide.m64" -static const ALIGN_ASSET(2) char gSequence09[] = dgSequence09; - -#define dgSequence0A "__OTR__sound/sequences/0A_level_spooky.m64" -static const ALIGN_ASSET(2) char gSequence0A[] = dgSequence0A; - -#define dgSequence0B "__OTR__sound/sequences/0B_event_piranha_plant.m64" -static const ALIGN_ASSET(2) char gSequence0B[] = dgSequence0B; - -#define dgSequence0C "__OTR__sound/sequences/0C_level_underground.m64" -static const ALIGN_ASSET(2) char gSequence0C[] = dgSequence0C; - -#define dgSequence0D "__OTR__sound/sequences/0D_menu_star_select.m64" -static const ALIGN_ASSET(2) char gSequence0D[] = dgSequence0D; - -#define dgSequence0E "__OTR__sound/sequences/0E_event_powerup.m64" -static const ALIGN_ASSET(2) char gSequence0E[] = dgSequence0E; - -#define dgSequence0F "__OTR__sound/sequences/0F_event_metal_cap.m64" -static const ALIGN_ASSET(2) char gSequence0F[] = dgSequence0F; - -#define dgSequence10 "__OTR__sound/sequences/10_event_koopa_message.m64" -static const ALIGN_ASSET(2) char gSequence10[] = dgSequence10; - -#define dgSequence11 "__OTR__sound/sequences/11_level_koopa_road.m64" -static const ALIGN_ASSET(2) char gSequence11[] = dgSequence11; - -#define dgSequence12 "__OTR__sound/sequences/12_event_high_score.m64" -static const ALIGN_ASSET(2) char gSequence12[] = dgSequence12; - -#define dgSequence13 "__OTR__sound/sequences/13_event_merry_go_round.m64" -static const ALIGN_ASSET(2) char gSequence13[] = dgSequence13; - -#define dgSequence14 "__OTR__sound/sequences/14_event_race.m64" -static const ALIGN_ASSET(2) char gSequence14[] = dgSequence14; - -#define dgSequence15 "__OTR__sound/sequences/15_cutscene_star_spawn.m64" -static const ALIGN_ASSET(2) char gSequence15[] = dgSequence15; - -#define dgSequence16 "__OTR__sound/sequences/16_event_boss.m64" -static const ALIGN_ASSET(2) char gSequence16[] = dgSequence16; - -#define dgSequence17 "__OTR__sound/sequences/17_cutscene_collect_key.m64" -static const ALIGN_ASSET(2) char gSequence17[] = dgSequence17; - -#define dgSequence18 "__OTR__sound/sequences/18_event_endless_stairs.m64" -static const ALIGN_ASSET(2) char gSequence18[] = dgSequence18; - -#define dgSequence19 "__OTR__sound/sequences/19_level_boss_koopa_final.m64" -static const ALIGN_ASSET(2) char gSequence19[] = dgSequence19; - -#define dgSequence1A "__OTR__sound/sequences/1A_cutscene_credits.m64" -static const ALIGN_ASSET(2) char gSequence1A[] = dgSequence1A; - -#define dgSequence1B "__OTR__sound/sequences/1B_event_solve_puzzle.m64" -static const ALIGN_ASSET(2) char gSequence1B[] = dgSequence1B; - -#define dgSequence1C "__OTR__sound/sequences/1C_event_toad_message.m64" -static const ALIGN_ASSET(2) char gSequence1C[] = dgSequence1C; - -#define dgSequence1D "__OTR__sound/sequences/1D_event_peach_message.m64" -static const ALIGN_ASSET(2) char gSequence1D[] = dgSequence1D; - -#define dgSequence1E "__OTR__sound/sequences/1E_cutscene_intro.m64" -static const ALIGN_ASSET(2) char gSequence1E[] = dgSequence1E; - -#define dgSequence1F "__OTR__sound/sequences/1F_cutscene_victory.m64" -static const ALIGN_ASSET(2) char gSequence1F[] = dgSequence1F; - -#define dgSequence20 "__OTR__sound/sequences/20_cutscene_ending.m64" -static const ALIGN_ASSET(2) char gSequence20[] = dgSequence20; - -#define dgSequence21 "__OTR__sound/sequences/21_menu_file_select.m64" -static const ALIGN_ASSET(2) char gSequence21[] = dgSequence21; - -#define dgSequence22 "__OTR__sound/sequences/22_cutscene_lakitu.m64" -static const ALIGN_ASSET(2) char gSequence22[] = dgSequence22; - -static const char* gSequenceTable[] = { - gSequence01, - gSequence02, - gSequence03, - gSequence04, - gSequence05, - gSequence06, - gSequence07, - gSequence08, - gSequence09, - gSequence0A, - gSequence0B, - gSequence0C, - gSequence0D, - gSequence0E, - gSequence0F, - gSequence10, - gSequence11, - gSequence12, - gSequence13, - gSequence14, - gSequence15, - gSequence16, - gSequence17, - gSequence18, - gSequence19, - gSequence1A, - gSequence1B, - gSequence1C, - gSequence1D, - gSequence1E, - gSequence1F, - gSequence20, - gSequence21, - gSequence22, -}; diff --git a/tools/text_offsets.js b/tools/text_offsets.js deleted file mode 100644 index 8ebc1b0..0000000 --- a/tools/text_offsets.js +++ /dev/null @@ -1,130 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const YAML = require('./yaml/dist/index') - -// https://hack64.net/wiki/doku.php?id=super_mario_64:mio0 -// https://hack64.net/wiki/doku.php?id=super_mario_64:segment_2 - -const version = 'us'; -const roms = { - us: { - dialog: { start: 0x0FFC8, end: 0x10A68 }, - level: { start: 0x10F68, end: 0x10FD4 }, - act: { start: 0x1192C, end: 0x11AB4 }, - } -} - -function toYAML(obj){ - let file = `${obj.file}`; - delete obj.file; - return YAML.stringify({ - [file]: obj - }); -} - -function align16(num){ - return (num + 0xF) & ~0xF; -} - -function seg_offset(a){ - return a & 0x00ffffff -} - -function readEntry(bytes, offset){ - let size = 0; - let unused = bytes.readUInt32BE(offset + size); - size += 4; - let linesPerBox = bytes.readInt8(offset + size); - size += 2; - let leftOffset = bytes.readInt16BE(offset + size); - size += 2; - let width = bytes.readInt16BE(offset + size); - size += 4; - let str = seg_offset(bytes.readInt32BE(offset + size)); - size += 4; - - let outText = [] - while(bytes[str] != 0xFF){ - let c = bytes[str]; - outText.push(c); - str += 1; - } - outText.push(0xFF) - - return { - unused, - linesPerBox, - leftOffset, - width, - text: Buffer.from(outText), - }; -} - -function findDialogs(bytes, out){ - let { start, end } = roms[version].dialog; - let size = align16(end - start); - - for(let i = 0; i < size; i += 16){ - fs.appendFileSync(out, toYAML({ - file: `dialogs/dialog_${(i / 16).toString(16).padStart(2, '0').toUpperCase()}`, - type: 'SM64:DIALOG', - offset: 0x108A40, - mio0: start + i - })); - - console.log(i / 16, readEntry(bytes, start + i)); - } -} - -function readLevel(bytes, offset){ - let outText = [] - while(bytes[offset] != 0xFF){ - let c = bytes[offset]; - outText.push(c); - offset += 1; - } - outText.push(0xFF) - return Buffer.from(outText); -} - -function findLevelNames(bytes, out) { - let { start, end } = roms[version].level; - let size = ((end - start) / 4) - 1; - console.log(size) - - for(let i = 0; i < size; i++){ - let offset = seg_offset(bytes.readUInt32BE(start + (i * 4))); - fs.appendFileSync(out, toYAML({ - file: `courses/course_${(i).toString(16).padStart(2, '0').toUpperCase()}`, - type: 'SM64:TEXT', - offset: 0x108A40, - mio0: offset - })); - } -} - -function findAct(bytes, out) { - let { start, end } = roms[version].act; - let size = ((end - start) / 4) - 1; - console.log(size) - for(let i = 0; i < size; i++){ - let offset = seg_offset(bytes.readUInt32BE(start + (i * 4))); - fs.appendFileSync(out, toYAML({ - file: `acts/act_${(i).toString(16).padStart(2, '0').toUpperCase()}`, - type: 'SM64:TEXT', - offset: 0x108A40, - mio0: offset - })); - } -} - -async function main(){ - let bytes = fs.readFileSync('./debug/text/text/dump'); - let output = path.join('assets/sm64/us', 'texts.yml'); - fs.writeFileSync(output, ''); - findDialogs(bytes, output); - findLevelNames(bytes, output); - findAct(bytes, output); -} - -main(); \ No newline at end of file diff --git a/tools/util.js b/tools/util.js deleted file mode 100644 index e69de29..0000000 diff --git a/tools/yaml/LICENSE b/tools/yaml/LICENSE deleted file mode 100644 index e060aaa..0000000 --- a/tools/yaml/LICENSE +++ /dev/null @@ -1,13 +0,0 @@ -Copyright Eemeli Aro - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. diff --git a/tools/yaml/README.md b/tools/yaml/README.md deleted file mode 100644 index 61e1a2a..0000000 --- a/tools/yaml/README.md +++ /dev/null @@ -1,147 +0,0 @@ -# YAML - -`yaml` is a definitive library for [YAML](https://yaml.org/), the human friendly data serialization standard. -This library: - -- Supports both YAML 1.1 and YAML 1.2 and all common data schemas, -- Passes all of the [yaml-test-suite](https://github.com/yaml/yaml-test-suite) tests, -- Can accept any string as input without throwing, parsing as much YAML out of it as it can, and -- Supports parsing, modifying, and writing YAML comments and blank lines. - -The library is released under the ISC open source license, and the code is [available on GitHub](https://github.com/eemeli/yaml/). -It has no external dependencies and runs on Node.js as well as modern browsers. - -For the purposes of versioning, any changes that break any of the documented endpoints or APIs will be considered semver-major breaking changes. -Undocumented library internals may change between minor versions, and previous APIs may be deprecated (but not removed). - -The minimum supported TypeScript version of the included typings is 3.9; -for use in earlier versions you may need to set `skipLibCheck: true` in your config. -This requirement may be updated between minor versions of the library. - -For more information, see the project's documentation site: [**eemeli.org/yaml**](https://eemeli.org/yaml/) - -To install: - -```sh -npm install yaml -``` - -**Note:** These docs are for `yaml@2`. For v1, see the [v1.10.0 tag](https://github.com/eemeli/yaml/tree/v1.10.0) for the source and [eemeli.org/yaml/v1](https://eemeli.org/yaml/v1/) for the documentation. - -## API Overview - -The API provided by `yaml` has three layers, depending on how deep you need to go: [Parse & Stringify](https://eemeli.org/yaml/#parse-amp-stringify), [Documents](https://eemeli.org/yaml/#documents), and the underlying [Lexer/Parser/Composer](https://eemeli.org/yaml/#parsing-yaml). -The first has the simplest API and "just works", the second gets you all the bells and whistles supported by the library along with a decent [AST](https://eemeli.org/yaml/#content-nodes), and the third lets you get progressively closer to YAML source, if that's your thing. - -```js -import { parse, stringify } from 'yaml' -// or -import YAML from 'yaml' -// or -const YAML = require('yaml') -``` - -### Parse & Stringify - -- [`parse(str, reviver?, options?): value`](https://eemeli.org/yaml/#yaml-parse) -- [`stringify(value, replacer?, options?): string`](https://eemeli.org/yaml/#yaml-stringify) - -### Documents - -- [`Document`](https://eemeli.org/yaml/#documents) - - [`constructor(value, replacer?, options?)`](https://eemeli.org/yaml/#creating-documents) - - [`#anchors`](https://eemeli.org/yaml/#working-with-anchors) - - [`#contents`](https://eemeli.org/yaml/#content-nodes) - - [`#directives`](https://eemeli.org/yaml/#stream-directives) - - [`#errors`](https://eemeli.org/yaml/#errors) - - [`#warnings`](https://eemeli.org/yaml/#errors) -- [`isDocument(foo): boolean`](https://eemeli.org/yaml/#identifying-nodes) -- [`parseAllDocuments(str, options?): Document[]`](https://eemeli.org/yaml/#parsing-documents) -- [`parseDocument(str, options?): Document`](https://eemeli.org/yaml/#parsing-documents) - -### Content Nodes - -- [`isAlias(foo): boolean`](https://eemeli.org/yaml/#identifying-nodes) -- [`isCollection(foo): boolean`](https://eemeli.org/yaml/#identifying-nodes) -- [`isMap(foo): boolean`](https://eemeli.org/yaml/#identifying-nodes) -- [`isNode(foo): boolean`](https://eemeli.org/yaml/#identifying-nodes) -- [`isPair(foo): boolean`](https://eemeli.org/yaml/#identifying-nodes) -- [`isScalar(foo): boolean`](https://eemeli.org/yaml/#identifying-nodes) -- [`isSeq(foo): boolean`](https://eemeli.org/yaml/#identifying-nodes) -- [`new Scalar(value)`](https://eemeli.org/yaml/#scalar-values) -- [`new YAMLMap()`](https://eemeli.org/yaml/#collections) -- [`new YAMLSeq()`](https://eemeli.org/yaml/#collections) -- [`doc.createAlias(node, name?): Alias`](https://eemeli.org/yaml/#working-with-anchors) -- [`doc.createNode(value, options?): Node`](https://eemeli.org/yaml/#creating-nodes) -- [`doc.createPair(key, value): Pair`](https://eemeli.org/yaml/#creating-nodes) -- [`visit(node, visitor)`](https://eemeli.org/yaml/#modifying-nodes) - -### Parsing YAML - -- [`new Lexer().lex(src)`](https://eemeli.org/yaml/#lexer) -- [`new Parser(onNewLine?).parse(src)`](https://eemeli.org/yaml/#parser) -- [`new Composer(options?).compose(tokens)`](https://eemeli.org/yaml/#composer) - -## YAML.parse - -```yaml -# file.yml -YAML: - - A human-readable data serialization language - - https://en.wikipedia.org/wiki/YAML -yaml: - - A complete JavaScript implementation - - https://www.npmjs.com/package/yaml -``` - -```js -import fs from 'fs' -import YAML from 'yaml' - -YAML.parse('3.14159') -// 3.14159 - -YAML.parse('[ true, false, maybe, null ]\n') -// [ true, false, 'maybe', null ] - -const file = fs.readFileSync('./file.yml', 'utf8') -YAML.parse(file) -// { YAML: -// [ 'A human-readable data serialization language', -// 'https://en.wikipedia.org/wiki/YAML' ], -// yaml: -// [ 'A complete JavaScript implementation', -// 'https://www.npmjs.com/package/yaml' ] } -``` - -## YAML.stringify - -```js -import YAML from 'yaml' - -YAML.stringify(3.14159) -// '3.14159\n' - -YAML.stringify([true, false, 'maybe', null]) -// `- true -// - false -// - maybe -// - null -// ` - -YAML.stringify({ number: 3, plain: 'string', block: 'two\nlines\n' }) -// `number: 3 -// plain: string -// block: | -// two -// lines -// ` -``` - ---- - -Browser testing provided by: - - - - diff --git a/tools/yaml/browser/dist/compose/compose-collection.js b/tools/yaml/browser/dist/compose/compose-collection.js deleted file mode 100644 index 8d4507f..0000000 --- a/tools/yaml/browser/dist/compose/compose-collection.js +++ /dev/null @@ -1,76 +0,0 @@ -import { isNode } from '../nodes/identity.js'; -import { Scalar } from '../nodes/Scalar.js'; -import { YAMLMap } from '../nodes/YAMLMap.js'; -import { YAMLSeq } from '../nodes/YAMLSeq.js'; -import { resolveBlockMap } from './resolve-block-map.js'; -import { resolveBlockSeq } from './resolve-block-seq.js'; -import { resolveFlowCollection } from './resolve-flow-collection.js'; - -function resolveCollection(CN, ctx, token, onError, tagName, tag) { - const coll = token.type === 'block-map' - ? resolveBlockMap(CN, ctx, token, onError, tag) - : token.type === 'block-seq' - ? resolveBlockSeq(CN, ctx, token, onError, tag) - : resolveFlowCollection(CN, ctx, token, onError, tag); - const Coll = coll.constructor; - // If we got a tagName matching the class, or the tag name is '!', - // then use the tagName from the node class used to create it. - if (tagName === '!' || tagName === Coll.tagName) { - coll.tag = Coll.tagName; - return coll; - } - if (tagName) - coll.tag = tagName; - return coll; -} -function composeCollection(CN, ctx, token, tagToken, onError) { - const tagName = !tagToken - ? null - : ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg)); - const expType = token.type === 'block-map' - ? 'map' - : token.type === 'block-seq' - ? 'seq' - : token.start.source === '{' - ? 'map' - : 'seq'; - // shortcut: check if it's a generic YAMLMap or YAMLSeq - // before jumping into the custom tag logic. - if (!tagToken || - !tagName || - tagName === '!' || - (tagName === YAMLMap.tagName && expType === 'map') || - (tagName === YAMLSeq.tagName && expType === 'seq') || - !expType) { - return resolveCollection(CN, ctx, token, onError, tagName); - } - let tag = ctx.schema.tags.find(t => t.tag === tagName && t.collection === expType); - if (!tag) { - const kt = ctx.schema.knownTags[tagName]; - if (kt && kt.collection === expType) { - ctx.schema.tags.push(Object.assign({}, kt, { default: false })); - tag = kt; - } - else { - if (kt?.collection) { - onError(tagToken, 'BAD_COLLECTION_TYPE', `${kt.tag} used for ${expType} collection, but expects ${kt.collection}`, true); - } - else { - onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, true); - } - return resolveCollection(CN, ctx, token, onError, tagName); - } - } - const coll = resolveCollection(CN, ctx, token, onError, tagName, tag); - const res = tag.resolve?.(coll, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg), ctx.options) ?? coll; - const node = isNode(res) - ? res - : new Scalar(res); - node.range = coll.range; - node.tag = tagName; - if (tag?.format) - node.format = tag.format; - return node; -} - -export { composeCollection }; diff --git a/tools/yaml/browser/dist/compose/compose-doc.js b/tools/yaml/browser/dist/compose/compose-doc.js deleted file mode 100644 index d36c380..0000000 --- a/tools/yaml/browser/dist/compose/compose-doc.js +++ /dev/null @@ -1,41 +0,0 @@ -import { Document } from '../doc/Document.js'; -import { composeNode, composeEmptyNode } from './compose-node.js'; -import { resolveEnd } from './resolve-end.js'; -import { resolveProps } from './resolve-props.js'; - -function composeDoc(options, directives, { offset, start, value, end }, onError) { - const opts = Object.assign({ _directives: directives }, options); - const doc = new Document(undefined, opts); - const ctx = { - atRoot: true, - directives: doc.directives, - options: doc.options, - schema: doc.schema - }; - const props = resolveProps(start, { - indicator: 'doc-start', - next: value ?? end?.[0], - offset, - onError, - startOnNewline: true - }); - if (props.found) { - doc.directives.docStart = true; - if (value && - (value.type === 'block-map' || value.type === 'block-seq') && - !props.hasNewline) - onError(props.end, 'MISSING_CHAR', 'Block collection cannot start on same line with directives-end marker'); - } - // @ts-expect-error If Contents is set, let's trust the user - doc.contents = value - ? composeNode(ctx, value, props, onError) - : composeEmptyNode(ctx, props.end, start, null, props, onError); - const contentEnd = doc.contents.range[2]; - const re = resolveEnd(end, contentEnd, false, onError); - if (re.comment) - doc.comment = re.comment; - doc.range = [offset, contentEnd, re.offset]; - return doc; -} - -export { composeDoc }; diff --git a/tools/yaml/browser/dist/compose/compose-node.js b/tools/yaml/browser/dist/compose/compose-node.js deleted file mode 100644 index 39d98e3..0000000 --- a/tools/yaml/browser/dist/compose/compose-node.js +++ /dev/null @@ -1,92 +0,0 @@ -import { Alias } from '../nodes/Alias.js'; -import { composeCollection } from './compose-collection.js'; -import { composeScalar } from './compose-scalar.js'; -import { resolveEnd } from './resolve-end.js'; -import { emptyScalarPosition } from './util-empty-scalar-position.js'; - -const CN = { composeNode, composeEmptyNode }; -function composeNode(ctx, token, props, onError) { - const { spaceBefore, comment, anchor, tag } = props; - let node; - let isSrcToken = true; - switch (token.type) { - case 'alias': - node = composeAlias(ctx, token, onError); - if (anchor || tag) - onError(token, 'ALIAS_PROPS', 'An alias node must not specify any properties'); - break; - case 'scalar': - case 'single-quoted-scalar': - case 'double-quoted-scalar': - case 'block-scalar': - node = composeScalar(ctx, token, tag, onError); - if (anchor) - node.anchor = anchor.source.substring(1); - break; - case 'block-map': - case 'block-seq': - case 'flow-collection': - node = composeCollection(CN, ctx, token, tag, onError); - if (anchor) - node.anchor = anchor.source.substring(1); - break; - default: { - const message = token.type === 'error' - ? token.message - : `Unsupported token (type: ${token.type})`; - onError(token, 'UNEXPECTED_TOKEN', message); - node = composeEmptyNode(ctx, token.offset, undefined, null, props, onError); - isSrcToken = false; - } - } - if (anchor && node.anchor === '') - onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string'); - if (spaceBefore) - node.spaceBefore = true; - if (comment) { - if (token.type === 'scalar' && token.source === '') - node.comment = comment; - else - node.commentBefore = comment; - } - // @ts-expect-error Type checking misses meaning of isSrcToken - if (ctx.options.keepSourceTokens && isSrcToken) - node.srcToken = token; - return node; -} -function composeEmptyNode(ctx, offset, before, pos, { spaceBefore, comment, anchor, tag, end }, onError) { - const token = { - type: 'scalar', - offset: emptyScalarPosition(offset, before, pos), - indent: -1, - source: '' - }; - const node = composeScalar(ctx, token, tag, onError); - if (anchor) { - node.anchor = anchor.source.substring(1); - if (node.anchor === '') - onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string'); - } - if (spaceBefore) - node.spaceBefore = true; - if (comment) { - node.comment = comment; - node.range[2] = end; - } - return node; -} -function composeAlias({ options }, { offset, source, end }, onError) { - const alias = new Alias(source.substring(1)); - if (alias.source === '') - onError(offset, 'BAD_ALIAS', 'Alias cannot be an empty string'); - if (alias.source.endsWith(':')) - onError(offset + source.length - 1, 'BAD_ALIAS', 'Alias ending in : is ambiguous', true); - const valueEnd = offset + source.length; - const re = resolveEnd(end, valueEnd, options.strict, onError); - alias.range = [offset, valueEnd, re.offset]; - if (re.comment) - alias.comment = re.comment; - return alias; -} - -export { composeEmptyNode, composeNode }; diff --git a/tools/yaml/browser/dist/compose/compose-scalar.js b/tools/yaml/browser/dist/compose/compose-scalar.js deleted file mode 100644 index fb4447d..0000000 --- a/tools/yaml/browser/dist/compose/compose-scalar.js +++ /dev/null @@ -1,80 +0,0 @@ -import { SCALAR, isScalar } from '../nodes/identity.js'; -import { Scalar } from '../nodes/Scalar.js'; -import { resolveBlockScalar } from './resolve-block-scalar.js'; -import { resolveFlowScalar } from './resolve-flow-scalar.js'; - -function composeScalar(ctx, token, tagToken, onError) { - const { value, type, comment, range } = token.type === 'block-scalar' - ? resolveBlockScalar(token, ctx.options.strict, onError) - : resolveFlowScalar(token, ctx.options.strict, onError); - const tagName = tagToken - ? ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg)) - : null; - const tag = tagToken && tagName - ? findScalarTagByName(ctx.schema, value, tagName, tagToken, onError) - : token.type === 'scalar' - ? findScalarTagByTest(ctx, value, token, onError) - : ctx.schema[SCALAR]; - let scalar; - try { - const res = tag.resolve(value, msg => onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg), ctx.options); - scalar = isScalar(res) ? res : new Scalar(res); - } - catch (error) { - const msg = error instanceof Error ? error.message : String(error); - onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg); - scalar = new Scalar(value); - } - scalar.range = range; - scalar.source = value; - if (type) - scalar.type = type; - if (tagName) - scalar.tag = tagName; - if (tag.format) - scalar.format = tag.format; - if (comment) - scalar.comment = comment; - return scalar; -} -function findScalarTagByName(schema, value, tagName, tagToken, onError) { - if (tagName === '!') - return schema[SCALAR]; // non-specific tag - const matchWithTest = []; - for (const tag of schema.tags) { - if (!tag.collection && tag.tag === tagName) { - if (tag.default && tag.test) - matchWithTest.push(tag); - else - return tag; - } - } - for (const tag of matchWithTest) - if (tag.test?.test(value)) - return tag; - const kt = schema.knownTags[tagName]; - if (kt && !kt.collection) { - // Ensure that the known tag is available for stringifying, - // but does not get used by default. - schema.tags.push(Object.assign({}, kt, { default: false, test: undefined })); - return kt; - } - onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, tagName !== 'tag:yaml.org,2002:str'); - return schema[SCALAR]; -} -function findScalarTagByTest({ directives, schema }, value, token, onError) { - const tag = schema.tags.find(tag => tag.default && tag.test?.test(value)) || schema[SCALAR]; - if (schema.compat) { - const compat = schema.compat.find(tag => tag.default && tag.test?.test(value)) ?? - schema[SCALAR]; - if (tag.tag !== compat.tag) { - const ts = directives.tagString(tag.tag); - const cs = directives.tagString(compat.tag); - const msg = `Value may be parsed as either ${ts} or ${cs}`; - onError(token, 'TAG_RESOLVE_FAILED', msg, true); - } - } - return tag; -} - -export { composeScalar }; diff --git a/tools/yaml/browser/dist/compose/composer.js b/tools/yaml/browser/dist/compose/composer.js deleted file mode 100644 index 01b387f..0000000 --- a/tools/yaml/browser/dist/compose/composer.js +++ /dev/null @@ -1,217 +0,0 @@ -import { Directives } from '../doc/directives.js'; -import { Document } from '../doc/Document.js'; -import { YAMLWarning, YAMLParseError } from '../errors.js'; -import { isCollection, isPair } from '../nodes/identity.js'; -import { composeDoc } from './compose-doc.js'; -import { resolveEnd } from './resolve-end.js'; - -function getErrorPos(src) { - if (typeof src === 'number') - return [src, src + 1]; - if (Array.isArray(src)) - return src.length === 2 ? src : [src[0], src[1]]; - const { offset, source } = src; - return [offset, offset + (typeof source === 'string' ? source.length : 1)]; -} -function parsePrelude(prelude) { - let comment = ''; - let atComment = false; - let afterEmptyLine = false; - for (let i = 0; i < prelude.length; ++i) { - const source = prelude[i]; - switch (source[0]) { - case '#': - comment += - (comment === '' ? '' : afterEmptyLine ? '\n\n' : '\n') + - (source.substring(1) || ' '); - atComment = true; - afterEmptyLine = false; - break; - case '%': - if (prelude[i + 1]?.[0] !== '#') - i += 1; - atComment = false; - break; - default: - // This may be wrong after doc-end, but in that case it doesn't matter - if (!atComment) - afterEmptyLine = true; - atComment = false; - } - } - return { comment, afterEmptyLine }; -} -/** - * Compose a stream of CST nodes into a stream of YAML Documents. - * - * ```ts - * import { Composer, Parser } from 'yaml' - * - * const src: string = ... - * const tokens = new Parser().parse(src) - * const docs = new Composer().compose(tokens) - * ``` - */ -class Composer { - constructor(options = {}) { - this.doc = null; - this.atDirectives = false; - this.prelude = []; - this.errors = []; - this.warnings = []; - this.onError = (source, code, message, warning) => { - const pos = getErrorPos(source); - if (warning) - this.warnings.push(new YAMLWarning(pos, code, message)); - else - this.errors.push(new YAMLParseError(pos, code, message)); - }; - // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing - this.directives = new Directives({ version: options.version || '1.2' }); - this.options = options; - } - decorate(doc, afterDoc) { - const { comment, afterEmptyLine } = parsePrelude(this.prelude); - //console.log({ dc: doc.comment, prelude, comment }) - if (comment) { - const dc = doc.contents; - if (afterDoc) { - doc.comment = doc.comment ? `${doc.comment}\n${comment}` : comment; - } - else if (afterEmptyLine || doc.directives.docStart || !dc) { - doc.commentBefore = comment; - } - else if (isCollection(dc) && !dc.flow && dc.items.length > 0) { - let it = dc.items[0]; - if (isPair(it)) - it = it.key; - const cb = it.commentBefore; - it.commentBefore = cb ? `${comment}\n${cb}` : comment; - } - else { - const cb = dc.commentBefore; - dc.commentBefore = cb ? `${comment}\n${cb}` : comment; - } - } - if (afterDoc) { - Array.prototype.push.apply(doc.errors, this.errors); - Array.prototype.push.apply(doc.warnings, this.warnings); - } - else { - doc.errors = this.errors; - doc.warnings = this.warnings; - } - this.prelude = []; - this.errors = []; - this.warnings = []; - } - /** - * Current stream status information. - * - * Mostly useful at the end of input for an empty stream. - */ - streamInfo() { - return { - comment: parsePrelude(this.prelude).comment, - directives: this.directives, - errors: this.errors, - warnings: this.warnings - }; - } - /** - * Compose tokens into documents. - * - * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document. - * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly. - */ - *compose(tokens, forceDoc = false, endOffset = -1) { - for (const token of tokens) - yield* this.next(token); - yield* this.end(forceDoc, endOffset); - } - /** Advance the composer by one CST token. */ - *next(token) { - switch (token.type) { - case 'directive': - this.directives.add(token.source, (offset, message, warning) => { - const pos = getErrorPos(token); - pos[0] += offset; - this.onError(pos, 'BAD_DIRECTIVE', message, warning); - }); - this.prelude.push(token.source); - this.atDirectives = true; - break; - case 'document': { - const doc = composeDoc(this.options, this.directives, token, this.onError); - if (this.atDirectives && !doc.directives.docStart) - this.onError(token, 'MISSING_CHAR', 'Missing directives-end/doc-start indicator line'); - this.decorate(doc, false); - if (this.doc) - yield this.doc; - this.doc = doc; - this.atDirectives = false; - break; - } - case 'byte-order-mark': - case 'space': - break; - case 'comment': - case 'newline': - this.prelude.push(token.source); - break; - case 'error': { - const msg = token.source - ? `${token.message}: ${JSON.stringify(token.source)}` - : token.message; - const error = new YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg); - if (this.atDirectives || !this.doc) - this.errors.push(error); - else - this.doc.errors.push(error); - break; - } - case 'doc-end': { - if (!this.doc) { - const msg = 'Unexpected doc-end without preceding document'; - this.errors.push(new YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg)); - break; - } - this.doc.directives.docEnd = true; - const end = resolveEnd(token.end, token.offset + token.source.length, this.doc.options.strict, this.onError); - this.decorate(this.doc, true); - if (end.comment) { - const dc = this.doc.comment; - this.doc.comment = dc ? `${dc}\n${end.comment}` : end.comment; - } - this.doc.range[2] = end.offset; - break; - } - default: - this.errors.push(new YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', `Unsupported token ${token.type}`)); - } - } - /** - * Call at end of input to yield any remaining document. - * - * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document. - * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly. - */ - *end(forceDoc = false, endOffset = -1) { - if (this.doc) { - this.decorate(this.doc, true); - yield this.doc; - this.doc = null; - } - else if (forceDoc) { - const opts = Object.assign({ _directives: this.directives }, this.options); - const doc = new Document(undefined, opts); - if (this.atDirectives) - this.onError(endOffset, 'MISSING_CHAR', 'Missing directives-end indicator line'); - doc.range = [0, endOffset, endOffset]; - this.decorate(doc, false); - yield doc; - } - } -} - -export { Composer }; diff --git a/tools/yaml/browser/dist/compose/resolve-block-map.js b/tools/yaml/browser/dist/compose/resolve-block-map.js deleted file mode 100644 index 679b3de..0000000 --- a/tools/yaml/browser/dist/compose/resolve-block-map.js +++ /dev/null @@ -1,111 +0,0 @@ -import { Pair } from '../nodes/Pair.js'; -import { YAMLMap } from '../nodes/YAMLMap.js'; -import { resolveProps } from './resolve-props.js'; -import { containsNewline } from './util-contains-newline.js'; -import { flowIndentCheck } from './util-flow-indent-check.js'; -import { mapIncludes } from './util-map-includes.js'; - -const startColMsg = 'All mapping items must start at the same column'; -function resolveBlockMap({ composeNode, composeEmptyNode }, ctx, bm, onError, tag) { - const NodeClass = tag?.nodeClass ?? YAMLMap; - const map = new NodeClass(ctx.schema); - if (ctx.atRoot) - ctx.atRoot = false; - let offset = bm.offset; - let commentEnd = null; - for (const collItem of bm.items) { - const { start, key, sep, value } = collItem; - // key properties - const keyProps = resolveProps(start, { - indicator: 'explicit-key-ind', - next: key ?? sep?.[0], - offset, - onError, - startOnNewline: true - }); - const implicitKey = !keyProps.found; - if (implicitKey) { - if (key) { - if (key.type === 'block-seq') - onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'A block sequence may not be used as an implicit map key'); - else if ('indent' in key && key.indent !== bm.indent) - onError(offset, 'BAD_INDENT', startColMsg); - } - if (!keyProps.anchor && !keyProps.tag && !sep) { - commentEnd = keyProps.end; - if (keyProps.comment) { - if (map.comment) - map.comment += '\n' + keyProps.comment; - else - map.comment = keyProps.comment; - } - continue; - } - if (keyProps.hasNewlineAfterProp || containsNewline(key)) { - onError(key ?? start[start.length - 1], 'MULTILINE_IMPLICIT_KEY', 'Implicit keys need to be on a single line'); - } - } - else if (keyProps.found?.indent !== bm.indent) { - onError(offset, 'BAD_INDENT', startColMsg); - } - // key value - const keyStart = keyProps.end; - const keyNode = key - ? composeNode(ctx, key, keyProps, onError) - : composeEmptyNode(ctx, keyStart, start, null, keyProps, onError); - if (ctx.schema.compat) - flowIndentCheck(bm.indent, key, onError); - if (mapIncludes(ctx, map.items, keyNode)) - onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique'); - // value properties - const valueProps = resolveProps(sep ?? [], { - indicator: 'map-value-ind', - next: value, - offset: keyNode.range[2], - onError, - startOnNewline: !key || key.type === 'block-scalar' - }); - offset = valueProps.end; - if (valueProps.found) { - if (implicitKey) { - if (value?.type === 'block-map' && !valueProps.hasNewline) - onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'Nested mappings are not allowed in compact mappings'); - if (ctx.options.strict && - keyProps.start < valueProps.found.offset - 1024) - onError(keyNode.range, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit block mapping key'); - } - // value value - const valueNode = value - ? composeNode(ctx, value, valueProps, onError) - : composeEmptyNode(ctx, offset, sep, null, valueProps, onError); - if (ctx.schema.compat) - flowIndentCheck(bm.indent, value, onError); - offset = valueNode.range[2]; - const pair = new Pair(keyNode, valueNode); - if (ctx.options.keepSourceTokens) - pair.srcToken = collItem; - map.items.push(pair); - } - else { - // key with no value - if (implicitKey) - onError(keyNode.range, 'MISSING_CHAR', 'Implicit map keys need to be followed by map values'); - if (valueProps.comment) { - if (keyNode.comment) - keyNode.comment += '\n' + valueProps.comment; - else - keyNode.comment = valueProps.comment; - } - const pair = new Pair(keyNode); - if (ctx.options.keepSourceTokens) - pair.srcToken = collItem; - map.items.push(pair); - } - } - if (commentEnd && commentEnd < offset) - onError(commentEnd, 'IMPOSSIBLE', 'Map comment with trailing content'); - map.range = [bm.offset, offset, commentEnd ?? offset]; - return map; -} - -export { resolveBlockMap }; diff --git a/tools/yaml/browser/dist/compose/resolve-block-scalar.js b/tools/yaml/browser/dist/compose/resolve-block-scalar.js deleted file mode 100644 index 592d807..0000000 --- a/tools/yaml/browser/dist/compose/resolve-block-scalar.js +++ /dev/null @@ -1,194 +0,0 @@ -import { Scalar } from '../nodes/Scalar.js'; - -function resolveBlockScalar(scalar, strict, onError) { - const start = scalar.offset; - const header = parseBlockScalarHeader(scalar, strict, onError); - if (!header) - return { value: '', type: null, comment: '', range: [start, start, start] }; - const type = header.mode === '>' ? Scalar.BLOCK_FOLDED : Scalar.BLOCK_LITERAL; - const lines = scalar.source ? splitLines(scalar.source) : []; - // determine the end of content & start of chomping - let chompStart = lines.length; - for (let i = lines.length - 1; i >= 0; --i) { - const content = lines[i][1]; - if (content === '' || content === '\r') - chompStart = i; - else - break; - } - // shortcut for empty contents - if (chompStart === 0) { - const value = header.chomp === '+' && lines.length > 0 - ? '\n'.repeat(Math.max(1, lines.length - 1)) - : ''; - let end = start + header.length; - if (scalar.source) - end += scalar.source.length; - return { value, type, comment: header.comment, range: [start, end, end] }; - } - // find the indentation level to trim from start - let trimIndent = scalar.indent + header.indent; - let offset = scalar.offset + header.length; - let contentStart = 0; - for (let i = 0; i < chompStart; ++i) { - const [indent, content] = lines[i]; - if (content === '' || content === '\r') { - if (header.indent === 0 && indent.length > trimIndent) - trimIndent = indent.length; - } - else { - if (indent.length < trimIndent) { - const message = 'Block scalars with more-indented leading empty lines must use an explicit indentation indicator'; - onError(offset + indent.length, 'MISSING_CHAR', message); - } - if (header.indent === 0) - trimIndent = indent.length; - contentStart = i; - break; - } - offset += indent.length + content.length + 1; - } - // include trailing more-indented empty lines in content - for (let i = lines.length - 1; i >= chompStart; --i) { - if (lines[i][0].length > trimIndent) - chompStart = i + 1; - } - let value = ''; - let sep = ''; - let prevMoreIndented = false; - // leading whitespace is kept intact - for (let i = 0; i < contentStart; ++i) - value += lines[i][0].slice(trimIndent) + '\n'; - for (let i = contentStart; i < chompStart; ++i) { - let [indent, content] = lines[i]; - offset += indent.length + content.length + 1; - const crlf = content[content.length - 1] === '\r'; - if (crlf) - content = content.slice(0, -1); - /* istanbul ignore if already caught in lexer */ - if (content && indent.length < trimIndent) { - const src = header.indent - ? 'explicit indentation indicator' - : 'first line'; - const message = `Block scalar lines must not be less indented than their ${src}`; - onError(offset - content.length - (crlf ? 2 : 1), 'BAD_INDENT', message); - indent = ''; - } - if (type === Scalar.BLOCK_LITERAL) { - value += sep + indent.slice(trimIndent) + content; - sep = '\n'; - } - else if (indent.length > trimIndent || content[0] === '\t') { - // more-indented content within a folded block - if (sep === ' ') - sep = '\n'; - else if (!prevMoreIndented && sep === '\n') - sep = '\n\n'; - value += sep + indent.slice(trimIndent) + content; - sep = '\n'; - prevMoreIndented = true; - } - else if (content === '') { - // empty line - if (sep === '\n') - value += '\n'; - else - sep = '\n'; - } - else { - value += sep + content; - sep = ' '; - prevMoreIndented = false; - } - } - switch (header.chomp) { - case '-': - break; - case '+': - for (let i = chompStart; i < lines.length; ++i) - value += '\n' + lines[i][0].slice(trimIndent); - if (value[value.length - 1] !== '\n') - value += '\n'; - break; - default: - value += '\n'; - } - const end = start + header.length + scalar.source.length; - return { value, type, comment: header.comment, range: [start, end, end] }; -} -function parseBlockScalarHeader({ offset, props }, strict, onError) { - /* istanbul ignore if should not happen */ - if (props[0].type !== 'block-scalar-header') { - onError(props[0], 'IMPOSSIBLE', 'Block scalar header not found'); - return null; - } - const { source } = props[0]; - const mode = source[0]; - let indent = 0; - let chomp = ''; - let error = -1; - for (let i = 1; i < source.length; ++i) { - const ch = source[i]; - if (!chomp && (ch === '-' || ch === '+')) - chomp = ch; - else { - const n = Number(ch); - if (!indent && n) - indent = n; - else if (error === -1) - error = offset + i; - } - } - if (error !== -1) - onError(error, 'UNEXPECTED_TOKEN', `Block scalar header includes extra characters: ${source}`); - let hasSpace = false; - let comment = ''; - let length = source.length; - for (let i = 1; i < props.length; ++i) { - const token = props[i]; - switch (token.type) { - case 'space': - hasSpace = true; - // fallthrough - case 'newline': - length += token.source.length; - break; - case 'comment': - if (strict && !hasSpace) { - const message = 'Comments must be separated from other tokens by white space characters'; - onError(token, 'MISSING_CHAR', message); - } - length += token.source.length; - comment = token.source.substring(1); - break; - case 'error': - onError(token, 'UNEXPECTED_TOKEN', token.message); - length += token.source.length; - break; - /* istanbul ignore next should not happen */ - default: { - const message = `Unexpected token in block scalar header: ${token.type}`; - onError(token, 'UNEXPECTED_TOKEN', message); - const ts = token.source; - if (ts && typeof ts === 'string') - length += ts.length; - } - } - } - return { mode, indent, chomp, comment, length }; -} -/** @returns Array of lines split up as `[indent, content]` */ -function splitLines(source) { - const split = source.split(/\n( *)/); - const first = split[0]; - const m = first.match(/^( *)/); - const line0 = m?.[1] - ? [m[1], first.slice(m[1].length)] - : ['', first]; - const lines = [line0]; - for (let i = 1; i < split.length; i += 2) - lines.push([split[i], split[i + 1]]); - return lines; -} - -export { resolveBlockScalar }; diff --git a/tools/yaml/browser/dist/compose/resolve-block-seq.js b/tools/yaml/browser/dist/compose/resolve-block-seq.js deleted file mode 100644 index 3241ca7..0000000 --- a/tools/yaml/browser/dist/compose/resolve-block-seq.js +++ /dev/null @@ -1,46 +0,0 @@ -import { YAMLSeq } from '../nodes/YAMLSeq.js'; -import { resolveProps } from './resolve-props.js'; -import { flowIndentCheck } from './util-flow-indent-check.js'; - -function resolveBlockSeq({ composeNode, composeEmptyNode }, ctx, bs, onError, tag) { - const NodeClass = tag?.nodeClass ?? YAMLSeq; - const seq = new NodeClass(ctx.schema); - if (ctx.atRoot) - ctx.atRoot = false; - let offset = bs.offset; - let commentEnd = null; - for (const { start, value } of bs.items) { - const props = resolveProps(start, { - indicator: 'seq-item-ind', - next: value, - offset, - onError, - startOnNewline: true - }); - if (!props.found) { - if (props.anchor || props.tag || value) { - if (value && value.type === 'block-seq') - onError(props.end, 'BAD_INDENT', 'All sequence items must start at the same column'); - else - onError(offset, 'MISSING_CHAR', 'Sequence item without - indicator'); - } - else { - commentEnd = props.end; - if (props.comment) - seq.comment = props.comment; - continue; - } - } - const node = value - ? composeNode(ctx, value, props, onError) - : composeEmptyNode(ctx, props.end, start, null, props, onError); - if (ctx.schema.compat) - flowIndentCheck(bs.indent, value, onError); - offset = node.range[2]; - seq.items.push(node); - } - seq.range = [bs.offset, offset, commentEnd ?? offset]; - return seq; -} - -export { resolveBlockSeq }; diff --git a/tools/yaml/browser/dist/compose/resolve-end.js b/tools/yaml/browser/dist/compose/resolve-end.js deleted file mode 100644 index d5c65d7..0000000 --- a/tools/yaml/browser/dist/compose/resolve-end.js +++ /dev/null @@ -1,37 +0,0 @@ -function resolveEnd(end, offset, reqSpace, onError) { - let comment = ''; - if (end) { - let hasSpace = false; - let sep = ''; - for (const token of end) { - const { source, type } = token; - switch (type) { - case 'space': - hasSpace = true; - break; - case 'comment': { - if (reqSpace && !hasSpace) - onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters'); - const cb = source.substring(1) || ' '; - if (!comment) - comment = cb; - else - comment += sep + cb; - sep = ''; - break; - } - case 'newline': - if (comment) - sep += source; - hasSpace = true; - break; - default: - onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${type} at node end`); - } - offset += source.length; - } - } - return { comment, offset }; -} - -export { resolveEnd }; diff --git a/tools/yaml/browser/dist/compose/resolve-flow-collection.js b/tools/yaml/browser/dist/compose/resolve-flow-collection.js deleted file mode 100644 index fdf929a..0000000 --- a/tools/yaml/browser/dist/compose/resolve-flow-collection.js +++ /dev/null @@ -1,199 +0,0 @@ -import { isPair } from '../nodes/identity.js'; -import { Pair } from '../nodes/Pair.js'; -import { YAMLMap } from '../nodes/YAMLMap.js'; -import { YAMLSeq } from '../nodes/YAMLSeq.js'; -import { resolveEnd } from './resolve-end.js'; -import { resolveProps } from './resolve-props.js'; -import { containsNewline } from './util-contains-newline.js'; -import { mapIncludes } from './util-map-includes.js'; - -const blockMsg = 'Block collections are not allowed within flow collections'; -const isBlock = (token) => token && (token.type === 'block-map' || token.type === 'block-seq'); -function resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onError, tag) { - const isMap = fc.start.source === '{'; - const fcName = isMap ? 'flow map' : 'flow sequence'; - const NodeClass = (tag?.nodeClass ?? (isMap ? YAMLMap : YAMLSeq)); - const coll = new NodeClass(ctx.schema); - coll.flow = true; - const atRoot = ctx.atRoot; - if (atRoot) - ctx.atRoot = false; - let offset = fc.offset + fc.start.source.length; - for (let i = 0; i < fc.items.length; ++i) { - const collItem = fc.items[i]; - const { start, key, sep, value } = collItem; - const props = resolveProps(start, { - flow: fcName, - indicator: 'explicit-key-ind', - next: key ?? sep?.[0], - offset, - onError, - startOnNewline: false - }); - if (!props.found) { - if (!props.anchor && !props.tag && !sep && !value) { - if (i === 0 && props.comma) - onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`); - else if (i < fc.items.length - 1) - onError(props.start, 'UNEXPECTED_TOKEN', `Unexpected empty item in ${fcName}`); - if (props.comment) { - if (coll.comment) - coll.comment += '\n' + props.comment; - else - coll.comment = props.comment; - } - offset = props.end; - continue; - } - if (!isMap && ctx.options.strict && containsNewline(key)) - onError(key, // checked by containsNewline() - 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line'); - } - if (i === 0) { - if (props.comma) - onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`); - } - else { - if (!props.comma) - onError(props.start, 'MISSING_CHAR', `Missing , between ${fcName} items`); - if (props.comment) { - let prevItemComment = ''; - loop: for (const st of start) { - switch (st.type) { - case 'comma': - case 'space': - break; - case 'comment': - prevItemComment = st.source.substring(1); - break loop; - default: - break loop; - } - } - if (prevItemComment) { - let prev = coll.items[coll.items.length - 1]; - if (isPair(prev)) - prev = prev.value ?? prev.key; - if (prev.comment) - prev.comment += '\n' + prevItemComment; - else - prev.comment = prevItemComment; - props.comment = props.comment.substring(prevItemComment.length + 1); - } - } - } - if (!isMap && !sep && !props.found) { - // item is a value in a seq - // → key & sep are empty, start does not include ? or : - const valueNode = value - ? composeNode(ctx, value, props, onError) - : composeEmptyNode(ctx, props.end, sep, null, props, onError); - coll.items.push(valueNode); - offset = valueNode.range[2]; - if (isBlock(value)) - onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg); - } - else { - // item is a key+value pair - // key value - const keyStart = props.end; - const keyNode = key - ? composeNode(ctx, key, props, onError) - : composeEmptyNode(ctx, keyStart, start, null, props, onError); - if (isBlock(key)) - onError(keyNode.range, 'BLOCK_IN_FLOW', blockMsg); - // value properties - const valueProps = resolveProps(sep ?? [], { - flow: fcName, - indicator: 'map-value-ind', - next: value, - offset: keyNode.range[2], - onError, - startOnNewline: false - }); - if (valueProps.found) { - if (!isMap && !props.found && ctx.options.strict) { - if (sep) - for (const st of sep) { - if (st === valueProps.found) - break; - if (st.type === 'newline') { - onError(st, 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line'); - break; - } - } - if (props.start < valueProps.found.offset - 1024) - onError(valueProps.found, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit flow sequence key'); - } - } - else if (value) { - if ('source' in value && value.source && value.source[0] === ':') - onError(value, 'MISSING_CHAR', `Missing space after : in ${fcName}`); - else - onError(valueProps.start, 'MISSING_CHAR', `Missing , or : between ${fcName} items`); - } - // value value - const valueNode = value - ? composeNode(ctx, value, valueProps, onError) - : valueProps.found - ? composeEmptyNode(ctx, valueProps.end, sep, null, valueProps, onError) - : null; - if (valueNode) { - if (isBlock(value)) - onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg); - } - else if (valueProps.comment) { - if (keyNode.comment) - keyNode.comment += '\n' + valueProps.comment; - else - keyNode.comment = valueProps.comment; - } - const pair = new Pair(keyNode, valueNode); - if (ctx.options.keepSourceTokens) - pair.srcToken = collItem; - if (isMap) { - const map = coll; - if (mapIncludes(ctx, map.items, keyNode)) - onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique'); - map.items.push(pair); - } - else { - const map = new YAMLMap(ctx.schema); - map.flow = true; - map.items.push(pair); - coll.items.push(map); - } - offset = valueNode ? valueNode.range[2] : valueProps.end; - } - } - const expectedEnd = isMap ? '}' : ']'; - const [ce, ...ee] = fc.end; - let cePos = offset; - if (ce && ce.source === expectedEnd) - cePos = ce.offset + ce.source.length; - else { - const name = fcName[0].toUpperCase() + fcName.substring(1); - const msg = atRoot - ? `${name} must end with a ${expectedEnd}` - : `${name} in block collection must be sufficiently indented and end with a ${expectedEnd}`; - onError(offset, atRoot ? 'MISSING_CHAR' : 'BAD_INDENT', msg); - if (ce && ce.source.length !== 1) - ee.unshift(ce); - } - if (ee.length > 0) { - const end = resolveEnd(ee, cePos, ctx.options.strict, onError); - if (end.comment) { - if (coll.comment) - coll.comment += '\n' + end.comment; - else - coll.comment = end.comment; - } - coll.range = [fc.offset, cePos, end.offset]; - } - else { - coll.range = [fc.offset, cePos, cePos]; - } - return coll; -} - -export { resolveFlowCollection }; diff --git a/tools/yaml/browser/dist/compose/resolve-flow-scalar.js b/tools/yaml/browser/dist/compose/resolve-flow-scalar.js deleted file mode 100644 index 501cf39..0000000 --- a/tools/yaml/browser/dist/compose/resolve-flow-scalar.js +++ /dev/null @@ -1,223 +0,0 @@ -import { Scalar } from '../nodes/Scalar.js'; -import { resolveEnd } from './resolve-end.js'; - -function resolveFlowScalar(scalar, strict, onError) { - const { offset, type, source, end } = scalar; - let _type; - let value; - const _onError = (rel, code, msg) => onError(offset + rel, code, msg); - switch (type) { - case 'scalar': - _type = Scalar.PLAIN; - value = plainValue(source, _onError); - break; - case 'single-quoted-scalar': - _type = Scalar.QUOTE_SINGLE; - value = singleQuotedValue(source, _onError); - break; - case 'double-quoted-scalar': - _type = Scalar.QUOTE_DOUBLE; - value = doubleQuotedValue(source, _onError); - break; - /* istanbul ignore next should not happen */ - default: - onError(scalar, 'UNEXPECTED_TOKEN', `Expected a flow scalar value, but found: ${type}`); - return { - value: '', - type: null, - comment: '', - range: [offset, offset + source.length, offset + source.length] - }; - } - const valueEnd = offset + source.length; - const re = resolveEnd(end, valueEnd, strict, onError); - return { - value, - type: _type, - comment: re.comment, - range: [offset, valueEnd, re.offset] - }; -} -function plainValue(source, onError) { - let badChar = ''; - switch (source[0]) { - /* istanbul ignore next should not happen */ - case '\t': - badChar = 'a tab character'; - break; - case ',': - badChar = 'flow indicator character ,'; - break; - case '%': - badChar = 'directive indicator character %'; - break; - case '|': - case '>': { - badChar = `block scalar indicator ${source[0]}`; - break; - } - case '@': - case '`': { - badChar = `reserved character ${source[0]}`; - break; - } - } - if (badChar) - onError(0, 'BAD_SCALAR_START', `Plain value cannot start with ${badChar}`); - return foldLines(source); -} -function singleQuotedValue(source, onError) { - if (source[source.length - 1] !== "'" || source.length === 1) - onError(source.length, 'MISSING_CHAR', "Missing closing 'quote"); - return foldLines(source.slice(1, -1)).replace(/''/g, "'"); -} -function foldLines(source) { - /** - * The negative lookbehind here and in the `re` RegExp is to - * prevent causing a polynomial search time in certain cases. - * - * The try-catch is for Safari, which doesn't support this yet: - * https://caniuse.com/js-regexp-lookbehind - */ - let first, line; - try { - first = new RegExp('(.*?)(? wsStart ? source.slice(wsStart, i + 1) : ch; - } - else { - res += ch; - } - } - if (source[source.length - 1] !== '"' || source.length === 1) - onError(source.length, 'MISSING_CHAR', 'Missing closing "quote'); - return res; -} -/** - * Fold a single newline into a space, multiple newlines to N - 1 newlines. - * Presumes `source[offset] === '\n'` - */ -function foldNewline(source, offset) { - let fold = ''; - let ch = source[offset + 1]; - while (ch === ' ' || ch === '\t' || ch === '\n' || ch === '\r') { - if (ch === '\r' && source[offset + 2] !== '\n') - break; - if (ch === '\n') - fold += '\n'; - offset += 1; - ch = source[offset + 1]; - } - if (!fold) - fold = ' '; - return { fold, offset }; -} -const escapeCodes = { - '0': '\0', - a: '\x07', - b: '\b', - e: '\x1b', - f: '\f', - n: '\n', - r: '\r', - t: '\t', - v: '\v', - N: '\u0085', - _: '\u00a0', - L: '\u2028', - P: '\u2029', - ' ': ' ', - '"': '"', - '/': '/', - '\\': '\\', - '\t': '\t' -}; -function parseCharCode(source, offset, length, onError) { - const cc = source.substr(offset, length); - const ok = cc.length === length && /^[0-9a-fA-F]+$/.test(cc); - const code = ok ? parseInt(cc, 16) : NaN; - if (isNaN(code)) { - const raw = source.substr(offset - 2, length + 2); - onError(offset - 2, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`); - return raw; - } - return String.fromCodePoint(code); -} - -export { resolveFlowScalar }; diff --git a/tools/yaml/browser/dist/compose/resolve-props.js b/tools/yaml/browser/dist/compose/resolve-props.js deleted file mode 100644 index ab30f56..0000000 --- a/tools/yaml/browser/dist/compose/resolve-props.js +++ /dev/null @@ -1,134 +0,0 @@ -function resolveProps(tokens, { flow, indicator, next, offset, onError, startOnNewline }) { - let spaceBefore = false; - let atNewline = startOnNewline; - let hasSpace = startOnNewline; - let comment = ''; - let commentSep = ''; - let hasNewline = false; - let hasNewlineAfterProp = false; - let reqSpace = false; - let anchor = null; - let tag = null; - let comma = null; - let found = null; - let start = null; - for (const token of tokens) { - if (reqSpace) { - if (token.type !== 'space' && - token.type !== 'newline' && - token.type !== 'comma') - onError(token.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space'); - reqSpace = false; - } - switch (token.type) { - case 'space': - // At the doc level, tabs at line start may be parsed - // as leading white space rather than indentation. - // In a flow collection, only the parser handles indent. - if (!flow && - atNewline && - indicator !== 'doc-start' && - token.source[0] === '\t') - onError(token, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation'); - hasSpace = true; - break; - case 'comment': { - if (!hasSpace) - onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters'); - const cb = token.source.substring(1) || ' '; - if (!comment) - comment = cb; - else - comment += commentSep + cb; - commentSep = ''; - atNewline = false; - break; - } - case 'newline': - if (atNewline) { - if (comment) - comment += token.source; - else - spaceBefore = true; - } - else - commentSep += token.source; - atNewline = true; - hasNewline = true; - if (anchor || tag) - hasNewlineAfterProp = true; - hasSpace = true; - break; - case 'anchor': - if (anchor) - onError(token, 'MULTIPLE_ANCHORS', 'A node can have at most one anchor'); - if (token.source.endsWith(':')) - onError(token.offset + token.source.length - 1, 'BAD_ALIAS', 'Anchor ending in : is ambiguous', true); - anchor = token; - if (start === null) - start = token.offset; - atNewline = false; - hasSpace = false; - reqSpace = true; - break; - case 'tag': { - if (tag) - onError(token, 'MULTIPLE_TAGS', 'A node can have at most one tag'); - tag = token; - if (start === null) - start = token.offset; - atNewline = false; - hasSpace = false; - reqSpace = true; - break; - } - case indicator: - // Could here handle preceding comments differently - if (anchor || tag) - onError(token, 'BAD_PROP_ORDER', `Anchors and tags must be after the ${token.source} indicator`); - if (found) - onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.source} in ${flow ?? 'collection'}`); - found = token; - atNewline = false; - hasSpace = false; - break; - case 'comma': - if (flow) { - if (comma) - onError(token, 'UNEXPECTED_TOKEN', `Unexpected , in ${flow}`); - comma = token; - atNewline = false; - hasSpace = false; - break; - } - // else fallthrough - default: - onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.type} token`); - atNewline = false; - hasSpace = false; - } - } - const last = tokens[tokens.length - 1]; - const end = last ? last.offset + last.source.length : offset; - if (reqSpace && - next && - next.type !== 'space' && - next.type !== 'newline' && - next.type !== 'comma' && - (next.type !== 'scalar' || next.source !== '')) - onError(next.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space'); - return { - comma, - found, - spaceBefore, - comment, - hasNewline, - hasNewlineAfterProp, - anchor, - tag, - end, - start: start ?? end - }; -} - -export { resolveProps }; diff --git a/tools/yaml/browser/dist/compose/util-contains-newline.js b/tools/yaml/browser/dist/compose/util-contains-newline.js deleted file mode 100644 index 2d65390..0000000 --- a/tools/yaml/browser/dist/compose/util-contains-newline.js +++ /dev/null @@ -1,34 +0,0 @@ -function containsNewline(key) { - if (!key) - return null; - switch (key.type) { - case 'alias': - case 'scalar': - case 'double-quoted-scalar': - case 'single-quoted-scalar': - if (key.source.includes('\n')) - return true; - if (key.end) - for (const st of key.end) - if (st.type === 'newline') - return true; - return false; - case 'flow-collection': - for (const it of key.items) { - for (const st of it.start) - if (st.type === 'newline') - return true; - if (it.sep) - for (const st of it.sep) - if (st.type === 'newline') - return true; - if (containsNewline(it.key) || containsNewline(it.value)) - return true; - } - return false; - default: - return true; - } -} - -export { containsNewline }; diff --git a/tools/yaml/browser/dist/compose/util-empty-scalar-position.js b/tools/yaml/browser/dist/compose/util-empty-scalar-position.js deleted file mode 100644 index ab6e0c9..0000000 --- a/tools/yaml/browser/dist/compose/util-empty-scalar-position.js +++ /dev/null @@ -1,27 +0,0 @@ -function emptyScalarPosition(offset, before, pos) { - if (before) { - if (pos === null) - pos = before.length; - for (let i = pos - 1; i >= 0; --i) { - let st = before[i]; - switch (st.type) { - case 'space': - case 'comment': - case 'newline': - offset -= st.source.length; - continue; - } - // Technically, an empty scalar is immediately after the last non-empty - // node, but it's more useful to place it after any whitespace. - st = before[++i]; - while (st?.type === 'space') { - offset += st.source.length; - st = before[++i]; - } - break; - } - } - return offset; -} - -export { emptyScalarPosition }; diff --git a/tools/yaml/browser/dist/compose/util-flow-indent-check.js b/tools/yaml/browser/dist/compose/util-flow-indent-check.js deleted file mode 100644 index c20e670..0000000 --- a/tools/yaml/browser/dist/compose/util-flow-indent-check.js +++ /dev/null @@ -1,15 +0,0 @@ -import { containsNewline } from './util-contains-newline.js'; - -function flowIndentCheck(indent, fc, onError) { - if (fc?.type === 'flow-collection') { - const end = fc.end[0]; - if (end.indent === indent && - (end.source === ']' || end.source === '}') && - containsNewline(fc)) { - const msg = 'Flow end indicator should be more indented than parent'; - onError(end, 'BAD_INDENT', msg, true); - } - } -} - -export { flowIndentCheck }; diff --git a/tools/yaml/browser/dist/compose/util-map-includes.js b/tools/yaml/browser/dist/compose/util-map-includes.js deleted file mode 100644 index 4e7c269..0000000 --- a/tools/yaml/browser/dist/compose/util-map-includes.js +++ /dev/null @@ -1,17 +0,0 @@ -import { isScalar } from '../nodes/identity.js'; - -function mapIncludes(ctx, items, search) { - const { uniqueKeys } = ctx.options; - if (uniqueKeys === false) - return false; - const isEqual = typeof uniqueKeys === 'function' - ? uniqueKeys - : (a, b) => a === b || - (isScalar(a) && - isScalar(b) && - a.value === b.value && - !(a.value === '<<' && ctx.schema.merge)); - return items.some(pair => isEqual(pair.key, search)); -} - -export { mapIncludes }; diff --git a/tools/yaml/browser/dist/doc/Document.js b/tools/yaml/browser/dist/doc/Document.js deleted file mode 100644 index ad63426..0000000 --- a/tools/yaml/browser/dist/doc/Document.js +++ /dev/null @@ -1,334 +0,0 @@ -import { Alias } from '../nodes/Alias.js'; -import { isEmptyPath, collectionFromPath } from '../nodes/Collection.js'; -import { NODE_TYPE, DOC, isNode, isCollection, isScalar } from '../nodes/identity.js'; -import { Pair } from '../nodes/Pair.js'; -import { toJS } from '../nodes/toJS.js'; -import { Schema } from '../schema/Schema.js'; -import { stringifyDocument } from '../stringify/stringifyDocument.js'; -import { anchorNames, findNewAnchor, createNodeAnchors } from './anchors.js'; -import { applyReviver } from './applyReviver.js'; -import { createNode } from './createNode.js'; -import { Directives } from './directives.js'; - -class Document { - constructor(value, replacer, options) { - /** A comment before this Document */ - this.commentBefore = null; - /** A comment immediately after this Document */ - this.comment = null; - /** Errors encountered during parsing. */ - this.errors = []; - /** Warnings encountered during parsing. */ - this.warnings = []; - Object.defineProperty(this, NODE_TYPE, { value: DOC }); - let _replacer = null; - if (typeof replacer === 'function' || Array.isArray(replacer)) { - _replacer = replacer; - } - else if (options === undefined && replacer) { - options = replacer; - replacer = undefined; - } - const opt = Object.assign({ - intAsBigInt: false, - keepSourceTokens: false, - logLevel: 'warn', - prettyErrors: true, - strict: true, - uniqueKeys: true, - version: '1.2' - }, options); - this.options = opt; - let { version } = opt; - if (options?._directives) { - this.directives = options._directives.atDocument(); - if (this.directives.yaml.explicit) - version = this.directives.yaml.version; - } - else - this.directives = new Directives({ version }); - this.setSchema(version, options); - // @ts-expect-error We can't really know that this matches Contents. - this.contents = - value === undefined ? null : this.createNode(value, _replacer, options); - } - /** - * Create a deep copy of this Document and its contents. - * - * Custom Node values that inherit from `Object` still refer to their original instances. - */ - clone() { - const copy = Object.create(Document.prototype, { - [NODE_TYPE]: { value: DOC } - }); - copy.commentBefore = this.commentBefore; - copy.comment = this.comment; - copy.errors = this.errors.slice(); - copy.warnings = this.warnings.slice(); - copy.options = Object.assign({}, this.options); - if (this.directives) - copy.directives = this.directives.clone(); - copy.schema = this.schema.clone(); - // @ts-expect-error We can't really know that this matches Contents. - copy.contents = isNode(this.contents) - ? this.contents.clone(copy.schema) - : this.contents; - if (this.range) - copy.range = this.range.slice(); - return copy; - } - /** Adds a value to the document. */ - add(value) { - if (assertCollection(this.contents)) - this.contents.add(value); - } - /** Adds a value to the document. */ - addIn(path, value) { - if (assertCollection(this.contents)) - this.contents.addIn(path, value); - } - /** - * Create a new `Alias` node, ensuring that the target `node` has the required anchor. - * - * If `node` already has an anchor, `name` is ignored. - * Otherwise, the `node.anchor` value will be set to `name`, - * or if an anchor with that name is already present in the document, - * `name` will be used as a prefix for a new unique anchor. - * If `name` is undefined, the generated anchor will use 'a' as a prefix. - */ - createAlias(node, name) { - if (!node.anchor) { - const prev = anchorNames(this); - node.anchor = - // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing - !name || prev.has(name) ? findNewAnchor(name || 'a', prev) : name; - } - return new Alias(node.anchor); - } - createNode(value, replacer, options) { - let _replacer = undefined; - if (typeof replacer === 'function') { - value = replacer.call({ '': value }, '', value); - _replacer = replacer; - } - else if (Array.isArray(replacer)) { - const keyToStr = (v) => typeof v === 'number' || v instanceof String || v instanceof Number; - const asStr = replacer.filter(keyToStr).map(String); - if (asStr.length > 0) - replacer = replacer.concat(asStr); - _replacer = replacer; - } - else if (options === undefined && replacer) { - options = replacer; - replacer = undefined; - } - const { aliasDuplicateObjects, anchorPrefix, flow, keepUndefined, onTagObj, tag } = options ?? {}; - const { onAnchor, setAnchors, sourceObjects } = createNodeAnchors(this, - // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing - anchorPrefix || 'a'); - const ctx = { - aliasDuplicateObjects: aliasDuplicateObjects ?? true, - keepUndefined: keepUndefined ?? false, - onAnchor, - onTagObj, - replacer: _replacer, - schema: this.schema, - sourceObjects - }; - const node = createNode(value, tag, ctx); - if (flow && isCollection(node)) - node.flow = true; - setAnchors(); - return node; - } - /** - * Convert a key and a value into a `Pair` using the current schema, - * recursively wrapping all values as `Scalar` or `Collection` nodes. - */ - createPair(key, value, options = {}) { - const k = this.createNode(key, null, options); - const v = this.createNode(value, null, options); - return new Pair(k, v); - } - /** - * Removes a value from the document. - * @returns `true` if the item was found and removed. - */ - delete(key) { - return assertCollection(this.contents) ? this.contents.delete(key) : false; - } - /** - * Removes a value from the document. - * @returns `true` if the item was found and removed. - */ - deleteIn(path) { - if (isEmptyPath(path)) { - if (this.contents == null) - return false; - // @ts-expect-error Presumed impossible if Strict extends false - this.contents = null; - return true; - } - return assertCollection(this.contents) - ? this.contents.deleteIn(path) - : false; - } - /** - * Returns item at `key`, or `undefined` if not found. By default unwraps - * scalar values from their surrounding node; to disable set `keepScalar` to - * `true` (collections are always returned intact). - */ - get(key, keepScalar) { - return isCollection(this.contents) - ? this.contents.get(key, keepScalar) - : undefined; - } - /** - * Returns item at `path`, or `undefined` if not found. By default unwraps - * scalar values from their surrounding node; to disable set `keepScalar` to - * `true` (collections are always returned intact). - */ - getIn(path, keepScalar) { - if (isEmptyPath(path)) - return !keepScalar && isScalar(this.contents) - ? this.contents.value - : this.contents; - return isCollection(this.contents) - ? this.contents.getIn(path, keepScalar) - : undefined; - } - /** - * Checks if the document includes a value with the key `key`. - */ - has(key) { - return isCollection(this.contents) ? this.contents.has(key) : false; - } - /** - * Checks if the document includes a value at `path`. - */ - hasIn(path) { - if (isEmptyPath(path)) - return this.contents !== undefined; - return isCollection(this.contents) ? this.contents.hasIn(path) : false; - } - /** - * Sets a value in this document. For `!!set`, `value` needs to be a - * boolean to add/remove the item from the set. - */ - set(key, value) { - if (this.contents == null) { - // @ts-expect-error We can't really know that this matches Contents. - this.contents = collectionFromPath(this.schema, [key], value); - } - else if (assertCollection(this.contents)) { - this.contents.set(key, value); - } - } - /** - * Sets a value in this document. For `!!set`, `value` needs to be a - * boolean to add/remove the item from the set. - */ - setIn(path, value) { - if (isEmptyPath(path)) { - // @ts-expect-error We can't really know that this matches Contents. - this.contents = value; - } - else if (this.contents == null) { - // @ts-expect-error We can't really know that this matches Contents. - this.contents = collectionFromPath(this.schema, Array.from(path), value); - } - else if (assertCollection(this.contents)) { - this.contents.setIn(path, value); - } - } - /** - * Change the YAML version and schema used by the document. - * A `null` version disables support for directives, explicit tags, anchors, and aliases. - * It also requires the `schema` option to be given as a `Schema` instance value. - * - * Overrides all previously set schema options. - */ - setSchema(version, options = {}) { - if (typeof version === 'number') - version = String(version); - let opt; - switch (version) { - case '1.1': - if (this.directives) - this.directives.yaml.version = '1.1'; - else - this.directives = new Directives({ version: '1.1' }); - opt = { merge: true, resolveKnownTags: false, schema: 'yaml-1.1' }; - break; - case '1.2': - case 'next': - if (this.directives) - this.directives.yaml.version = version; - else - this.directives = new Directives({ version }); - opt = { merge: false, resolveKnownTags: true, schema: 'core' }; - break; - case null: - if (this.directives) - delete this.directives; - opt = null; - break; - default: { - const sv = JSON.stringify(version); - throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${sv}`); - } - } - // Not using `instanceof Schema` to allow for duck typing - if (options.schema instanceof Object) - this.schema = options.schema; - else if (opt) - this.schema = new Schema(Object.assign(opt, options)); - else - throw new Error(`With a null YAML version, the { schema: Schema } option is required`); - } - // json & jsonArg are only used from toJSON() - toJS({ json, jsonArg, mapAsMap, maxAliasCount, onAnchor, reviver } = {}) { - const ctx = { - anchors: new Map(), - doc: this, - keep: !json, - mapAsMap: mapAsMap === true, - mapKeyWarned: false, - maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100 - }; - const res = toJS(this.contents, jsonArg ?? '', ctx); - if (typeof onAnchor === 'function') - for (const { count, res } of ctx.anchors.values()) - onAnchor(res, count); - return typeof reviver === 'function' - ? applyReviver(reviver, { '': res }, '', res) - : res; - } - /** - * A JSON representation of the document `contents`. - * - * @param jsonArg Used by `JSON.stringify` to indicate the array index or - * property name. - */ - toJSON(jsonArg, onAnchor) { - return this.toJS({ json: true, jsonArg, mapAsMap: false, onAnchor }); - } - /** A YAML representation of the document. */ - toString(options = {}) { - if (this.errors.length > 0) - throw new Error('Document with errors cannot be stringified'); - if ('indent' in options && - (!Number.isInteger(options.indent) || Number(options.indent) <= 0)) { - const s = JSON.stringify(options.indent); - throw new Error(`"indent" option must be a positive integer, not ${s}`); - } - return stringifyDocument(this, options); - } -} -function assertCollection(contents) { - if (isCollection(contents)) - return true; - throw new Error('Expected a YAML collection as document contents'); -} - -export { Document }; diff --git a/tools/yaml/browser/dist/doc/anchors.js b/tools/yaml/browser/dist/doc/anchors.js deleted file mode 100644 index 03c2442..0000000 --- a/tools/yaml/browser/dist/doc/anchors.js +++ /dev/null @@ -1,72 +0,0 @@ -import { isScalar, isCollection } from '../nodes/identity.js'; -import { visit } from '../visit.js'; - -/** - * Verify that the input string is a valid anchor. - * - * Will throw on errors. - */ -function anchorIsValid(anchor) { - if (/[\x00-\x19\s,[\]{}]/.test(anchor)) { - const sa = JSON.stringify(anchor); - const msg = `Anchor must not contain whitespace or control characters: ${sa}`; - throw new Error(msg); - } - return true; -} -function anchorNames(root) { - const anchors = new Set(); - visit(root, { - Value(_key, node) { - if (node.anchor) - anchors.add(node.anchor); - } - }); - return anchors; -} -/** Find a new anchor name with the given `prefix` and a one-indexed suffix. */ -function findNewAnchor(prefix, exclude) { - for (let i = 1; true; ++i) { - const name = `${prefix}${i}`; - if (!exclude.has(name)) - return name; - } -} -function createNodeAnchors(doc, prefix) { - const aliasObjects = []; - const sourceObjects = new Map(); - let prevAnchors = null; - return { - onAnchor: (source) => { - aliasObjects.push(source); - if (!prevAnchors) - prevAnchors = anchorNames(doc); - const anchor = findNewAnchor(prefix, prevAnchors); - prevAnchors.add(anchor); - return anchor; - }, - /** - * With circular references, the source node is only resolved after all - * of its child nodes are. This is why anchors are set only after all of - * the nodes have been created. - */ - setAnchors: () => { - for (const source of aliasObjects) { - const ref = sourceObjects.get(source); - if (typeof ref === 'object' && - ref.anchor && - (isScalar(ref.node) || isCollection(ref.node))) { - ref.node.anchor = ref.anchor; - } - else { - const error = new Error('Failed to resolve repeated object (this should not happen)'); - error.source = source; - throw error; - } - } - }, - sourceObjects - }; -} - -export { anchorIsValid, anchorNames, createNodeAnchors, findNewAnchor }; diff --git a/tools/yaml/browser/dist/doc/applyReviver.js b/tools/yaml/browser/dist/doc/applyReviver.js deleted file mode 100644 index 0e6a93c..0000000 --- a/tools/yaml/browser/dist/doc/applyReviver.js +++ /dev/null @@ -1,54 +0,0 @@ -/** - * Applies the JSON.parse reviver algorithm as defined in the ECMA-262 spec, - * in section 24.5.1.1 "Runtime Semantics: InternalizeJSONProperty" of the - * 2021 edition: https://tc39.es/ecma262/#sec-json.parse - * - * Includes extensions for handling Map and Set objects. - */ -function applyReviver(reviver, obj, key, val) { - if (val && typeof val === 'object') { - if (Array.isArray(val)) { - for (let i = 0, len = val.length; i < len; ++i) { - const v0 = val[i]; - const v1 = applyReviver(reviver, val, String(i), v0); - if (v1 === undefined) - delete val[i]; - else if (v1 !== v0) - val[i] = v1; - } - } - else if (val instanceof Map) { - for (const k of Array.from(val.keys())) { - const v0 = val.get(k); - const v1 = applyReviver(reviver, val, k, v0); - if (v1 === undefined) - val.delete(k); - else if (v1 !== v0) - val.set(k, v1); - } - } - else if (val instanceof Set) { - for (const v0 of Array.from(val)) { - const v1 = applyReviver(reviver, val, v0, v0); - if (v1 === undefined) - val.delete(v0); - else if (v1 !== v0) { - val.delete(v0); - val.add(v1); - } - } - } - else { - for (const [k, v0] of Object.entries(val)) { - const v1 = applyReviver(reviver, val, k, v0); - if (v1 === undefined) - delete val[k]; - else if (v1 !== v0) - val[k] = v1; - } - } - } - return reviver.call(obj, key, val); -} - -export { applyReviver }; diff --git a/tools/yaml/browser/dist/doc/createNode.js b/tools/yaml/browser/dist/doc/createNode.js deleted file mode 100644 index 1392269..0000000 --- a/tools/yaml/browser/dist/doc/createNode.js +++ /dev/null @@ -1,89 +0,0 @@ -import { Alias } from '../nodes/Alias.js'; -import { isNode, isPair, MAP, SEQ, isDocument } from '../nodes/identity.js'; -import { Scalar } from '../nodes/Scalar.js'; - -const defaultTagPrefix = 'tag:yaml.org,2002:'; -function findTagObject(value, tagName, tags) { - if (tagName) { - const match = tags.filter(t => t.tag === tagName); - const tagObj = match.find(t => !t.format) ?? match[0]; - if (!tagObj) - throw new Error(`Tag ${tagName} not found`); - return tagObj; - } - return tags.find(t => t.identify?.(value) && !t.format); -} -function createNode(value, tagName, ctx) { - if (isDocument(value)) - value = value.contents; - if (isNode(value)) - return value; - if (isPair(value)) { - const map = ctx.schema[MAP].createNode?.(ctx.schema, null, ctx); - map.items.push(value); - return map; - } - if (value instanceof String || - value instanceof Number || - value instanceof Boolean || - (typeof BigInt !== 'undefined' && value instanceof BigInt) // not supported everywhere - ) { - // https://tc39.es/ecma262/#sec-serializejsonproperty - value = value.valueOf(); - } - const { aliasDuplicateObjects, onAnchor, onTagObj, schema, sourceObjects } = ctx; - // Detect duplicate references to the same object & use Alias nodes for all - // after first. The `ref` wrapper allows for circular references to resolve. - let ref = undefined; - if (aliasDuplicateObjects && value && typeof value === 'object') { - ref = sourceObjects.get(value); - if (ref) { - if (!ref.anchor) - ref.anchor = onAnchor(value); - return new Alias(ref.anchor); - } - else { - ref = { anchor: null, node: null }; - sourceObjects.set(value, ref); - } - } - if (tagName?.startsWith('!!')) - tagName = defaultTagPrefix + tagName.slice(2); - let tagObj = findTagObject(value, tagName, schema.tags); - if (!tagObj) { - if (value && typeof value.toJSON === 'function') { - // eslint-disable-next-line @typescript-eslint/no-unsafe-call - value = value.toJSON(); - } - if (!value || typeof value !== 'object') { - const node = new Scalar(value); - if (ref) - ref.node = node; - return node; - } - tagObj = - value instanceof Map - ? schema[MAP] - : Symbol.iterator in Object(value) - ? schema[SEQ] - : schema[MAP]; - } - if (onTagObj) { - onTagObj(tagObj); - delete ctx.onTagObj; - } - const node = tagObj?.createNode - ? tagObj.createNode(ctx.schema, value, ctx) - : typeof tagObj?.nodeClass?.from === 'function' - ? tagObj.nodeClass.from(ctx.schema, value, ctx) - : new Scalar(value); - if (tagName) - node.tag = tagName; - else if (!tagObj.default) - node.tag = tagObj.tag; - if (ref) - ref.node = node; - return node; -} - -export { createNode }; diff --git a/tools/yaml/browser/dist/doc/directives.js b/tools/yaml/browser/dist/doc/directives.js deleted file mode 100644 index d8b9686..0000000 --- a/tools/yaml/browser/dist/doc/directives.js +++ /dev/null @@ -1,169 +0,0 @@ -import { isNode } from '../nodes/identity.js'; -import { visit } from '../visit.js'; - -const escapeChars = { - '!': '%21', - ',': '%2C', - '[': '%5B', - ']': '%5D', - '{': '%7B', - '}': '%7D' -}; -const escapeTagName = (tn) => tn.replace(/[!,[\]{}]/g, ch => escapeChars[ch]); -class Directives { - constructor(yaml, tags) { - /** - * The directives-end/doc-start marker `---`. If `null`, a marker may still be - * included in the document's stringified representation. - */ - this.docStart = null; - /** The doc-end marker `...`. */ - this.docEnd = false; - this.yaml = Object.assign({}, Directives.defaultYaml, yaml); - this.tags = Object.assign({}, Directives.defaultTags, tags); - } - clone() { - const copy = new Directives(this.yaml, this.tags); - copy.docStart = this.docStart; - return copy; - } - /** - * During parsing, get a Directives instance for the current document and - * update the stream state according to the current version's spec. - */ - atDocument() { - const res = new Directives(this.yaml, this.tags); - switch (this.yaml.version) { - case '1.1': - this.atNextDocument = true; - break; - case '1.2': - this.atNextDocument = false; - this.yaml = { - explicit: Directives.defaultYaml.explicit, - version: '1.2' - }; - this.tags = Object.assign({}, Directives.defaultTags); - break; - } - return res; - } - /** - * @param onError - May be called even if the action was successful - * @returns `true` on success - */ - add(line, onError) { - if (this.atNextDocument) { - this.yaml = { explicit: Directives.defaultYaml.explicit, version: '1.1' }; - this.tags = Object.assign({}, Directives.defaultTags); - this.atNextDocument = false; - } - const parts = line.trim().split(/[ \t]+/); - const name = parts.shift(); - switch (name) { - case '%TAG': { - if (parts.length !== 2) { - onError(0, '%TAG directive should contain exactly two parts'); - if (parts.length < 2) - return false; - } - const [handle, prefix] = parts; - this.tags[handle] = prefix; - return true; - } - case '%YAML': { - this.yaml.explicit = true; - if (parts.length !== 1) { - onError(0, '%YAML directive should contain exactly one part'); - return false; - } - const [version] = parts; - if (version === '1.1' || version === '1.2') { - this.yaml.version = version; - return true; - } - else { - const isValid = /^\d+\.\d+$/.test(version); - onError(6, `Unsupported YAML version ${version}`, isValid); - return false; - } - } - default: - onError(0, `Unknown directive ${name}`, true); - return false; - } - } - /** - * Resolves a tag, matching handles to those defined in %TAG directives. - * - * @returns Resolved tag, which may also be the non-specific tag `'!'` or a - * `'!local'` tag, or `null` if unresolvable. - */ - tagName(source, onError) { - if (source === '!') - return '!'; // non-specific tag - if (source[0] !== '!') { - onError(`Not a valid tag: ${source}`); - return null; - } - if (source[1] === '<') { - const verbatim = source.slice(2, -1); - if (verbatim === '!' || verbatim === '!!') { - onError(`Verbatim tags aren't resolved, so ${source} is invalid.`); - return null; - } - if (source[source.length - 1] !== '>') - onError('Verbatim tags must end with a >'); - return verbatim; - } - const [, handle, suffix] = source.match(/^(.*!)([^!]*)$/); - if (!suffix) - onError(`The ${source} tag has no suffix`); - const prefix = this.tags[handle]; - if (prefix) - return prefix + decodeURIComponent(suffix); - if (handle === '!') - return source; // local tag - onError(`Could not resolve tag: ${source}`); - return null; - } - /** - * Given a fully resolved tag, returns its printable string form, - * taking into account current tag prefixes and defaults. - */ - tagString(tag) { - for (const [handle, prefix] of Object.entries(this.tags)) { - if (tag.startsWith(prefix)) - return handle + escapeTagName(tag.substring(prefix.length)); - } - return tag[0] === '!' ? tag : `!<${tag}>`; - } - toString(doc) { - const lines = this.yaml.explicit - ? [`%YAML ${this.yaml.version || '1.2'}`] - : []; - const tagEntries = Object.entries(this.tags); - let tagNames; - if (doc && tagEntries.length > 0 && isNode(doc.contents)) { - const tags = {}; - visit(doc.contents, (_key, node) => { - if (isNode(node) && node.tag) - tags[node.tag] = true; - }); - tagNames = Object.keys(tags); - } - else - tagNames = []; - for (const [handle, prefix] of tagEntries) { - if (handle === '!!' && prefix === 'tag:yaml.org,2002:') - continue; - if (!doc || tagNames.some(tn => tn.startsWith(prefix))) - lines.push(`%TAG ${handle} ${prefix}`); - } - return lines.join('\n'); - } -} -Directives.defaultYaml = { explicit: false, version: '1.2' }; -Directives.defaultTags = { '!!': 'tag:yaml.org,2002:' }; - -export { Directives }; diff --git a/tools/yaml/browser/dist/errors.js b/tools/yaml/browser/dist/errors.js deleted file mode 100644 index ad91290..0000000 --- a/tools/yaml/browser/dist/errors.js +++ /dev/null @@ -1,57 +0,0 @@ -class YAMLError extends Error { - constructor(name, pos, code, message) { - super(); - this.name = name; - this.code = code; - this.message = message; - this.pos = pos; - } -} -class YAMLParseError extends YAMLError { - constructor(pos, code, message) { - super('YAMLParseError', pos, code, message); - } -} -class YAMLWarning extends YAMLError { - constructor(pos, code, message) { - super('YAMLWarning', pos, code, message); - } -} -const prettifyError = (src, lc) => (error) => { - if (error.pos[0] === -1) - return; - error.linePos = error.pos.map(pos => lc.linePos(pos)); - const { line, col } = error.linePos[0]; - error.message += ` at line ${line}, column ${col}`; - let ci = col - 1; - let lineStr = src - .substring(lc.lineStarts[line - 1], lc.lineStarts[line]) - .replace(/[\n\r]+$/, ''); - // Trim to max 80 chars, keeping col position near the middle - if (ci >= 60 && lineStr.length > 80) { - const trimStart = Math.min(ci - 39, lineStr.length - 79); - lineStr = '…' + lineStr.substring(trimStart); - ci -= trimStart - 1; - } - if (lineStr.length > 80) - lineStr = lineStr.substring(0, 79) + '…'; - // Include previous line in context if pointing at line start - if (line > 1 && /^ *$/.test(lineStr.substring(0, ci))) { - // Regexp won't match if start is trimmed - let prev = src.substring(lc.lineStarts[line - 2], lc.lineStarts[line - 1]); - if (prev.length > 80) - prev = prev.substring(0, 79) + '…\n'; - lineStr = prev + lineStr; - } - if (/[^ ]/.test(lineStr)) { - let count = 1; - const end = error.linePos[1]; - if (end && end.line === line && end.col > col) { - count = Math.max(1, Math.min(end.col - col, 80 - ci)); - } - const pointer = ' '.repeat(ci) + '^'.repeat(count); - error.message += `:\n\n${lineStr}\n${pointer}\n`; - } -}; - -export { YAMLError, YAMLParseError, YAMLWarning, prettifyError }; diff --git a/tools/yaml/browser/dist/index.js b/tools/yaml/browser/dist/index.js deleted file mode 100644 index 097bf24..0000000 --- a/tools/yaml/browser/dist/index.js +++ /dev/null @@ -1,17 +0,0 @@ -export { Composer } from './compose/composer.js'; -export { Document } from './doc/Document.js'; -export { Schema } from './schema/Schema.js'; -export { YAMLError, YAMLParseError, YAMLWarning } from './errors.js'; -export { Alias } from './nodes/Alias.js'; -export { isAlias, isCollection, isDocument, isMap, isNode, isPair, isScalar, isSeq } from './nodes/identity.js'; -export { Pair } from './nodes/Pair.js'; -export { Scalar } from './nodes/Scalar.js'; -export { YAMLMap } from './nodes/YAMLMap.js'; -export { YAMLSeq } from './nodes/YAMLSeq.js'; -import * as cst from './parse/cst.js'; -export { cst as CST }; -export { Lexer } from './parse/lexer.js'; -export { LineCounter } from './parse/line-counter.js'; -export { Parser } from './parse/parser.js'; -export { parse, parseAllDocuments, parseDocument, stringify } from './public-api.js'; -export { visit, visitAsync } from './visit.js'; diff --git a/tools/yaml/browser/dist/log.js b/tools/yaml/browser/dist/log.js deleted file mode 100644 index c5f8998..0000000 --- a/tools/yaml/browser/dist/log.js +++ /dev/null @@ -1,16 +0,0 @@ -function debug(logLevel, ...messages) { - if (logLevel === 'debug') - console.log(...messages); -} -function warn(logLevel, warning) { - if (logLevel === 'debug' || logLevel === 'warn') { - // https://github.com/typescript-eslint/typescript-eslint/issues/7478 - // eslint-disable-next-line @typescript-eslint/prefer-optional-chain - if (typeof process !== 'undefined' && process.emitWarning) - process.emitWarning(warning); - else - console.warn(warning); - } -} - -export { debug, warn }; diff --git a/tools/yaml/browser/dist/node_modules/tslib/tslib.es6.js b/tools/yaml/browser/dist/node_modules/tslib/tslib.es6.js deleted file mode 100644 index 9c794c5..0000000 --- a/tools/yaml/browser/dist/node_modules/tslib/tslib.es6.js +++ /dev/null @@ -1,21 +0,0 @@ -/****************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */ -function __classPrivateFieldGet(receiver, state, kind, f) { - if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); -} - -export { __classPrivateFieldGet }; diff --git a/tools/yaml/browser/dist/nodes/Alias.js b/tools/yaml/browser/dist/nodes/Alias.js deleted file mode 100644 index 8e34f09..0000000 --- a/tools/yaml/browser/dist/nodes/Alias.js +++ /dev/null @@ -1,101 +0,0 @@ -import { anchorIsValid } from '../doc/anchors.js'; -import { visit } from '../visit.js'; -import { ALIAS, isAlias, isCollection, isPair } from './identity.js'; -import { NodeBase } from './Node.js'; -import { toJS } from './toJS.js'; - -class Alias extends NodeBase { - constructor(source) { - super(ALIAS); - this.source = source; - Object.defineProperty(this, 'tag', { - set() { - throw new Error('Alias nodes cannot have tags'); - } - }); - } - /** - * Resolve the value of this alias within `doc`, finding the last - * instance of the `source` anchor before this node. - */ - resolve(doc) { - let found = undefined; - visit(doc, { - Node: (_key, node) => { - if (node === this) - return visit.BREAK; - if (node.anchor === this.source) - found = node; - } - }); - return found; - } - toJSON(_arg, ctx) { - if (!ctx) - return { source: this.source }; - const { anchors, doc, maxAliasCount } = ctx; - const source = this.resolve(doc); - if (!source) { - const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`; - throw new ReferenceError(msg); - } - let data = anchors.get(source); - if (!data) { - // Resolve anchors for Node.prototype.toJS() - toJS(source, null, ctx); - data = anchors.get(source); - } - /* istanbul ignore if */ - if (!data || data.res === undefined) { - const msg = 'This should not happen: Alias anchor was not resolved?'; - throw new ReferenceError(msg); - } - if (maxAliasCount >= 0) { - data.count += 1; - if (data.aliasCount === 0) - data.aliasCount = getAliasCount(doc, source, anchors); - if (data.count * data.aliasCount > maxAliasCount) { - const msg = 'Excessive alias count indicates a resource exhaustion attack'; - throw new ReferenceError(msg); - } - } - return data.res; - } - toString(ctx, _onComment, _onChompKeep) { - const src = `*${this.source}`; - if (ctx) { - anchorIsValid(this.source); - if (ctx.options.verifyAliasOrder && !ctx.anchors.has(this.source)) { - const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`; - throw new Error(msg); - } - if (ctx.implicitKey) - return `${src} `; - } - return src; - } -} -function getAliasCount(doc, node, anchors) { - if (isAlias(node)) { - const source = node.resolve(doc); - const anchor = anchors && source && anchors.get(source); - return anchor ? anchor.count * anchor.aliasCount : 0; - } - else if (isCollection(node)) { - let count = 0; - for (const item of node.items) { - const c = getAliasCount(doc, item, anchors); - if (c > count) - count = c; - } - return count; - } - else if (isPair(node)) { - const kc = getAliasCount(doc, node.key, anchors); - const vc = getAliasCount(doc, node.value, anchors); - return Math.max(kc, vc); - } - return 1; -} - -export { Alias }; diff --git a/tools/yaml/browser/dist/nodes/Collection.js b/tools/yaml/browser/dist/nodes/Collection.js deleted file mode 100644 index a5f89be..0000000 --- a/tools/yaml/browser/dist/nodes/Collection.js +++ /dev/null @@ -1,148 +0,0 @@ -import { createNode } from '../doc/createNode.js'; -import { isNode, isPair, isCollection, isScalar } from './identity.js'; -import { NodeBase } from './Node.js'; - -function collectionFromPath(schema, path, value) { - let v = value; - for (let i = path.length - 1; i >= 0; --i) { - const k = path[i]; - if (typeof k === 'number' && Number.isInteger(k) && k >= 0) { - const a = []; - a[k] = v; - v = a; - } - else { - v = new Map([[k, v]]); - } - } - return createNode(v, undefined, { - aliasDuplicateObjects: false, - keepUndefined: false, - onAnchor: () => { - throw new Error('This should not happen, please report a bug.'); - }, - schema, - sourceObjects: new Map() - }); -} -// Type guard is intentionally a little wrong so as to be more useful, -// as it does not cover untypable empty non-string iterables (e.g. []). -const isEmptyPath = (path) => path == null || - (typeof path === 'object' && !!path[Symbol.iterator]().next().done); -class Collection extends NodeBase { - constructor(type, schema) { - super(type); - Object.defineProperty(this, 'schema', { - value: schema, - configurable: true, - enumerable: false, - writable: true - }); - } - /** - * Create a copy of this collection. - * - * @param schema - If defined, overwrites the original's schema - */ - clone(schema) { - const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this)); - if (schema) - copy.schema = schema; - copy.items = copy.items.map(it => isNode(it) || isPair(it) ? it.clone(schema) : it); - if (this.range) - copy.range = this.range.slice(); - return copy; - } - /** - * Adds a value to the collection. For `!!map` and `!!omap` the value must - * be a Pair instance or a `{ key, value }` object, which may not have a key - * that already exists in the map. - */ - addIn(path, value) { - if (isEmptyPath(path)) - this.add(value); - else { - const [key, ...rest] = path; - const node = this.get(key, true); - if (isCollection(node)) - node.addIn(rest, value); - else if (node === undefined && this.schema) - this.set(key, collectionFromPath(this.schema, rest, value)); - else - throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`); - } - } - /** - * Removes a value from the collection. - * @returns `true` if the item was found and removed. - */ - deleteIn(path) { - const [key, ...rest] = path; - if (rest.length === 0) - return this.delete(key); - const node = this.get(key, true); - if (isCollection(node)) - return node.deleteIn(rest); - else - throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`); - } - /** - * Returns item at `key`, or `undefined` if not found. By default unwraps - * scalar values from their surrounding node; to disable set `keepScalar` to - * `true` (collections are always returned intact). - */ - getIn(path, keepScalar) { - const [key, ...rest] = path; - const node = this.get(key, true); - if (rest.length === 0) - return !keepScalar && isScalar(node) ? node.value : node; - else - return isCollection(node) ? node.getIn(rest, keepScalar) : undefined; - } - hasAllNullValues(allowScalar) { - return this.items.every(node => { - if (!isPair(node)) - return false; - const n = node.value; - return (n == null || - (allowScalar && - isScalar(n) && - n.value == null && - !n.commentBefore && - !n.comment && - !n.tag)); - }); - } - /** - * Checks if the collection includes a value with the key `key`. - */ - hasIn(path) { - const [key, ...rest] = path; - if (rest.length === 0) - return this.has(key); - const node = this.get(key, true); - return isCollection(node) ? node.hasIn(rest) : false; - } - /** - * Sets a value in this collection. For `!!set`, `value` needs to be a - * boolean to add/remove the item from the set. - */ - setIn(path, value) { - const [key, ...rest] = path; - if (rest.length === 0) { - this.set(key, value); - } - else { - const node = this.get(key, true); - if (isCollection(node)) - node.setIn(rest, value); - else if (node === undefined && this.schema) - this.set(key, collectionFromPath(this.schema, rest, value)); - else - throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`); - } - } -} -Collection.maxFlowStringSingleLineLength = 60; - -export { Collection, collectionFromPath, isEmptyPath }; diff --git a/tools/yaml/browser/dist/nodes/Node.js b/tools/yaml/browser/dist/nodes/Node.js deleted file mode 100644 index b0eb96b..0000000 --- a/tools/yaml/browser/dist/nodes/Node.js +++ /dev/null @@ -1,38 +0,0 @@ -import { applyReviver } from '../doc/applyReviver.js'; -import { NODE_TYPE, isDocument } from './identity.js'; -import { toJS } from './toJS.js'; - -class NodeBase { - constructor(type) { - Object.defineProperty(this, NODE_TYPE, { value: type }); - } - /** Create a copy of this node. */ - clone() { - const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this)); - if (this.range) - copy.range = this.range.slice(); - return copy; - } - /** A plain JavaScript representation of this node. */ - toJS(doc, { mapAsMap, maxAliasCount, onAnchor, reviver } = {}) { - if (!isDocument(doc)) - throw new TypeError('A document argument is required'); - const ctx = { - anchors: new Map(), - doc, - keep: true, - mapAsMap: mapAsMap === true, - mapKeyWarned: false, - maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100 - }; - const res = toJS(this, '', ctx); - if (typeof onAnchor === 'function') - for (const { count, res } of ctx.anchors.values()) - onAnchor(res, count); - return typeof reviver === 'function' - ? applyReviver(reviver, { '': res }, '', res) - : res; - } -} - -export { NodeBase }; diff --git a/tools/yaml/browser/dist/nodes/Pair.js b/tools/yaml/browser/dist/nodes/Pair.js deleted file mode 100644 index 6e419f6..0000000 --- a/tools/yaml/browser/dist/nodes/Pair.js +++ /dev/null @@ -1,36 +0,0 @@ -import { createNode } from '../doc/createNode.js'; -import { stringifyPair } from '../stringify/stringifyPair.js'; -import { addPairToJSMap } from './addPairToJSMap.js'; -import { NODE_TYPE, PAIR, isNode } from './identity.js'; - -function createPair(key, value, ctx) { - const k = createNode(key, undefined, ctx); - const v = createNode(value, undefined, ctx); - return new Pair(k, v); -} -class Pair { - constructor(key, value = null) { - Object.defineProperty(this, NODE_TYPE, { value: PAIR }); - this.key = key; - this.value = value; - } - clone(schema) { - let { key, value } = this; - if (isNode(key)) - key = key.clone(schema); - if (isNode(value)) - value = value.clone(schema); - return new Pair(key, value); - } - toJSON(_, ctx) { - const pair = ctx?.mapAsMap ? new Map() : {}; - return addPairToJSMap(ctx, pair, this); - } - toString(ctx, onComment, onChompKeep) { - return ctx?.doc - ? stringifyPair(this, ctx, onComment, onChompKeep) - : JSON.stringify(this); - } -} - -export { Pair, createPair }; diff --git a/tools/yaml/browser/dist/nodes/Scalar.js b/tools/yaml/browser/dist/nodes/Scalar.js deleted file mode 100644 index a9f2673..0000000 --- a/tools/yaml/browser/dist/nodes/Scalar.js +++ /dev/null @@ -1,24 +0,0 @@ -import { SCALAR } from './identity.js'; -import { NodeBase } from './Node.js'; -import { toJS } from './toJS.js'; - -const isScalarValue = (value) => !value || (typeof value !== 'function' && typeof value !== 'object'); -class Scalar extends NodeBase { - constructor(value) { - super(SCALAR); - this.value = value; - } - toJSON(arg, ctx) { - return ctx?.keep ? this.value : toJS(this.value, arg, ctx); - } - toString() { - return String(this.value); - } -} -Scalar.BLOCK_FOLDED = 'BLOCK_FOLDED'; -Scalar.BLOCK_LITERAL = 'BLOCK_LITERAL'; -Scalar.PLAIN = 'PLAIN'; -Scalar.QUOTE_DOUBLE = 'QUOTE_DOUBLE'; -Scalar.QUOTE_SINGLE = 'QUOTE_SINGLE'; - -export { Scalar, isScalarValue }; diff --git a/tools/yaml/browser/dist/nodes/YAMLMap.js b/tools/yaml/browser/dist/nodes/YAMLMap.js deleted file mode 100644 index 5d88737..0000000 --- a/tools/yaml/browser/dist/nodes/YAMLMap.js +++ /dev/null @@ -1,144 +0,0 @@ -import { stringifyCollection } from '../stringify/stringifyCollection.js'; -import { addPairToJSMap } from './addPairToJSMap.js'; -import { Collection } from './Collection.js'; -import { isPair, isScalar, MAP } from './identity.js'; -import { Pair, createPair } from './Pair.js'; -import { isScalarValue } from './Scalar.js'; - -function findPair(items, key) { - const k = isScalar(key) ? key.value : key; - for (const it of items) { - if (isPair(it)) { - if (it.key === key || it.key === k) - return it; - if (isScalar(it.key) && it.key.value === k) - return it; - } - } - return undefined; -} -class YAMLMap extends Collection { - static get tagName() { - return 'tag:yaml.org,2002:map'; - } - constructor(schema) { - super(MAP, schema); - this.items = []; - } - /** - * A generic collection parsing method that can be extended - * to other node classes that inherit from YAMLMap - */ - static from(schema, obj, ctx) { - const { keepUndefined, replacer } = ctx; - const map = new this(schema); - const add = (key, value) => { - if (typeof replacer === 'function') - value = replacer.call(obj, key, value); - else if (Array.isArray(replacer) && !replacer.includes(key)) - return; - if (value !== undefined || keepUndefined) - map.items.push(createPair(key, value, ctx)); - }; - if (obj instanceof Map) { - for (const [key, value] of obj) - add(key, value); - } - else if (obj && typeof obj === 'object') { - for (const key of Object.keys(obj)) - add(key, obj[key]); - } - if (typeof schema.sortMapEntries === 'function') { - map.items.sort(schema.sortMapEntries); - } - return map; - } - /** - * Adds a value to the collection. - * - * @param overwrite - If not set `true`, using a key that is already in the - * collection will throw. Otherwise, overwrites the previous value. - */ - add(pair, overwrite) { - let _pair; - if (isPair(pair)) - _pair = pair; - else if (!pair || typeof pair !== 'object' || !('key' in pair)) { - // In TypeScript, this never happens. - _pair = new Pair(pair, pair?.value); - } - else - _pair = new Pair(pair.key, pair.value); - const prev = findPair(this.items, _pair.key); - const sortEntries = this.schema?.sortMapEntries; - if (prev) { - if (!overwrite) - throw new Error(`Key ${_pair.key} already set`); - // For scalars, keep the old node & its comments and anchors - if (isScalar(prev.value) && isScalarValue(_pair.value)) - prev.value.value = _pair.value; - else - prev.value = _pair.value; - } - else if (sortEntries) { - const i = this.items.findIndex(item => sortEntries(_pair, item) < 0); - if (i === -1) - this.items.push(_pair); - else - this.items.splice(i, 0, _pair); - } - else { - this.items.push(_pair); - } - } - delete(key) { - const it = findPair(this.items, key); - if (!it) - return false; - const del = this.items.splice(this.items.indexOf(it), 1); - return del.length > 0; - } - get(key, keepScalar) { - const it = findPair(this.items, key); - const node = it?.value; - return (!keepScalar && isScalar(node) ? node.value : node) ?? undefined; - } - has(key) { - return !!findPair(this.items, key); - } - set(key, value) { - this.add(new Pair(key, value), true); - } - /** - * @param ctx - Conversion context, originally set in Document#toJS() - * @param {Class} Type - If set, forces the returned collection type - * @returns Instance of Type, Map, or Object - */ - toJSON(_, ctx, Type) { - const map = Type ? new Type() : ctx?.mapAsMap ? new Map() : {}; - if (ctx?.onCreate) - ctx.onCreate(map); - for (const item of this.items) - addPairToJSMap(ctx, map, item); - return map; - } - toString(ctx, onComment, onChompKeep) { - if (!ctx) - return JSON.stringify(this); - for (const item of this.items) { - if (!isPair(item)) - throw new Error(`Map items must all be pairs; found ${JSON.stringify(item)} instead`); - } - if (!ctx.allNullValues && this.hasAllNullValues(false)) - ctx = Object.assign({}, ctx, { allNullValues: true }); - return stringifyCollection(this, ctx, { - blockItemPrefix: '', - flowChars: { start: '{', end: '}' }, - itemIndent: ctx.indent || '', - onChompKeep, - onComment - }); - } -} - -export { YAMLMap, findPair }; diff --git a/tools/yaml/browser/dist/nodes/YAMLSeq.js b/tools/yaml/browser/dist/nodes/YAMLSeq.js deleted file mode 100644 index b80de40..0000000 --- a/tools/yaml/browser/dist/nodes/YAMLSeq.js +++ /dev/null @@ -1,113 +0,0 @@ -import { createNode } from '../doc/createNode.js'; -import { stringifyCollection } from '../stringify/stringifyCollection.js'; -import { Collection } from './Collection.js'; -import { SEQ, isScalar } from './identity.js'; -import { isScalarValue } from './Scalar.js'; -import { toJS } from './toJS.js'; - -class YAMLSeq extends Collection { - static get tagName() { - return 'tag:yaml.org,2002:seq'; - } - constructor(schema) { - super(SEQ, schema); - this.items = []; - } - add(value) { - this.items.push(value); - } - /** - * Removes a value from the collection. - * - * `key` must contain a representation of an integer for this to succeed. - * It may be wrapped in a `Scalar`. - * - * @returns `true` if the item was found and removed. - */ - delete(key) { - const idx = asItemIndex(key); - if (typeof idx !== 'number') - return false; - const del = this.items.splice(idx, 1); - return del.length > 0; - } - get(key, keepScalar) { - const idx = asItemIndex(key); - if (typeof idx !== 'number') - return undefined; - const it = this.items[idx]; - return !keepScalar && isScalar(it) ? it.value : it; - } - /** - * Checks if the collection includes a value with the key `key`. - * - * `key` must contain a representation of an integer for this to succeed. - * It may be wrapped in a `Scalar`. - */ - has(key) { - const idx = asItemIndex(key); - return typeof idx === 'number' && idx < this.items.length; - } - /** - * Sets a value in this collection. For `!!set`, `value` needs to be a - * boolean to add/remove the item from the set. - * - * If `key` does not contain a representation of an integer, this will throw. - * It may be wrapped in a `Scalar`. - */ - set(key, value) { - const idx = asItemIndex(key); - if (typeof idx !== 'number') - throw new Error(`Expected a valid index, not ${key}.`); - const prev = this.items[idx]; - if (isScalar(prev) && isScalarValue(value)) - prev.value = value; - else - this.items[idx] = value; - } - toJSON(_, ctx) { - const seq = []; - if (ctx?.onCreate) - ctx.onCreate(seq); - let i = 0; - for (const item of this.items) - seq.push(toJS(item, String(i++), ctx)); - return seq; - } - toString(ctx, onComment, onChompKeep) { - if (!ctx) - return JSON.stringify(this); - return stringifyCollection(this, ctx, { - blockItemPrefix: '- ', - flowChars: { start: '[', end: ']' }, - itemIndent: (ctx.indent || '') + ' ', - onChompKeep, - onComment - }); - } - static from(schema, obj, ctx) { - const { replacer } = ctx; - const seq = new this(schema); - if (obj && Symbol.iterator in Object(obj)) { - let i = 0; - for (let it of obj) { - if (typeof replacer === 'function') { - const key = obj instanceof Set ? it : String(i++); - it = replacer.call(obj, key, it); - } - seq.items.push(createNode(it, undefined, ctx)); - } - } - return seq; - } -} -function asItemIndex(key) { - let idx = isScalar(key) ? key.value : key; - if (idx && typeof idx === 'string') - idx = Number(idx); - return typeof idx === 'number' && Number.isInteger(idx) && idx >= 0 - ? idx - : null; -} - -export { YAMLSeq }; diff --git a/tools/yaml/browser/dist/nodes/addPairToJSMap.js b/tools/yaml/browser/dist/nodes/addPairToJSMap.js deleted file mode 100644 index 680dcea..0000000 --- a/tools/yaml/browser/dist/nodes/addPairToJSMap.js +++ /dev/null @@ -1,104 +0,0 @@ -import { warn } from '../log.js'; -import { createStringifyContext } from '../stringify/stringify.js'; -import { isAlias, isSeq, isScalar, isMap, isNode } from './identity.js'; -import { Scalar } from './Scalar.js'; -import { toJS } from './toJS.js'; - -const MERGE_KEY = '<<'; -function addPairToJSMap(ctx, map, { key, value }) { - if (ctx?.doc.schema.merge && isMergeKey(key)) { - value = isAlias(value) ? value.resolve(ctx.doc) : value; - if (isSeq(value)) - for (const it of value.items) - mergeToJSMap(ctx, map, it); - else if (Array.isArray(value)) - for (const it of value) - mergeToJSMap(ctx, map, it); - else - mergeToJSMap(ctx, map, value); - } - else { - const jsKey = toJS(key, '', ctx); - if (map instanceof Map) { - map.set(jsKey, toJS(value, jsKey, ctx)); - } - else if (map instanceof Set) { - map.add(jsKey); - } - else { - const stringKey = stringifyKey(key, jsKey, ctx); - const jsValue = toJS(value, stringKey, ctx); - if (stringKey in map) - Object.defineProperty(map, stringKey, { - value: jsValue, - writable: true, - enumerable: true, - configurable: true - }); - else - map[stringKey] = jsValue; - } - } - return map; -} -const isMergeKey = (key) => key === MERGE_KEY || - (isScalar(key) && - key.value === MERGE_KEY && - (!key.type || key.type === Scalar.PLAIN)); -// If the value associated with a merge key is a single mapping node, each of -// its key/value pairs is inserted into the current mapping, unless the key -// already exists in it. If the value associated with the merge key is a -// sequence, then this sequence is expected to contain mapping nodes and each -// of these nodes is merged in turn according to its order in the sequence. -// Keys in mapping nodes earlier in the sequence override keys specified in -// later mapping nodes. -- http://yaml.org/type/merge.html -function mergeToJSMap(ctx, map, value) { - const source = ctx && isAlias(value) ? value.resolve(ctx.doc) : value; - if (!isMap(source)) - throw new Error('Merge sources must be maps or map aliases'); - const srcMap = source.toJSON(null, ctx, Map); - for (const [key, value] of srcMap) { - if (map instanceof Map) { - if (!map.has(key)) - map.set(key, value); - } - else if (map instanceof Set) { - map.add(key); - } - else if (!Object.prototype.hasOwnProperty.call(map, key)) { - Object.defineProperty(map, key, { - value, - writable: true, - enumerable: true, - configurable: true - }); - } - } - return map; -} -function stringifyKey(key, jsKey, ctx) { - if (jsKey === null) - return ''; - if (typeof jsKey !== 'object') - return String(jsKey); - if (isNode(key) && ctx?.doc) { - const strCtx = createStringifyContext(ctx.doc, {}); - strCtx.anchors = new Set(); - for (const node of ctx.anchors.keys()) - strCtx.anchors.add(node.anchor); - strCtx.inFlow = true; - strCtx.inStringifyKey = true; - const strKey = key.toString(strCtx); - if (!ctx.mapKeyWarned) { - let jsonStr = JSON.stringify(strKey); - if (jsonStr.length > 40) - jsonStr = jsonStr.substring(0, 36) + '..."'; - warn(ctx.doc.options.logLevel, `Keys with collection values will be stringified due to JS Object restrictions: ${jsonStr}. Set mapAsMap: true to use object keys.`); - ctx.mapKeyWarned = true; - } - return strKey; - } - return JSON.stringify(jsKey); -} - -export { addPairToJSMap }; diff --git a/tools/yaml/browser/dist/nodes/identity.js b/tools/yaml/browser/dist/nodes/identity.js deleted file mode 100644 index 7b79920..0000000 --- a/tools/yaml/browser/dist/nodes/identity.js +++ /dev/null @@ -1,36 +0,0 @@ -const ALIAS = Symbol.for('yaml.alias'); -const DOC = Symbol.for('yaml.document'); -const MAP = Symbol.for('yaml.map'); -const PAIR = Symbol.for('yaml.pair'); -const SCALAR = Symbol.for('yaml.scalar'); -const SEQ = Symbol.for('yaml.seq'); -const NODE_TYPE = Symbol.for('yaml.node.type'); -const isAlias = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === ALIAS; -const isDocument = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === DOC; -const isMap = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === MAP; -const isPair = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === PAIR; -const isScalar = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SCALAR; -const isSeq = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SEQ; -function isCollection(node) { - if (node && typeof node === 'object') - switch (node[NODE_TYPE]) { - case MAP: - case SEQ: - return true; - } - return false; -} -function isNode(node) { - if (node && typeof node === 'object') - switch (node[NODE_TYPE]) { - case ALIAS: - case MAP: - case SCALAR: - case SEQ: - return true; - } - return false; -} -const hasAnchor = (node) => (isScalar(node) || isCollection(node)) && !!node.anchor; - -export { ALIAS, DOC, MAP, NODE_TYPE, PAIR, SCALAR, SEQ, hasAnchor, isAlias, isCollection, isDocument, isMap, isNode, isPair, isScalar, isSeq }; diff --git a/tools/yaml/browser/dist/nodes/toJS.js b/tools/yaml/browser/dist/nodes/toJS.js deleted file mode 100644 index 0ca6250..0000000 --- a/tools/yaml/browser/dist/nodes/toJS.js +++ /dev/null @@ -1,37 +0,0 @@ -import { hasAnchor } from './identity.js'; - -/** - * Recursively convert any node or its contents to native JavaScript - * - * @param value - The input value - * @param arg - If `value` defines a `toJSON()` method, use this - * as its first argument - * @param ctx - Conversion context, originally set in Document#toJS(). If - * `{ keep: true }` is not set, output should be suitable for JSON - * stringification. - */ -function toJS(value, arg, ctx) { - // eslint-disable-next-line @typescript-eslint/no-unsafe-return - if (Array.isArray(value)) - return value.map((v, i) => toJS(v, String(i), ctx)); - if (value && typeof value.toJSON === 'function') { - // eslint-disable-next-line @typescript-eslint/no-unsafe-call - if (!ctx || !hasAnchor(value)) - return value.toJSON(arg, ctx); - const data = { aliasCount: 0, count: 1, res: undefined }; - ctx.anchors.set(value, data); - ctx.onCreate = res => { - data.res = res; - delete ctx.onCreate; - }; - const res = value.toJSON(arg, ctx); - if (ctx.onCreate) - ctx.onCreate(res); - return res; - } - if (typeof value === 'bigint' && !ctx?.keep) - return Number(value); - return value; -} - -export { toJS }; diff --git a/tools/yaml/browser/dist/parse/cst-scalar.js b/tools/yaml/browser/dist/parse/cst-scalar.js deleted file mode 100644 index d4def99..0000000 --- a/tools/yaml/browser/dist/parse/cst-scalar.js +++ /dev/null @@ -1,214 +0,0 @@ -import { resolveBlockScalar } from '../compose/resolve-block-scalar.js'; -import { resolveFlowScalar } from '../compose/resolve-flow-scalar.js'; -import { YAMLParseError } from '../errors.js'; -import { stringifyString } from '../stringify/stringifyString.js'; - -function resolveAsScalar(token, strict = true, onError) { - if (token) { - const _onError = (pos, code, message) => { - const offset = typeof pos === 'number' ? pos : Array.isArray(pos) ? pos[0] : pos.offset; - if (onError) - onError(offset, code, message); - else - throw new YAMLParseError([offset, offset + 1], code, message); - }; - switch (token.type) { - case 'scalar': - case 'single-quoted-scalar': - case 'double-quoted-scalar': - return resolveFlowScalar(token, strict, _onError); - case 'block-scalar': - return resolveBlockScalar(token, strict, _onError); - } - } - return null; -} -/** - * Create a new scalar token with `value` - * - * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`, - * as this function does not support any schema operations and won't check for such conflicts. - * - * @param value The string representation of the value, which will have its content properly indented. - * @param context.end Comments and whitespace after the end of the value, or after the block scalar header. If undefined, a newline will be added. - * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value. - * @param context.indent The indent level of the token. - * @param context.inFlow Is this scalar within a flow collection? This may affect the resolved type of the token's value. - * @param context.offset The offset position of the token. - * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`. - */ -function createScalarToken(value, context) { - const { implicitKey = false, indent, inFlow = false, offset = -1, type = 'PLAIN' } = context; - const source = stringifyString({ type, value }, { - implicitKey, - indent: indent > 0 ? ' '.repeat(indent) : '', - inFlow, - options: { blockQuote: true, lineWidth: -1 } - }); - const end = context.end ?? [ - { type: 'newline', offset: -1, indent, source: '\n' } - ]; - switch (source[0]) { - case '|': - case '>': { - const he = source.indexOf('\n'); - const head = source.substring(0, he); - const body = source.substring(he + 1) + '\n'; - const props = [ - { type: 'block-scalar-header', offset, indent, source: head } - ]; - if (!addEndtoBlockProps(props, end)) - props.push({ type: 'newline', offset: -1, indent, source: '\n' }); - return { type: 'block-scalar', offset, indent, props, source: body }; - } - case '"': - return { type: 'double-quoted-scalar', offset, indent, source, end }; - case "'": - return { type: 'single-quoted-scalar', offset, indent, source, end }; - default: - return { type: 'scalar', offset, indent, source, end }; - } -} -/** - * Set the value of `token` to the given string `value`, overwriting any previous contents and type that it may have. - * - * Best efforts are made to retain any comments previously associated with the `token`, - * though all contents within a collection's `items` will be overwritten. - * - * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`, - * as this function does not support any schema operations and won't check for such conflicts. - * - * @param token Any token. If it does not include an `indent` value, the value will be stringified as if it were an implicit key. - * @param value The string representation of the value, which will have its content properly indented. - * @param context.afterKey In most cases, values after a key should have an additional level of indentation. - * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value. - * @param context.inFlow Being within a flow collection may affect the resolved type of the token's value. - * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`. - */ -function setScalarValue(token, value, context = {}) { - let { afterKey = false, implicitKey = false, inFlow = false, type } = context; - let indent = 'indent' in token ? token.indent : null; - if (afterKey && typeof indent === 'number') - indent += 2; - if (!type) - switch (token.type) { - case 'single-quoted-scalar': - type = 'QUOTE_SINGLE'; - break; - case 'double-quoted-scalar': - type = 'QUOTE_DOUBLE'; - break; - case 'block-scalar': { - const header = token.props[0]; - if (header.type !== 'block-scalar-header') - throw new Error('Invalid block scalar header'); - type = header.source[0] === '>' ? 'BLOCK_FOLDED' : 'BLOCK_LITERAL'; - break; - } - default: - type = 'PLAIN'; - } - const source = stringifyString({ type, value }, { - implicitKey: implicitKey || indent === null, - indent: indent !== null && indent > 0 ? ' '.repeat(indent) : '', - inFlow, - options: { blockQuote: true, lineWidth: -1 } - }); - switch (source[0]) { - case '|': - case '>': - setBlockScalarValue(token, source); - break; - case '"': - setFlowScalarValue(token, source, 'double-quoted-scalar'); - break; - case "'": - setFlowScalarValue(token, source, 'single-quoted-scalar'); - break; - default: - setFlowScalarValue(token, source, 'scalar'); - } -} -function setBlockScalarValue(token, source) { - const he = source.indexOf('\n'); - const head = source.substring(0, he); - const body = source.substring(he + 1) + '\n'; - if (token.type === 'block-scalar') { - const header = token.props[0]; - if (header.type !== 'block-scalar-header') - throw new Error('Invalid block scalar header'); - header.source = head; - token.source = body; - } - else { - const { offset } = token; - const indent = 'indent' in token ? token.indent : -1; - const props = [ - { type: 'block-scalar-header', offset, indent, source: head } - ]; - if (!addEndtoBlockProps(props, 'end' in token ? token.end : undefined)) - props.push({ type: 'newline', offset: -1, indent, source: '\n' }); - for (const key of Object.keys(token)) - if (key !== 'type' && key !== 'offset') - delete token[key]; - Object.assign(token, { type: 'block-scalar', indent, props, source: body }); - } -} -/** @returns `true` if last token is a newline */ -function addEndtoBlockProps(props, end) { - if (end) - for (const st of end) - switch (st.type) { - case 'space': - case 'comment': - props.push(st); - break; - case 'newline': - props.push(st); - return true; - } - return false; -} -function setFlowScalarValue(token, source, type) { - switch (token.type) { - case 'scalar': - case 'double-quoted-scalar': - case 'single-quoted-scalar': - token.type = type; - token.source = source; - break; - case 'block-scalar': { - const end = token.props.slice(1); - let oa = source.length; - if (token.props[0].type === 'block-scalar-header') - oa -= token.props[0].source.length; - for (const tok of end) - tok.offset += oa; - delete token.props; - Object.assign(token, { type, source, end }); - break; - } - case 'block-map': - case 'block-seq': { - const offset = token.offset + source.length; - const nl = { type: 'newline', offset, indent: token.indent, source: '\n' }; - delete token.items; - Object.assign(token, { type, source, end: [nl] }); - break; - } - default: { - const indent = 'indent' in token ? token.indent : -1; - const end = 'end' in token && Array.isArray(token.end) - ? token.end.filter(st => st.type === 'space' || - st.type === 'comment' || - st.type === 'newline') - : []; - for (const key of Object.keys(token)) - if (key !== 'type' && key !== 'offset') - delete token[key]; - Object.assign(token, { type, indent, source, end }); - } - } -} - -export { createScalarToken, resolveAsScalar, setScalarValue }; diff --git a/tools/yaml/browser/dist/parse/cst-stringify.js b/tools/yaml/browser/dist/parse/cst-stringify.js deleted file mode 100644 index d6ab58c..0000000 --- a/tools/yaml/browser/dist/parse/cst-stringify.js +++ /dev/null @@ -1,61 +0,0 @@ -/** - * Stringify a CST document, token, or collection item - * - * Fair warning: This applies no validation whatsoever, and - * simply concatenates the sources in their logical order. - */ -const stringify = (cst) => 'type' in cst ? stringifyToken(cst) : stringifyItem(cst); -function stringifyToken(token) { - switch (token.type) { - case 'block-scalar': { - let res = ''; - for (const tok of token.props) - res += stringifyToken(tok); - return res + token.source; - } - case 'block-map': - case 'block-seq': { - let res = ''; - for (const item of token.items) - res += stringifyItem(item); - return res; - } - case 'flow-collection': { - let res = token.start.source; - for (const item of token.items) - res += stringifyItem(item); - for (const st of token.end) - res += st.source; - return res; - } - case 'document': { - let res = stringifyItem(token); - if (token.end) - for (const st of token.end) - res += st.source; - return res; - } - default: { - let res = token.source; - if ('end' in token && token.end) - for (const st of token.end) - res += st.source; - return res; - } - } -} -function stringifyItem({ start, key, sep, value }) { - let res = ''; - for (const st of start) - res += st.source; - if (key) - res += stringifyToken(key); - if (sep) - for (const st of sep) - res += st.source; - if (value) - res += stringifyToken(value); - return res; -} - -export { stringify }; diff --git a/tools/yaml/browser/dist/parse/cst-visit.js b/tools/yaml/browser/dist/parse/cst-visit.js deleted file mode 100644 index deca086..0000000 --- a/tools/yaml/browser/dist/parse/cst-visit.js +++ /dev/null @@ -1,97 +0,0 @@ -const BREAK = Symbol('break visit'); -const SKIP = Symbol('skip children'); -const REMOVE = Symbol('remove item'); -/** - * Apply a visitor to a CST document or item. - * - * Walks through the tree (depth-first) starting from the root, calling a - * `visitor` function with two arguments when entering each item: - * - `item`: The current item, which included the following members: - * - `start: SourceToken[]` – Source tokens before the key or value, - * possibly including its anchor or tag. - * - `key?: Token | null` – Set for pair values. May then be `null`, if - * the key before the `:` separator is empty. - * - `sep?: SourceToken[]` – Source tokens between the key and the value, - * which should include the `:` map value indicator if `value` is set. - * - `value?: Token` – The value of a sequence item, or of a map pair. - * - `path`: The steps from the root to the current node, as an array of - * `['key' | 'value', number]` tuples. - * - * The return value of the visitor may be used to control the traversal: - * - `undefined` (default): Do nothing and continue - * - `visit.SKIP`: Do not visit the children of this token, continue with - * next sibling - * - `visit.BREAK`: Terminate traversal completely - * - `visit.REMOVE`: Remove the current item, then continue with the next one - * - `number`: Set the index of the next step. This is useful especially if - * the index of the current token has changed. - * - `function`: Define the next visitor for this item. After the original - * visitor is called on item entry, next visitors are called after handling - * a non-empty `key` and when exiting the item. - */ -function visit(cst, visitor) { - if ('type' in cst && cst.type === 'document') - cst = { start: cst.start, value: cst.value }; - _visit(Object.freeze([]), cst, visitor); -} -// Without the `as symbol` casts, TS declares these in the `visit` -// namespace using `var`, but then complains about that because -// `unique symbol` must be `const`. -/** Terminate visit traversal completely */ -visit.BREAK = BREAK; -/** Do not visit the children of the current item */ -visit.SKIP = SKIP; -/** Remove the current item */ -visit.REMOVE = REMOVE; -/** Find the item at `path` from `cst` as the root */ -visit.itemAtPath = (cst, path) => { - let item = cst; - for (const [field, index] of path) { - const tok = item?.[field]; - if (tok && 'items' in tok) { - item = tok.items[index]; - } - else - return undefined; - } - return item; -}; -/** - * Get the immediate parent collection of the item at `path` from `cst` as the root. - * - * Throws an error if the collection is not found, which should never happen if the item itself exists. - */ -visit.parentCollection = (cst, path) => { - const parent = visit.itemAtPath(cst, path.slice(0, -1)); - const field = path[path.length - 1][0]; - const coll = parent?.[field]; - if (coll && 'items' in coll) - return coll; - throw new Error('Parent collection not found'); -}; -function _visit(path, item, visitor) { - let ctrl = visitor(item, path); - if (typeof ctrl === 'symbol') - return ctrl; - for (const field of ['key', 'value']) { - const token = item[field]; - if (token && 'items' in token) { - for (let i = 0; i < token.items.length; ++i) { - const ci = _visit(Object.freeze(path.concat([[field, i]])), token.items[i], visitor); - if (typeof ci === 'number') - i = ci - 1; - else if (ci === BREAK) - return BREAK; - else if (ci === REMOVE) { - token.items.splice(i, 1); - i -= 1; - } - } - if (typeof ctrl === 'function' && field === 'key') - ctrl = ctrl(item, path); - } - } - return typeof ctrl === 'function' ? ctrl(item, path) : ctrl; -} - -export { visit }; diff --git a/tools/yaml/browser/dist/parse/cst.js b/tools/yaml/browser/dist/parse/cst.js deleted file mode 100644 index 8bb2f4a..0000000 --- a/tools/yaml/browser/dist/parse/cst.js +++ /dev/null @@ -1,98 +0,0 @@ -export { createScalarToken, resolveAsScalar, setScalarValue } from './cst-scalar.js'; -export { stringify } from './cst-stringify.js'; -export { visit } from './cst-visit.js'; - -/** The byte order mark */ -const BOM = '\u{FEFF}'; -/** Start of doc-mode */ -const DOCUMENT = '\x02'; // C0: Start of Text -/** Unexpected end of flow-mode */ -const FLOW_END = '\x18'; // C0: Cancel -/** Next token is a scalar value */ -const SCALAR = '\x1f'; // C0: Unit Separator -/** @returns `true` if `token` is a flow or block collection */ -const isCollection = (token) => !!token && 'items' in token; -/** @returns `true` if `token` is a flow or block scalar; not an alias */ -const isScalar = (token) => !!token && - (token.type === 'scalar' || - token.type === 'single-quoted-scalar' || - token.type === 'double-quoted-scalar' || - token.type === 'block-scalar'); -/* istanbul ignore next */ -/** Get a printable representation of a lexer token */ -function prettyToken(token) { - switch (token) { - case BOM: - return ''; - case DOCUMENT: - return ''; - case FLOW_END: - return ''; - case SCALAR: - return ''; - default: - return JSON.stringify(token); - } -} -/** Identify the type of a lexer token. May return `null` for unknown tokens. */ -function tokenType(source) { - switch (source) { - case BOM: - return 'byte-order-mark'; - case DOCUMENT: - return 'doc-mode'; - case FLOW_END: - return 'flow-error-end'; - case SCALAR: - return 'scalar'; - case '---': - return 'doc-start'; - case '...': - return 'doc-end'; - case '': - case '\n': - case '\r\n': - return 'newline'; - case '-': - return 'seq-item-ind'; - case '?': - return 'explicit-key-ind'; - case ':': - return 'map-value-ind'; - case '{': - return 'flow-map-start'; - case '}': - return 'flow-map-end'; - case '[': - return 'flow-seq-start'; - case ']': - return 'flow-seq-end'; - case ',': - return 'comma'; - } - switch (source[0]) { - case ' ': - case '\t': - return 'space'; - case '#': - return 'comment'; - case '%': - return 'directive-line'; - case '*': - return 'alias'; - case '&': - return 'anchor'; - case '!': - return 'tag'; - case "'": - return 'single-quoted-scalar'; - case '"': - return 'double-quoted-scalar'; - case '|': - case '>': - return 'block-scalar-header'; - } - return null; -} - -export { BOM, DOCUMENT, FLOW_END, SCALAR, isCollection, isScalar, prettyToken, tokenType }; diff --git a/tools/yaml/browser/dist/parse/lexer.js b/tools/yaml/browser/dist/parse/lexer.js deleted file mode 100644 index 20fe13c..0000000 --- a/tools/yaml/browser/dist/parse/lexer.js +++ /dev/null @@ -1,701 +0,0 @@ -import { BOM, DOCUMENT, FLOW_END, SCALAR } from './cst.js'; - -/* -START -> stream - -stream - directive -> line-end -> stream - indent + line-end -> stream - [else] -> line-start - -line-end - comment -> line-end - newline -> . - input-end -> END - -line-start - doc-start -> doc - doc-end -> stream - [else] -> indent -> block-start - -block-start - seq-item-start -> block-start - explicit-key-start -> block-start - map-value-start -> block-start - [else] -> doc - -doc - line-end -> line-start - spaces -> doc - anchor -> doc - tag -> doc - flow-start -> flow -> doc - flow-end -> error -> doc - seq-item-start -> error -> doc - explicit-key-start -> error -> doc - map-value-start -> doc - alias -> doc - quote-start -> quoted-scalar -> doc - block-scalar-header -> line-end -> block-scalar(min) -> line-start - [else] -> plain-scalar(false, min) -> doc - -flow - line-end -> flow - spaces -> flow - anchor -> flow - tag -> flow - flow-start -> flow -> flow - flow-end -> . - seq-item-start -> error -> flow - explicit-key-start -> flow - map-value-start -> flow - alias -> flow - quote-start -> quoted-scalar -> flow - comma -> flow - [else] -> plain-scalar(true, 0) -> flow - -quoted-scalar - quote-end -> . - [else] -> quoted-scalar - -block-scalar(min) - newline + peek(indent < min) -> . - [else] -> block-scalar(min) - -plain-scalar(is-flow, min) - scalar-end(is-flow) -> . - peek(newline + (indent < min)) -> . - [else] -> plain-scalar(min) -*/ -function isEmpty(ch) { - switch (ch) { - case undefined: - case ' ': - case '\n': - case '\r': - case '\t': - return true; - default: - return false; - } -} -const hexDigits = '0123456789ABCDEFabcdef'.split(''); -const tagChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()".split(''); -const invalidFlowScalarChars = ',[]{}'.split(''); -const invalidAnchorChars = ' ,[]{}\n\r\t'.split(''); -const isNotAnchorChar = (ch) => !ch || invalidAnchorChars.includes(ch); -/** - * Splits an input string into lexical tokens, i.e. smaller strings that are - * easily identifiable by `tokens.tokenType()`. - * - * Lexing starts always in a "stream" context. Incomplete input may be buffered - * until a complete token can be emitted. - * - * In addition to slices of the original input, the following control characters - * may also be emitted: - * - * - `\x02` (Start of Text): A document starts with the next token - * - `\x18` (Cancel): Unexpected end of flow-mode (indicates an error) - * - `\x1f` (Unit Separator): Next token is a scalar value - * - `\u{FEFF}` (Byte order mark): Emitted separately outside documents - */ -class Lexer { - constructor() { - /** - * Flag indicating whether the end of the current buffer marks the end of - * all input - */ - this.atEnd = false; - /** - * Explicit indent set in block scalar header, as an offset from the current - * minimum indent, so e.g. set to 1 from a header `|2+`. Set to -1 if not - * explicitly set. - */ - this.blockScalarIndent = -1; - /** - * Block scalars that include a + (keep) chomping indicator in their header - * include trailing empty lines, which are otherwise excluded from the - * scalar's contents. - */ - this.blockScalarKeep = false; - /** Current input */ - this.buffer = ''; - /** - * Flag noting whether the map value indicator : can immediately follow this - * node within a flow context. - */ - this.flowKey = false; - /** Count of surrounding flow collection levels. */ - this.flowLevel = 0; - /** - * Minimum level of indentation required for next lines to be parsed as a - * part of the current scalar value. - */ - this.indentNext = 0; - /** Indentation level of the current line. */ - this.indentValue = 0; - /** Position of the next \n character. */ - this.lineEndPos = null; - /** Stores the state of the lexer if reaching the end of incpomplete input */ - this.next = null; - /** A pointer to `buffer`; the current position of the lexer. */ - this.pos = 0; - } - /** - * Generate YAML tokens from the `source` string. If `incomplete`, - * a part of the last line may be left as a buffer for the next call. - * - * @returns A generator of lexical tokens - */ - *lex(source, incomplete = false) { - if (source) { - this.buffer = this.buffer ? this.buffer + source : source; - this.lineEndPos = null; - } - this.atEnd = !incomplete; - let next = this.next ?? 'stream'; - while (next && (incomplete || this.hasChars(1))) - next = yield* this.parseNext(next); - } - atLineEnd() { - let i = this.pos; - let ch = this.buffer[i]; - while (ch === ' ' || ch === '\t') - ch = this.buffer[++i]; - if (!ch || ch === '#' || ch === '\n') - return true; - if (ch === '\r') - return this.buffer[i + 1] === '\n'; - return false; - } - charAt(n) { - return this.buffer[this.pos + n]; - } - continueScalar(offset) { - let ch = this.buffer[offset]; - if (this.indentNext > 0) { - let indent = 0; - while (ch === ' ') - ch = this.buffer[++indent + offset]; - if (ch === '\r') { - const next = this.buffer[indent + offset + 1]; - if (next === '\n' || (!next && !this.atEnd)) - return offset + indent + 1; - } - return ch === '\n' || indent >= this.indentNext || (!ch && !this.atEnd) - ? offset + indent - : -1; - } - if (ch === '-' || ch === '.') { - const dt = this.buffer.substr(offset, 3); - if ((dt === '---' || dt === '...') && isEmpty(this.buffer[offset + 3])) - return -1; - } - return offset; - } - getLine() { - let end = this.lineEndPos; - if (typeof end !== 'number' || (end !== -1 && end < this.pos)) { - end = this.buffer.indexOf('\n', this.pos); - this.lineEndPos = end; - } - if (end === -1) - return this.atEnd ? this.buffer.substring(this.pos) : null; - if (this.buffer[end - 1] === '\r') - end -= 1; - return this.buffer.substring(this.pos, end); - } - hasChars(n) { - return this.pos + n <= this.buffer.length; - } - setNext(state) { - this.buffer = this.buffer.substring(this.pos); - this.pos = 0; - this.lineEndPos = null; - this.next = state; - return null; - } - peek(n) { - return this.buffer.substr(this.pos, n); - } - *parseNext(next) { - switch (next) { - case 'stream': - return yield* this.parseStream(); - case 'line-start': - return yield* this.parseLineStart(); - case 'block-start': - return yield* this.parseBlockStart(); - case 'doc': - return yield* this.parseDocument(); - case 'flow': - return yield* this.parseFlowCollection(); - case 'quoted-scalar': - return yield* this.parseQuotedScalar(); - case 'block-scalar': - return yield* this.parseBlockScalar(); - case 'plain-scalar': - return yield* this.parsePlainScalar(); - } - } - *parseStream() { - let line = this.getLine(); - if (line === null) - return this.setNext('stream'); - if (line[0] === BOM) { - yield* this.pushCount(1); - line = line.substring(1); - } - if (line[0] === '%') { - let dirEnd = line.length; - const cs = line.indexOf('#'); - if (cs !== -1) { - const ch = line[cs - 1]; - if (ch === ' ' || ch === '\t') - dirEnd = cs - 1; - } - while (true) { - const ch = line[dirEnd - 1]; - if (ch === ' ' || ch === '\t') - dirEnd -= 1; - else - break; - } - const n = (yield* this.pushCount(dirEnd)) + (yield* this.pushSpaces(true)); - yield* this.pushCount(line.length - n); // possible comment - this.pushNewline(); - return 'stream'; - } - if (this.atLineEnd()) { - const sp = yield* this.pushSpaces(true); - yield* this.pushCount(line.length - sp); - yield* this.pushNewline(); - return 'stream'; - } - yield DOCUMENT; - return yield* this.parseLineStart(); - } - *parseLineStart() { - const ch = this.charAt(0); - if (!ch && !this.atEnd) - return this.setNext('line-start'); - if (ch === '-' || ch === '.') { - if (!this.atEnd && !this.hasChars(4)) - return this.setNext('line-start'); - const s = this.peek(3); - if (s === '---' && isEmpty(this.charAt(3))) { - yield* this.pushCount(3); - this.indentValue = 0; - this.indentNext = 0; - return 'doc'; - } - else if (s === '...' && isEmpty(this.charAt(3))) { - yield* this.pushCount(3); - return 'stream'; - } - } - this.indentValue = yield* this.pushSpaces(false); - if (this.indentNext > this.indentValue && !isEmpty(this.charAt(1))) - this.indentNext = this.indentValue; - return yield* this.parseBlockStart(); - } - *parseBlockStart() { - const [ch0, ch1] = this.peek(2); - if (!ch1 && !this.atEnd) - return this.setNext('block-start'); - if ((ch0 === '-' || ch0 === '?' || ch0 === ':') && isEmpty(ch1)) { - const n = (yield* this.pushCount(1)) + (yield* this.pushSpaces(true)); - this.indentNext = this.indentValue + 1; - this.indentValue += n; - return yield* this.parseBlockStart(); - } - return 'doc'; - } - *parseDocument() { - yield* this.pushSpaces(true); - const line = this.getLine(); - if (line === null) - return this.setNext('doc'); - let n = yield* this.pushIndicators(); - switch (line[n]) { - case '#': - yield* this.pushCount(line.length - n); - // fallthrough - case undefined: - yield* this.pushNewline(); - return yield* this.parseLineStart(); - case '{': - case '[': - yield* this.pushCount(1); - this.flowKey = false; - this.flowLevel = 1; - return 'flow'; - case '}': - case ']': - // this is an error - yield* this.pushCount(1); - return 'doc'; - case '*': - yield* this.pushUntil(isNotAnchorChar); - return 'doc'; - case '"': - case "'": - return yield* this.parseQuotedScalar(); - case '|': - case '>': - n += yield* this.parseBlockScalarHeader(); - n += yield* this.pushSpaces(true); - yield* this.pushCount(line.length - n); - yield* this.pushNewline(); - return yield* this.parseBlockScalar(); - default: - return yield* this.parsePlainScalar(); - } - } - *parseFlowCollection() { - let nl, sp; - let indent = -1; - do { - nl = yield* this.pushNewline(); - if (nl > 0) { - sp = yield* this.pushSpaces(false); - this.indentValue = indent = sp; - } - else { - sp = 0; - } - sp += yield* this.pushSpaces(true); - } while (nl + sp > 0); - const line = this.getLine(); - if (line === null) - return this.setNext('flow'); - if ((indent !== -1 && indent < this.indentNext && line[0] !== '#') || - (indent === 0 && - (line.startsWith('---') || line.startsWith('...')) && - isEmpty(line[3]))) { - // Allowing for the terminal ] or } at the same (rather than greater) - // indent level as the initial [ or { is technically invalid, but - // failing here would be surprising to users. - const atFlowEndMarker = indent === this.indentNext - 1 && - this.flowLevel === 1 && - (line[0] === ']' || line[0] === '}'); - if (!atFlowEndMarker) { - // this is an error - this.flowLevel = 0; - yield FLOW_END; - return yield* this.parseLineStart(); - } - } - let n = 0; - while (line[n] === ',') { - n += yield* this.pushCount(1); - n += yield* this.pushSpaces(true); - this.flowKey = false; - } - n += yield* this.pushIndicators(); - switch (line[n]) { - case undefined: - return 'flow'; - case '#': - yield* this.pushCount(line.length - n); - return 'flow'; - case '{': - case '[': - yield* this.pushCount(1); - this.flowKey = false; - this.flowLevel += 1; - return 'flow'; - case '}': - case ']': - yield* this.pushCount(1); - this.flowKey = true; - this.flowLevel -= 1; - return this.flowLevel ? 'flow' : 'doc'; - case '*': - yield* this.pushUntil(isNotAnchorChar); - return 'flow'; - case '"': - case "'": - this.flowKey = true; - return yield* this.parseQuotedScalar(); - case ':': { - const next = this.charAt(1); - if (this.flowKey || isEmpty(next) || next === ',') { - this.flowKey = false; - yield* this.pushCount(1); - yield* this.pushSpaces(true); - return 'flow'; - } - } - // fallthrough - default: - this.flowKey = false; - return yield* this.parsePlainScalar(); - } - } - *parseQuotedScalar() { - const quote = this.charAt(0); - let end = this.buffer.indexOf(quote, this.pos + 1); - if (quote === "'") { - while (end !== -1 && this.buffer[end + 1] === "'") - end = this.buffer.indexOf("'", end + 2); - } - else { - // double-quote - while (end !== -1) { - let n = 0; - while (this.buffer[end - 1 - n] === '\\') - n += 1; - if (n % 2 === 0) - break; - end = this.buffer.indexOf('"', end + 1); - } - } - // Only looking for newlines within the quotes - const qb = this.buffer.substring(0, end); - let nl = qb.indexOf('\n', this.pos); - if (nl !== -1) { - while (nl !== -1) { - const cs = this.continueScalar(nl + 1); - if (cs === -1) - break; - nl = qb.indexOf('\n', cs); - } - if (nl !== -1) { - // this is an error caused by an unexpected unindent - end = nl - (qb[nl - 1] === '\r' ? 2 : 1); - } - } - if (end === -1) { - if (!this.atEnd) - return this.setNext('quoted-scalar'); - end = this.buffer.length; - } - yield* this.pushToIndex(end + 1, false); - return this.flowLevel ? 'flow' : 'doc'; - } - *parseBlockScalarHeader() { - this.blockScalarIndent = -1; - this.blockScalarKeep = false; - let i = this.pos; - while (true) { - const ch = this.buffer[++i]; - if (ch === '+') - this.blockScalarKeep = true; - else if (ch > '0' && ch <= '9') - this.blockScalarIndent = Number(ch) - 1; - else if (ch !== '-') - break; - } - return yield* this.pushUntil(ch => isEmpty(ch) || ch === '#'); - } - *parseBlockScalar() { - let nl = this.pos - 1; // may be -1 if this.pos === 0 - let indent = 0; - let ch; - loop: for (let i = this.pos; (ch = this.buffer[i]); ++i) { - switch (ch) { - case ' ': - indent += 1; - break; - case '\n': - nl = i; - indent = 0; - break; - case '\r': { - const next = this.buffer[i + 1]; - if (!next && !this.atEnd) - return this.setNext('block-scalar'); - if (next === '\n') - break; - } // fallthrough - default: - break loop; - } - } - if (!ch && !this.atEnd) - return this.setNext('block-scalar'); - if (indent >= this.indentNext) { - if (this.blockScalarIndent === -1) - this.indentNext = indent; - else - this.indentNext += this.blockScalarIndent; - do { - const cs = this.continueScalar(nl + 1); - if (cs === -1) - break; - nl = this.buffer.indexOf('\n', cs); - } while (nl !== -1); - if (nl === -1) { - if (!this.atEnd) - return this.setNext('block-scalar'); - nl = this.buffer.length; - } - } - if (!this.blockScalarKeep) { - do { - let i = nl - 1; - let ch = this.buffer[i]; - if (ch === '\r') - ch = this.buffer[--i]; - const lastChar = i; // Drop the line if last char not more indented - while (ch === ' ' || ch === '\t') - ch = this.buffer[--i]; - if (ch === '\n' && i >= this.pos && i + 1 + indent > lastChar) - nl = i; - else - break; - } while (true); - } - yield SCALAR; - yield* this.pushToIndex(nl + 1, true); - return yield* this.parseLineStart(); - } - *parsePlainScalar() { - const inFlow = this.flowLevel > 0; - let end = this.pos - 1; - let i = this.pos - 1; - let ch; - while ((ch = this.buffer[++i])) { - if (ch === ':') { - const next = this.buffer[i + 1]; - if (isEmpty(next) || (inFlow && next === ',')) - break; - end = i; - } - else if (isEmpty(ch)) { - let next = this.buffer[i + 1]; - if (ch === '\r') { - if (next === '\n') { - i += 1; - ch = '\n'; - next = this.buffer[i + 1]; - } - else - end = i; - } - if (next === '#' || (inFlow && invalidFlowScalarChars.includes(next))) - break; - if (ch === '\n') { - const cs = this.continueScalar(i + 1); - if (cs === -1) - break; - i = Math.max(i, cs - 2); // to advance, but still account for ' #' - } - } - else { - if (inFlow && invalidFlowScalarChars.includes(ch)) - break; - end = i; - } - } - if (!ch && !this.atEnd) - return this.setNext('plain-scalar'); - yield SCALAR; - yield* this.pushToIndex(end + 1, true); - return inFlow ? 'flow' : 'doc'; - } - *pushCount(n) { - if (n > 0) { - yield this.buffer.substr(this.pos, n); - this.pos += n; - return n; - } - return 0; - } - *pushToIndex(i, allowEmpty) { - const s = this.buffer.slice(this.pos, i); - if (s) { - yield s; - this.pos += s.length; - return s.length; - } - else if (allowEmpty) - yield ''; - return 0; - } - *pushIndicators() { - switch (this.charAt(0)) { - case '!': - return ((yield* this.pushTag()) + - (yield* this.pushSpaces(true)) + - (yield* this.pushIndicators())); - case '&': - return ((yield* this.pushUntil(isNotAnchorChar)) + - (yield* this.pushSpaces(true)) + - (yield* this.pushIndicators())); - case '-': // this is an error - case '?': // this is an error outside flow collections - case ':': { - const inFlow = this.flowLevel > 0; - const ch1 = this.charAt(1); - if (isEmpty(ch1) || (inFlow && invalidFlowScalarChars.includes(ch1))) { - if (!inFlow) - this.indentNext = this.indentValue + 1; - else if (this.flowKey) - this.flowKey = false; - return ((yield* this.pushCount(1)) + - (yield* this.pushSpaces(true)) + - (yield* this.pushIndicators())); - } - } - } - return 0; - } - *pushTag() { - if (this.charAt(1) === '<') { - let i = this.pos + 2; - let ch = this.buffer[i]; - while (!isEmpty(ch) && ch !== '>') - ch = this.buffer[++i]; - return yield* this.pushToIndex(ch === '>' ? i + 1 : i, false); - } - else { - let i = this.pos + 1; - let ch = this.buffer[i]; - while (ch) { - if (tagChars.includes(ch)) - ch = this.buffer[++i]; - else if (ch === '%' && - hexDigits.includes(this.buffer[i + 1]) && - hexDigits.includes(this.buffer[i + 2])) { - ch = this.buffer[(i += 3)]; - } - else - break; - } - return yield* this.pushToIndex(i, false); - } - } - *pushNewline() { - const ch = this.buffer[this.pos]; - if (ch === '\n') - return yield* this.pushCount(1); - else if (ch === '\r' && this.charAt(1) === '\n') - return yield* this.pushCount(2); - else - return 0; - } - *pushSpaces(allowTabs) { - let i = this.pos - 1; - let ch; - do { - ch = this.buffer[++i]; - } while (ch === ' ' || (allowTabs && ch === '\t')); - const n = i - this.pos; - if (n > 0) { - yield this.buffer.substr(this.pos, n); - this.pos = i; - } - return n; - } - *pushUntil(test) { - let i = this.pos; - let ch = this.buffer[i]; - while (!test(ch)) - ch = this.buffer[++i]; - return yield* this.pushToIndex(i, false); - } -} - -export { Lexer }; diff --git a/tools/yaml/browser/dist/parse/line-counter.js b/tools/yaml/browser/dist/parse/line-counter.js deleted file mode 100644 index 002ce24..0000000 --- a/tools/yaml/browser/dist/parse/line-counter.js +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Tracks newlines during parsing in order to provide an efficient API for - * determining the one-indexed `{ line, col }` position for any offset - * within the input. - */ -class LineCounter { - constructor() { - this.lineStarts = []; - /** - * Should be called in ascending order. Otherwise, call - * `lineCounter.lineStarts.sort()` before calling `linePos()`. - */ - this.addNewLine = (offset) => this.lineStarts.push(offset); - /** - * Performs a binary search and returns the 1-indexed { line, col } - * position of `offset`. If `line === 0`, `addNewLine` has never been - * called or `offset` is before the first known newline. - */ - this.linePos = (offset) => { - let low = 0; - let high = this.lineStarts.length; - while (low < high) { - const mid = (low + high) >> 1; // Math.floor((low + high) / 2) - if (this.lineStarts[mid] < offset) - low = mid + 1; - else - high = mid; - } - if (this.lineStarts[low] === offset) - return { line: low + 1, col: 1 }; - if (low === 0) - return { line: 0, col: offset }; - const start = this.lineStarts[low - 1]; - return { line: low, col: offset - start + 1 }; - }; - } -} - -export { LineCounter }; diff --git a/tools/yaml/browser/dist/parse/parser.js b/tools/yaml/browser/dist/parse/parser.js deleted file mode 100644 index d75e1ee..0000000 --- a/tools/yaml/browser/dist/parse/parser.js +++ /dev/null @@ -1,950 +0,0 @@ -import { tokenType } from './cst.js'; -import { Lexer } from './lexer.js'; - -function includesToken(list, type) { - for (let i = 0; i < list.length; ++i) - if (list[i].type === type) - return true; - return false; -} -function findNonEmptyIndex(list) { - for (let i = 0; i < list.length; ++i) { - switch (list[i].type) { - case 'space': - case 'comment': - case 'newline': - break; - default: - return i; - } - } - return -1; -} -function isFlowToken(token) { - switch (token?.type) { - case 'alias': - case 'scalar': - case 'single-quoted-scalar': - case 'double-quoted-scalar': - case 'flow-collection': - return true; - default: - return false; - } -} -function getPrevProps(parent) { - switch (parent.type) { - case 'document': - return parent.start; - case 'block-map': { - const it = parent.items[parent.items.length - 1]; - return it.sep ?? it.start; - } - case 'block-seq': - return parent.items[parent.items.length - 1].start; - /* istanbul ignore next should not happen */ - default: - return []; - } -} -/** Note: May modify input array */ -function getFirstKeyStartProps(prev) { - if (prev.length === 0) - return []; - let i = prev.length; - loop: while (--i >= 0) { - switch (prev[i].type) { - case 'doc-start': - case 'explicit-key-ind': - case 'map-value-ind': - case 'seq-item-ind': - case 'newline': - break loop; - } - } - while (prev[++i]?.type === 'space') { - /* loop */ - } - return prev.splice(i, prev.length); -} -function fixFlowSeqItems(fc) { - if (fc.start.type === 'flow-seq-start') { - for (const it of fc.items) { - if (it.sep && - !it.value && - !includesToken(it.start, 'explicit-key-ind') && - !includesToken(it.sep, 'map-value-ind')) { - if (it.key) - it.value = it.key; - delete it.key; - if (isFlowToken(it.value)) { - if (it.value.end) - Array.prototype.push.apply(it.value.end, it.sep); - else - it.value.end = it.sep; - } - else - Array.prototype.push.apply(it.start, it.sep); - delete it.sep; - } - } - } -} -/** - * A YAML concrete syntax tree (CST) parser - * - * ```ts - * const src: string = ... - * for (const token of new Parser().parse(src)) { - * // token: Token - * } - * ``` - * - * To use the parser with a user-provided lexer: - * - * ```ts - * function* parse(source: string, lexer: Lexer) { - * const parser = new Parser() - * for (const lexeme of lexer.lex(source)) - * yield* parser.next(lexeme) - * yield* parser.end() - * } - * - * const src: string = ... - * const lexer = new Lexer() - * for (const token of parse(src, lexer)) { - * // token: Token - * } - * ``` - */ -class Parser { - /** - * @param onNewLine - If defined, called separately with the start position of - * each new line (in `parse()`, including the start of input). - */ - constructor(onNewLine) { - /** If true, space and sequence indicators count as indentation */ - this.atNewLine = true; - /** If true, next token is a scalar value */ - this.atScalar = false; - /** Current indentation level */ - this.indent = 0; - /** Current offset since the start of parsing */ - this.offset = 0; - /** On the same line with a block map key */ - this.onKeyLine = false; - /** Top indicates the node that's currently being built */ - this.stack = []; - /** The source of the current token, set in parse() */ - this.source = ''; - /** The type of the current token, set in parse() */ - this.type = ''; - // Must be defined after `next()` - this.lexer = new Lexer(); - this.onNewLine = onNewLine; - } - /** - * Parse `source` as a YAML stream. - * If `incomplete`, a part of the last line may be left as a buffer for the next call. - * - * Errors are not thrown, but yielded as `{ type: 'error', message }` tokens. - * - * @returns A generator of tokens representing each directive, document, and other structure. - */ - *parse(source, incomplete = false) { - if (this.onNewLine && this.offset === 0) - this.onNewLine(0); - for (const lexeme of this.lexer.lex(source, incomplete)) - yield* this.next(lexeme); - if (!incomplete) - yield* this.end(); - } - /** - * Advance the parser by the `source` of one lexical token. - */ - *next(source) { - this.source = source; - if (this.atScalar) { - this.atScalar = false; - yield* this.step(); - this.offset += source.length; - return; - } - const type = tokenType(source); - if (!type) { - const message = `Not a YAML token: ${source}`; - yield* this.pop({ type: 'error', offset: this.offset, message, source }); - this.offset += source.length; - } - else if (type === 'scalar') { - this.atNewLine = false; - this.atScalar = true; - this.type = 'scalar'; - } - else { - this.type = type; - yield* this.step(); - switch (type) { - case 'newline': - this.atNewLine = true; - this.indent = 0; - if (this.onNewLine) - this.onNewLine(this.offset + source.length); - break; - case 'space': - if (this.atNewLine && source[0] === ' ') - this.indent += source.length; - break; - case 'explicit-key-ind': - case 'map-value-ind': - case 'seq-item-ind': - if (this.atNewLine) - this.indent += source.length; - break; - case 'doc-mode': - case 'flow-error-end': - return; - default: - this.atNewLine = false; - } - this.offset += source.length; - } - } - /** Call at end of input to push out any remaining constructions */ - *end() { - while (this.stack.length > 0) - yield* this.pop(); - } - get sourceToken() { - const st = { - type: this.type, - offset: this.offset, - indent: this.indent, - source: this.source - }; - return st; - } - *step() { - const top = this.peek(1); - if (this.type === 'doc-end' && (!top || top.type !== 'doc-end')) { - while (this.stack.length > 0) - yield* this.pop(); - this.stack.push({ - type: 'doc-end', - offset: this.offset, - source: this.source - }); - return; - } - if (!top) - return yield* this.stream(); - switch (top.type) { - case 'document': - return yield* this.document(top); - case 'alias': - case 'scalar': - case 'single-quoted-scalar': - case 'double-quoted-scalar': - return yield* this.scalar(top); - case 'block-scalar': - return yield* this.blockScalar(top); - case 'block-map': - return yield* this.blockMap(top); - case 'block-seq': - return yield* this.blockSequence(top); - case 'flow-collection': - return yield* this.flowCollection(top); - case 'doc-end': - return yield* this.documentEnd(top); - } - /* istanbul ignore next should not happen */ - yield* this.pop(); - } - peek(n) { - return this.stack[this.stack.length - n]; - } - *pop(error) { - const token = error ?? this.stack.pop(); - /* istanbul ignore if should not happen */ - if (!token) { - const message = 'Tried to pop an empty stack'; - yield { type: 'error', offset: this.offset, source: '', message }; - } - else if (this.stack.length === 0) { - yield token; - } - else { - const top = this.peek(1); - if (token.type === 'block-scalar') { - // Block scalars use their parent rather than header indent - token.indent = 'indent' in top ? top.indent : 0; - } - else if (token.type === 'flow-collection' && top.type === 'document') { - // Ignore all indent for top-level flow collections - token.indent = 0; - } - if (token.type === 'flow-collection') - fixFlowSeqItems(token); - switch (top.type) { - case 'document': - top.value = token; - break; - case 'block-scalar': - top.props.push(token); // error - break; - case 'block-map': { - const it = top.items[top.items.length - 1]; - if (it.value) { - top.items.push({ start: [], key: token, sep: [] }); - this.onKeyLine = true; - return; - } - else if (it.sep) { - it.value = token; - } - else { - Object.assign(it, { key: token, sep: [] }); - this.onKeyLine = !includesToken(it.start, 'explicit-key-ind'); - return; - } - break; - } - case 'block-seq': { - const it = top.items[top.items.length - 1]; - if (it.value) - top.items.push({ start: [], value: token }); - else - it.value = token; - break; - } - case 'flow-collection': { - const it = top.items[top.items.length - 1]; - if (!it || it.value) - top.items.push({ start: [], key: token, sep: [] }); - else if (it.sep) - it.value = token; - else - Object.assign(it, { key: token, sep: [] }); - return; - } - /* istanbul ignore next should not happen */ - default: - yield* this.pop(); - yield* this.pop(token); - } - if ((top.type === 'document' || - top.type === 'block-map' || - top.type === 'block-seq') && - (token.type === 'block-map' || token.type === 'block-seq')) { - const last = token.items[token.items.length - 1]; - if (last && - !last.sep && - !last.value && - last.start.length > 0 && - findNonEmptyIndex(last.start) === -1 && - (token.indent === 0 || - last.start.every(st => st.type !== 'comment' || st.indent < token.indent))) { - if (top.type === 'document') - top.end = last.start; - else - top.items.push({ start: last.start }); - token.items.splice(-1, 1); - } - } - } - } - *stream() { - switch (this.type) { - case 'directive-line': - yield { type: 'directive', offset: this.offset, source: this.source }; - return; - case 'byte-order-mark': - case 'space': - case 'comment': - case 'newline': - yield this.sourceToken; - return; - case 'doc-mode': - case 'doc-start': { - const doc = { - type: 'document', - offset: this.offset, - start: [] - }; - if (this.type === 'doc-start') - doc.start.push(this.sourceToken); - this.stack.push(doc); - return; - } - } - yield { - type: 'error', - offset: this.offset, - message: `Unexpected ${this.type} token in YAML stream`, - source: this.source - }; - } - *document(doc) { - if (doc.value) - return yield* this.lineEnd(doc); - switch (this.type) { - case 'doc-start': { - if (findNonEmptyIndex(doc.start) !== -1) { - yield* this.pop(); - yield* this.step(); - } - else - doc.start.push(this.sourceToken); - return; - } - case 'anchor': - case 'tag': - case 'space': - case 'comment': - case 'newline': - doc.start.push(this.sourceToken); - return; - } - const bv = this.startBlockValue(doc); - if (bv) - this.stack.push(bv); - else { - yield { - type: 'error', - offset: this.offset, - message: `Unexpected ${this.type} token in YAML document`, - source: this.source - }; - } - } - *scalar(scalar) { - if (this.type === 'map-value-ind') { - const prev = getPrevProps(this.peek(2)); - const start = getFirstKeyStartProps(prev); - let sep; - if (scalar.end) { - sep = scalar.end; - sep.push(this.sourceToken); - delete scalar.end; - } - else - sep = [this.sourceToken]; - const map = { - type: 'block-map', - offset: scalar.offset, - indent: scalar.indent, - items: [{ start, key: scalar, sep }] - }; - this.onKeyLine = true; - this.stack[this.stack.length - 1] = map; - } - else - yield* this.lineEnd(scalar); - } - *blockScalar(scalar) { - switch (this.type) { - case 'space': - case 'comment': - case 'newline': - scalar.props.push(this.sourceToken); - return; - case 'scalar': - scalar.source = this.source; - // block-scalar source includes trailing newline - this.atNewLine = true; - this.indent = 0; - if (this.onNewLine) { - let nl = this.source.indexOf('\n') + 1; - while (nl !== 0) { - this.onNewLine(this.offset + nl); - nl = this.source.indexOf('\n', nl) + 1; - } - } - yield* this.pop(); - break; - /* istanbul ignore next should not happen */ - default: - yield* this.pop(); - yield* this.step(); - } - } - *blockMap(map) { - const it = map.items[map.items.length - 1]; - // it.sep is true-ish if pair already has key or : separator - switch (this.type) { - case 'newline': - this.onKeyLine = false; - if (it.value) { - const end = 'end' in it.value ? it.value.end : undefined; - const last = Array.isArray(end) ? end[end.length - 1] : undefined; - if (last?.type === 'comment') - end?.push(this.sourceToken); - else - map.items.push({ start: [this.sourceToken] }); - } - else if (it.sep) { - it.sep.push(this.sourceToken); - } - else { - it.start.push(this.sourceToken); - } - return; - case 'space': - case 'comment': - if (it.value) { - map.items.push({ start: [this.sourceToken] }); - } - else if (it.sep) { - it.sep.push(this.sourceToken); - } - else { - if (this.atIndentedComment(it.start, map.indent)) { - const prev = map.items[map.items.length - 2]; - const end = prev?.value?.end; - if (Array.isArray(end)) { - Array.prototype.push.apply(end, it.start); - end.push(this.sourceToken); - map.items.pop(); - return; - } - } - it.start.push(this.sourceToken); - } - return; - } - if (this.indent >= map.indent) { - const atNextItem = !this.onKeyLine && this.indent === map.indent && it.sep; - // For empty nodes, assign newline-separated not indented empty tokens to following node - let start = []; - if (atNextItem && it.sep && !it.value) { - const nl = []; - for (let i = 0; i < it.sep.length; ++i) { - const st = it.sep[i]; - switch (st.type) { - case 'newline': - nl.push(i); - break; - case 'space': - break; - case 'comment': - if (st.indent > map.indent) - nl.length = 0; - break; - default: - nl.length = 0; - } - } - if (nl.length >= 2) - start = it.sep.splice(nl[1]); - } - switch (this.type) { - case 'anchor': - case 'tag': - if (atNextItem || it.value) { - start.push(this.sourceToken); - map.items.push({ start }); - this.onKeyLine = true; - } - else if (it.sep) { - it.sep.push(this.sourceToken); - } - else { - it.start.push(this.sourceToken); - } - return; - case 'explicit-key-ind': - if (!it.sep && !includesToken(it.start, 'explicit-key-ind')) { - it.start.push(this.sourceToken); - } - else if (atNextItem || it.value) { - start.push(this.sourceToken); - map.items.push({ start }); - } - else { - this.stack.push({ - type: 'block-map', - offset: this.offset, - indent: this.indent, - items: [{ start: [this.sourceToken] }] - }); - } - this.onKeyLine = true; - return; - case 'map-value-ind': - if (includesToken(it.start, 'explicit-key-ind')) { - if (!it.sep) { - if (includesToken(it.start, 'newline')) { - Object.assign(it, { key: null, sep: [this.sourceToken] }); - } - else { - const start = getFirstKeyStartProps(it.start); - this.stack.push({ - type: 'block-map', - offset: this.offset, - indent: this.indent, - items: [{ start, key: null, sep: [this.sourceToken] }] - }); - } - } - else if (it.value) { - map.items.push({ start: [], key: null, sep: [this.sourceToken] }); - } - else if (includesToken(it.sep, 'map-value-ind')) { - this.stack.push({ - type: 'block-map', - offset: this.offset, - indent: this.indent, - items: [{ start, key: null, sep: [this.sourceToken] }] - }); - } - else if (isFlowToken(it.key) && - !includesToken(it.sep, 'newline')) { - const start = getFirstKeyStartProps(it.start); - const key = it.key; - const sep = it.sep; - sep.push(this.sourceToken); - // @ts-expect-error type guard is wrong here - delete it.key, delete it.sep; - this.stack.push({ - type: 'block-map', - offset: this.offset, - indent: this.indent, - items: [{ start, key, sep }] - }); - } - else if (start.length > 0) { - // Not actually at next item - it.sep = it.sep.concat(start, this.sourceToken); - } - else { - it.sep.push(this.sourceToken); - } - } - else { - if (!it.sep) { - Object.assign(it, { key: null, sep: [this.sourceToken] }); - } - else if (it.value || atNextItem) { - map.items.push({ start, key: null, sep: [this.sourceToken] }); - } - else if (includesToken(it.sep, 'map-value-ind')) { - this.stack.push({ - type: 'block-map', - offset: this.offset, - indent: this.indent, - items: [{ start: [], key: null, sep: [this.sourceToken] }] - }); - } - else { - it.sep.push(this.sourceToken); - } - } - this.onKeyLine = true; - return; - case 'alias': - case 'scalar': - case 'single-quoted-scalar': - case 'double-quoted-scalar': { - const fs = this.flowScalar(this.type); - if (atNextItem || it.value) { - map.items.push({ start, key: fs, sep: [] }); - this.onKeyLine = true; - } - else if (it.sep) { - this.stack.push(fs); - } - else { - Object.assign(it, { key: fs, sep: [] }); - this.onKeyLine = true; - } - return; - } - default: { - const bv = this.startBlockValue(map); - if (bv) { - if (atNextItem && - bv.type !== 'block-seq' && - includesToken(it.start, 'explicit-key-ind')) { - map.items.push({ start }); - } - this.stack.push(bv); - return; - } - } - } - } - yield* this.pop(); - yield* this.step(); - } - *blockSequence(seq) { - const it = seq.items[seq.items.length - 1]; - switch (this.type) { - case 'newline': - if (it.value) { - const end = 'end' in it.value ? it.value.end : undefined; - const last = Array.isArray(end) ? end[end.length - 1] : undefined; - if (last?.type === 'comment') - end?.push(this.sourceToken); - else - seq.items.push({ start: [this.sourceToken] }); - } - else - it.start.push(this.sourceToken); - return; - case 'space': - case 'comment': - if (it.value) - seq.items.push({ start: [this.sourceToken] }); - else { - if (this.atIndentedComment(it.start, seq.indent)) { - const prev = seq.items[seq.items.length - 2]; - const end = prev?.value?.end; - if (Array.isArray(end)) { - Array.prototype.push.apply(end, it.start); - end.push(this.sourceToken); - seq.items.pop(); - return; - } - } - it.start.push(this.sourceToken); - } - return; - case 'anchor': - case 'tag': - if (it.value || this.indent <= seq.indent) - break; - it.start.push(this.sourceToken); - return; - case 'seq-item-ind': - if (this.indent !== seq.indent) - break; - if (it.value || includesToken(it.start, 'seq-item-ind')) - seq.items.push({ start: [this.sourceToken] }); - else - it.start.push(this.sourceToken); - return; - } - if (this.indent > seq.indent) { - const bv = this.startBlockValue(seq); - if (bv) { - this.stack.push(bv); - return; - } - } - yield* this.pop(); - yield* this.step(); - } - *flowCollection(fc) { - const it = fc.items[fc.items.length - 1]; - if (this.type === 'flow-error-end') { - let top; - do { - yield* this.pop(); - top = this.peek(1); - } while (top && top.type === 'flow-collection'); - } - else if (fc.end.length === 0) { - switch (this.type) { - case 'comma': - case 'explicit-key-ind': - if (!it || it.sep) - fc.items.push({ start: [this.sourceToken] }); - else - it.start.push(this.sourceToken); - return; - case 'map-value-ind': - if (!it || it.value) - fc.items.push({ start: [], key: null, sep: [this.sourceToken] }); - else if (it.sep) - it.sep.push(this.sourceToken); - else - Object.assign(it, { key: null, sep: [this.sourceToken] }); - return; - case 'space': - case 'comment': - case 'newline': - case 'anchor': - case 'tag': - if (!it || it.value) - fc.items.push({ start: [this.sourceToken] }); - else if (it.sep) - it.sep.push(this.sourceToken); - else - it.start.push(this.sourceToken); - return; - case 'alias': - case 'scalar': - case 'single-quoted-scalar': - case 'double-quoted-scalar': { - const fs = this.flowScalar(this.type); - if (!it || it.value) - fc.items.push({ start: [], key: fs, sep: [] }); - else if (it.sep) - this.stack.push(fs); - else - Object.assign(it, { key: fs, sep: [] }); - return; - } - case 'flow-map-end': - case 'flow-seq-end': - fc.end.push(this.sourceToken); - return; - } - const bv = this.startBlockValue(fc); - /* istanbul ignore else should not happen */ - if (bv) - this.stack.push(bv); - else { - yield* this.pop(); - yield* this.step(); - } - } - else { - const parent = this.peek(2); - if (parent.type === 'block-map' && - ((this.type === 'map-value-ind' && parent.indent === fc.indent) || - (this.type === 'newline' && - !parent.items[parent.items.length - 1].sep))) { - yield* this.pop(); - yield* this.step(); - } - else if (this.type === 'map-value-ind' && - parent.type !== 'flow-collection') { - const prev = getPrevProps(parent); - const start = getFirstKeyStartProps(prev); - fixFlowSeqItems(fc); - const sep = fc.end.splice(1, fc.end.length); - sep.push(this.sourceToken); - const map = { - type: 'block-map', - offset: fc.offset, - indent: fc.indent, - items: [{ start, key: fc, sep }] - }; - this.onKeyLine = true; - this.stack[this.stack.length - 1] = map; - } - else { - yield* this.lineEnd(fc); - } - } - } - flowScalar(type) { - if (this.onNewLine) { - let nl = this.source.indexOf('\n') + 1; - while (nl !== 0) { - this.onNewLine(this.offset + nl); - nl = this.source.indexOf('\n', nl) + 1; - } - } - return { - type, - offset: this.offset, - indent: this.indent, - source: this.source - }; - } - startBlockValue(parent) { - switch (this.type) { - case 'alias': - case 'scalar': - case 'single-quoted-scalar': - case 'double-quoted-scalar': - return this.flowScalar(this.type); - case 'block-scalar-header': - return { - type: 'block-scalar', - offset: this.offset, - indent: this.indent, - props: [this.sourceToken], - source: '' - }; - case 'flow-map-start': - case 'flow-seq-start': - return { - type: 'flow-collection', - offset: this.offset, - indent: this.indent, - start: this.sourceToken, - items: [], - end: [] - }; - case 'seq-item-ind': - return { - type: 'block-seq', - offset: this.offset, - indent: this.indent, - items: [{ start: [this.sourceToken] }] - }; - case 'explicit-key-ind': { - this.onKeyLine = true; - const prev = getPrevProps(parent); - const start = getFirstKeyStartProps(prev); - start.push(this.sourceToken); - return { - type: 'block-map', - offset: this.offset, - indent: this.indent, - items: [{ start }] - }; - } - case 'map-value-ind': { - this.onKeyLine = true; - const prev = getPrevProps(parent); - const start = getFirstKeyStartProps(prev); - return { - type: 'block-map', - offset: this.offset, - indent: this.indent, - items: [{ start, key: null, sep: [this.sourceToken] }] - }; - } - } - return null; - } - atIndentedComment(start, indent) { - if (this.type !== 'comment') - return false; - if (this.indent <= indent) - return false; - return start.every(st => st.type === 'newline' || st.type === 'space'); - } - *documentEnd(docEnd) { - if (this.type !== 'doc-mode') { - if (docEnd.end) - docEnd.end.push(this.sourceToken); - else - docEnd.end = [this.sourceToken]; - if (this.type === 'newline') - yield* this.pop(); - } - } - *lineEnd(token) { - switch (this.type) { - case 'comma': - case 'doc-start': - case 'doc-end': - case 'flow-seq-end': - case 'flow-map-end': - case 'map-value-ind': - yield* this.pop(); - yield* this.step(); - break; - case 'newline': - this.onKeyLine = false; - // fallthrough - case 'space': - case 'comment': - default: - // all other values are errors - if (token.end) - token.end.push(this.sourceToken); - else - token.end = [this.sourceToken]; - if (this.type === 'newline') - yield* this.pop(); - } - } -} - -export { Parser }; diff --git a/tools/yaml/browser/dist/public-api.js b/tools/yaml/browser/dist/public-api.js deleted file mode 100644 index b711aa0..0000000 --- a/tools/yaml/browser/dist/public-api.js +++ /dev/null @@ -1,99 +0,0 @@ -import { Composer } from './compose/composer.js'; -import { Document } from './doc/Document.js'; -import { prettifyError, YAMLParseError } from './errors.js'; -import { warn } from './log.js'; -import { LineCounter } from './parse/line-counter.js'; -import { Parser } from './parse/parser.js'; - -function parseOptions(options) { - const prettyErrors = options.prettyErrors !== false; - const lineCounter = options.lineCounter || (prettyErrors && new LineCounter()) || null; - return { lineCounter, prettyErrors }; -} -/** - * Parse the input as a stream of YAML documents. - * - * Documents should be separated from each other by `...` or `---` marker lines. - * - * @returns If an empty `docs` array is returned, it will be of type - * EmptyStream and contain additional stream information. In - * TypeScript, you should use `'empty' in docs` as a type guard for it. - */ -function parseAllDocuments(source, options = {}) { - const { lineCounter, prettyErrors } = parseOptions(options); - const parser = new Parser(lineCounter?.addNewLine); - const composer = new Composer(options); - const docs = Array.from(composer.compose(parser.parse(source))); - if (prettyErrors && lineCounter) - for (const doc of docs) { - doc.errors.forEach(prettifyError(source, lineCounter)); - doc.warnings.forEach(prettifyError(source, lineCounter)); - } - if (docs.length > 0) - return docs; - return Object.assign([], { empty: true }, composer.streamInfo()); -} -/** Parse an input string into a single YAML.Document */ -function parseDocument(source, options = {}) { - const { lineCounter, prettyErrors } = parseOptions(options); - const parser = new Parser(lineCounter?.addNewLine); - const composer = new Composer(options); - // `doc` is always set by compose.end(true) at the very latest - let doc = null; - for (const _doc of composer.compose(parser.parse(source), true, source.length)) { - if (!doc) - doc = _doc; - else if (doc.options.logLevel !== 'silent') { - doc.errors.push(new YAMLParseError(_doc.range.slice(0, 2), 'MULTIPLE_DOCS', 'Source contains multiple documents; please use YAML.parseAllDocuments()')); - break; - } - } - if (prettyErrors && lineCounter) { - doc.errors.forEach(prettifyError(source, lineCounter)); - doc.warnings.forEach(prettifyError(source, lineCounter)); - } - return doc; -} -function parse(src, reviver, options) { - let _reviver = undefined; - if (typeof reviver === 'function') { - _reviver = reviver; - } - else if (options === undefined && reviver && typeof reviver === 'object') { - options = reviver; - } - const doc = parseDocument(src, options); - if (!doc) - return null; - doc.warnings.forEach(warning => warn(doc.options.logLevel, warning)); - if (doc.errors.length > 0) { - if (doc.options.logLevel !== 'silent') - throw doc.errors[0]; - else - doc.errors = []; - } - return doc.toJS(Object.assign({ reviver: _reviver }, options)); -} -function stringify(value, replacer, options) { - let _replacer = null; - if (typeof replacer === 'function' || Array.isArray(replacer)) { - _replacer = replacer; - } - else if (options === undefined && replacer) { - options = replacer; - } - if (typeof options === 'string') - options = options.length; - if (typeof options === 'number') { - const indent = Math.round(options); - options = indent < 1 ? undefined : indent > 8 ? { indent: 8 } : { indent }; - } - if (value === undefined) { - const { keepUndefined } = options ?? replacer ?? {}; - if (!keepUndefined) - return undefined; - } - return new Document(value, _replacer, options).toString(options); -} - -export { parse, parseAllDocuments, parseDocument, stringify }; diff --git a/tools/yaml/browser/dist/schema/Schema.js b/tools/yaml/browser/dist/schema/Schema.js deleted file mode 100644 index 6b68b8a..0000000 --- a/tools/yaml/browser/dist/schema/Schema.js +++ /dev/null @@ -1,38 +0,0 @@ -import { MAP, SCALAR, SEQ } from '../nodes/identity.js'; -import { map } from './common/map.js'; -import { seq } from './common/seq.js'; -import { string } from './common/string.js'; -import { getTags, coreKnownTags } from './tags.js'; - -const sortMapEntriesByKey = (a, b) => a.key < b.key ? -1 : a.key > b.key ? 1 : 0; -class Schema { - constructor({ compat, customTags, merge, resolveKnownTags, schema, sortMapEntries, toStringDefaults }) { - this.compat = Array.isArray(compat) - ? getTags(compat, 'compat') - : compat - ? getTags(null, compat) - : null; - this.merge = !!merge; - this.name = (typeof schema === 'string' && schema) || 'core'; - this.knownTags = resolveKnownTags ? coreKnownTags : {}; - this.tags = getTags(customTags, this.name); - this.toStringOptions = toStringDefaults ?? null; - Object.defineProperty(this, MAP, { value: map }); - Object.defineProperty(this, SCALAR, { value: string }); - Object.defineProperty(this, SEQ, { value: seq }); - // Used by createMap() - this.sortMapEntries = - typeof sortMapEntries === 'function' - ? sortMapEntries - : sortMapEntries === true - ? sortMapEntriesByKey - : null; - } - clone() { - const copy = Object.create(Schema.prototype, Object.getOwnPropertyDescriptors(this)); - copy.tags = this.tags.slice(); - return copy; - } -} - -export { Schema }; diff --git a/tools/yaml/browser/dist/schema/common/map.js b/tools/yaml/browser/dist/schema/common/map.js deleted file mode 100644 index af97b78..0000000 --- a/tools/yaml/browser/dist/schema/common/map.js +++ /dev/null @@ -1,17 +0,0 @@ -import { isMap } from '../../nodes/identity.js'; -import { YAMLMap } from '../../nodes/YAMLMap.js'; - -const map = { - collection: 'map', - default: true, - nodeClass: YAMLMap, - tag: 'tag:yaml.org,2002:map', - resolve(map, onError) { - if (!isMap(map)) - onError('Expected a mapping for this tag'); - return map; - }, - createNode: (schema, obj, ctx) => YAMLMap.from(schema, obj, ctx) -}; - -export { map }; diff --git a/tools/yaml/browser/dist/schema/common/null.js b/tools/yaml/browser/dist/schema/common/null.js deleted file mode 100644 index fcbe1b7..0000000 --- a/tools/yaml/browser/dist/schema/common/null.js +++ /dev/null @@ -1,15 +0,0 @@ -import { Scalar } from '../../nodes/Scalar.js'; - -const nullTag = { - identify: value => value == null, - createNode: () => new Scalar(null), - default: true, - tag: 'tag:yaml.org,2002:null', - test: /^(?:~|[Nn]ull|NULL)?$/, - resolve: () => new Scalar(null), - stringify: ({ source }, ctx) => typeof source === 'string' && nullTag.test.test(source) - ? source - : ctx.options.nullStr -}; - -export { nullTag }; diff --git a/tools/yaml/browser/dist/schema/common/seq.js b/tools/yaml/browser/dist/schema/common/seq.js deleted file mode 100644 index 1915b60..0000000 --- a/tools/yaml/browser/dist/schema/common/seq.js +++ /dev/null @@ -1,17 +0,0 @@ -import { isSeq } from '../../nodes/identity.js'; -import { YAMLSeq } from '../../nodes/YAMLSeq.js'; - -const seq = { - collection: 'seq', - default: true, - nodeClass: YAMLSeq, - tag: 'tag:yaml.org,2002:seq', - resolve(seq, onError) { - if (!isSeq(seq)) - onError('Expected a sequence for this tag'); - return seq; - }, - createNode: (schema, obj, ctx) => YAMLSeq.from(schema, obj, ctx) -}; - -export { seq }; diff --git a/tools/yaml/browser/dist/schema/common/string.js b/tools/yaml/browser/dist/schema/common/string.js deleted file mode 100644 index a064f7b..0000000 --- a/tools/yaml/browser/dist/schema/common/string.js +++ /dev/null @@ -1,14 +0,0 @@ -import { stringifyString } from '../../stringify/stringifyString.js'; - -const string = { - identify: value => typeof value === 'string', - default: true, - tag: 'tag:yaml.org,2002:str', - resolve: str => str, - stringify(item, ctx, onComment, onChompKeep) { - ctx = Object.assign({ actualString: true }, ctx); - return stringifyString(item, ctx, onComment, onChompKeep); - } -}; - -export { string }; diff --git a/tools/yaml/browser/dist/schema/core/bool.js b/tools/yaml/browser/dist/schema/core/bool.js deleted file mode 100644 index ab3c943..0000000 --- a/tools/yaml/browser/dist/schema/core/bool.js +++ /dev/null @@ -1,19 +0,0 @@ -import { Scalar } from '../../nodes/Scalar.js'; - -const boolTag = { - identify: value => typeof value === 'boolean', - default: true, - tag: 'tag:yaml.org,2002:bool', - test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/, - resolve: str => new Scalar(str[0] === 't' || str[0] === 'T'), - stringify({ source, value }, ctx) { - if (source && boolTag.test.test(source)) { - const sv = source[0] === 't' || source[0] === 'T'; - if (value === sv) - return source; - } - return value ? ctx.options.trueStr : ctx.options.falseStr; - } -}; - -export { boolTag }; diff --git a/tools/yaml/browser/dist/schema/core/float.js b/tools/yaml/browser/dist/schema/core/float.js deleted file mode 100644 index a632cb7..0000000 --- a/tools/yaml/browser/dist/schema/core/float.js +++ /dev/null @@ -1,43 +0,0 @@ -import { Scalar } from '../../nodes/Scalar.js'; -import { stringifyNumber } from '../../stringify/stringifyNumber.js'; - -const floatNaN = { - identify: value => typeof value === 'number', - default: true, - tag: 'tag:yaml.org,2002:float', - test: /^(?:[-+]?\.(?:inf|Inf|INF|nan|NaN|NAN))$/, - resolve: str => str.slice(-3).toLowerCase() === 'nan' - ? NaN - : str[0] === '-' - ? Number.NEGATIVE_INFINITY - : Number.POSITIVE_INFINITY, - stringify: stringifyNumber -}; -const floatExp = { - identify: value => typeof value === 'number', - default: true, - tag: 'tag:yaml.org,2002:float', - format: 'EXP', - test: /^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/, - resolve: str => parseFloat(str), - stringify(node) { - const num = Number(node.value); - return isFinite(num) ? num.toExponential() : stringifyNumber(node); - } -}; -const float = { - identify: value => typeof value === 'number', - default: true, - tag: 'tag:yaml.org,2002:float', - test: /^[-+]?(?:\.[0-9]+|[0-9]+\.[0-9]*)$/, - resolve(str) { - const node = new Scalar(parseFloat(str)); - const dot = str.indexOf('.'); - if (dot !== -1 && str[str.length - 1] === '0') - node.minFractionDigits = str.length - dot - 1; - return node; - }, - stringify: stringifyNumber -}; - -export { float, floatExp, floatNaN }; diff --git a/tools/yaml/browser/dist/schema/core/int.js b/tools/yaml/browser/dist/schema/core/int.js deleted file mode 100644 index 7091235..0000000 --- a/tools/yaml/browser/dist/schema/core/int.js +++ /dev/null @@ -1,38 +0,0 @@ -import { stringifyNumber } from '../../stringify/stringifyNumber.js'; - -const intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value); -const intResolve = (str, offset, radix, { intAsBigInt }) => (intAsBigInt ? BigInt(str) : parseInt(str.substring(offset), radix)); -function intStringify(node, radix, prefix) { - const { value } = node; - if (intIdentify(value) && value >= 0) - return prefix + value.toString(radix); - return stringifyNumber(node); -} -const intOct = { - identify: value => intIdentify(value) && value >= 0, - default: true, - tag: 'tag:yaml.org,2002:int', - format: 'OCT', - test: /^0o[0-7]+$/, - resolve: (str, _onError, opt) => intResolve(str, 2, 8, opt), - stringify: node => intStringify(node, 8, '0o') -}; -const int = { - identify: intIdentify, - default: true, - tag: 'tag:yaml.org,2002:int', - test: /^[-+]?[0-9]+$/, - resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt), - stringify: stringifyNumber -}; -const intHex = { - identify: value => intIdentify(value) && value >= 0, - default: true, - tag: 'tag:yaml.org,2002:int', - format: 'HEX', - test: /^0x[0-9a-fA-F]+$/, - resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt), - stringify: node => intStringify(node, 16, '0x') -}; - -export { int, intHex, intOct }; diff --git a/tools/yaml/browser/dist/schema/core/schema.js b/tools/yaml/browser/dist/schema/core/schema.js deleted file mode 100644 index dd02b2e..0000000 --- a/tools/yaml/browser/dist/schema/core/schema.js +++ /dev/null @@ -1,23 +0,0 @@ -import { map } from '../common/map.js'; -import { nullTag } from '../common/null.js'; -import { seq } from '../common/seq.js'; -import { string } from '../common/string.js'; -import { boolTag } from './bool.js'; -import { floatNaN, floatExp, float } from './float.js'; -import { intOct, int, intHex } from './int.js'; - -const schema = [ - map, - seq, - string, - nullTag, - boolTag, - intOct, - int, - intHex, - floatNaN, - floatExp, - float -]; - -export { schema }; diff --git a/tools/yaml/browser/dist/schema/json/schema.js b/tools/yaml/browser/dist/schema/json/schema.js deleted file mode 100644 index 16d75ce..0000000 --- a/tools/yaml/browser/dist/schema/json/schema.js +++ /dev/null @@ -1,62 +0,0 @@ -import { Scalar } from '../../nodes/Scalar.js'; -import { map } from '../common/map.js'; -import { seq } from '../common/seq.js'; - -function intIdentify(value) { - return typeof value === 'bigint' || Number.isInteger(value); -} -const stringifyJSON = ({ value }) => JSON.stringify(value); -const jsonScalars = [ - { - identify: value => typeof value === 'string', - default: true, - tag: 'tag:yaml.org,2002:str', - resolve: str => str, - stringify: stringifyJSON - }, - { - identify: value => value == null, - createNode: () => new Scalar(null), - default: true, - tag: 'tag:yaml.org,2002:null', - test: /^null$/, - resolve: () => null, - stringify: stringifyJSON - }, - { - identify: value => typeof value === 'boolean', - default: true, - tag: 'tag:yaml.org,2002:bool', - test: /^true|false$/, - resolve: str => str === 'true', - stringify: stringifyJSON - }, - { - identify: intIdentify, - default: true, - tag: 'tag:yaml.org,2002:int', - test: /^-?(?:0|[1-9][0-9]*)$/, - resolve: (str, _onError, { intAsBigInt }) => intAsBigInt ? BigInt(str) : parseInt(str, 10), - stringify: ({ value }) => intIdentify(value) ? value.toString() : JSON.stringify(value) - }, - { - identify: value => typeof value === 'number', - default: true, - tag: 'tag:yaml.org,2002:float', - test: /^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/, - resolve: str => parseFloat(str), - stringify: stringifyJSON - } -]; -const jsonError = { - default: true, - tag: '', - test: /^/, - resolve(str, onError) { - onError(`Unresolved plain scalar ${JSON.stringify(str)}`); - return str; - } -}; -const schema = [map, seq].concat(jsonScalars, jsonError); - -export { schema }; diff --git a/tools/yaml/browser/dist/schema/tags.js b/tools/yaml/browser/dist/schema/tags.js deleted file mode 100644 index 84e23fc..0000000 --- a/tools/yaml/browser/dist/schema/tags.js +++ /dev/null @@ -1,83 +0,0 @@ -import { map } from './common/map.js'; -import { nullTag } from './common/null.js'; -import { seq } from './common/seq.js'; -import { string } from './common/string.js'; -import { boolTag } from './core/bool.js'; -import { float, floatExp, floatNaN } from './core/float.js'; -import { int, intHex, intOct } from './core/int.js'; -import { schema } from './core/schema.js'; -import { schema as schema$1 } from './json/schema.js'; -import { binary } from './yaml-1.1/binary.js'; -import { omap } from './yaml-1.1/omap.js'; -import { pairs } from './yaml-1.1/pairs.js'; -import { schema as schema$2 } from './yaml-1.1/schema.js'; -import { set } from './yaml-1.1/set.js'; -import { timestamp, floatTime, intTime } from './yaml-1.1/timestamp.js'; - -const schemas = new Map([ - ['core', schema], - ['failsafe', [map, seq, string]], - ['json', schema$1], - ['yaml11', schema$2], - ['yaml-1.1', schema$2] -]); -const tagsByName = { - binary, - bool: boolTag, - float, - floatExp, - floatNaN, - floatTime, - int, - intHex, - intOct, - intTime, - map, - null: nullTag, - omap, - pairs, - seq, - set, - timestamp -}; -const coreKnownTags = { - 'tag:yaml.org,2002:binary': binary, - 'tag:yaml.org,2002:omap': omap, - 'tag:yaml.org,2002:pairs': pairs, - 'tag:yaml.org,2002:set': set, - 'tag:yaml.org,2002:timestamp': timestamp -}; -function getTags(customTags, schemaName) { - let tags = schemas.get(schemaName); - if (!tags) { - if (Array.isArray(customTags)) - tags = []; - else { - const keys = Array.from(schemas.keys()) - .filter(key => key !== 'yaml11') - .map(key => JSON.stringify(key)) - .join(', '); - throw new Error(`Unknown schema "${schemaName}"; use one of ${keys} or define customTags array`); - } - } - if (Array.isArray(customTags)) { - for (const tag of customTags) - tags = tags.concat(tag); - } - else if (typeof customTags === 'function') { - tags = customTags(tags.slice()); - } - return tags.map(tag => { - if (typeof tag !== 'string') - return tag; - const tagObj = tagsByName[tag]; - if (tagObj) - return tagObj; - const keys = Object.keys(tagsByName) - .map(key => JSON.stringify(key)) - .join(', '); - throw new Error(`Unknown custom tag "${tag}"; use one of ${keys}`); - }); -} - -export { coreKnownTags, getTags }; diff --git a/tools/yaml/browser/dist/schema/yaml-1.1/binary.js b/tools/yaml/browser/dist/schema/yaml-1.1/binary.js deleted file mode 100644 index a700819..0000000 --- a/tools/yaml/browser/dist/schema/yaml-1.1/binary.js +++ /dev/null @@ -1,66 +0,0 @@ -import { Scalar } from '../../nodes/Scalar.js'; -import { stringifyString } from '../../stringify/stringifyString.js'; - -const binary = { - identify: value => value instanceof Uint8Array, - default: false, - tag: 'tag:yaml.org,2002:binary', - /** - * Returns a Buffer in node and an Uint8Array in browsers - * - * To use the resulting buffer as an image, you'll want to do something like: - * - * const blob = new Blob([buffer], { type: 'image/jpeg' }) - * document.querySelector('#photo').src = URL.createObjectURL(blob) - */ - resolve(src, onError) { - if (typeof Buffer === 'function') { - return Buffer.from(src, 'base64'); - } - else if (typeof atob === 'function') { - // On IE 11, atob() can't handle newlines - const str = atob(src.replace(/[\n\r]/g, '')); - const buffer = new Uint8Array(str.length); - for (let i = 0; i < str.length; ++i) - buffer[i] = str.charCodeAt(i); - return buffer; - } - else { - onError('This environment does not support reading binary tags; either Buffer or atob is required'); - return src; - } - }, - stringify({ comment, type, value }, ctx, onComment, onChompKeep) { - const buf = value; // checked earlier by binary.identify() - let str; - if (typeof Buffer === 'function') { - str = - buf instanceof Buffer - ? buf.toString('base64') - : Buffer.from(buf.buffer).toString('base64'); - } - else if (typeof btoa === 'function') { - let s = ''; - for (let i = 0; i < buf.length; ++i) - s += String.fromCharCode(buf[i]); - str = btoa(s); - } - else { - throw new Error('This environment does not support writing binary tags; either Buffer or btoa is required'); - } - if (!type) - type = Scalar.BLOCK_LITERAL; - if (type !== Scalar.QUOTE_DOUBLE) { - const lineWidth = Math.max(ctx.options.lineWidth - ctx.indent.length, ctx.options.minContentWidth); - const n = Math.ceil(str.length / lineWidth); - const lines = new Array(n); - for (let i = 0, o = 0; i < n; ++i, o += lineWidth) { - lines[i] = str.substr(o, lineWidth); - } - str = lines.join(type === Scalar.BLOCK_LITERAL ? '\n' : ' '); - } - return stringifyString({ comment, type, value: str }, ctx, onComment, onChompKeep); - } -}; - -export { binary }; diff --git a/tools/yaml/browser/dist/schema/yaml-1.1/bool.js b/tools/yaml/browser/dist/schema/yaml-1.1/bool.js deleted file mode 100644 index 1ced791..0000000 --- a/tools/yaml/browser/dist/schema/yaml-1.1/bool.js +++ /dev/null @@ -1,26 +0,0 @@ -import { Scalar } from '../../nodes/Scalar.js'; - -function boolStringify({ value, source }, ctx) { - const boolObj = value ? trueTag : falseTag; - if (source && boolObj.test.test(source)) - return source; - return value ? ctx.options.trueStr : ctx.options.falseStr; -} -const trueTag = { - identify: value => value === true, - default: true, - tag: 'tag:yaml.org,2002:bool', - test: /^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/, - resolve: () => new Scalar(true), - stringify: boolStringify -}; -const falseTag = { - identify: value => value === false, - default: true, - tag: 'tag:yaml.org,2002:bool', - test: /^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/i, - resolve: () => new Scalar(false), - stringify: boolStringify -}; - -export { falseTag, trueTag }; diff --git a/tools/yaml/browser/dist/schema/yaml-1.1/float.js b/tools/yaml/browser/dist/schema/yaml-1.1/float.js deleted file mode 100644 index 9097266..0000000 --- a/tools/yaml/browser/dist/schema/yaml-1.1/float.js +++ /dev/null @@ -1,46 +0,0 @@ -import { Scalar } from '../../nodes/Scalar.js'; -import { stringifyNumber } from '../../stringify/stringifyNumber.js'; - -const floatNaN = { - identify: value => typeof value === 'number', - default: true, - tag: 'tag:yaml.org,2002:float', - test: /^[-+]?\.(?:inf|Inf|INF|nan|NaN|NAN)$/, - resolve: (str) => str.slice(-3).toLowerCase() === 'nan' - ? NaN - : str[0] === '-' - ? Number.NEGATIVE_INFINITY - : Number.POSITIVE_INFINITY, - stringify: stringifyNumber -}; -const floatExp = { - identify: value => typeof value === 'number', - default: true, - tag: 'tag:yaml.org,2002:float', - format: 'EXP', - test: /^[-+]?(?:[0-9][0-9_]*)?(?:\.[0-9_]*)?[eE][-+]?[0-9]+$/, - resolve: (str) => parseFloat(str.replace(/_/g, '')), - stringify(node) { - const num = Number(node.value); - return isFinite(num) ? num.toExponential() : stringifyNumber(node); - } -}; -const float = { - identify: value => typeof value === 'number', - default: true, - tag: 'tag:yaml.org,2002:float', - test: /^[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*$/, - resolve(str) { - const node = new Scalar(parseFloat(str.replace(/_/g, ''))); - const dot = str.indexOf('.'); - if (dot !== -1) { - const f = str.substring(dot + 1).replace(/_/g, ''); - if (f[f.length - 1] === '0') - node.minFractionDigits = f.length; - } - return node; - }, - stringify: stringifyNumber -}; - -export { float, floatExp, floatNaN }; diff --git a/tools/yaml/browser/dist/schema/yaml-1.1/int.js b/tools/yaml/browser/dist/schema/yaml-1.1/int.js deleted file mode 100644 index f572823..0000000 --- a/tools/yaml/browser/dist/schema/yaml-1.1/int.js +++ /dev/null @@ -1,71 +0,0 @@ -import { stringifyNumber } from '../../stringify/stringifyNumber.js'; - -const intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value); -function intResolve(str, offset, radix, { intAsBigInt }) { - const sign = str[0]; - if (sign === '-' || sign === '+') - offset += 1; - str = str.substring(offset).replace(/_/g, ''); - if (intAsBigInt) { - switch (radix) { - case 2: - str = `0b${str}`; - break; - case 8: - str = `0o${str}`; - break; - case 16: - str = `0x${str}`; - break; - } - const n = BigInt(str); - return sign === '-' ? BigInt(-1) * n : n; - } - const n = parseInt(str, radix); - return sign === '-' ? -1 * n : n; -} -function intStringify(node, radix, prefix) { - const { value } = node; - if (intIdentify(value)) { - const str = value.toString(radix); - return value < 0 ? '-' + prefix + str.substr(1) : prefix + str; - } - return stringifyNumber(node); -} -const intBin = { - identify: intIdentify, - default: true, - tag: 'tag:yaml.org,2002:int', - format: 'BIN', - test: /^[-+]?0b[0-1_]+$/, - resolve: (str, _onError, opt) => intResolve(str, 2, 2, opt), - stringify: node => intStringify(node, 2, '0b') -}; -const intOct = { - identify: intIdentify, - default: true, - tag: 'tag:yaml.org,2002:int', - format: 'OCT', - test: /^[-+]?0[0-7_]+$/, - resolve: (str, _onError, opt) => intResolve(str, 1, 8, opt), - stringify: node => intStringify(node, 8, '0') -}; -const int = { - identify: intIdentify, - default: true, - tag: 'tag:yaml.org,2002:int', - test: /^[-+]?[0-9][0-9_]*$/, - resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt), - stringify: stringifyNumber -}; -const intHex = { - identify: intIdentify, - default: true, - tag: 'tag:yaml.org,2002:int', - format: 'HEX', - test: /^[-+]?0x[0-9a-fA-F_]+$/, - resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt), - stringify: node => intStringify(node, 16, '0x') -}; - -export { int, intBin, intHex, intOct }; diff --git a/tools/yaml/browser/dist/schema/yaml-1.1/omap.js b/tools/yaml/browser/dist/schema/yaml-1.1/omap.js deleted file mode 100644 index 5574ac5..0000000 --- a/tools/yaml/browser/dist/schema/yaml-1.1/omap.js +++ /dev/null @@ -1,74 +0,0 @@ -import { isScalar, isPair } from '../../nodes/identity.js'; -import { toJS } from '../../nodes/toJS.js'; -import { YAMLMap } from '../../nodes/YAMLMap.js'; -import { YAMLSeq } from '../../nodes/YAMLSeq.js'; -import { resolvePairs, createPairs } from './pairs.js'; - -class YAMLOMap extends YAMLSeq { - constructor() { - super(); - this.add = YAMLMap.prototype.add.bind(this); - this.delete = YAMLMap.prototype.delete.bind(this); - this.get = YAMLMap.prototype.get.bind(this); - this.has = YAMLMap.prototype.has.bind(this); - this.set = YAMLMap.prototype.set.bind(this); - this.tag = YAMLOMap.tag; - } - /** - * If `ctx` is given, the return type is actually `Map`, - * but TypeScript won't allow widening the signature of a child method. - */ - toJSON(_, ctx) { - if (!ctx) - return super.toJSON(_); - const map = new Map(); - if (ctx?.onCreate) - ctx.onCreate(map); - for (const pair of this.items) { - let key, value; - if (isPair(pair)) { - key = toJS(pair.key, '', ctx); - value = toJS(pair.value, key, ctx); - } - else { - key = toJS(pair, '', ctx); - } - if (map.has(key)) - throw new Error('Ordered maps must not include duplicate keys'); - map.set(key, value); - } - return map; - } - static from(schema, iterable, ctx) { - const pairs = createPairs(schema, iterable, ctx); - const omap = new this(); - omap.items = pairs.items; - return omap; - } -} -YAMLOMap.tag = 'tag:yaml.org,2002:omap'; -const omap = { - collection: 'seq', - identify: value => value instanceof Map, - nodeClass: YAMLOMap, - default: false, - tag: 'tag:yaml.org,2002:omap', - resolve(seq, onError) { - const pairs = resolvePairs(seq, onError); - const seenKeys = []; - for (const { key } of pairs.items) { - if (isScalar(key)) { - if (seenKeys.includes(key.value)) { - onError(`Ordered maps must not include duplicate keys: ${key.value}`); - } - else { - seenKeys.push(key.value); - } - } - } - return Object.assign(new YAMLOMap(), pairs); - }, - createNode: (schema, iterable, ctx) => YAMLOMap.from(schema, iterable, ctx) -}; - -export { YAMLOMap, omap }; diff --git a/tools/yaml/browser/dist/schema/yaml-1.1/pairs.js b/tools/yaml/browser/dist/schema/yaml-1.1/pairs.js deleted file mode 100644 index 18e3020..0000000 --- a/tools/yaml/browser/dist/schema/yaml-1.1/pairs.js +++ /dev/null @@ -1,78 +0,0 @@ -import { isSeq, isPair, isMap } from '../../nodes/identity.js'; -import { Pair, createPair } from '../../nodes/Pair.js'; -import { Scalar } from '../../nodes/Scalar.js'; -import { YAMLSeq } from '../../nodes/YAMLSeq.js'; - -function resolvePairs(seq, onError) { - if (isSeq(seq)) { - for (let i = 0; i < seq.items.length; ++i) { - let item = seq.items[i]; - if (isPair(item)) - continue; - else if (isMap(item)) { - if (item.items.length > 1) - onError('Each pair must have its own sequence indicator'); - const pair = item.items[0] || new Pair(new Scalar(null)); - if (item.commentBefore) - pair.key.commentBefore = pair.key.commentBefore - ? `${item.commentBefore}\n${pair.key.commentBefore}` - : item.commentBefore; - if (item.comment) { - const cn = pair.value ?? pair.key; - cn.comment = cn.comment - ? `${item.comment}\n${cn.comment}` - : item.comment; - } - item = pair; - } - seq.items[i] = isPair(item) ? item : new Pair(item); - } - } - else - onError('Expected a sequence for this tag'); - return seq; -} -function createPairs(schema, iterable, ctx) { - const { replacer } = ctx; - const pairs = new YAMLSeq(schema); - pairs.tag = 'tag:yaml.org,2002:pairs'; - let i = 0; - if (iterable && Symbol.iterator in Object(iterable)) - for (let it of iterable) { - if (typeof replacer === 'function') - it = replacer.call(iterable, String(i++), it); - let key, value; - if (Array.isArray(it)) { - if (it.length === 2) { - key = it[0]; - value = it[1]; - } - else - throw new TypeError(`Expected [key, value] tuple: ${it}`); - } - else if (it && it instanceof Object) { - const keys = Object.keys(it); - if (keys.length === 1) { - key = keys[0]; - value = it[key]; - } - else { - throw new TypeError(`Expected tuple with one key, not ${keys.length} keys`); - } - } - else { - key = it; - } - pairs.items.push(createPair(key, value, ctx)); - } - return pairs; -} -const pairs = { - collection: 'seq', - default: false, - tag: 'tag:yaml.org,2002:pairs', - resolve: resolvePairs, - createNode: createPairs -}; - -export { createPairs, pairs, resolvePairs }; diff --git a/tools/yaml/browser/dist/schema/yaml-1.1/schema.js b/tools/yaml/browser/dist/schema/yaml-1.1/schema.js deleted file mode 100644 index dc5be5f..0000000 --- a/tools/yaml/browser/dist/schema/yaml-1.1/schema.js +++ /dev/null @@ -1,37 +0,0 @@ -import { map } from '../common/map.js'; -import { nullTag } from '../common/null.js'; -import { seq } from '../common/seq.js'; -import { string } from '../common/string.js'; -import { binary } from './binary.js'; -import { trueTag, falseTag } from './bool.js'; -import { floatNaN, floatExp, float } from './float.js'; -import { intBin, intOct, int, intHex } from './int.js'; -import { omap } from './omap.js'; -import { pairs } from './pairs.js'; -import { set } from './set.js'; -import { intTime, floatTime, timestamp } from './timestamp.js'; - -const schema = [ - map, - seq, - string, - nullTag, - trueTag, - falseTag, - intBin, - intOct, - int, - intHex, - floatNaN, - floatExp, - float, - binary, - omap, - pairs, - set, - intTime, - floatTime, - timestamp -]; - -export { schema }; diff --git a/tools/yaml/browser/dist/schema/yaml-1.1/set.js b/tools/yaml/browser/dist/schema/yaml-1.1/set.js deleted file mode 100644 index a3cf4ec..0000000 --- a/tools/yaml/browser/dist/schema/yaml-1.1/set.js +++ /dev/null @@ -1,93 +0,0 @@ -import { isMap, isPair, isScalar } from '../../nodes/identity.js'; -import { Pair, createPair } from '../../nodes/Pair.js'; -import { YAMLMap, findPair } from '../../nodes/YAMLMap.js'; - -class YAMLSet extends YAMLMap { - constructor(schema) { - super(schema); - this.tag = YAMLSet.tag; - } - add(key) { - let pair; - if (isPair(key)) - pair = key; - else if (key && - typeof key === 'object' && - 'key' in key && - 'value' in key && - key.value === null) - pair = new Pair(key.key, null); - else - pair = new Pair(key, null); - const prev = findPair(this.items, pair.key); - if (!prev) - this.items.push(pair); - } - /** - * If `keepPair` is `true`, returns the Pair matching `key`. - * Otherwise, returns the value of that Pair's key. - */ - get(key, keepPair) { - const pair = findPair(this.items, key); - return !keepPair && isPair(pair) - ? isScalar(pair.key) - ? pair.key.value - : pair.key - : pair; - } - set(key, value) { - if (typeof value !== 'boolean') - throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`); - const prev = findPair(this.items, key); - if (prev && !value) { - this.items.splice(this.items.indexOf(prev), 1); - } - else if (!prev && value) { - this.items.push(new Pair(key)); - } - } - toJSON(_, ctx) { - return super.toJSON(_, ctx, Set); - } - toString(ctx, onComment, onChompKeep) { - if (!ctx) - return JSON.stringify(this); - if (this.hasAllNullValues(true)) - return super.toString(Object.assign({}, ctx, { allNullValues: true }), onComment, onChompKeep); - else - throw new Error('Set items must all have null values'); - } - static from(schema, iterable, ctx) { - const { replacer } = ctx; - const set = new this(schema); - if (iterable && Symbol.iterator in Object(iterable)) - for (let value of iterable) { - if (typeof replacer === 'function') - value = replacer.call(iterable, value, value); - set.items.push(createPair(value, null, ctx)); - } - return set; - } -} -YAMLSet.tag = 'tag:yaml.org,2002:set'; -const set = { - collection: 'map', - identify: value => value instanceof Set, - nodeClass: YAMLSet, - default: false, - tag: 'tag:yaml.org,2002:set', - createNode: (schema, iterable, ctx) => YAMLSet.from(schema, iterable, ctx), - resolve(map, onError) { - if (isMap(map)) { - if (map.hasAllNullValues(true)) - return Object.assign(new YAMLSet(), map); - else - onError('Set items must all have null values'); - } - else - onError('Expected a mapping for this tag'); - return map; - } -}; - -export { YAMLSet, set }; diff --git a/tools/yaml/browser/dist/schema/yaml-1.1/timestamp.js b/tools/yaml/browser/dist/schema/yaml-1.1/timestamp.js deleted file mode 100644 index 58986cd..0000000 --- a/tools/yaml/browser/dist/schema/yaml-1.1/timestamp.js +++ /dev/null @@ -1,101 +0,0 @@ -import { stringifyNumber } from '../../stringify/stringifyNumber.js'; - -/** Internal types handle bigint as number, because TS can't figure it out. */ -function parseSexagesimal(str, asBigInt) { - const sign = str[0]; - const parts = sign === '-' || sign === '+' ? str.substring(1) : str; - const num = (n) => asBigInt ? BigInt(n) : Number(n); - const res = parts - .replace(/_/g, '') - .split(':') - .reduce((res, p) => res * num(60) + num(p), num(0)); - return (sign === '-' ? num(-1) * res : res); -} -/** - * hhhh:mm:ss.sss - * - * Internal types handle bigint as number, because TS can't figure it out. - */ -function stringifySexagesimal(node) { - let { value } = node; - let num = (n) => n; - if (typeof value === 'bigint') - num = n => BigInt(n); - else if (isNaN(value) || !isFinite(value)) - return stringifyNumber(node); - let sign = ''; - if (value < 0) { - sign = '-'; - value *= num(-1); - } - const _60 = num(60); - const parts = [value % _60]; // seconds, including ms - if (value < 60) { - parts.unshift(0); // at least one : is required - } - else { - value = (value - parts[0]) / _60; - parts.unshift(value % _60); // minutes - if (value >= 60) { - value = (value - parts[0]) / _60; - parts.unshift(value); // hours - } - } - return (sign + - parts - .map(n => String(n).padStart(2, '0')) - .join(':') - .replace(/000000\d*$/, '') // % 60 may introduce error - ); -} -const intTime = { - identify: value => typeof value === 'bigint' || Number.isInteger(value), - default: true, - tag: 'tag:yaml.org,2002:int', - format: 'TIME', - test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/, - resolve: (str, _onError, { intAsBigInt }) => parseSexagesimal(str, intAsBigInt), - stringify: stringifySexagesimal -}; -const floatTime = { - identify: value => typeof value === 'number', - default: true, - tag: 'tag:yaml.org,2002:float', - format: 'TIME', - test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/, - resolve: str => parseSexagesimal(str, false), - stringify: stringifySexagesimal -}; -const timestamp = { - identify: value => value instanceof Date, - default: true, - tag: 'tag:yaml.org,2002:timestamp', - // If the time zone is omitted, the timestamp is assumed to be specified in UTC. The time part - // may be omitted altogether, resulting in a date format. In such a case, the time part is - // assumed to be 00:00:00Z (start of day, UTC). - test: RegExp('^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})' + // YYYY-Mm-Dd - '(?:' + // time is optional - '(?:t|T|[ \\t]+)' + // t | T | whitespace - '([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)' + // Hh:Mm:Ss(.ss)? - '(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?' + // Z | +5 | -03:30 - ')?$'), - resolve(str) { - const match = str.match(timestamp.test); - if (!match) - throw new Error('!!timestamp expects a date, starting with yyyy-mm-dd'); - const [, year, month, day, hour, minute, second] = match.map(Number); - const millisec = match[7] ? Number((match[7] + '00').substr(1, 3)) : 0; - let date = Date.UTC(year, month - 1, day, hour || 0, minute || 0, second || 0, millisec); - const tz = match[8]; - if (tz && tz !== 'Z') { - let d = parseSexagesimal(tz, false); - if (Math.abs(d) < 30) - d *= 60; - date -= 60000 * d; - } - return new Date(date); - }, - stringify: ({ value }) => value.toISOString().replace(/((T00:00)?:00)?\.000Z$/, '') -}; - -export { floatTime, intTime, timestamp }; diff --git a/tools/yaml/browser/dist/stringify/foldFlowLines.js b/tools/yaml/browser/dist/stringify/foldFlowLines.js deleted file mode 100644 index 01fe787..0000000 --- a/tools/yaml/browser/dist/stringify/foldFlowLines.js +++ /dev/null @@ -1,135 +0,0 @@ -const FOLD_FLOW = 'flow'; -const FOLD_BLOCK = 'block'; -const FOLD_QUOTED = 'quoted'; -/** - * Tries to keep input at up to `lineWidth` characters, splitting only on spaces - * not followed by newlines or spaces unless `mode` is `'quoted'`. Lines are - * terminated with `\n` and started with `indent`. - */ -function foldFlowLines(text, indent, mode = 'flow', { indentAtStart, lineWidth = 80, minContentWidth = 20, onFold, onOverflow } = {}) { - if (!lineWidth || lineWidth < 0) - return text; - const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length); - if (text.length <= endStep) - return text; - const folds = []; - const escapedFolds = {}; - let end = lineWidth - indent.length; - if (typeof indentAtStart === 'number') { - if (indentAtStart > lineWidth - Math.max(2, minContentWidth)) - folds.push(0); - else - end = lineWidth - indentAtStart; - } - let split = undefined; - let prev = undefined; - let overflow = false; - let i = -1; - let escStart = -1; - let escEnd = -1; - if (mode === FOLD_BLOCK) { - i = consumeMoreIndentedLines(text, i); - if (i !== -1) - end = i + endStep; - } - for (let ch; (ch = text[(i += 1)]);) { - if (mode === FOLD_QUOTED && ch === '\\') { - escStart = i; - switch (text[i + 1]) { - case 'x': - i += 3; - break; - case 'u': - i += 5; - break; - case 'U': - i += 9; - break; - default: - i += 1; - } - escEnd = i; - } - if (ch === '\n') { - if (mode === FOLD_BLOCK) - i = consumeMoreIndentedLines(text, i); - end = i + endStep; - split = undefined; - } - else { - if (ch === ' ' && - prev && - prev !== ' ' && - prev !== '\n' && - prev !== '\t') { - // space surrounded by non-space can be replaced with newline + indent - const next = text[i + 1]; - if (next && next !== ' ' && next !== '\n' && next !== '\t') - split = i; - } - if (i >= end) { - if (split) { - folds.push(split); - end = split + endStep; - split = undefined; - } - else if (mode === FOLD_QUOTED) { - // white-space collected at end may stretch past lineWidth - while (prev === ' ' || prev === '\t') { - prev = ch; - ch = text[(i += 1)]; - overflow = true; - } - // Account for newline escape, but don't break preceding escape - const j = i > escEnd + 1 ? i - 2 : escStart - 1; - // Bail out if lineWidth & minContentWidth are shorter than an escape string - if (escapedFolds[j]) - return text; - folds.push(j); - escapedFolds[j] = true; - end = j + endStep; - split = undefined; - } - else { - overflow = true; - } - } - } - prev = ch; - } - if (overflow && onOverflow) - onOverflow(); - if (folds.length === 0) - return text; - if (onFold) - onFold(); - let res = text.slice(0, folds[0]); - for (let i = 0; i < folds.length; ++i) { - const fold = folds[i]; - const end = folds[i + 1] || text.length; - if (fold === 0) - res = `\n${indent}${text.slice(0, end)}`; - else { - if (mode === FOLD_QUOTED && escapedFolds[fold]) - res += `${text[fold]}\\`; - res += `\n${indent}${text.slice(fold + 1, end)}`; - } - } - return res; -} -/** - * Presumes `i + 1` is at the start of a line - * @returns index of last newline in more-indented block - */ -function consumeMoreIndentedLines(text, i) { - let ch = text[i + 1]; - while (ch === ' ' || ch === '\t') { - do { - ch = text[(i += 1)]; - } while (ch && ch !== '\n'); - ch = text[i + 1]; - } - return i; -} - -export { FOLD_BLOCK, FOLD_FLOW, FOLD_QUOTED, foldFlowLines }; diff --git a/tools/yaml/browser/dist/stringify/stringify.js b/tools/yaml/browser/dist/stringify/stringify.js deleted file mode 100644 index 760ec4c..0000000 --- a/tools/yaml/browser/dist/stringify/stringify.js +++ /dev/null @@ -1,124 +0,0 @@ -import { anchorIsValid } from '../doc/anchors.js'; -import { isPair, isAlias, isNode, isScalar, isCollection } from '../nodes/identity.js'; -import { stringifyComment } from './stringifyComment.js'; -import { stringifyString } from './stringifyString.js'; - -function createStringifyContext(doc, options) { - const opt = Object.assign({ - blockQuote: true, - commentString: stringifyComment, - defaultKeyType: null, - defaultStringType: 'PLAIN', - directives: null, - doubleQuotedAsJSON: false, - doubleQuotedMinMultiLineLength: 40, - falseStr: 'false', - flowCollectionPadding: true, - indentSeq: true, - lineWidth: 80, - minContentWidth: 20, - nullStr: 'null', - simpleKeys: false, - singleQuote: null, - trueStr: 'true', - verifyAliasOrder: true - }, doc.schema.toStringOptions, options); - let inFlow; - switch (opt.collectionStyle) { - case 'block': - inFlow = false; - break; - case 'flow': - inFlow = true; - break; - default: - inFlow = null; - } - return { - anchors: new Set(), - doc, - flowCollectionPadding: opt.flowCollectionPadding ? ' ' : '', - indent: '', - indentStep: typeof opt.indent === 'number' ? ' '.repeat(opt.indent) : ' ', - inFlow, - options: opt - }; -} -function getTagObject(tags, item) { - if (item.tag) { - const match = tags.filter(t => t.tag === item.tag); - if (match.length > 0) - return match.find(t => t.format === item.format) ?? match[0]; - } - let tagObj = undefined; - let obj; - if (isScalar(item)) { - obj = item.value; - const match = tags.filter(t => t.identify?.(obj)); - tagObj = - match.find(t => t.format === item.format) ?? match.find(t => !t.format); - } - else { - obj = item; - tagObj = tags.find(t => t.nodeClass && obj instanceof t.nodeClass); - } - if (!tagObj) { - const name = obj?.constructor?.name ?? typeof obj; - throw new Error(`Tag not resolved for ${name} value`); - } - return tagObj; -} -// needs to be called before value stringifier to allow for circular anchor refs -function stringifyProps(node, tagObj, { anchors, doc }) { - if (!doc.directives) - return ''; - const props = []; - const anchor = (isScalar(node) || isCollection(node)) && node.anchor; - if (anchor && anchorIsValid(anchor)) { - anchors.add(anchor); - props.push(`&${anchor}`); - } - const tag = node.tag ? node.tag : tagObj.default ? null : tagObj.tag; - if (tag) - props.push(doc.directives.tagString(tag)); - return props.join(' '); -} -function stringify(item, ctx, onComment, onChompKeep) { - if (isPair(item)) - return item.toString(ctx, onComment, onChompKeep); - if (isAlias(item)) { - if (ctx.doc.directives) - return item.toString(ctx); - if (ctx.resolvedAliases?.has(item)) { - throw new TypeError(`Cannot stringify circular structure without alias nodes`); - } - else { - if (ctx.resolvedAliases) - ctx.resolvedAliases.add(item); - else - ctx.resolvedAliases = new Set([item]); - item = item.resolve(ctx.doc); - } - } - let tagObj = undefined; - const node = isNode(item) - ? item - : ctx.doc.createNode(item, { onTagObj: o => (tagObj = o) }); - if (!tagObj) - tagObj = getTagObject(ctx.doc.schema.tags, node); - const props = stringifyProps(node, tagObj, ctx); - if (props.length > 0) - ctx.indentAtStart = (ctx.indentAtStart ?? 0) + props.length + 1; - const str = typeof tagObj.stringify === 'function' - ? tagObj.stringify(node, ctx, onComment, onChompKeep) - : isScalar(node) - ? stringifyString(node, ctx, onComment, onChompKeep) - : node.toString(ctx, onComment, onChompKeep); - if (!props) - return str; - return isScalar(node) || str[0] === '{' || str[0] === '[' - ? `${props} ${str}` - : `${props}\n${ctx.indent}${str}`; -} - -export { createStringifyContext, stringify }; diff --git a/tools/yaml/browser/dist/stringify/stringifyCollection.js b/tools/yaml/browser/dist/stringify/stringifyCollection.js deleted file mode 100644 index 4817a9d..0000000 --- a/tools/yaml/browser/dist/stringify/stringifyCollection.js +++ /dev/null @@ -1,151 +0,0 @@ -import { Collection } from '../nodes/Collection.js'; -import { isNode, isPair } from '../nodes/identity.js'; -import { stringify } from './stringify.js'; -import { lineComment, indentComment } from './stringifyComment.js'; - -function stringifyCollection(collection, ctx, options) { - const flow = ctx.inFlow ?? collection.flow; - const stringify = flow ? stringifyFlowCollection : stringifyBlockCollection; - return stringify(collection, ctx, options); -} -function stringifyBlockCollection({ comment, items }, ctx, { blockItemPrefix, flowChars, itemIndent, onChompKeep, onComment }) { - const { indent, options: { commentString } } = ctx; - const itemCtx = Object.assign({}, ctx, { indent: itemIndent, type: null }); - let chompKeep = false; // flag for the preceding node's status - const lines = []; - for (let i = 0; i < items.length; ++i) { - const item = items[i]; - let comment = null; - if (isNode(item)) { - if (!chompKeep && item.spaceBefore) - lines.push(''); - addCommentBefore(ctx, lines, item.commentBefore, chompKeep); - if (item.comment) - comment = item.comment; - } - else if (isPair(item)) { - const ik = isNode(item.key) ? item.key : null; - if (ik) { - if (!chompKeep && ik.spaceBefore) - lines.push(''); - addCommentBefore(ctx, lines, ik.commentBefore, chompKeep); - } - } - chompKeep = false; - let str = stringify(item, itemCtx, () => (comment = null), () => (chompKeep = true)); - if (comment) - str += lineComment(str, itemIndent, commentString(comment)); - if (chompKeep && comment) - chompKeep = false; - lines.push(blockItemPrefix + str); - } - let str; - if (lines.length === 0) { - str = flowChars.start + flowChars.end; - } - else { - str = lines[0]; - for (let i = 1; i < lines.length; ++i) { - const line = lines[i]; - str += line ? `\n${indent}${line}` : '\n'; - } - } - if (comment) { - str += '\n' + indentComment(commentString(comment), indent); - if (onComment) - onComment(); - } - else if (chompKeep && onChompKeep) - onChompKeep(); - return str; -} -function stringifyFlowCollection({ comment, items }, ctx, { flowChars, itemIndent, onComment }) { - const { indent, indentStep, flowCollectionPadding: fcPadding, options: { commentString } } = ctx; - itemIndent += indentStep; - const itemCtx = Object.assign({}, ctx, { - indent: itemIndent, - inFlow: true, - type: null - }); - let reqNewline = false; - let linesAtValue = 0; - const lines = []; - for (let i = 0; i < items.length; ++i) { - const item = items[i]; - let comment = null; - if (isNode(item)) { - if (item.spaceBefore) - lines.push(''); - addCommentBefore(ctx, lines, item.commentBefore, false); - if (item.comment) - comment = item.comment; - } - else if (isPair(item)) { - const ik = isNode(item.key) ? item.key : null; - if (ik) { - if (ik.spaceBefore) - lines.push(''); - addCommentBefore(ctx, lines, ik.commentBefore, false); - if (ik.comment) - reqNewline = true; - } - const iv = isNode(item.value) ? item.value : null; - if (iv) { - if (iv.comment) - comment = iv.comment; - if (iv.commentBefore) - reqNewline = true; - } - else if (item.value == null && ik?.comment) { - comment = ik.comment; - } - } - if (comment) - reqNewline = true; - let str = stringify(item, itemCtx, () => (comment = null)); - if (i < items.length - 1) - str += ','; - if (comment) - str += lineComment(str, itemIndent, commentString(comment)); - if (!reqNewline && (lines.length > linesAtValue || str.includes('\n'))) - reqNewline = true; - lines.push(str); - linesAtValue = lines.length; - } - let str; - const { start, end } = flowChars; - if (lines.length === 0) { - str = start + end; - } - else { - if (!reqNewline) { - const len = lines.reduce((sum, line) => sum + line.length + 2, 2); - reqNewline = len > Collection.maxFlowStringSingleLineLength; - } - if (reqNewline) { - str = start; - for (const line of lines) - str += line ? `\n${indentStep}${indent}${line}` : '\n'; - str += `\n${indent}${end}`; - } - else { - str = `${start}${fcPadding}${lines.join(' ')}${fcPadding}${end}`; - } - } - if (comment) { - str += lineComment(str, indent, commentString(comment)); - if (onComment) - onComment(); - } - return str; -} -function addCommentBefore({ indent, options: { commentString } }, lines, comment, chompKeep) { - if (comment && chompKeep) - comment = comment.replace(/^\n+/, ''); - if (comment) { - const ic = indentComment(commentString(comment), indent); - lines.push(ic.trimStart()); // Avoid double indent on first line - } -} - -export { stringifyCollection }; diff --git a/tools/yaml/browser/dist/stringify/stringifyComment.js b/tools/yaml/browser/dist/stringify/stringifyComment.js deleted file mode 100644 index f16fc91..0000000 --- a/tools/yaml/browser/dist/stringify/stringifyComment.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Stringifies a comment. - * - * Empty comment lines are left empty, - * lines consisting of a single space are replaced by `#`, - * and all other lines are prefixed with a `#`. - */ -const stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, '#'); -function indentComment(comment, indent) { - if (/^\n+$/.test(comment)) - return comment.substring(1); - return indent ? comment.replace(/^(?! *$)/gm, indent) : comment; -} -const lineComment = (str, indent, comment) => str.endsWith('\n') - ? indentComment(comment, indent) - : comment.includes('\n') - ? '\n' + indentComment(comment, indent) - : (str.endsWith(' ') ? '' : ' ') + comment; - -export { indentComment, lineComment, stringifyComment }; diff --git a/tools/yaml/browser/dist/stringify/stringifyDocument.js b/tools/yaml/browser/dist/stringify/stringifyDocument.js deleted file mode 100644 index 2a9defa..0000000 --- a/tools/yaml/browser/dist/stringify/stringifyDocument.js +++ /dev/null @@ -1,85 +0,0 @@ -import { isNode } from '../nodes/identity.js'; -import { createStringifyContext, stringify } from './stringify.js'; -import { indentComment, lineComment } from './stringifyComment.js'; - -function stringifyDocument(doc, options) { - const lines = []; - let hasDirectives = options.directives === true; - if (options.directives !== false && doc.directives) { - const dir = doc.directives.toString(doc); - if (dir) { - lines.push(dir); - hasDirectives = true; - } - else if (doc.directives.docStart) - hasDirectives = true; - } - if (hasDirectives) - lines.push('---'); - const ctx = createStringifyContext(doc, options); - const { commentString } = ctx.options; - if (doc.commentBefore) { - if (lines.length !== 1) - lines.unshift(''); - const cs = commentString(doc.commentBefore); - lines.unshift(indentComment(cs, '')); - } - let chompKeep = false; - let contentComment = null; - if (doc.contents) { - if (isNode(doc.contents)) { - if (doc.contents.spaceBefore && hasDirectives) - lines.push(''); - if (doc.contents.commentBefore) { - const cs = commentString(doc.contents.commentBefore); - lines.push(indentComment(cs, '')); - } - // top-level block scalars need to be indented if followed by a comment - ctx.forceBlockIndent = !!doc.comment; - contentComment = doc.contents.comment; - } - const onChompKeep = contentComment ? undefined : () => (chompKeep = true); - let body = stringify(doc.contents, ctx, () => (contentComment = null), onChompKeep); - if (contentComment) - body += lineComment(body, '', commentString(contentComment)); - if ((body[0] === '|' || body[0] === '>') && - lines[lines.length - 1] === '---') { - // Top-level block scalars with a preceding doc marker ought to use the - // same line for their header. - lines[lines.length - 1] = `--- ${body}`; - } - else - lines.push(body); - } - else { - lines.push(stringify(doc.contents, ctx)); - } - if (doc.directives?.docEnd) { - if (doc.comment) { - const cs = commentString(doc.comment); - if (cs.includes('\n')) { - lines.push('...'); - lines.push(indentComment(cs, '')); - } - else { - lines.push(`... ${cs}`); - } - } - else { - lines.push('...'); - } - } - else { - let dc = doc.comment; - if (dc && chompKeep) - dc = dc.replace(/^\n+/, ''); - if (dc) { - if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '') - lines.push(''); - lines.push(indentComment(commentString(dc), '')); - } - } - return lines.join('\n') + '\n'; -} - -export { stringifyDocument }; diff --git a/tools/yaml/browser/dist/stringify/stringifyNumber.js b/tools/yaml/browser/dist/stringify/stringifyNumber.js deleted file mode 100644 index 3fa35f9..0000000 --- a/tools/yaml/browser/dist/stringify/stringifyNumber.js +++ /dev/null @@ -1,24 +0,0 @@ -function stringifyNumber({ format, minFractionDigits, tag, value }) { - if (typeof value === 'bigint') - return String(value); - const num = typeof value === 'number' ? value : Number(value); - if (!isFinite(num)) - return isNaN(num) ? '.nan' : num < 0 ? '-.inf' : '.inf'; - let n = JSON.stringify(value); - if (!format && - minFractionDigits && - (!tag || tag === 'tag:yaml.org,2002:float') && - /^\d/.test(n)) { - let i = n.indexOf('.'); - if (i < 0) { - i = n.length; - n += '.'; - } - let d = minFractionDigits - (n.length - i - 1); - while (d-- > 0) - n += '0'; - } - return n; -} - -export { stringifyNumber }; diff --git a/tools/yaml/browser/dist/stringify/stringifyPair.js b/tools/yaml/browser/dist/stringify/stringifyPair.js deleted file mode 100644 index 0807af2..0000000 --- a/tools/yaml/browser/dist/stringify/stringifyPair.js +++ /dev/null @@ -1,150 +0,0 @@ -import { isCollection, isNode, isScalar, isSeq } from '../nodes/identity.js'; -import { Scalar } from '../nodes/Scalar.js'; -import { stringify } from './stringify.js'; -import { lineComment, indentComment } from './stringifyComment.js'; - -function stringifyPair({ key, value }, ctx, onComment, onChompKeep) { - const { allNullValues, doc, indent, indentStep, options: { commentString, indentSeq, simpleKeys } } = ctx; - let keyComment = (isNode(key) && key.comment) || null; - if (simpleKeys) { - if (keyComment) { - throw new Error('With simple keys, key nodes cannot have comments'); - } - if (isCollection(key)) { - const msg = 'With simple keys, collection cannot be used as a key value'; - throw new Error(msg); - } - } - let explicitKey = !simpleKeys && - (!key || - (keyComment && value == null && !ctx.inFlow) || - isCollection(key) || - (isScalar(key) - ? key.type === Scalar.BLOCK_FOLDED || key.type === Scalar.BLOCK_LITERAL - : typeof key === 'object')); - ctx = Object.assign({}, ctx, { - allNullValues: false, - implicitKey: !explicitKey && (simpleKeys || !allNullValues), - indent: indent + indentStep - }); - let keyCommentDone = false; - let chompKeep = false; - let str = stringify(key, ctx, () => (keyCommentDone = true), () => (chompKeep = true)); - if (!explicitKey && !ctx.inFlow && str.length > 1024) { - if (simpleKeys) - throw new Error('With simple keys, single line scalar must not span more than 1024 characters'); - explicitKey = true; - } - if (ctx.inFlow) { - if (allNullValues || value == null) { - if (keyCommentDone && onComment) - onComment(); - return str === '' ? '?' : explicitKey ? `? ${str}` : str; - } - } - else if ((allNullValues && !simpleKeys) || (value == null && explicitKey)) { - str = `? ${str}`; - if (keyComment && !keyCommentDone) { - str += lineComment(str, ctx.indent, commentString(keyComment)); - } - else if (chompKeep && onChompKeep) - onChompKeep(); - return str; - } - if (keyCommentDone) - keyComment = null; - if (explicitKey) { - if (keyComment) - str += lineComment(str, ctx.indent, commentString(keyComment)); - str = `? ${str}\n${indent}:`; - } - else { - str = `${str}:`; - if (keyComment) - str += lineComment(str, ctx.indent, commentString(keyComment)); - } - let vsb, vcb, valueComment; - if (isNode(value)) { - vsb = !!value.spaceBefore; - vcb = value.commentBefore; - valueComment = value.comment; - } - else { - vsb = false; - vcb = null; - valueComment = null; - if (value && typeof value === 'object') - value = doc.createNode(value); - } - ctx.implicitKey = false; - if (!explicitKey && !keyComment && isScalar(value)) - ctx.indentAtStart = str.length + 1; - chompKeep = false; - if (!indentSeq && - indentStep.length >= 2 && - !ctx.inFlow && - !explicitKey && - isSeq(value) && - !value.flow && - !value.tag && - !value.anchor) { - // If indentSeq === false, consider '- ' as part of indentation where possible - ctx.indent = ctx.indent.substring(2); - } - let valueCommentDone = false; - const valueStr = stringify(value, ctx, () => (valueCommentDone = true), () => (chompKeep = true)); - let ws = ' '; - if (keyComment || vsb || vcb) { - ws = vsb ? '\n' : ''; - if (vcb) { - const cs = commentString(vcb); - ws += `\n${indentComment(cs, ctx.indent)}`; - } - if (valueStr === '' && !ctx.inFlow) { - if (ws === '\n') - ws = '\n\n'; - } - else { - ws += `\n${ctx.indent}`; - } - } - else if (!explicitKey && isCollection(value)) { - const vs0 = valueStr[0]; - const nl0 = valueStr.indexOf('\n'); - const hasNewline = nl0 !== -1; - const flow = ctx.inFlow ?? value.flow ?? value.items.length === 0; - if (hasNewline || !flow) { - let hasPropsLine = false; - if (hasNewline && (vs0 === '&' || vs0 === '!')) { - let sp0 = valueStr.indexOf(' '); - if (vs0 === '&' && - sp0 !== -1 && - sp0 < nl0 && - valueStr[sp0 + 1] === '!') { - sp0 = valueStr.indexOf(' ', sp0 + 1); - } - if (sp0 === -1 || nl0 < sp0) - hasPropsLine = true; - } - if (!hasPropsLine) - ws = `\n${ctx.indent}`; - } - } - else if (valueStr === '' || valueStr[0] === '\n') { - ws = ''; - } - str += ws + valueStr; - if (ctx.inFlow) { - if (valueCommentDone && onComment) - onComment(); - } - else if (valueComment && !valueCommentDone) { - str += lineComment(str, ctx.indent, commentString(valueComment)); - } - else if (chompKeep && onChompKeep) { - onChompKeep(); - } - return str; -} - -export { stringifyPair }; diff --git a/tools/yaml/browser/dist/stringify/stringifyString.js b/tools/yaml/browser/dist/stringify/stringifyString.js deleted file mode 100644 index 2f1ceb6..0000000 --- a/tools/yaml/browser/dist/stringify/stringifyString.js +++ /dev/null @@ -1,328 +0,0 @@ -import { Scalar } from '../nodes/Scalar.js'; -import { foldFlowLines, FOLD_QUOTED, FOLD_FLOW, FOLD_BLOCK } from './foldFlowLines.js'; - -const getFoldOptions = (ctx, isBlock) => ({ - indentAtStart: isBlock ? ctx.indent.length : ctx.indentAtStart, - lineWidth: ctx.options.lineWidth, - minContentWidth: ctx.options.minContentWidth -}); -// Also checks for lines starting with %, as parsing the output as YAML 1.1 will -// presume that's starting a new document. -const containsDocumentMarker = (str) => /^(%|---|\.\.\.)/m.test(str); -function lineLengthOverLimit(str, lineWidth, indentLength) { - if (!lineWidth || lineWidth < 0) - return false; - const limit = lineWidth - indentLength; - const strLen = str.length; - if (strLen <= limit) - return false; - for (let i = 0, start = 0; i < strLen; ++i) { - if (str[i] === '\n') { - if (i - start > limit) - return true; - start = i + 1; - if (strLen - start <= limit) - return false; - } - } - return true; -} -function doubleQuotedString(value, ctx) { - const json = JSON.stringify(value); - if (ctx.options.doubleQuotedAsJSON) - return json; - const { implicitKey } = ctx; - const minMultiLineLength = ctx.options.doubleQuotedMinMultiLineLength; - const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : ''); - let str = ''; - let start = 0; - for (let i = 0, ch = json[i]; ch; ch = json[++i]) { - if (ch === ' ' && json[i + 1] === '\\' && json[i + 2] === 'n') { - // space before newline needs to be escaped to not be folded - str += json.slice(start, i) + '\\ '; - i += 1; - start = i; - ch = '\\'; - } - if (ch === '\\') - switch (json[i + 1]) { - case 'u': - { - str += json.slice(start, i); - const code = json.substr(i + 2, 4); - switch (code) { - case '0000': - str += '\\0'; - break; - case '0007': - str += '\\a'; - break; - case '000b': - str += '\\v'; - break; - case '001b': - str += '\\e'; - break; - case '0085': - str += '\\N'; - break; - case '00a0': - str += '\\_'; - break; - case '2028': - str += '\\L'; - break; - case '2029': - str += '\\P'; - break; - default: - if (code.substr(0, 2) === '00') - str += '\\x' + code.substr(2); - else - str += json.substr(i, 6); - } - i += 5; - start = i + 1; - } - break; - case 'n': - if (implicitKey || - json[i + 2] === '"' || - json.length < minMultiLineLength) { - i += 1; - } - else { - // folding will eat first newline - str += json.slice(start, i) + '\n\n'; - while (json[i + 2] === '\\' && - json[i + 3] === 'n' && - json[i + 4] !== '"') { - str += '\n'; - i += 2; - } - str += indent; - // space after newline needs to be escaped to not be folded - if (json[i + 2] === ' ') - str += '\\'; - i += 1; - start = i + 1; - } - break; - default: - i += 1; - } - } - str = start ? str + json.slice(start) : json; - return implicitKey - ? str - : foldFlowLines(str, indent, FOLD_QUOTED, getFoldOptions(ctx, false)); -} -function singleQuotedString(value, ctx) { - if (ctx.options.singleQuote === false || - (ctx.implicitKey && value.includes('\n')) || - /[ \t]\n|\n[ \t]/.test(value) // single quoted string can't have leading or trailing whitespace around newline - ) - return doubleQuotedString(value, ctx); - const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : ''); - const res = "'" + value.replace(/'/g, "''").replace(/\n+/g, `$&\n${indent}`) + "'"; - return ctx.implicitKey - ? res - : foldFlowLines(res, indent, FOLD_FLOW, getFoldOptions(ctx, false)); -} -function quotedString(value, ctx) { - const { singleQuote } = ctx.options; - let qs; - if (singleQuote === false) - qs = doubleQuotedString; - else { - const hasDouble = value.includes('"'); - const hasSingle = value.includes("'"); - if (hasDouble && !hasSingle) - qs = singleQuotedString; - else if (hasSingle && !hasDouble) - qs = doubleQuotedString; - else - qs = singleQuote ? singleQuotedString : doubleQuotedString; - } - return qs(value, ctx); -} -// The negative lookbehind avoids a polynomial search, -// but isn't supported yet on Safari: https://caniuse.com/js-regexp-lookbehind -let blockEndNewlines; -try { - blockEndNewlines = new RegExp('(^|(?\n'; - // determine chomping from whitespace at value end - let chomp; - let endStart; - for (endStart = value.length; endStart > 0; --endStart) { - const ch = value[endStart - 1]; - if (ch !== '\n' && ch !== '\t' && ch !== ' ') - break; - } - let end = value.substring(endStart); - const endNlPos = end.indexOf('\n'); - if (endNlPos === -1) { - chomp = '-'; // strip - } - else if (value === end || endNlPos !== end.length - 1) { - chomp = '+'; // keep - if (onChompKeep) - onChompKeep(); - } - else { - chomp = ''; // clip - } - if (end) { - value = value.slice(0, -end.length); - if (end[end.length - 1] === '\n') - end = end.slice(0, -1); - end = end.replace(blockEndNewlines, `$&${indent}`); - } - // determine indent indicator from whitespace at value start - let startWithSpace = false; - let startEnd; - let startNlPos = -1; - for (startEnd = 0; startEnd < value.length; ++startEnd) { - const ch = value[startEnd]; - if (ch === ' ') - startWithSpace = true; - else if (ch === '\n') - startNlPos = startEnd; - else - break; - } - let start = value.substring(0, startNlPos < startEnd ? startNlPos + 1 : startEnd); - if (start) { - value = value.substring(start.length); - start = start.replace(/\n+/g, `$&${indent}`); - } - const indentSize = indent ? '2' : '1'; // root is at -1 - let header = (literal ? '|' : '>') + (startWithSpace ? indentSize : '') + chomp; - if (comment) { - header += ' ' + commentString(comment.replace(/ ?[\r\n]+/g, ' ')); - if (onComment) - onComment(); - } - if (literal) { - value = value.replace(/\n+/g, `$&${indent}`); - return `${header}\n${indent}${start}${value}${end}`; - } - value = value - .replace(/\n+/g, '\n$&') - .replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g, '$1$2') // more-indented lines aren't folded - // ^ more-ind. ^ empty ^ capture next empty lines only at end of indent - .replace(/\n+/g, `$&${indent}`); - const body = foldFlowLines(`${start}${value}${end}`, indent, FOLD_BLOCK, getFoldOptions(ctx, true)); - return `${header}\n${indent}${body}`; -} -function plainString(item, ctx, onComment, onChompKeep) { - const { type, value } = item; - const { actualString, implicitKey, indent, indentStep, inFlow } = ctx; - if ((implicitKey && value.includes('\n')) || - (inFlow && /[[\]{},]/.test(value))) { - return quotedString(value, ctx); - } - if (!value || - /^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(value)) { - // not allowed: - // - empty string, '-' or '?' - // - start with an indicator character (except [?:-]) or /[?-] / - // - '\n ', ': ' or ' \n' anywhere - // - '#' not preceded by a non-space char - // - end with ' ' or ':' - return implicitKey || inFlow || !value.includes('\n') - ? quotedString(value, ctx) - : blockString(item, ctx, onComment, onChompKeep); - } - if (!implicitKey && - !inFlow && - type !== Scalar.PLAIN && - value.includes('\n')) { - // Where allowed & type not set explicitly, prefer block style for multiline strings - return blockString(item, ctx, onComment, onChompKeep); - } - if (containsDocumentMarker(value)) { - if (indent === '') { - ctx.forceBlockIndent = true; - return blockString(item, ctx, onComment, onChompKeep); - } - else if (implicitKey && indent === indentStep) { - return quotedString(value, ctx); - } - } - const str = value.replace(/\n+/g, `$&\n${indent}`); - // Verify that output will be parsed as a string, as e.g. plain numbers and - // booleans get parsed with those types in v1.2 (e.g. '42', 'true' & '0.9e-3'), - // and others in v1.1. - if (actualString) { - const test = (tag) => tag.default && tag.tag !== 'tag:yaml.org,2002:str' && tag.test?.test(str); - const { compat, tags } = ctx.doc.schema; - if (tags.some(test) || compat?.some(test)) - return quotedString(value, ctx); - } - return implicitKey - ? str - : foldFlowLines(str, indent, FOLD_FLOW, getFoldOptions(ctx, false)); -} -function stringifyString(item, ctx, onComment, onChompKeep) { - const { implicitKey, inFlow } = ctx; - const ss = typeof item.value === 'string' - ? item - : Object.assign({}, item, { value: String(item.value) }); - let { type } = item; - if (type !== Scalar.QUOTE_DOUBLE) { - // force double quotes on control characters & unpaired surrogates - if (/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(ss.value)) - type = Scalar.QUOTE_DOUBLE; - } - const _stringify = (_type) => { - switch (_type) { - case Scalar.BLOCK_FOLDED: - case Scalar.BLOCK_LITERAL: - return implicitKey || inFlow - ? quotedString(ss.value, ctx) // blocks are not valid inside flow containers - : blockString(ss, ctx, onComment, onChompKeep); - case Scalar.QUOTE_DOUBLE: - return doubleQuotedString(ss.value, ctx); - case Scalar.QUOTE_SINGLE: - return singleQuotedString(ss.value, ctx); - case Scalar.PLAIN: - return plainString(ss, ctx, onComment, onChompKeep); - default: - return null; - } - }; - let res = _stringify(type); - if (res === null) { - const { defaultKeyType, defaultStringType } = ctx.options; - const t = (implicitKey && defaultKeyType) || defaultStringType; - res = _stringify(t); - if (res === null) - throw new Error(`Unsupported default string type ${t}`); - } - return res; -} - -export { stringifyString }; diff --git a/tools/yaml/browser/dist/util.js b/tools/yaml/browser/dist/util.js deleted file mode 100644 index ec59413..0000000 --- a/tools/yaml/browser/dist/util.js +++ /dev/null @@ -1,11 +0,0 @@ -export { createNode } from './doc/createNode.js'; -export { debug, warn } from './log.js'; -export { createPair } from './nodes/Pair.js'; -export { findPair } from './nodes/YAMLMap.js'; -export { toJS } from './nodes/toJS.js'; -export { map as mapTag } from './schema/common/map.js'; -export { seq as seqTag } from './schema/common/seq.js'; -export { string as stringTag } from './schema/common/string.js'; -export { foldFlowLines } from './stringify/foldFlowLines.js'; -export { stringifyNumber } from './stringify/stringifyNumber.js'; -export { stringifyString } from './stringify/stringifyString.js'; diff --git a/tools/yaml/browser/dist/visit.js b/tools/yaml/browser/dist/visit.js deleted file mode 100644 index b5eef41..0000000 --- a/tools/yaml/browser/dist/visit.js +++ /dev/null @@ -1,233 +0,0 @@ -import { isDocument, isNode, isPair, isCollection, isMap, isSeq, isScalar, isAlias } from './nodes/identity.js'; - -const BREAK = Symbol('break visit'); -const SKIP = Symbol('skip children'); -const REMOVE = Symbol('remove node'); -/** - * Apply a visitor to an AST node or document. - * - * Walks through the tree (depth-first) starting from `node`, calling a - * `visitor` function with three arguments: - * - `key`: For sequence values and map `Pair`, the node's index in the - * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly. - * `null` for the root node. - * - `node`: The current node. - * - `path`: The ancestry of the current node. - * - * The return value of the visitor may be used to control the traversal: - * - `undefined` (default): Do nothing and continue - * - `visit.SKIP`: Do not visit the children of this node, continue with next - * sibling - * - `visit.BREAK`: Terminate traversal completely - * - `visit.REMOVE`: Remove the current node, then continue with the next one - * - `Node`: Replace the current node, then continue by visiting it - * - `number`: While iterating the items of a sequence or map, set the index - * of the next step. This is useful especially if the index of the current - * node has changed. - * - * If `visitor` is a single function, it will be called with all values - * encountered in the tree, including e.g. `null` values. Alternatively, - * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`, - * `Alias` and `Scalar` node. To define the same visitor function for more than - * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar) - * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most - * specific defined one will be used for each node. - */ -function visit(node, visitor) { - const visitor_ = initVisitor(visitor); - if (isDocument(node)) { - const cd = visit_(null, node.contents, visitor_, Object.freeze([node])); - if (cd === REMOVE) - node.contents = null; - } - else - visit_(null, node, visitor_, Object.freeze([])); -} -// Without the `as symbol` casts, TS declares these in the `visit` -// namespace using `var`, but then complains about that because -// `unique symbol` must be `const`. -/** Terminate visit traversal completely */ -visit.BREAK = BREAK; -/** Do not visit the children of the current node */ -visit.SKIP = SKIP; -/** Remove the current node */ -visit.REMOVE = REMOVE; -function visit_(key, node, visitor, path) { - const ctrl = callVisitor(key, node, visitor, path); - if (isNode(ctrl) || isPair(ctrl)) { - replaceNode(key, path, ctrl); - return visit_(key, ctrl, visitor, path); - } - if (typeof ctrl !== 'symbol') { - if (isCollection(node)) { - path = Object.freeze(path.concat(node)); - for (let i = 0; i < node.items.length; ++i) { - const ci = visit_(i, node.items[i], visitor, path); - if (typeof ci === 'number') - i = ci - 1; - else if (ci === BREAK) - return BREAK; - else if (ci === REMOVE) { - node.items.splice(i, 1); - i -= 1; - } - } - } - else if (isPair(node)) { - path = Object.freeze(path.concat(node)); - const ck = visit_('key', node.key, visitor, path); - if (ck === BREAK) - return BREAK; - else if (ck === REMOVE) - node.key = null; - const cv = visit_('value', node.value, visitor, path); - if (cv === BREAK) - return BREAK; - else if (cv === REMOVE) - node.value = null; - } - } - return ctrl; -} -/** - * Apply an async visitor to an AST node or document. - * - * Walks through the tree (depth-first) starting from `node`, calling a - * `visitor` function with three arguments: - * - `key`: For sequence values and map `Pair`, the node's index in the - * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly. - * `null` for the root node. - * - `node`: The current node. - * - `path`: The ancestry of the current node. - * - * The return value of the visitor may be used to control the traversal: - * - `Promise`: Must resolve to one of the following values - * - `undefined` (default): Do nothing and continue - * - `visit.SKIP`: Do not visit the children of this node, continue with next - * sibling - * - `visit.BREAK`: Terminate traversal completely - * - `visit.REMOVE`: Remove the current node, then continue with the next one - * - `Node`: Replace the current node, then continue by visiting it - * - `number`: While iterating the items of a sequence or map, set the index - * of the next step. This is useful especially if the index of the current - * node has changed. - * - * If `visitor` is a single function, it will be called with all values - * encountered in the tree, including e.g. `null` values. Alternatively, - * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`, - * `Alias` and `Scalar` node. To define the same visitor function for more than - * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar) - * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most - * specific defined one will be used for each node. - */ -async function visitAsync(node, visitor) { - const visitor_ = initVisitor(visitor); - if (isDocument(node)) { - const cd = await visitAsync_(null, node.contents, visitor_, Object.freeze([node])); - if (cd === REMOVE) - node.contents = null; - } - else - await visitAsync_(null, node, visitor_, Object.freeze([])); -} -// Without the `as symbol` casts, TS declares these in the `visit` -// namespace using `var`, but then complains about that because -// `unique symbol` must be `const`. -/** Terminate visit traversal completely */ -visitAsync.BREAK = BREAK; -/** Do not visit the children of the current node */ -visitAsync.SKIP = SKIP; -/** Remove the current node */ -visitAsync.REMOVE = REMOVE; -async function visitAsync_(key, node, visitor, path) { - const ctrl = await callVisitor(key, node, visitor, path); - if (isNode(ctrl) || isPair(ctrl)) { - replaceNode(key, path, ctrl); - return visitAsync_(key, ctrl, visitor, path); - } - if (typeof ctrl !== 'symbol') { - if (isCollection(node)) { - path = Object.freeze(path.concat(node)); - for (let i = 0; i < node.items.length; ++i) { - const ci = await visitAsync_(i, node.items[i], visitor, path); - if (typeof ci === 'number') - i = ci - 1; - else if (ci === BREAK) - return BREAK; - else if (ci === REMOVE) { - node.items.splice(i, 1); - i -= 1; - } - } - } - else if (isPair(node)) { - path = Object.freeze(path.concat(node)); - const ck = await visitAsync_('key', node.key, visitor, path); - if (ck === BREAK) - return BREAK; - else if (ck === REMOVE) - node.key = null; - const cv = await visitAsync_('value', node.value, visitor, path); - if (cv === BREAK) - return BREAK; - else if (cv === REMOVE) - node.value = null; - } - } - return ctrl; -} -function initVisitor(visitor) { - if (typeof visitor === 'object' && - (visitor.Collection || visitor.Node || visitor.Value)) { - return Object.assign({ - Alias: visitor.Node, - Map: visitor.Node, - Scalar: visitor.Node, - Seq: visitor.Node - }, visitor.Value && { - Map: visitor.Value, - Scalar: visitor.Value, - Seq: visitor.Value - }, visitor.Collection && { - Map: visitor.Collection, - Seq: visitor.Collection - }, visitor); - } - return visitor; -} -function callVisitor(key, node, visitor, path) { - if (typeof visitor === 'function') - return visitor(key, node, path); - if (isMap(node)) - return visitor.Map?.(key, node, path); - if (isSeq(node)) - return visitor.Seq?.(key, node, path); - if (isPair(node)) - return visitor.Pair?.(key, node, path); - if (isScalar(node)) - return visitor.Scalar?.(key, node, path); - if (isAlias(node)) - return visitor.Alias?.(key, node, path); - return undefined; -} -function replaceNode(key, path, node) { - const parent = path[path.length - 1]; - if (isCollection(parent)) { - parent.items[key] = node; - } - else if (isPair(parent)) { - if (key === 'key') - parent.key = node; - else - parent.value = node; - } - else if (isDocument(parent)) { - parent.contents = node; - } - else { - const pt = isAlias(parent) ? 'alias' : 'scalar'; - throw new Error(`Cannot replace node with ${pt} parent`); - } -} - -export { visit, visitAsync }; diff --git a/tools/yaml/browser/index.js b/tools/yaml/browser/index.js deleted file mode 100644 index 5f73271..0000000 --- a/tools/yaml/browser/index.js +++ /dev/null @@ -1,5 +0,0 @@ -// `export * as default from ...` fails on Webpack v4 -// https://github.com/eemeli/yaml/issues/228 -import * as YAML from './dist/index.js' -export default YAML -export * from './dist/index.js' diff --git a/tools/yaml/browser/package.json b/tools/yaml/browser/package.json deleted file mode 100644 index 3dbc1ca..0000000 --- a/tools/yaml/browser/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "type": "module" -} diff --git a/tools/yaml/dist/compose/compose-collection.d.ts b/tools/yaml/dist/compose/compose-collection.d.ts deleted file mode 100644 index b310e2d..0000000 --- a/tools/yaml/dist/compose/compose-collection.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import type { ParsedNode } from '../nodes/Node.js'; -import type { BlockMap, BlockSequence, FlowCollection, SourceToken } from '../parse/cst.js'; -import type { ComposeContext, ComposeNode } from './compose-node.js'; -import type { ComposeErrorHandler } from './composer.js'; -export declare function composeCollection(CN: ComposeNode, ctx: ComposeContext, token: BlockMap | BlockSequence | FlowCollection, tagToken: SourceToken | null, onError: ComposeErrorHandler): ParsedNode; diff --git a/tools/yaml/dist/compose/compose-collection.js b/tools/yaml/dist/compose/compose-collection.js deleted file mode 100644 index e4b1971..0000000 --- a/tools/yaml/dist/compose/compose-collection.js +++ /dev/null @@ -1,78 +0,0 @@ -'use strict'; - -var identity = require('../nodes/identity.js'); -var Scalar = require('../nodes/Scalar.js'); -var YAMLMap = require('../nodes/YAMLMap.js'); -var YAMLSeq = require('../nodes/YAMLSeq.js'); -var resolveBlockMap = require('./resolve-block-map.js'); -var resolveBlockSeq = require('./resolve-block-seq.js'); -var resolveFlowCollection = require('./resolve-flow-collection.js'); - -function resolveCollection(CN, ctx, token, onError, tagName, tag) { - const coll = token.type === 'block-map' - ? resolveBlockMap.resolveBlockMap(CN, ctx, token, onError, tag) - : token.type === 'block-seq' - ? resolveBlockSeq.resolveBlockSeq(CN, ctx, token, onError, tag) - : resolveFlowCollection.resolveFlowCollection(CN, ctx, token, onError, tag); - const Coll = coll.constructor; - // If we got a tagName matching the class, or the tag name is '!', - // then use the tagName from the node class used to create it. - if (tagName === '!' || tagName === Coll.tagName) { - coll.tag = Coll.tagName; - return coll; - } - if (tagName) - coll.tag = tagName; - return coll; -} -function composeCollection(CN, ctx, token, tagToken, onError) { - const tagName = !tagToken - ? null - : ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg)); - const expType = token.type === 'block-map' - ? 'map' - : token.type === 'block-seq' - ? 'seq' - : token.start.source === '{' - ? 'map' - : 'seq'; - // shortcut: check if it's a generic YAMLMap or YAMLSeq - // before jumping into the custom tag logic. - if (!tagToken || - !tagName || - tagName === '!' || - (tagName === YAMLMap.YAMLMap.tagName && expType === 'map') || - (tagName === YAMLSeq.YAMLSeq.tagName && expType === 'seq') || - !expType) { - return resolveCollection(CN, ctx, token, onError, tagName); - } - let tag = ctx.schema.tags.find(t => t.tag === tagName && t.collection === expType); - if (!tag) { - const kt = ctx.schema.knownTags[tagName]; - if (kt && kt.collection === expType) { - ctx.schema.tags.push(Object.assign({}, kt, { default: false })); - tag = kt; - } - else { - if (kt?.collection) { - onError(tagToken, 'BAD_COLLECTION_TYPE', `${kt.tag} used for ${expType} collection, but expects ${kt.collection}`, true); - } - else { - onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, true); - } - return resolveCollection(CN, ctx, token, onError, tagName); - } - } - const coll = resolveCollection(CN, ctx, token, onError, tagName, tag); - const res = tag.resolve?.(coll, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg), ctx.options) ?? coll; - const node = identity.isNode(res) - ? res - : new Scalar.Scalar(res); - node.range = coll.range; - node.tag = tagName; - if (tag?.format) - node.format = tag.format; - return node; -} - -exports.composeCollection = composeCollection; diff --git a/tools/yaml/dist/compose/compose-doc.d.ts b/tools/yaml/dist/compose/compose-doc.d.ts deleted file mode 100644 index 05816a7..0000000 --- a/tools/yaml/dist/compose/compose-doc.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { Directives } from '../doc/directives.js'; -import { Document } from '../doc/Document.js'; -import type { ParsedNode } from '../nodes/Node.js'; -import type { DocumentOptions, ParseOptions, SchemaOptions } from '../options.js'; -import type * as CST from '../parse/cst.js'; -import type { ComposeErrorHandler } from './composer.js'; -export declare function composeDoc(options: ParseOptions & DocumentOptions & SchemaOptions, directives: Directives, { offset, start, value, end }: CST.Document, onError: ComposeErrorHandler): Document.Parsed; diff --git a/tools/yaml/dist/compose/compose-doc.js b/tools/yaml/dist/compose/compose-doc.js deleted file mode 100644 index d19c227..0000000 --- a/tools/yaml/dist/compose/compose-doc.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict'; - -var Document = require('../doc/Document.js'); -var composeNode = require('./compose-node.js'); -var resolveEnd = require('./resolve-end.js'); -var resolveProps = require('./resolve-props.js'); - -function composeDoc(options, directives, { offset, start, value, end }, onError) { - const opts = Object.assign({ _directives: directives }, options); - const doc = new Document.Document(undefined, opts); - const ctx = { - atRoot: true, - directives: doc.directives, - options: doc.options, - schema: doc.schema - }; - const props = resolveProps.resolveProps(start, { - indicator: 'doc-start', - next: value ?? end?.[0], - offset, - onError, - startOnNewline: true - }); - if (props.found) { - doc.directives.docStart = true; - if (value && - (value.type === 'block-map' || value.type === 'block-seq') && - !props.hasNewline) - onError(props.end, 'MISSING_CHAR', 'Block collection cannot start on same line with directives-end marker'); - } - // @ts-expect-error If Contents is set, let's trust the user - doc.contents = value - ? composeNode.composeNode(ctx, value, props, onError) - : composeNode.composeEmptyNode(ctx, props.end, start, null, props, onError); - const contentEnd = doc.contents.range[2]; - const re = resolveEnd.resolveEnd(end, contentEnd, false, onError); - if (re.comment) - doc.comment = re.comment; - doc.range = [offset, contentEnd, re.offset]; - return doc; -} - -exports.composeDoc = composeDoc; diff --git a/tools/yaml/dist/compose/compose-node.d.ts b/tools/yaml/dist/compose/compose-node.d.ts deleted file mode 100644 index 8d3e467..0000000 --- a/tools/yaml/dist/compose/compose-node.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { Directives } from '../doc/directives.js'; -import type { ParsedNode } from '../nodes/Node.js'; -import type { ParseOptions } from '../options.js'; -import type { SourceToken, Token } from '../parse/cst.js'; -import type { Schema } from '../schema/Schema.js'; -import type { ComposeErrorHandler } from './composer.js'; -export interface ComposeContext { - atRoot: boolean; - directives: Directives; - options: Readonly>>; - schema: Readonly; -} -interface Props { - spaceBefore: boolean; - comment: string; - anchor: SourceToken | null; - tag: SourceToken | null; - end: number; -} -declare const CN: { - composeNode: typeof composeNode; - composeEmptyNode: typeof composeEmptyNode; -}; -export type ComposeNode = typeof CN; -export declare function composeNode(ctx: ComposeContext, token: Token, props: Props, onError: ComposeErrorHandler): ParsedNode; -export declare function composeEmptyNode(ctx: ComposeContext, offset: number, before: Token[] | undefined, pos: number | null, { spaceBefore, comment, anchor, tag, end }: Props, onError: ComposeErrorHandler): import("../index.js").Scalar.Parsed; -export {}; diff --git a/tools/yaml/dist/compose/compose-node.js b/tools/yaml/dist/compose/compose-node.js deleted file mode 100644 index 7eb1daf..0000000 --- a/tools/yaml/dist/compose/compose-node.js +++ /dev/null @@ -1,95 +0,0 @@ -'use strict'; - -var Alias = require('../nodes/Alias.js'); -var composeCollection = require('./compose-collection.js'); -var composeScalar = require('./compose-scalar.js'); -var resolveEnd = require('./resolve-end.js'); -var utilEmptyScalarPosition = require('./util-empty-scalar-position.js'); - -const CN = { composeNode, composeEmptyNode }; -function composeNode(ctx, token, props, onError) { - const { spaceBefore, comment, anchor, tag } = props; - let node; - let isSrcToken = true; - switch (token.type) { - case 'alias': - node = composeAlias(ctx, token, onError); - if (anchor || tag) - onError(token, 'ALIAS_PROPS', 'An alias node must not specify any properties'); - break; - case 'scalar': - case 'single-quoted-scalar': - case 'double-quoted-scalar': - case 'block-scalar': - node = composeScalar.composeScalar(ctx, token, tag, onError); - if (anchor) - node.anchor = anchor.source.substring(1); - break; - case 'block-map': - case 'block-seq': - case 'flow-collection': - node = composeCollection.composeCollection(CN, ctx, token, tag, onError); - if (anchor) - node.anchor = anchor.source.substring(1); - break; - default: { - const message = token.type === 'error' - ? token.message - : `Unsupported token (type: ${token.type})`; - onError(token, 'UNEXPECTED_TOKEN', message); - node = composeEmptyNode(ctx, token.offset, undefined, null, props, onError); - isSrcToken = false; - } - } - if (anchor && node.anchor === '') - onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string'); - if (spaceBefore) - node.spaceBefore = true; - if (comment) { - if (token.type === 'scalar' && token.source === '') - node.comment = comment; - else - node.commentBefore = comment; - } - // @ts-expect-error Type checking misses meaning of isSrcToken - if (ctx.options.keepSourceTokens && isSrcToken) - node.srcToken = token; - return node; -} -function composeEmptyNode(ctx, offset, before, pos, { spaceBefore, comment, anchor, tag, end }, onError) { - const token = { - type: 'scalar', - offset: utilEmptyScalarPosition.emptyScalarPosition(offset, before, pos), - indent: -1, - source: '' - }; - const node = composeScalar.composeScalar(ctx, token, tag, onError); - if (anchor) { - node.anchor = anchor.source.substring(1); - if (node.anchor === '') - onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string'); - } - if (spaceBefore) - node.spaceBefore = true; - if (comment) { - node.comment = comment; - node.range[2] = end; - } - return node; -} -function composeAlias({ options }, { offset, source, end }, onError) { - const alias = new Alias.Alias(source.substring(1)); - if (alias.source === '') - onError(offset, 'BAD_ALIAS', 'Alias cannot be an empty string'); - if (alias.source.endsWith(':')) - onError(offset + source.length - 1, 'BAD_ALIAS', 'Alias ending in : is ambiguous', true); - const valueEnd = offset + source.length; - const re = resolveEnd.resolveEnd(end, valueEnd, options.strict, onError); - alias.range = [offset, valueEnd, re.offset]; - if (re.comment) - alias.comment = re.comment; - return alias; -} - -exports.composeEmptyNode = composeEmptyNode; -exports.composeNode = composeNode; diff --git a/tools/yaml/dist/compose/compose-scalar.d.ts b/tools/yaml/dist/compose/compose-scalar.d.ts deleted file mode 100644 index d5d0f79..0000000 --- a/tools/yaml/dist/compose/compose-scalar.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Scalar } from '../nodes/Scalar.js'; -import type { BlockScalar, FlowScalar, SourceToken } from '../parse/cst.js'; -import type { ComposeContext } from './compose-node.js'; -import type { ComposeErrorHandler } from './composer.js'; -export declare function composeScalar(ctx: ComposeContext, token: FlowScalar | BlockScalar, tagToken: SourceToken | null, onError: ComposeErrorHandler): Scalar.Parsed; diff --git a/tools/yaml/dist/compose/compose-scalar.js b/tools/yaml/dist/compose/compose-scalar.js deleted file mode 100644 index ace8964..0000000 --- a/tools/yaml/dist/compose/compose-scalar.js +++ /dev/null @@ -1,82 +0,0 @@ -'use strict'; - -var identity = require('../nodes/identity.js'); -var Scalar = require('../nodes/Scalar.js'); -var resolveBlockScalar = require('./resolve-block-scalar.js'); -var resolveFlowScalar = require('./resolve-flow-scalar.js'); - -function composeScalar(ctx, token, tagToken, onError) { - const { value, type, comment, range } = token.type === 'block-scalar' - ? resolveBlockScalar.resolveBlockScalar(token, ctx.options.strict, onError) - : resolveFlowScalar.resolveFlowScalar(token, ctx.options.strict, onError); - const tagName = tagToken - ? ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg)) - : null; - const tag = tagToken && tagName - ? findScalarTagByName(ctx.schema, value, tagName, tagToken, onError) - : token.type === 'scalar' - ? findScalarTagByTest(ctx, value, token, onError) - : ctx.schema[identity.SCALAR]; - let scalar; - try { - const res = tag.resolve(value, msg => onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg), ctx.options); - scalar = identity.isScalar(res) ? res : new Scalar.Scalar(res); - } - catch (error) { - const msg = error instanceof Error ? error.message : String(error); - onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg); - scalar = new Scalar.Scalar(value); - } - scalar.range = range; - scalar.source = value; - if (type) - scalar.type = type; - if (tagName) - scalar.tag = tagName; - if (tag.format) - scalar.format = tag.format; - if (comment) - scalar.comment = comment; - return scalar; -} -function findScalarTagByName(schema, value, tagName, tagToken, onError) { - if (tagName === '!') - return schema[identity.SCALAR]; // non-specific tag - const matchWithTest = []; - for (const tag of schema.tags) { - if (!tag.collection && tag.tag === tagName) { - if (tag.default && tag.test) - matchWithTest.push(tag); - else - return tag; - } - } - for (const tag of matchWithTest) - if (tag.test?.test(value)) - return tag; - const kt = schema.knownTags[tagName]; - if (kt && !kt.collection) { - // Ensure that the known tag is available for stringifying, - // but does not get used by default. - schema.tags.push(Object.assign({}, kt, { default: false, test: undefined })); - return kt; - } - onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, tagName !== 'tag:yaml.org,2002:str'); - return schema[identity.SCALAR]; -} -function findScalarTagByTest({ directives, schema }, value, token, onError) { - const tag = schema.tags.find(tag => tag.default && tag.test?.test(value)) || schema[identity.SCALAR]; - if (schema.compat) { - const compat = schema.compat.find(tag => tag.default && tag.test?.test(value)) ?? - schema[identity.SCALAR]; - if (tag.tag !== compat.tag) { - const ts = directives.tagString(tag.tag); - const cs = directives.tagString(compat.tag); - const msg = `Value may be parsed as either ${ts} or ${cs}`; - onError(token, 'TAG_RESOLVE_FAILED', msg, true); - } - } - return tag; -} - -exports.composeScalar = composeScalar; diff --git a/tools/yaml/dist/compose/composer.d.ts b/tools/yaml/dist/compose/composer.d.ts deleted file mode 100644 index cd3d323..0000000 --- a/tools/yaml/dist/compose/composer.d.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { Directives } from '../doc/directives.js'; -import { Document } from '../doc/Document.js'; -import { ErrorCode, YAMLParseError, YAMLWarning } from '../errors.js'; -import type { ParsedNode, Range } from '../nodes/Node.js'; -import type { DocumentOptions, ParseOptions, SchemaOptions } from '../options.js'; -import type { Token } from '../parse/cst.js'; -type ErrorSource = number | [number, number] | Range | { - offset: number; - source?: string; -}; -export type ComposeErrorHandler = (source: ErrorSource, code: ErrorCode, message: string, warning?: boolean) => void; -/** - * Compose a stream of CST nodes into a stream of YAML Documents. - * - * ```ts - * import { Composer, Parser } from 'yaml' - * - * const src: string = ... - * const tokens = new Parser().parse(src) - * const docs = new Composer().compose(tokens) - * ``` - */ -export declare class Composer { - private directives; - private doc; - private options; - private atDirectives; - private prelude; - private errors; - private warnings; - constructor(options?: ParseOptions & DocumentOptions & SchemaOptions); - private onError; - private decorate; - /** - * Current stream status information. - * - * Mostly useful at the end of input for an empty stream. - */ - streamInfo(): { - comment: string; - directives: Directives; - errors: YAMLParseError[]; - warnings: YAMLWarning[]; - }; - /** - * Compose tokens into documents. - * - * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document. - * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly. - */ - compose(tokens: Iterable, forceDoc?: boolean, endOffset?: number): Generator, void, unknown>; - /** Advance the composer by one CST token. */ - next(token: Token): Generator, void, unknown>; - /** - * Call at end of input to yield any remaining document. - * - * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document. - * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly. - */ - end(forceDoc?: boolean, endOffset?: number): Generator, void, unknown>; -} -export {}; diff --git a/tools/yaml/dist/compose/composer.js b/tools/yaml/dist/compose/composer.js deleted file mode 100644 index 0b89117..0000000 --- a/tools/yaml/dist/compose/composer.js +++ /dev/null @@ -1,221 +0,0 @@ -'use strict'; - -var directives = require('../doc/directives.js'); -var Document = require('../doc/Document.js'); -var errors = require('../errors.js'); -var identity = require('../nodes/identity.js'); -var composeDoc = require('./compose-doc.js'); -var resolveEnd = require('./resolve-end.js'); - -function getErrorPos(src) { - if (typeof src === 'number') - return [src, src + 1]; - if (Array.isArray(src)) - return src.length === 2 ? src : [src[0], src[1]]; - const { offset, source } = src; - return [offset, offset + (typeof source === 'string' ? source.length : 1)]; -} -function parsePrelude(prelude) { - let comment = ''; - let atComment = false; - let afterEmptyLine = false; - for (let i = 0; i < prelude.length; ++i) { - const source = prelude[i]; - switch (source[0]) { - case '#': - comment += - (comment === '' ? '' : afterEmptyLine ? '\n\n' : '\n') + - (source.substring(1) || ' '); - atComment = true; - afterEmptyLine = false; - break; - case '%': - if (prelude[i + 1]?.[0] !== '#') - i += 1; - atComment = false; - break; - default: - // This may be wrong after doc-end, but in that case it doesn't matter - if (!atComment) - afterEmptyLine = true; - atComment = false; - } - } - return { comment, afterEmptyLine }; -} -/** - * Compose a stream of CST nodes into a stream of YAML Documents. - * - * ```ts - * import { Composer, Parser } from 'yaml' - * - * const src: string = ... - * const tokens = new Parser().parse(src) - * const docs = new Composer().compose(tokens) - * ``` - */ -class Composer { - constructor(options = {}) { - this.doc = null; - this.atDirectives = false; - this.prelude = []; - this.errors = []; - this.warnings = []; - this.onError = (source, code, message, warning) => { - const pos = getErrorPos(source); - if (warning) - this.warnings.push(new errors.YAMLWarning(pos, code, message)); - else - this.errors.push(new errors.YAMLParseError(pos, code, message)); - }; - // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing - this.directives = new directives.Directives({ version: options.version || '1.2' }); - this.options = options; - } - decorate(doc, afterDoc) { - const { comment, afterEmptyLine } = parsePrelude(this.prelude); - //console.log({ dc: doc.comment, prelude, comment }) - if (comment) { - const dc = doc.contents; - if (afterDoc) { - doc.comment = doc.comment ? `${doc.comment}\n${comment}` : comment; - } - else if (afterEmptyLine || doc.directives.docStart || !dc) { - doc.commentBefore = comment; - } - else if (identity.isCollection(dc) && !dc.flow && dc.items.length > 0) { - let it = dc.items[0]; - if (identity.isPair(it)) - it = it.key; - const cb = it.commentBefore; - it.commentBefore = cb ? `${comment}\n${cb}` : comment; - } - else { - const cb = dc.commentBefore; - dc.commentBefore = cb ? `${comment}\n${cb}` : comment; - } - } - if (afterDoc) { - Array.prototype.push.apply(doc.errors, this.errors); - Array.prototype.push.apply(doc.warnings, this.warnings); - } - else { - doc.errors = this.errors; - doc.warnings = this.warnings; - } - this.prelude = []; - this.errors = []; - this.warnings = []; - } - /** - * Current stream status information. - * - * Mostly useful at the end of input for an empty stream. - */ - streamInfo() { - return { - comment: parsePrelude(this.prelude).comment, - directives: this.directives, - errors: this.errors, - warnings: this.warnings - }; - } - /** - * Compose tokens into documents. - * - * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document. - * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly. - */ - *compose(tokens, forceDoc = false, endOffset = -1) { - for (const token of tokens) - yield* this.next(token); - yield* this.end(forceDoc, endOffset); - } - /** Advance the composer by one CST token. */ - *next(token) { - if (process.env.LOG_STREAM) - console.dir(token, { depth: null }); - switch (token.type) { - case 'directive': - this.directives.add(token.source, (offset, message, warning) => { - const pos = getErrorPos(token); - pos[0] += offset; - this.onError(pos, 'BAD_DIRECTIVE', message, warning); - }); - this.prelude.push(token.source); - this.atDirectives = true; - break; - case 'document': { - const doc = composeDoc.composeDoc(this.options, this.directives, token, this.onError); - if (this.atDirectives && !doc.directives.docStart) - this.onError(token, 'MISSING_CHAR', 'Missing directives-end/doc-start indicator line'); - this.decorate(doc, false); - if (this.doc) - yield this.doc; - this.doc = doc; - this.atDirectives = false; - break; - } - case 'byte-order-mark': - case 'space': - break; - case 'comment': - case 'newline': - this.prelude.push(token.source); - break; - case 'error': { - const msg = token.source - ? `${token.message}: ${JSON.stringify(token.source)}` - : token.message; - const error = new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg); - if (this.atDirectives || !this.doc) - this.errors.push(error); - else - this.doc.errors.push(error); - break; - } - case 'doc-end': { - if (!this.doc) { - const msg = 'Unexpected doc-end without preceding document'; - this.errors.push(new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg)); - break; - } - this.doc.directives.docEnd = true; - const end = resolveEnd.resolveEnd(token.end, token.offset + token.source.length, this.doc.options.strict, this.onError); - this.decorate(this.doc, true); - if (end.comment) { - const dc = this.doc.comment; - this.doc.comment = dc ? `${dc}\n${end.comment}` : end.comment; - } - this.doc.range[2] = end.offset; - break; - } - default: - this.errors.push(new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', `Unsupported token ${token.type}`)); - } - } - /** - * Call at end of input to yield any remaining document. - * - * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document. - * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly. - */ - *end(forceDoc = false, endOffset = -1) { - if (this.doc) { - this.decorate(this.doc, true); - yield this.doc; - this.doc = null; - } - else if (forceDoc) { - const opts = Object.assign({ _directives: this.directives }, this.options); - const doc = new Document.Document(undefined, opts); - if (this.atDirectives) - this.onError(endOffset, 'MISSING_CHAR', 'Missing directives-end indicator line'); - doc.range = [0, endOffset, endOffset]; - this.decorate(doc, false); - yield doc; - } - } -} - -exports.Composer = Composer; diff --git a/tools/yaml/dist/compose/resolve-block-map.d.ts b/tools/yaml/dist/compose/resolve-block-map.d.ts deleted file mode 100644 index 58855c8..0000000 --- a/tools/yaml/dist/compose/resolve-block-map.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { ParsedNode } from '../nodes/Node.js'; -import { YAMLMap } from '../nodes/YAMLMap.js'; -import type { BlockMap } from '../parse/cst.js'; -import { CollectionTag } from '../schema/types.js'; -import type { ComposeContext, ComposeNode } from './compose-node.js'; -import type { ComposeErrorHandler } from './composer.js'; -export declare function resolveBlockMap({ composeNode, composeEmptyNode }: ComposeNode, ctx: ComposeContext, bm: BlockMap, onError: ComposeErrorHandler, tag?: CollectionTag): YAMLMap.Parsed; diff --git a/tools/yaml/dist/compose/resolve-block-map.js b/tools/yaml/dist/compose/resolve-block-map.js deleted file mode 100644 index 8e2b18a..0000000 --- a/tools/yaml/dist/compose/resolve-block-map.js +++ /dev/null @@ -1,113 +0,0 @@ -'use strict'; - -var Pair = require('../nodes/Pair.js'); -var YAMLMap = require('../nodes/YAMLMap.js'); -var resolveProps = require('./resolve-props.js'); -var utilContainsNewline = require('./util-contains-newline.js'); -var utilFlowIndentCheck = require('./util-flow-indent-check.js'); -var utilMapIncludes = require('./util-map-includes.js'); - -const startColMsg = 'All mapping items must start at the same column'; -function resolveBlockMap({ composeNode, composeEmptyNode }, ctx, bm, onError, tag) { - const NodeClass = tag?.nodeClass ?? YAMLMap.YAMLMap; - const map = new NodeClass(ctx.schema); - if (ctx.atRoot) - ctx.atRoot = false; - let offset = bm.offset; - let commentEnd = null; - for (const collItem of bm.items) { - const { start, key, sep, value } = collItem; - // key properties - const keyProps = resolveProps.resolveProps(start, { - indicator: 'explicit-key-ind', - next: key ?? sep?.[0], - offset, - onError, - startOnNewline: true - }); - const implicitKey = !keyProps.found; - if (implicitKey) { - if (key) { - if (key.type === 'block-seq') - onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'A block sequence may not be used as an implicit map key'); - else if ('indent' in key && key.indent !== bm.indent) - onError(offset, 'BAD_INDENT', startColMsg); - } - if (!keyProps.anchor && !keyProps.tag && !sep) { - commentEnd = keyProps.end; - if (keyProps.comment) { - if (map.comment) - map.comment += '\n' + keyProps.comment; - else - map.comment = keyProps.comment; - } - continue; - } - if (keyProps.hasNewlineAfterProp || utilContainsNewline.containsNewline(key)) { - onError(key ?? start[start.length - 1], 'MULTILINE_IMPLICIT_KEY', 'Implicit keys need to be on a single line'); - } - } - else if (keyProps.found?.indent !== bm.indent) { - onError(offset, 'BAD_INDENT', startColMsg); - } - // key value - const keyStart = keyProps.end; - const keyNode = key - ? composeNode(ctx, key, keyProps, onError) - : composeEmptyNode(ctx, keyStart, start, null, keyProps, onError); - if (ctx.schema.compat) - utilFlowIndentCheck.flowIndentCheck(bm.indent, key, onError); - if (utilMapIncludes.mapIncludes(ctx, map.items, keyNode)) - onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique'); - // value properties - const valueProps = resolveProps.resolveProps(sep ?? [], { - indicator: 'map-value-ind', - next: value, - offset: keyNode.range[2], - onError, - startOnNewline: !key || key.type === 'block-scalar' - }); - offset = valueProps.end; - if (valueProps.found) { - if (implicitKey) { - if (value?.type === 'block-map' && !valueProps.hasNewline) - onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'Nested mappings are not allowed in compact mappings'); - if (ctx.options.strict && - keyProps.start < valueProps.found.offset - 1024) - onError(keyNode.range, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit block mapping key'); - } - // value value - const valueNode = value - ? composeNode(ctx, value, valueProps, onError) - : composeEmptyNode(ctx, offset, sep, null, valueProps, onError); - if (ctx.schema.compat) - utilFlowIndentCheck.flowIndentCheck(bm.indent, value, onError); - offset = valueNode.range[2]; - const pair = new Pair.Pair(keyNode, valueNode); - if (ctx.options.keepSourceTokens) - pair.srcToken = collItem; - map.items.push(pair); - } - else { - // key with no value - if (implicitKey) - onError(keyNode.range, 'MISSING_CHAR', 'Implicit map keys need to be followed by map values'); - if (valueProps.comment) { - if (keyNode.comment) - keyNode.comment += '\n' + valueProps.comment; - else - keyNode.comment = valueProps.comment; - } - const pair = new Pair.Pair(keyNode); - if (ctx.options.keepSourceTokens) - pair.srcToken = collItem; - map.items.push(pair); - } - } - if (commentEnd && commentEnd < offset) - onError(commentEnd, 'IMPOSSIBLE', 'Map comment with trailing content'); - map.range = [bm.offset, offset, commentEnd ?? offset]; - return map; -} - -exports.resolveBlockMap = resolveBlockMap; diff --git a/tools/yaml/dist/compose/resolve-block-scalar.d.ts b/tools/yaml/dist/compose/resolve-block-scalar.d.ts deleted file mode 100644 index 4855b19..0000000 --- a/tools/yaml/dist/compose/resolve-block-scalar.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Range } from '../nodes/Node.js'; -import { Scalar } from '../nodes/Scalar.js'; -import type { BlockScalar } from '../parse/cst.js'; -import type { ComposeErrorHandler } from './composer.js'; -export declare function resolveBlockScalar(scalar: BlockScalar, strict: boolean, onError: ComposeErrorHandler): { - value: string; - type: Scalar.BLOCK_FOLDED | Scalar.BLOCK_LITERAL | null; - comment: string; - range: Range; -}; diff --git a/tools/yaml/dist/compose/resolve-block-scalar.js b/tools/yaml/dist/compose/resolve-block-scalar.js deleted file mode 100644 index ba89f97..0000000 --- a/tools/yaml/dist/compose/resolve-block-scalar.js +++ /dev/null @@ -1,196 +0,0 @@ -'use strict'; - -var Scalar = require('../nodes/Scalar.js'); - -function resolveBlockScalar(scalar, strict, onError) { - const start = scalar.offset; - const header = parseBlockScalarHeader(scalar, strict, onError); - if (!header) - return { value: '', type: null, comment: '', range: [start, start, start] }; - const type = header.mode === '>' ? Scalar.Scalar.BLOCK_FOLDED : Scalar.Scalar.BLOCK_LITERAL; - const lines = scalar.source ? splitLines(scalar.source) : []; - // determine the end of content & start of chomping - let chompStart = lines.length; - for (let i = lines.length - 1; i >= 0; --i) { - const content = lines[i][1]; - if (content === '' || content === '\r') - chompStart = i; - else - break; - } - // shortcut for empty contents - if (chompStart === 0) { - const value = header.chomp === '+' && lines.length > 0 - ? '\n'.repeat(Math.max(1, lines.length - 1)) - : ''; - let end = start + header.length; - if (scalar.source) - end += scalar.source.length; - return { value, type, comment: header.comment, range: [start, end, end] }; - } - // find the indentation level to trim from start - let trimIndent = scalar.indent + header.indent; - let offset = scalar.offset + header.length; - let contentStart = 0; - for (let i = 0; i < chompStart; ++i) { - const [indent, content] = lines[i]; - if (content === '' || content === '\r') { - if (header.indent === 0 && indent.length > trimIndent) - trimIndent = indent.length; - } - else { - if (indent.length < trimIndent) { - const message = 'Block scalars with more-indented leading empty lines must use an explicit indentation indicator'; - onError(offset + indent.length, 'MISSING_CHAR', message); - } - if (header.indent === 0) - trimIndent = indent.length; - contentStart = i; - break; - } - offset += indent.length + content.length + 1; - } - // include trailing more-indented empty lines in content - for (let i = lines.length - 1; i >= chompStart; --i) { - if (lines[i][0].length > trimIndent) - chompStart = i + 1; - } - let value = ''; - let sep = ''; - let prevMoreIndented = false; - // leading whitespace is kept intact - for (let i = 0; i < contentStart; ++i) - value += lines[i][0].slice(trimIndent) + '\n'; - for (let i = contentStart; i < chompStart; ++i) { - let [indent, content] = lines[i]; - offset += indent.length + content.length + 1; - const crlf = content[content.length - 1] === '\r'; - if (crlf) - content = content.slice(0, -1); - /* istanbul ignore if already caught in lexer */ - if (content && indent.length < trimIndent) { - const src = header.indent - ? 'explicit indentation indicator' - : 'first line'; - const message = `Block scalar lines must not be less indented than their ${src}`; - onError(offset - content.length - (crlf ? 2 : 1), 'BAD_INDENT', message); - indent = ''; - } - if (type === Scalar.Scalar.BLOCK_LITERAL) { - value += sep + indent.slice(trimIndent) + content; - sep = '\n'; - } - else if (indent.length > trimIndent || content[0] === '\t') { - // more-indented content within a folded block - if (sep === ' ') - sep = '\n'; - else if (!prevMoreIndented && sep === '\n') - sep = '\n\n'; - value += sep + indent.slice(trimIndent) + content; - sep = '\n'; - prevMoreIndented = true; - } - else if (content === '') { - // empty line - if (sep === '\n') - value += '\n'; - else - sep = '\n'; - } - else { - value += sep + content; - sep = ' '; - prevMoreIndented = false; - } - } - switch (header.chomp) { - case '-': - break; - case '+': - for (let i = chompStart; i < lines.length; ++i) - value += '\n' + lines[i][0].slice(trimIndent); - if (value[value.length - 1] !== '\n') - value += '\n'; - break; - default: - value += '\n'; - } - const end = start + header.length + scalar.source.length; - return { value, type, comment: header.comment, range: [start, end, end] }; -} -function parseBlockScalarHeader({ offset, props }, strict, onError) { - /* istanbul ignore if should not happen */ - if (props[0].type !== 'block-scalar-header') { - onError(props[0], 'IMPOSSIBLE', 'Block scalar header not found'); - return null; - } - const { source } = props[0]; - const mode = source[0]; - let indent = 0; - let chomp = ''; - let error = -1; - for (let i = 1; i < source.length; ++i) { - const ch = source[i]; - if (!chomp && (ch === '-' || ch === '+')) - chomp = ch; - else { - const n = Number(ch); - if (!indent && n) - indent = n; - else if (error === -1) - error = offset + i; - } - } - if (error !== -1) - onError(error, 'UNEXPECTED_TOKEN', `Block scalar header includes extra characters: ${source}`); - let hasSpace = false; - let comment = ''; - let length = source.length; - for (let i = 1; i < props.length; ++i) { - const token = props[i]; - switch (token.type) { - case 'space': - hasSpace = true; - // fallthrough - case 'newline': - length += token.source.length; - break; - case 'comment': - if (strict && !hasSpace) { - const message = 'Comments must be separated from other tokens by white space characters'; - onError(token, 'MISSING_CHAR', message); - } - length += token.source.length; - comment = token.source.substring(1); - break; - case 'error': - onError(token, 'UNEXPECTED_TOKEN', token.message); - length += token.source.length; - break; - /* istanbul ignore next should not happen */ - default: { - const message = `Unexpected token in block scalar header: ${token.type}`; - onError(token, 'UNEXPECTED_TOKEN', message); - const ts = token.source; - if (ts && typeof ts === 'string') - length += ts.length; - } - } - } - return { mode, indent, chomp, comment, length }; -} -/** @returns Array of lines split up as `[indent, content]` */ -function splitLines(source) { - const split = source.split(/\n( *)/); - const first = split[0]; - const m = first.match(/^( *)/); - const line0 = m?.[1] - ? [m[1], first.slice(m[1].length)] - : ['', first]; - const lines = [line0]; - for (let i = 1; i < split.length; i += 2) - lines.push([split[i], split[i + 1]]); - return lines; -} - -exports.resolveBlockScalar = resolveBlockScalar; diff --git a/tools/yaml/dist/compose/resolve-block-seq.d.ts b/tools/yaml/dist/compose/resolve-block-seq.d.ts deleted file mode 100644 index 3a15f52..0000000 --- a/tools/yaml/dist/compose/resolve-block-seq.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { YAMLSeq } from '../nodes/YAMLSeq.js'; -import type { BlockSequence } from '../parse/cst.js'; -import { CollectionTag } from '../schema/types.js'; -import type { ComposeContext, ComposeNode } from './compose-node.js'; -import type { ComposeErrorHandler } from './composer.js'; -export declare function resolveBlockSeq({ composeNode, composeEmptyNode }: ComposeNode, ctx: ComposeContext, bs: BlockSequence, onError: ComposeErrorHandler, tag?: CollectionTag): YAMLSeq.Parsed; diff --git a/tools/yaml/dist/compose/resolve-block-seq.js b/tools/yaml/dist/compose/resolve-block-seq.js deleted file mode 100644 index 9bb26db..0000000 --- a/tools/yaml/dist/compose/resolve-block-seq.js +++ /dev/null @@ -1,48 +0,0 @@ -'use strict'; - -var YAMLSeq = require('../nodes/YAMLSeq.js'); -var resolveProps = require('./resolve-props.js'); -var utilFlowIndentCheck = require('./util-flow-indent-check.js'); - -function resolveBlockSeq({ composeNode, composeEmptyNode }, ctx, bs, onError, tag) { - const NodeClass = tag?.nodeClass ?? YAMLSeq.YAMLSeq; - const seq = new NodeClass(ctx.schema); - if (ctx.atRoot) - ctx.atRoot = false; - let offset = bs.offset; - let commentEnd = null; - for (const { start, value } of bs.items) { - const props = resolveProps.resolveProps(start, { - indicator: 'seq-item-ind', - next: value, - offset, - onError, - startOnNewline: true - }); - if (!props.found) { - if (props.anchor || props.tag || value) { - if (value && value.type === 'block-seq') - onError(props.end, 'BAD_INDENT', 'All sequence items must start at the same column'); - else - onError(offset, 'MISSING_CHAR', 'Sequence item without - indicator'); - } - else { - commentEnd = props.end; - if (props.comment) - seq.comment = props.comment; - continue; - } - } - const node = value - ? composeNode(ctx, value, props, onError) - : composeEmptyNode(ctx, props.end, start, null, props, onError); - if (ctx.schema.compat) - utilFlowIndentCheck.flowIndentCheck(bs.indent, value, onError); - offset = node.range[2]; - seq.items.push(node); - } - seq.range = [bs.offset, offset, commentEnd ?? offset]; - return seq; -} - -exports.resolveBlockSeq = resolveBlockSeq; diff --git a/tools/yaml/dist/compose/resolve-end.d.ts b/tools/yaml/dist/compose/resolve-end.d.ts deleted file mode 100644 index bb2d0b8..0000000 --- a/tools/yaml/dist/compose/resolve-end.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { SourceToken } from '../parse/cst.js'; -import type { ComposeErrorHandler } from './composer.js'; -export declare function resolveEnd(end: SourceToken[] | undefined, offset: number, reqSpace: boolean, onError: ComposeErrorHandler): { - comment: string; - offset: number; -}; diff --git a/tools/yaml/dist/compose/resolve-end.js b/tools/yaml/dist/compose/resolve-end.js deleted file mode 100644 index 3a58347..0000000 --- a/tools/yaml/dist/compose/resolve-end.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; - -function resolveEnd(end, offset, reqSpace, onError) { - let comment = ''; - if (end) { - let hasSpace = false; - let sep = ''; - for (const token of end) { - const { source, type } = token; - switch (type) { - case 'space': - hasSpace = true; - break; - case 'comment': { - if (reqSpace && !hasSpace) - onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters'); - const cb = source.substring(1) || ' '; - if (!comment) - comment = cb; - else - comment += sep + cb; - sep = ''; - break; - } - case 'newline': - if (comment) - sep += source; - hasSpace = true; - break; - default: - onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${type} at node end`); - } - offset += source.length; - } - } - return { comment, offset }; -} - -exports.resolveEnd = resolveEnd; diff --git a/tools/yaml/dist/compose/resolve-flow-collection.d.ts b/tools/yaml/dist/compose/resolve-flow-collection.d.ts deleted file mode 100644 index 8db5985..0000000 --- a/tools/yaml/dist/compose/resolve-flow-collection.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { YAMLMap } from '../nodes/YAMLMap.js'; -import { YAMLSeq } from '../nodes/YAMLSeq.js'; -import type { FlowCollection } from '../parse/cst.js'; -import { CollectionTag } from '../schema/types.js'; -import type { ComposeContext, ComposeNode } from './compose-node.js'; -import type { ComposeErrorHandler } from './composer.js'; -export declare function resolveFlowCollection({ composeNode, composeEmptyNode }: ComposeNode, ctx: ComposeContext, fc: FlowCollection, onError: ComposeErrorHandler, tag?: CollectionTag): YAMLMap.Parsed | YAMLSeq.Parsed; diff --git a/tools/yaml/dist/compose/resolve-flow-collection.js b/tools/yaml/dist/compose/resolve-flow-collection.js deleted file mode 100644 index ec29d08..0000000 --- a/tools/yaml/dist/compose/resolve-flow-collection.js +++ /dev/null @@ -1,201 +0,0 @@ -'use strict'; - -var identity = require('../nodes/identity.js'); -var Pair = require('../nodes/Pair.js'); -var YAMLMap = require('../nodes/YAMLMap.js'); -var YAMLSeq = require('../nodes/YAMLSeq.js'); -var resolveEnd = require('./resolve-end.js'); -var resolveProps = require('./resolve-props.js'); -var utilContainsNewline = require('./util-contains-newline.js'); -var utilMapIncludes = require('./util-map-includes.js'); - -const blockMsg = 'Block collections are not allowed within flow collections'; -const isBlock = (token) => token && (token.type === 'block-map' || token.type === 'block-seq'); -function resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onError, tag) { - const isMap = fc.start.source === '{'; - const fcName = isMap ? 'flow map' : 'flow sequence'; - const NodeClass = (tag?.nodeClass ?? (isMap ? YAMLMap.YAMLMap : YAMLSeq.YAMLSeq)); - const coll = new NodeClass(ctx.schema); - coll.flow = true; - const atRoot = ctx.atRoot; - if (atRoot) - ctx.atRoot = false; - let offset = fc.offset + fc.start.source.length; - for (let i = 0; i < fc.items.length; ++i) { - const collItem = fc.items[i]; - const { start, key, sep, value } = collItem; - const props = resolveProps.resolveProps(start, { - flow: fcName, - indicator: 'explicit-key-ind', - next: key ?? sep?.[0], - offset, - onError, - startOnNewline: false - }); - if (!props.found) { - if (!props.anchor && !props.tag && !sep && !value) { - if (i === 0 && props.comma) - onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`); - else if (i < fc.items.length - 1) - onError(props.start, 'UNEXPECTED_TOKEN', `Unexpected empty item in ${fcName}`); - if (props.comment) { - if (coll.comment) - coll.comment += '\n' + props.comment; - else - coll.comment = props.comment; - } - offset = props.end; - continue; - } - if (!isMap && ctx.options.strict && utilContainsNewline.containsNewline(key)) - onError(key, // checked by containsNewline() - 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line'); - } - if (i === 0) { - if (props.comma) - onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`); - } - else { - if (!props.comma) - onError(props.start, 'MISSING_CHAR', `Missing , between ${fcName} items`); - if (props.comment) { - let prevItemComment = ''; - loop: for (const st of start) { - switch (st.type) { - case 'comma': - case 'space': - break; - case 'comment': - prevItemComment = st.source.substring(1); - break loop; - default: - break loop; - } - } - if (prevItemComment) { - let prev = coll.items[coll.items.length - 1]; - if (identity.isPair(prev)) - prev = prev.value ?? prev.key; - if (prev.comment) - prev.comment += '\n' + prevItemComment; - else - prev.comment = prevItemComment; - props.comment = props.comment.substring(prevItemComment.length + 1); - } - } - } - if (!isMap && !sep && !props.found) { - // item is a value in a seq - // → key & sep are empty, start does not include ? or : - const valueNode = value - ? composeNode(ctx, value, props, onError) - : composeEmptyNode(ctx, props.end, sep, null, props, onError); - coll.items.push(valueNode); - offset = valueNode.range[2]; - if (isBlock(value)) - onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg); - } - else { - // item is a key+value pair - // key value - const keyStart = props.end; - const keyNode = key - ? composeNode(ctx, key, props, onError) - : composeEmptyNode(ctx, keyStart, start, null, props, onError); - if (isBlock(key)) - onError(keyNode.range, 'BLOCK_IN_FLOW', blockMsg); - // value properties - const valueProps = resolveProps.resolveProps(sep ?? [], { - flow: fcName, - indicator: 'map-value-ind', - next: value, - offset: keyNode.range[2], - onError, - startOnNewline: false - }); - if (valueProps.found) { - if (!isMap && !props.found && ctx.options.strict) { - if (sep) - for (const st of sep) { - if (st === valueProps.found) - break; - if (st.type === 'newline') { - onError(st, 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line'); - break; - } - } - if (props.start < valueProps.found.offset - 1024) - onError(valueProps.found, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit flow sequence key'); - } - } - else if (value) { - if ('source' in value && value.source && value.source[0] === ':') - onError(value, 'MISSING_CHAR', `Missing space after : in ${fcName}`); - else - onError(valueProps.start, 'MISSING_CHAR', `Missing , or : between ${fcName} items`); - } - // value value - const valueNode = value - ? composeNode(ctx, value, valueProps, onError) - : valueProps.found - ? composeEmptyNode(ctx, valueProps.end, sep, null, valueProps, onError) - : null; - if (valueNode) { - if (isBlock(value)) - onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg); - } - else if (valueProps.comment) { - if (keyNode.comment) - keyNode.comment += '\n' + valueProps.comment; - else - keyNode.comment = valueProps.comment; - } - const pair = new Pair.Pair(keyNode, valueNode); - if (ctx.options.keepSourceTokens) - pair.srcToken = collItem; - if (isMap) { - const map = coll; - if (utilMapIncludes.mapIncludes(ctx, map.items, keyNode)) - onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique'); - map.items.push(pair); - } - else { - const map = new YAMLMap.YAMLMap(ctx.schema); - map.flow = true; - map.items.push(pair); - coll.items.push(map); - } - offset = valueNode ? valueNode.range[2] : valueProps.end; - } - } - const expectedEnd = isMap ? '}' : ']'; - const [ce, ...ee] = fc.end; - let cePos = offset; - if (ce && ce.source === expectedEnd) - cePos = ce.offset + ce.source.length; - else { - const name = fcName[0].toUpperCase() + fcName.substring(1); - const msg = atRoot - ? `${name} must end with a ${expectedEnd}` - : `${name} in block collection must be sufficiently indented and end with a ${expectedEnd}`; - onError(offset, atRoot ? 'MISSING_CHAR' : 'BAD_INDENT', msg); - if (ce && ce.source.length !== 1) - ee.unshift(ce); - } - if (ee.length > 0) { - const end = resolveEnd.resolveEnd(ee, cePos, ctx.options.strict, onError); - if (end.comment) { - if (coll.comment) - coll.comment += '\n' + end.comment; - else - coll.comment = end.comment; - } - coll.range = [fc.offset, cePos, end.offset]; - } - else { - coll.range = [fc.offset, cePos, cePos]; - } - return coll; -} - -exports.resolveFlowCollection = resolveFlowCollection; diff --git a/tools/yaml/dist/compose/resolve-flow-scalar.d.ts b/tools/yaml/dist/compose/resolve-flow-scalar.d.ts deleted file mode 100644 index 0c9204d..0000000 --- a/tools/yaml/dist/compose/resolve-flow-scalar.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Range } from '../nodes/Node.js'; -import { Scalar } from '../nodes/Scalar.js'; -import type { FlowScalar } from '../parse/cst.js'; -import type { ComposeErrorHandler } from './composer.js'; -export declare function resolveFlowScalar(scalar: FlowScalar, strict: boolean, onError: ComposeErrorHandler): { - value: string; - type: Scalar.PLAIN | Scalar.QUOTE_DOUBLE | Scalar.QUOTE_SINGLE | null; - comment: string; - range: Range; -}; diff --git a/tools/yaml/dist/compose/resolve-flow-scalar.js b/tools/yaml/dist/compose/resolve-flow-scalar.js deleted file mode 100644 index cf6257c..0000000 --- a/tools/yaml/dist/compose/resolve-flow-scalar.js +++ /dev/null @@ -1,225 +0,0 @@ -'use strict'; - -var Scalar = require('../nodes/Scalar.js'); -var resolveEnd = require('./resolve-end.js'); - -function resolveFlowScalar(scalar, strict, onError) { - const { offset, type, source, end } = scalar; - let _type; - let value; - const _onError = (rel, code, msg) => onError(offset + rel, code, msg); - switch (type) { - case 'scalar': - _type = Scalar.Scalar.PLAIN; - value = plainValue(source, _onError); - break; - case 'single-quoted-scalar': - _type = Scalar.Scalar.QUOTE_SINGLE; - value = singleQuotedValue(source, _onError); - break; - case 'double-quoted-scalar': - _type = Scalar.Scalar.QUOTE_DOUBLE; - value = doubleQuotedValue(source, _onError); - break; - /* istanbul ignore next should not happen */ - default: - onError(scalar, 'UNEXPECTED_TOKEN', `Expected a flow scalar value, but found: ${type}`); - return { - value: '', - type: null, - comment: '', - range: [offset, offset + source.length, offset + source.length] - }; - } - const valueEnd = offset + source.length; - const re = resolveEnd.resolveEnd(end, valueEnd, strict, onError); - return { - value, - type: _type, - comment: re.comment, - range: [offset, valueEnd, re.offset] - }; -} -function plainValue(source, onError) { - let badChar = ''; - switch (source[0]) { - /* istanbul ignore next should not happen */ - case '\t': - badChar = 'a tab character'; - break; - case ',': - badChar = 'flow indicator character ,'; - break; - case '%': - badChar = 'directive indicator character %'; - break; - case '|': - case '>': { - badChar = `block scalar indicator ${source[0]}`; - break; - } - case '@': - case '`': { - badChar = `reserved character ${source[0]}`; - break; - } - } - if (badChar) - onError(0, 'BAD_SCALAR_START', `Plain value cannot start with ${badChar}`); - return foldLines(source); -} -function singleQuotedValue(source, onError) { - if (source[source.length - 1] !== "'" || source.length === 1) - onError(source.length, 'MISSING_CHAR', "Missing closing 'quote"); - return foldLines(source.slice(1, -1)).replace(/''/g, "'"); -} -function foldLines(source) { - /** - * The negative lookbehind here and in the `re` RegExp is to - * prevent causing a polynomial search time in certain cases. - * - * The try-catch is for Safari, which doesn't support this yet: - * https://caniuse.com/js-regexp-lookbehind - */ - let first, line; - try { - first = new RegExp('(.*?)(? wsStart ? source.slice(wsStart, i + 1) : ch; - } - else { - res += ch; - } - } - if (source[source.length - 1] !== '"' || source.length === 1) - onError(source.length, 'MISSING_CHAR', 'Missing closing "quote'); - return res; -} -/** - * Fold a single newline into a space, multiple newlines to N - 1 newlines. - * Presumes `source[offset] === '\n'` - */ -function foldNewline(source, offset) { - let fold = ''; - let ch = source[offset + 1]; - while (ch === ' ' || ch === '\t' || ch === '\n' || ch === '\r') { - if (ch === '\r' && source[offset + 2] !== '\n') - break; - if (ch === '\n') - fold += '\n'; - offset += 1; - ch = source[offset + 1]; - } - if (!fold) - fold = ' '; - return { fold, offset }; -} -const escapeCodes = { - '0': '\0', - a: '\x07', - b: '\b', - e: '\x1b', - f: '\f', - n: '\n', - r: '\r', - t: '\t', - v: '\v', - N: '\u0085', - _: '\u00a0', - L: '\u2028', - P: '\u2029', - ' ': ' ', - '"': '"', - '/': '/', - '\\': '\\', - '\t': '\t' -}; -function parseCharCode(source, offset, length, onError) { - const cc = source.substr(offset, length); - const ok = cc.length === length && /^[0-9a-fA-F]+$/.test(cc); - const code = ok ? parseInt(cc, 16) : NaN; - if (isNaN(code)) { - const raw = source.substr(offset - 2, length + 2); - onError(offset - 2, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`); - return raw; - } - return String.fromCodePoint(code); -} - -exports.resolveFlowScalar = resolveFlowScalar; diff --git a/tools/yaml/dist/compose/resolve-props.d.ts b/tools/yaml/dist/compose/resolve-props.d.ts deleted file mode 100644 index fba44cf..0000000 --- a/tools/yaml/dist/compose/resolve-props.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { SourceToken, Token } from '../parse/cst.js'; -import type { ComposeErrorHandler } from './composer.js'; -export interface ResolvePropsArg { - flow?: 'flow map' | 'flow sequence'; - indicator: 'doc-start' | 'explicit-key-ind' | 'map-value-ind' | 'seq-item-ind'; - next: Token | null | undefined; - offset: number; - onError: ComposeErrorHandler; - startOnNewline: boolean; -} -export declare function resolveProps(tokens: SourceToken[], { flow, indicator, next, offset, onError, startOnNewline }: ResolvePropsArg): { - comma: SourceToken | null; - found: SourceToken | null; - spaceBefore: boolean; - comment: string; - hasNewline: boolean; - hasNewlineAfterProp: boolean; - anchor: SourceToken | null; - tag: SourceToken | null; - end: number; - start: number; -}; diff --git a/tools/yaml/dist/compose/resolve-props.js b/tools/yaml/dist/compose/resolve-props.js deleted file mode 100644 index bc2ef22..0000000 --- a/tools/yaml/dist/compose/resolve-props.js +++ /dev/null @@ -1,136 +0,0 @@ -'use strict'; - -function resolveProps(tokens, { flow, indicator, next, offset, onError, startOnNewline }) { - let spaceBefore = false; - let atNewline = startOnNewline; - let hasSpace = startOnNewline; - let comment = ''; - let commentSep = ''; - let hasNewline = false; - let hasNewlineAfterProp = false; - let reqSpace = false; - let anchor = null; - let tag = null; - let comma = null; - let found = null; - let start = null; - for (const token of tokens) { - if (reqSpace) { - if (token.type !== 'space' && - token.type !== 'newline' && - token.type !== 'comma') - onError(token.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space'); - reqSpace = false; - } - switch (token.type) { - case 'space': - // At the doc level, tabs at line start may be parsed - // as leading white space rather than indentation. - // In a flow collection, only the parser handles indent. - if (!flow && - atNewline && - indicator !== 'doc-start' && - token.source[0] === '\t') - onError(token, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation'); - hasSpace = true; - break; - case 'comment': { - if (!hasSpace) - onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters'); - const cb = token.source.substring(1) || ' '; - if (!comment) - comment = cb; - else - comment += commentSep + cb; - commentSep = ''; - atNewline = false; - break; - } - case 'newline': - if (atNewline) { - if (comment) - comment += token.source; - else - spaceBefore = true; - } - else - commentSep += token.source; - atNewline = true; - hasNewline = true; - if (anchor || tag) - hasNewlineAfterProp = true; - hasSpace = true; - break; - case 'anchor': - if (anchor) - onError(token, 'MULTIPLE_ANCHORS', 'A node can have at most one anchor'); - if (token.source.endsWith(':')) - onError(token.offset + token.source.length - 1, 'BAD_ALIAS', 'Anchor ending in : is ambiguous', true); - anchor = token; - if (start === null) - start = token.offset; - atNewline = false; - hasSpace = false; - reqSpace = true; - break; - case 'tag': { - if (tag) - onError(token, 'MULTIPLE_TAGS', 'A node can have at most one tag'); - tag = token; - if (start === null) - start = token.offset; - atNewline = false; - hasSpace = false; - reqSpace = true; - break; - } - case indicator: - // Could here handle preceding comments differently - if (anchor || tag) - onError(token, 'BAD_PROP_ORDER', `Anchors and tags must be after the ${token.source} indicator`); - if (found) - onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.source} in ${flow ?? 'collection'}`); - found = token; - atNewline = false; - hasSpace = false; - break; - case 'comma': - if (flow) { - if (comma) - onError(token, 'UNEXPECTED_TOKEN', `Unexpected , in ${flow}`); - comma = token; - atNewline = false; - hasSpace = false; - break; - } - // else fallthrough - default: - onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.type} token`); - atNewline = false; - hasSpace = false; - } - } - const last = tokens[tokens.length - 1]; - const end = last ? last.offset + last.source.length : offset; - if (reqSpace && - next && - next.type !== 'space' && - next.type !== 'newline' && - next.type !== 'comma' && - (next.type !== 'scalar' || next.source !== '')) - onError(next.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space'); - return { - comma, - found, - spaceBefore, - comment, - hasNewline, - hasNewlineAfterProp, - anchor, - tag, - end, - start: start ?? end - }; -} - -exports.resolveProps = resolveProps; diff --git a/tools/yaml/dist/compose/util-contains-newline.d.ts b/tools/yaml/dist/compose/util-contains-newline.d.ts deleted file mode 100644 index 8155be0..0000000 --- a/tools/yaml/dist/compose/util-contains-newline.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import type { Token } from '../parse/cst.js'; -export declare function containsNewline(key: Token | null | undefined): boolean | null; diff --git a/tools/yaml/dist/compose/util-contains-newline.js b/tools/yaml/dist/compose/util-contains-newline.js deleted file mode 100644 index e7aa82d..0000000 --- a/tools/yaml/dist/compose/util-contains-newline.js +++ /dev/null @@ -1,36 +0,0 @@ -'use strict'; - -function containsNewline(key) { - if (!key) - return null; - switch (key.type) { - case 'alias': - case 'scalar': - case 'double-quoted-scalar': - case 'single-quoted-scalar': - if (key.source.includes('\n')) - return true; - if (key.end) - for (const st of key.end) - if (st.type === 'newline') - return true; - return false; - case 'flow-collection': - for (const it of key.items) { - for (const st of it.start) - if (st.type === 'newline') - return true; - if (it.sep) - for (const st of it.sep) - if (st.type === 'newline') - return true; - if (containsNewline(it.key) || containsNewline(it.value)) - return true; - } - return false; - default: - return true; - } -} - -exports.containsNewline = containsNewline; diff --git a/tools/yaml/dist/compose/util-empty-scalar-position.d.ts b/tools/yaml/dist/compose/util-empty-scalar-position.d.ts deleted file mode 100644 index 90499b8..0000000 --- a/tools/yaml/dist/compose/util-empty-scalar-position.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import type { Token } from '../parse/cst.js'; -export declare function emptyScalarPosition(offset: number, before: Token[] | undefined, pos: number | null): number; diff --git a/tools/yaml/dist/compose/util-empty-scalar-position.js b/tools/yaml/dist/compose/util-empty-scalar-position.js deleted file mode 100644 index b2cd849..0000000 --- a/tools/yaml/dist/compose/util-empty-scalar-position.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; - -function emptyScalarPosition(offset, before, pos) { - if (before) { - if (pos === null) - pos = before.length; - for (let i = pos - 1; i >= 0; --i) { - let st = before[i]; - switch (st.type) { - case 'space': - case 'comment': - case 'newline': - offset -= st.source.length; - continue; - } - // Technically, an empty scalar is immediately after the last non-empty - // node, but it's more useful to place it after any whitespace. - st = before[++i]; - while (st?.type === 'space') { - offset += st.source.length; - st = before[++i]; - } - break; - } - } - return offset; -} - -exports.emptyScalarPosition = emptyScalarPosition; diff --git a/tools/yaml/dist/compose/util-flow-indent-check.d.ts b/tools/yaml/dist/compose/util-flow-indent-check.d.ts deleted file mode 100644 index 64ed1fc..0000000 --- a/tools/yaml/dist/compose/util-flow-indent-check.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { Token } from '../parse/cst'; -import { ComposeErrorHandler } from './composer'; -export declare function flowIndentCheck(indent: number, fc: Token | null | undefined, onError: ComposeErrorHandler): void; diff --git a/tools/yaml/dist/compose/util-flow-indent-check.js b/tools/yaml/dist/compose/util-flow-indent-check.js deleted file mode 100644 index 1e6b06f..0000000 --- a/tools/yaml/dist/compose/util-flow-indent-check.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var utilContainsNewline = require('./util-contains-newline.js'); - -function flowIndentCheck(indent, fc, onError) { - if (fc?.type === 'flow-collection') { - const end = fc.end[0]; - if (end.indent === indent && - (end.source === ']' || end.source === '}') && - utilContainsNewline.containsNewline(fc)) { - const msg = 'Flow end indicator should be more indented than parent'; - onError(end, 'BAD_INDENT', msg, true); - } - } -} - -exports.flowIndentCheck = flowIndentCheck; diff --git a/tools/yaml/dist/compose/util-map-includes.d.ts b/tools/yaml/dist/compose/util-map-includes.d.ts deleted file mode 100644 index fae2276..0000000 --- a/tools/yaml/dist/compose/util-map-includes.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { ParsedNode } from '../nodes/Node.js'; -import type { Pair } from '../nodes/Pair.js'; -import type { ComposeContext } from './compose-node.js'; -export declare function mapIncludes(ctx: ComposeContext, items: Pair[], search: ParsedNode): boolean; diff --git a/tools/yaml/dist/compose/util-map-includes.js b/tools/yaml/dist/compose/util-map-includes.js deleted file mode 100644 index 8a8d35c..0000000 --- a/tools/yaml/dist/compose/util-map-includes.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var identity = require('../nodes/identity.js'); - -function mapIncludes(ctx, items, search) { - const { uniqueKeys } = ctx.options; - if (uniqueKeys === false) - return false; - const isEqual = typeof uniqueKeys === 'function' - ? uniqueKeys - : (a, b) => a === b || - (identity.isScalar(a) && - identity.isScalar(b) && - a.value === b.value && - !(a.value === '<<' && ctx.schema.merge)); - return items.some(pair => isEqual(pair.key, search)); -} - -exports.mapIncludes = mapIncludes; diff --git a/tools/yaml/dist/doc/Document.d.ts b/tools/yaml/dist/doc/Document.d.ts deleted file mode 100644 index 431b907..0000000 --- a/tools/yaml/dist/doc/Document.d.ts +++ /dev/null @@ -1,141 +0,0 @@ -import type { YAMLError, YAMLWarning } from '../errors.js'; -import { Alias } from '../nodes/Alias.js'; -import { NODE_TYPE } from '../nodes/identity.js'; -import type { Node, NodeType, ParsedNode, Range } from '../nodes/Node.js'; -import { Pair } from '../nodes/Pair.js'; -import type { Scalar } from '../nodes/Scalar.js'; -import type { YAMLMap } from '../nodes/YAMLMap.js'; -import type { YAMLSeq } from '../nodes/YAMLSeq.js'; -import type { CreateNodeOptions, DocumentOptions, ParseOptions, SchemaOptions, ToJSOptions, ToStringOptions } from '../options.js'; -import { Schema } from '../schema/Schema.js'; -import { Directives } from './directives.js'; -export type Replacer = any[] | ((key: any, value: any) => unknown); -export declare namespace Document { - /** @ts-ignore The typing of directives fails in TS <= 4.2 */ - interface Parsed extends Document { - directives: Directives; - range: Range; - } -} -export declare class Document { - readonly [NODE_TYPE]: symbol; - /** A comment before this Document */ - commentBefore: string | null; - /** A comment immediately after this Document */ - comment: string | null; - /** The document contents. */ - contents: Strict extends true ? Contents | null : Contents; - directives: Strict extends true ? Directives | undefined : Directives; - /** Errors encountered during parsing. */ - errors: YAMLError[]; - options: Required>; - /** - * The `[start, value-end, node-end]` character offsets for the part of the - * source parsed into this document (undefined if not parsed). The `value-end` - * and `node-end` positions are themselves not included in their respective - * ranges. - */ - range?: Range; - /** The schema used with the document. Use `setSchema()` to change. */ - schema: Schema; - /** Warnings encountered during parsing. */ - warnings: YAMLWarning[]; - /** - * @param value - The initial value for the document, which will be wrapped - * in a Node container. - */ - constructor(value?: any, options?: DocumentOptions & SchemaOptions & ParseOptions & CreateNodeOptions); - constructor(value: any, replacer: null | Replacer, options?: DocumentOptions & SchemaOptions & ParseOptions & CreateNodeOptions); - /** - * Create a deep copy of this Document and its contents. - * - * Custom Node values that inherit from `Object` still refer to their original instances. - */ - clone(): Document; - /** Adds a value to the document. */ - add(value: any): void; - /** Adds a value to the document. */ - addIn(path: Iterable, value: unknown): void; - /** - * Create a new `Alias` node, ensuring that the target `node` has the required anchor. - * - * If `node` already has an anchor, `name` is ignored. - * Otherwise, the `node.anchor` value will be set to `name`, - * or if an anchor with that name is already present in the document, - * `name` will be used as a prefix for a new unique anchor. - * If `name` is undefined, the generated anchor will use 'a' as a prefix. - */ - createAlias(node: Strict extends true ? Scalar | YAMLMap | YAMLSeq : Node, name?: string): Alias; - /** - * Convert any value into a `Node` using the current schema, recursively - * turning objects into collections. - */ - createNode(value: T, options?: CreateNodeOptions): NodeType; - createNode(value: T, replacer: Replacer | CreateNodeOptions | null, options?: CreateNodeOptions): NodeType; - /** - * Convert a key and a value into a `Pair` using the current schema, - * recursively wrapping all values as `Scalar` or `Collection` nodes. - */ - createPair(key: unknown, value: unknown, options?: CreateNodeOptions): Pair; - /** - * Removes a value from the document. - * @returns `true` if the item was found and removed. - */ - delete(key: unknown): boolean; - /** - * Removes a value from the document. - * @returns `true` if the item was found and removed. - */ - deleteIn(path: Iterable | null): boolean; - /** - * Returns item at `key`, or `undefined` if not found. By default unwraps - * scalar values from their surrounding node; to disable set `keepScalar` to - * `true` (collections are always returned intact). - */ - get(key: unknown, keepScalar?: boolean): Strict extends true ? unknown : any; - /** - * Returns item at `path`, or `undefined` if not found. By default unwraps - * scalar values from their surrounding node; to disable set `keepScalar` to - * `true` (collections are always returned intact). - */ - getIn(path: Iterable | null, keepScalar?: boolean): Strict extends true ? unknown : any; - /** - * Checks if the document includes a value with the key `key`. - */ - has(key: unknown): boolean; - /** - * Checks if the document includes a value at `path`. - */ - hasIn(path: Iterable | null): boolean; - /** - * Sets a value in this document. For `!!set`, `value` needs to be a - * boolean to add/remove the item from the set. - */ - set(key: any, value: unknown): void; - /** - * Sets a value in this document. For `!!set`, `value` needs to be a - * boolean to add/remove the item from the set. - */ - setIn(path: Iterable | null, value: unknown): void; - /** - * Change the YAML version and schema used by the document. - * A `null` version disables support for directives, explicit tags, anchors, and aliases. - * It also requires the `schema` option to be given as a `Schema` instance value. - * - * Overrides all previously set schema options. - */ - setSchema(version: '1.1' | '1.2' | 'next' | null, options?: SchemaOptions): void; - /** A plain JavaScript representation of the document `contents`. */ - toJS(opt?: ToJSOptions & { - [ignored: string]: unknown; - }): any; - /** - * A JSON representation of the document `contents`. - * - * @param jsonArg Used by `JSON.stringify` to indicate the array index or - * property name. - */ - toJSON(jsonArg?: string | null, onAnchor?: ToJSOptions['onAnchor']): any; - /** A YAML representation of the document. */ - toString(options?: ToStringOptions): string; -} diff --git a/tools/yaml/dist/doc/Document.js b/tools/yaml/dist/doc/Document.js deleted file mode 100644 index a0aa955..0000000 --- a/tools/yaml/dist/doc/Document.js +++ /dev/null @@ -1,336 +0,0 @@ -'use strict'; - -var Alias = require('../nodes/Alias.js'); -var Collection = require('../nodes/Collection.js'); -var identity = require('../nodes/identity.js'); -var Pair = require('../nodes/Pair.js'); -var toJS = require('../nodes/toJS.js'); -var Schema = require('../schema/Schema.js'); -var stringifyDocument = require('../stringify/stringifyDocument.js'); -var anchors = require('./anchors.js'); -var applyReviver = require('./applyReviver.js'); -var createNode = require('./createNode.js'); -var directives = require('./directives.js'); - -class Document { - constructor(value, replacer, options) { - /** A comment before this Document */ - this.commentBefore = null; - /** A comment immediately after this Document */ - this.comment = null; - /** Errors encountered during parsing. */ - this.errors = []; - /** Warnings encountered during parsing. */ - this.warnings = []; - Object.defineProperty(this, identity.NODE_TYPE, { value: identity.DOC }); - let _replacer = null; - if (typeof replacer === 'function' || Array.isArray(replacer)) { - _replacer = replacer; - } - else if (options === undefined && replacer) { - options = replacer; - replacer = undefined; - } - const opt = Object.assign({ - intAsBigInt: false, - keepSourceTokens: false, - logLevel: 'warn', - prettyErrors: true, - strict: true, - uniqueKeys: true, - version: '1.2' - }, options); - this.options = opt; - let { version } = opt; - if (options?._directives) { - this.directives = options._directives.atDocument(); - if (this.directives.yaml.explicit) - version = this.directives.yaml.version; - } - else - this.directives = new directives.Directives({ version }); - this.setSchema(version, options); - // @ts-expect-error We can't really know that this matches Contents. - this.contents = - value === undefined ? null : this.createNode(value, _replacer, options); - } - /** - * Create a deep copy of this Document and its contents. - * - * Custom Node values that inherit from `Object` still refer to their original instances. - */ - clone() { - const copy = Object.create(Document.prototype, { - [identity.NODE_TYPE]: { value: identity.DOC } - }); - copy.commentBefore = this.commentBefore; - copy.comment = this.comment; - copy.errors = this.errors.slice(); - copy.warnings = this.warnings.slice(); - copy.options = Object.assign({}, this.options); - if (this.directives) - copy.directives = this.directives.clone(); - copy.schema = this.schema.clone(); - // @ts-expect-error We can't really know that this matches Contents. - copy.contents = identity.isNode(this.contents) - ? this.contents.clone(copy.schema) - : this.contents; - if (this.range) - copy.range = this.range.slice(); - return copy; - } - /** Adds a value to the document. */ - add(value) { - if (assertCollection(this.contents)) - this.contents.add(value); - } - /** Adds a value to the document. */ - addIn(path, value) { - if (assertCollection(this.contents)) - this.contents.addIn(path, value); - } - /** - * Create a new `Alias` node, ensuring that the target `node` has the required anchor. - * - * If `node` already has an anchor, `name` is ignored. - * Otherwise, the `node.anchor` value will be set to `name`, - * or if an anchor with that name is already present in the document, - * `name` will be used as a prefix for a new unique anchor. - * If `name` is undefined, the generated anchor will use 'a' as a prefix. - */ - createAlias(node, name) { - if (!node.anchor) { - const prev = anchors.anchorNames(this); - node.anchor = - // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing - !name || prev.has(name) ? anchors.findNewAnchor(name || 'a', prev) : name; - } - return new Alias.Alias(node.anchor); - } - createNode(value, replacer, options) { - let _replacer = undefined; - if (typeof replacer === 'function') { - value = replacer.call({ '': value }, '', value); - _replacer = replacer; - } - else if (Array.isArray(replacer)) { - const keyToStr = (v) => typeof v === 'number' || v instanceof String || v instanceof Number; - const asStr = replacer.filter(keyToStr).map(String); - if (asStr.length > 0) - replacer = replacer.concat(asStr); - _replacer = replacer; - } - else if (options === undefined && replacer) { - options = replacer; - replacer = undefined; - } - const { aliasDuplicateObjects, anchorPrefix, flow, keepUndefined, onTagObj, tag } = options ?? {}; - const { onAnchor, setAnchors, sourceObjects } = anchors.createNodeAnchors(this, - // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing - anchorPrefix || 'a'); - const ctx = { - aliasDuplicateObjects: aliasDuplicateObjects ?? true, - keepUndefined: keepUndefined ?? false, - onAnchor, - onTagObj, - replacer: _replacer, - schema: this.schema, - sourceObjects - }; - const node = createNode.createNode(value, tag, ctx); - if (flow && identity.isCollection(node)) - node.flow = true; - setAnchors(); - return node; - } - /** - * Convert a key and a value into a `Pair` using the current schema, - * recursively wrapping all values as `Scalar` or `Collection` nodes. - */ - createPair(key, value, options = {}) { - const k = this.createNode(key, null, options); - const v = this.createNode(value, null, options); - return new Pair.Pair(k, v); - } - /** - * Removes a value from the document. - * @returns `true` if the item was found and removed. - */ - delete(key) { - return assertCollection(this.contents) ? this.contents.delete(key) : false; - } - /** - * Removes a value from the document. - * @returns `true` if the item was found and removed. - */ - deleteIn(path) { - if (Collection.isEmptyPath(path)) { - if (this.contents == null) - return false; - // @ts-expect-error Presumed impossible if Strict extends false - this.contents = null; - return true; - } - return assertCollection(this.contents) - ? this.contents.deleteIn(path) - : false; - } - /** - * Returns item at `key`, or `undefined` if not found. By default unwraps - * scalar values from their surrounding node; to disable set `keepScalar` to - * `true` (collections are always returned intact). - */ - get(key, keepScalar) { - return identity.isCollection(this.contents) - ? this.contents.get(key, keepScalar) - : undefined; - } - /** - * Returns item at `path`, or `undefined` if not found. By default unwraps - * scalar values from their surrounding node; to disable set `keepScalar` to - * `true` (collections are always returned intact). - */ - getIn(path, keepScalar) { - if (Collection.isEmptyPath(path)) - return !keepScalar && identity.isScalar(this.contents) - ? this.contents.value - : this.contents; - return identity.isCollection(this.contents) - ? this.contents.getIn(path, keepScalar) - : undefined; - } - /** - * Checks if the document includes a value with the key `key`. - */ - has(key) { - return identity.isCollection(this.contents) ? this.contents.has(key) : false; - } - /** - * Checks if the document includes a value at `path`. - */ - hasIn(path) { - if (Collection.isEmptyPath(path)) - return this.contents !== undefined; - return identity.isCollection(this.contents) ? this.contents.hasIn(path) : false; - } - /** - * Sets a value in this document. For `!!set`, `value` needs to be a - * boolean to add/remove the item from the set. - */ - set(key, value) { - if (this.contents == null) { - // @ts-expect-error We can't really know that this matches Contents. - this.contents = Collection.collectionFromPath(this.schema, [key], value); - } - else if (assertCollection(this.contents)) { - this.contents.set(key, value); - } - } - /** - * Sets a value in this document. For `!!set`, `value` needs to be a - * boolean to add/remove the item from the set. - */ - setIn(path, value) { - if (Collection.isEmptyPath(path)) { - // @ts-expect-error We can't really know that this matches Contents. - this.contents = value; - } - else if (this.contents == null) { - // @ts-expect-error We can't really know that this matches Contents. - this.contents = Collection.collectionFromPath(this.schema, Array.from(path), value); - } - else if (assertCollection(this.contents)) { - this.contents.setIn(path, value); - } - } - /** - * Change the YAML version and schema used by the document. - * A `null` version disables support for directives, explicit tags, anchors, and aliases. - * It also requires the `schema` option to be given as a `Schema` instance value. - * - * Overrides all previously set schema options. - */ - setSchema(version, options = {}) { - if (typeof version === 'number') - version = String(version); - let opt; - switch (version) { - case '1.1': - if (this.directives) - this.directives.yaml.version = '1.1'; - else - this.directives = new directives.Directives({ version: '1.1' }); - opt = { merge: true, resolveKnownTags: false, schema: 'yaml-1.1' }; - break; - case '1.2': - case 'next': - if (this.directives) - this.directives.yaml.version = version; - else - this.directives = new directives.Directives({ version }); - opt = { merge: false, resolveKnownTags: true, schema: 'core' }; - break; - case null: - if (this.directives) - delete this.directives; - opt = null; - break; - default: { - const sv = JSON.stringify(version); - throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${sv}`); - } - } - // Not using `instanceof Schema` to allow for duck typing - if (options.schema instanceof Object) - this.schema = options.schema; - else if (opt) - this.schema = new Schema.Schema(Object.assign(opt, options)); - else - throw new Error(`With a null YAML version, the { schema: Schema } option is required`); - } - // json & jsonArg are only used from toJSON() - toJS({ json, jsonArg, mapAsMap, maxAliasCount, onAnchor, reviver } = {}) { - const ctx = { - anchors: new Map(), - doc: this, - keep: !json, - mapAsMap: mapAsMap === true, - mapKeyWarned: false, - maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100 - }; - const res = toJS.toJS(this.contents, jsonArg ?? '', ctx); - if (typeof onAnchor === 'function') - for (const { count, res } of ctx.anchors.values()) - onAnchor(res, count); - return typeof reviver === 'function' - ? applyReviver.applyReviver(reviver, { '': res }, '', res) - : res; - } - /** - * A JSON representation of the document `contents`. - * - * @param jsonArg Used by `JSON.stringify` to indicate the array index or - * property name. - */ - toJSON(jsonArg, onAnchor) { - return this.toJS({ json: true, jsonArg, mapAsMap: false, onAnchor }); - } - /** A YAML representation of the document. */ - toString(options = {}) { - if (this.errors.length > 0) - throw new Error('Document with errors cannot be stringified'); - if ('indent' in options && - (!Number.isInteger(options.indent) || Number(options.indent) <= 0)) { - const s = JSON.stringify(options.indent); - throw new Error(`"indent" option must be a positive integer, not ${s}`); - } - return stringifyDocument.stringifyDocument(this, options); - } -} -function assertCollection(contents) { - if (identity.isCollection(contents)) - return true; - throw new Error('Expected a YAML collection as document contents'); -} - -exports.Document = Document; diff --git a/tools/yaml/dist/doc/anchors.d.ts b/tools/yaml/dist/doc/anchors.d.ts deleted file mode 100644 index f5e967c..0000000 --- a/tools/yaml/dist/doc/anchors.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { Node } from '../nodes/Node.js'; -import type { Document } from './Document.js'; -/** - * Verify that the input string is a valid anchor. - * - * Will throw on errors. - */ -export declare function anchorIsValid(anchor: string): true; -export declare function anchorNames(root: Document | Node): Set; -/** Find a new anchor name with the given `prefix` and a one-indexed suffix. */ -export declare function findNewAnchor(prefix: string, exclude: Set): string; -export declare function createNodeAnchors(doc: Document, prefix: string): { - onAnchor: (source: unknown) => string; - /** - * With circular references, the source node is only resolved after all - * of its child nodes are. This is why anchors are set only after all of - * the nodes have been created. - */ - setAnchors: () => void; - sourceObjects: Map; -}; diff --git a/tools/yaml/dist/doc/anchors.js b/tools/yaml/dist/doc/anchors.js deleted file mode 100644 index 223639a..0000000 --- a/tools/yaml/dist/doc/anchors.js +++ /dev/null @@ -1,77 +0,0 @@ -'use strict'; - -var identity = require('../nodes/identity.js'); -var visit = require('../visit.js'); - -/** - * Verify that the input string is a valid anchor. - * - * Will throw on errors. - */ -function anchorIsValid(anchor) { - if (/[\x00-\x19\s,[\]{}]/.test(anchor)) { - const sa = JSON.stringify(anchor); - const msg = `Anchor must not contain whitespace or control characters: ${sa}`; - throw new Error(msg); - } - return true; -} -function anchorNames(root) { - const anchors = new Set(); - visit.visit(root, { - Value(_key, node) { - if (node.anchor) - anchors.add(node.anchor); - } - }); - return anchors; -} -/** Find a new anchor name with the given `prefix` and a one-indexed suffix. */ -function findNewAnchor(prefix, exclude) { - for (let i = 1; true; ++i) { - const name = `${prefix}${i}`; - if (!exclude.has(name)) - return name; - } -} -function createNodeAnchors(doc, prefix) { - const aliasObjects = []; - const sourceObjects = new Map(); - let prevAnchors = null; - return { - onAnchor: (source) => { - aliasObjects.push(source); - if (!prevAnchors) - prevAnchors = anchorNames(doc); - const anchor = findNewAnchor(prefix, prevAnchors); - prevAnchors.add(anchor); - return anchor; - }, - /** - * With circular references, the source node is only resolved after all - * of its child nodes are. This is why anchors are set only after all of - * the nodes have been created. - */ - setAnchors: () => { - for (const source of aliasObjects) { - const ref = sourceObjects.get(source); - if (typeof ref === 'object' && - ref.anchor && - (identity.isScalar(ref.node) || identity.isCollection(ref.node))) { - ref.node.anchor = ref.anchor; - } - else { - const error = new Error('Failed to resolve repeated object (this should not happen)'); - error.source = source; - throw error; - } - } - }, - sourceObjects - }; -} - -exports.anchorIsValid = anchorIsValid; -exports.anchorNames = anchorNames; -exports.createNodeAnchors = createNodeAnchors; -exports.findNewAnchor = findNewAnchor; diff --git a/tools/yaml/dist/doc/applyReviver.d.ts b/tools/yaml/dist/doc/applyReviver.d.ts deleted file mode 100644 index e125b08..0000000 --- a/tools/yaml/dist/doc/applyReviver.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -export type Reviver = (key: unknown, value: unknown) => unknown; -/** - * Applies the JSON.parse reviver algorithm as defined in the ECMA-262 spec, - * in section 24.5.1.1 "Runtime Semantics: InternalizeJSONProperty" of the - * 2021 edition: https://tc39.es/ecma262/#sec-json.parse - * - * Includes extensions for handling Map and Set objects. - */ -export declare function applyReviver(reviver: Reviver, obj: unknown, key: unknown, val: any): unknown; diff --git a/tools/yaml/dist/doc/applyReviver.js b/tools/yaml/dist/doc/applyReviver.js deleted file mode 100644 index 8734579..0000000 --- a/tools/yaml/dist/doc/applyReviver.js +++ /dev/null @@ -1,56 +0,0 @@ -'use strict'; - -/** - * Applies the JSON.parse reviver algorithm as defined in the ECMA-262 spec, - * in section 24.5.1.1 "Runtime Semantics: InternalizeJSONProperty" of the - * 2021 edition: https://tc39.es/ecma262/#sec-json.parse - * - * Includes extensions for handling Map and Set objects. - */ -function applyReviver(reviver, obj, key, val) { - if (val && typeof val === 'object') { - if (Array.isArray(val)) { - for (let i = 0, len = val.length; i < len; ++i) { - const v0 = val[i]; - const v1 = applyReviver(reviver, val, String(i), v0); - if (v1 === undefined) - delete val[i]; - else if (v1 !== v0) - val[i] = v1; - } - } - else if (val instanceof Map) { - for (const k of Array.from(val.keys())) { - const v0 = val.get(k); - const v1 = applyReviver(reviver, val, k, v0); - if (v1 === undefined) - val.delete(k); - else if (v1 !== v0) - val.set(k, v1); - } - } - else if (val instanceof Set) { - for (const v0 of Array.from(val)) { - const v1 = applyReviver(reviver, val, v0, v0); - if (v1 === undefined) - val.delete(v0); - else if (v1 !== v0) { - val.delete(v0); - val.add(v1); - } - } - } - else { - for (const [k, v0] of Object.entries(val)) { - const v1 = applyReviver(reviver, val, k, v0); - if (v1 === undefined) - delete val[k]; - else if (v1 !== v0) - val[k] = v1; - } - } - } - return reviver.call(obj, key, val); -} - -exports.applyReviver = applyReviver; diff --git a/tools/yaml/dist/doc/createNode.d.ts b/tools/yaml/dist/doc/createNode.d.ts deleted file mode 100644 index 1619981..0000000 --- a/tools/yaml/dist/doc/createNode.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import type { Node } from '../nodes/Node.js'; -import type { Schema } from '../schema/Schema.js'; -import type { CollectionTag, ScalarTag } from '../schema/types.js'; -import type { Replacer } from './Document.js'; -export interface CreateNodeContext { - aliasDuplicateObjects: boolean; - keepUndefined: boolean; - onAnchor: (source: unknown) => string; - onTagObj?: (tagObj: ScalarTag | CollectionTag) => void; - sourceObjects: Map; - replacer?: Replacer; - schema: Schema; -} -export declare function createNode(value: unknown, tagName: string | undefined, ctx: CreateNodeContext): Node; diff --git a/tools/yaml/dist/doc/createNode.js b/tools/yaml/dist/doc/createNode.js deleted file mode 100644 index 64dd31a..0000000 --- a/tools/yaml/dist/doc/createNode.js +++ /dev/null @@ -1,91 +0,0 @@ -'use strict'; - -var Alias = require('../nodes/Alias.js'); -var identity = require('../nodes/identity.js'); -var Scalar = require('../nodes/Scalar.js'); - -const defaultTagPrefix = 'tag:yaml.org,2002:'; -function findTagObject(value, tagName, tags) { - if (tagName) { - const match = tags.filter(t => t.tag === tagName); - const tagObj = match.find(t => !t.format) ?? match[0]; - if (!tagObj) - throw new Error(`Tag ${tagName} not found`); - return tagObj; - } - return tags.find(t => t.identify?.(value) && !t.format); -} -function createNode(value, tagName, ctx) { - if (identity.isDocument(value)) - value = value.contents; - if (identity.isNode(value)) - return value; - if (identity.isPair(value)) { - const map = ctx.schema[identity.MAP].createNode?.(ctx.schema, null, ctx); - map.items.push(value); - return map; - } - if (value instanceof String || - value instanceof Number || - value instanceof Boolean || - (typeof BigInt !== 'undefined' && value instanceof BigInt) // not supported everywhere - ) { - // https://tc39.es/ecma262/#sec-serializejsonproperty - value = value.valueOf(); - } - const { aliasDuplicateObjects, onAnchor, onTagObj, schema, sourceObjects } = ctx; - // Detect duplicate references to the same object & use Alias nodes for all - // after first. The `ref` wrapper allows for circular references to resolve. - let ref = undefined; - if (aliasDuplicateObjects && value && typeof value === 'object') { - ref = sourceObjects.get(value); - if (ref) { - if (!ref.anchor) - ref.anchor = onAnchor(value); - return new Alias.Alias(ref.anchor); - } - else { - ref = { anchor: null, node: null }; - sourceObjects.set(value, ref); - } - } - if (tagName?.startsWith('!!')) - tagName = defaultTagPrefix + tagName.slice(2); - let tagObj = findTagObject(value, tagName, schema.tags); - if (!tagObj) { - if (value && typeof value.toJSON === 'function') { - // eslint-disable-next-line @typescript-eslint/no-unsafe-call - value = value.toJSON(); - } - if (!value || typeof value !== 'object') { - const node = new Scalar.Scalar(value); - if (ref) - ref.node = node; - return node; - } - tagObj = - value instanceof Map - ? schema[identity.MAP] - : Symbol.iterator in Object(value) - ? schema[identity.SEQ] - : schema[identity.MAP]; - } - if (onTagObj) { - onTagObj(tagObj); - delete ctx.onTagObj; - } - const node = tagObj?.createNode - ? tagObj.createNode(ctx.schema, value, ctx) - : typeof tagObj?.nodeClass?.from === 'function' - ? tagObj.nodeClass.from(ctx.schema, value, ctx) - : new Scalar.Scalar(value); - if (tagName) - node.tag = tagName; - else if (!tagObj.default) - node.tag = tagObj.tag; - if (ref) - ref.node = node; - return node; -} - -exports.createNode = createNode; diff --git a/tools/yaml/dist/doc/directives.d.ts b/tools/yaml/dist/doc/directives.d.ts deleted file mode 100644 index ff8a2cb..0000000 --- a/tools/yaml/dist/doc/directives.d.ts +++ /dev/null @@ -1,49 +0,0 @@ -import type { Document } from './Document.js'; -export declare class Directives { - static defaultYaml: Directives['yaml']; - static defaultTags: Directives['tags']; - yaml: { - version: '1.1' | '1.2' | 'next'; - explicit?: boolean; - }; - tags: Record; - /** - * The directives-end/doc-start marker `---`. If `null`, a marker may still be - * included in the document's stringified representation. - */ - docStart: true | null; - /** The doc-end marker `...`. */ - docEnd: boolean; - /** - * Used when parsing YAML 1.1, where: - * > If the document specifies no directives, it is parsed using the same - * > settings as the previous document. If the document does specify any - * > directives, all directives of previous documents, if any, are ignored. - */ - private atNextDocument?; - constructor(yaml?: Directives['yaml'], tags?: Directives['tags']); - clone(): Directives; - /** - * During parsing, get a Directives instance for the current document and - * update the stream state according to the current version's spec. - */ - atDocument(): Directives; - /** - * @param onError - May be called even if the action was successful - * @returns `true` on success - */ - add(line: string, onError: (offset: number, message: string, warning?: boolean) => void): boolean; - /** - * Resolves a tag, matching handles to those defined in %TAG directives. - * - * @returns Resolved tag, which may also be the non-specific tag `'!'` or a - * `'!local'` tag, or `null` if unresolvable. - */ - tagName(source: string, onError: (message: string) => void): string | null; - /** - * Given a fully resolved tag, returns its printable string form, - * taking into account current tag prefixes and defaults. - */ - tagString(tag: string): string; - toString(doc?: Document): string; -} diff --git a/tools/yaml/dist/doc/directives.js b/tools/yaml/dist/doc/directives.js deleted file mode 100644 index 854c7e5..0000000 --- a/tools/yaml/dist/doc/directives.js +++ /dev/null @@ -1,171 +0,0 @@ -'use strict'; - -var identity = require('../nodes/identity.js'); -var visit = require('../visit.js'); - -const escapeChars = { - '!': '%21', - ',': '%2C', - '[': '%5B', - ']': '%5D', - '{': '%7B', - '}': '%7D' -}; -const escapeTagName = (tn) => tn.replace(/[!,[\]{}]/g, ch => escapeChars[ch]); -class Directives { - constructor(yaml, tags) { - /** - * The directives-end/doc-start marker `---`. If `null`, a marker may still be - * included in the document's stringified representation. - */ - this.docStart = null; - /** The doc-end marker `...`. */ - this.docEnd = false; - this.yaml = Object.assign({}, Directives.defaultYaml, yaml); - this.tags = Object.assign({}, Directives.defaultTags, tags); - } - clone() { - const copy = new Directives(this.yaml, this.tags); - copy.docStart = this.docStart; - return copy; - } - /** - * During parsing, get a Directives instance for the current document and - * update the stream state according to the current version's spec. - */ - atDocument() { - const res = new Directives(this.yaml, this.tags); - switch (this.yaml.version) { - case '1.1': - this.atNextDocument = true; - break; - case '1.2': - this.atNextDocument = false; - this.yaml = { - explicit: Directives.defaultYaml.explicit, - version: '1.2' - }; - this.tags = Object.assign({}, Directives.defaultTags); - break; - } - return res; - } - /** - * @param onError - May be called even if the action was successful - * @returns `true` on success - */ - add(line, onError) { - if (this.atNextDocument) { - this.yaml = { explicit: Directives.defaultYaml.explicit, version: '1.1' }; - this.tags = Object.assign({}, Directives.defaultTags); - this.atNextDocument = false; - } - const parts = line.trim().split(/[ \t]+/); - const name = parts.shift(); - switch (name) { - case '%TAG': { - if (parts.length !== 2) { - onError(0, '%TAG directive should contain exactly two parts'); - if (parts.length < 2) - return false; - } - const [handle, prefix] = parts; - this.tags[handle] = prefix; - return true; - } - case '%YAML': { - this.yaml.explicit = true; - if (parts.length !== 1) { - onError(0, '%YAML directive should contain exactly one part'); - return false; - } - const [version] = parts; - if (version === '1.1' || version === '1.2') { - this.yaml.version = version; - return true; - } - else { - const isValid = /^\d+\.\d+$/.test(version); - onError(6, `Unsupported YAML version ${version}`, isValid); - return false; - } - } - default: - onError(0, `Unknown directive ${name}`, true); - return false; - } - } - /** - * Resolves a tag, matching handles to those defined in %TAG directives. - * - * @returns Resolved tag, which may also be the non-specific tag `'!'` or a - * `'!local'` tag, or `null` if unresolvable. - */ - tagName(source, onError) { - if (source === '!') - return '!'; // non-specific tag - if (source[0] !== '!') { - onError(`Not a valid tag: ${source}`); - return null; - } - if (source[1] === '<') { - const verbatim = source.slice(2, -1); - if (verbatim === '!' || verbatim === '!!') { - onError(`Verbatim tags aren't resolved, so ${source} is invalid.`); - return null; - } - if (source[source.length - 1] !== '>') - onError('Verbatim tags must end with a >'); - return verbatim; - } - const [, handle, suffix] = source.match(/^(.*!)([^!]*)$/); - if (!suffix) - onError(`The ${source} tag has no suffix`); - const prefix = this.tags[handle]; - if (prefix) - return prefix + decodeURIComponent(suffix); - if (handle === '!') - return source; // local tag - onError(`Could not resolve tag: ${source}`); - return null; - } - /** - * Given a fully resolved tag, returns its printable string form, - * taking into account current tag prefixes and defaults. - */ - tagString(tag) { - for (const [handle, prefix] of Object.entries(this.tags)) { - if (tag.startsWith(prefix)) - return handle + escapeTagName(tag.substring(prefix.length)); - } - return tag[0] === '!' ? tag : `!<${tag}>`; - } - toString(doc) { - const lines = this.yaml.explicit - ? [`%YAML ${this.yaml.version || '1.2'}`] - : []; - const tagEntries = Object.entries(this.tags); - let tagNames; - if (doc && tagEntries.length > 0 && identity.isNode(doc.contents)) { - const tags = {}; - visit.visit(doc.contents, (_key, node) => { - if (identity.isNode(node) && node.tag) - tags[node.tag] = true; - }); - tagNames = Object.keys(tags); - } - else - tagNames = []; - for (const [handle, prefix] of tagEntries) { - if (handle === '!!' && prefix === 'tag:yaml.org,2002:') - continue; - if (!doc || tagNames.some(tn => tn.startsWith(prefix))) - lines.push(`%TAG ${handle} ${prefix}`); - } - return lines.join('\n'); - } -} -Directives.defaultYaml = { explicit: false, version: '1.2' }; -Directives.defaultTags = { '!!': 'tag:yaml.org,2002:' }; - -exports.Directives = Directives; diff --git a/tools/yaml/dist/errors.d.ts b/tools/yaml/dist/errors.d.ts deleted file mode 100644 index 1b7b612..0000000 --- a/tools/yaml/dist/errors.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import type { LineCounter } from './parse/line-counter'; -export type ErrorCode = 'ALIAS_PROPS' | 'BAD_ALIAS' | 'BAD_DIRECTIVE' | 'BAD_DQ_ESCAPE' | 'BAD_INDENT' | 'BAD_PROP_ORDER' | 'BAD_SCALAR_START' | 'BLOCK_AS_IMPLICIT_KEY' | 'BLOCK_IN_FLOW' | 'DUPLICATE_KEY' | 'IMPOSSIBLE' | 'KEY_OVER_1024_CHARS' | 'MISSING_CHAR' | 'MULTILINE_IMPLICIT_KEY' | 'MULTIPLE_ANCHORS' | 'MULTIPLE_DOCS' | 'MULTIPLE_TAGS' | 'TAB_AS_INDENT' | 'TAG_RESOLVE_FAILED' | 'UNEXPECTED_TOKEN' | 'BAD_COLLECTION_TYPE'; -export type LinePos = { - line: number; - col: number; -}; -export declare class YAMLError extends Error { - name: 'YAMLParseError' | 'YAMLWarning'; - code: ErrorCode; - message: string; - pos: [number, number]; - linePos?: [LinePos] | [LinePos, LinePos]; - constructor(name: YAMLError['name'], pos: [number, number], code: ErrorCode, message: string); -} -export declare class YAMLParseError extends YAMLError { - constructor(pos: [number, number], code: ErrorCode, message: string); -} -export declare class YAMLWarning extends YAMLError { - constructor(pos: [number, number], code: ErrorCode, message: string); -} -export declare const prettifyError: (src: string, lc: LineCounter) => (error: YAMLError) => void; diff --git a/tools/yaml/dist/errors.js b/tools/yaml/dist/errors.js deleted file mode 100644 index 9d04c60..0000000 --- a/tools/yaml/dist/errors.js +++ /dev/null @@ -1,62 +0,0 @@ -'use strict'; - -class YAMLError extends Error { - constructor(name, pos, code, message) { - super(); - this.name = name; - this.code = code; - this.message = message; - this.pos = pos; - } -} -class YAMLParseError extends YAMLError { - constructor(pos, code, message) { - super('YAMLParseError', pos, code, message); - } -} -class YAMLWarning extends YAMLError { - constructor(pos, code, message) { - super('YAMLWarning', pos, code, message); - } -} -const prettifyError = (src, lc) => (error) => { - if (error.pos[0] === -1) - return; - error.linePos = error.pos.map(pos => lc.linePos(pos)); - const { line, col } = error.linePos[0]; - error.message += ` at line ${line}, column ${col}`; - let ci = col - 1; - let lineStr = src - .substring(lc.lineStarts[line - 1], lc.lineStarts[line]) - .replace(/[\n\r]+$/, ''); - // Trim to max 80 chars, keeping col position near the middle - if (ci >= 60 && lineStr.length > 80) { - const trimStart = Math.min(ci - 39, lineStr.length - 79); - lineStr = '…' + lineStr.substring(trimStart); - ci -= trimStart - 1; - } - if (lineStr.length > 80) - lineStr = lineStr.substring(0, 79) + '…'; - // Include previous line in context if pointing at line start - if (line > 1 && /^ *$/.test(lineStr.substring(0, ci))) { - // Regexp won't match if start is trimmed - let prev = src.substring(lc.lineStarts[line - 2], lc.lineStarts[line - 1]); - if (prev.length > 80) - prev = prev.substring(0, 79) + '…\n'; - lineStr = prev + lineStr; - } - if (/[^ ]/.test(lineStr)) { - let count = 1; - const end = error.linePos[1]; - if (end && end.line === line && end.col > col) { - count = Math.max(1, Math.min(end.col - col, 80 - ci)); - } - const pointer = ' '.repeat(ci) + '^'.repeat(count); - error.message += `:\n\n${lineStr}\n${pointer}\n`; - } -}; - -exports.YAMLError = YAMLError; -exports.YAMLParseError = YAMLParseError; -exports.YAMLWarning = YAMLWarning; -exports.prettifyError = prettifyError; diff --git a/tools/yaml/dist/index.d.ts b/tools/yaml/dist/index.d.ts deleted file mode 100644 index 66e784e..0000000 --- a/tools/yaml/dist/index.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -export { Composer } from './compose/composer.js'; -export { Document } from './doc/Document.js'; -export { Schema } from './schema/Schema.js'; -export { ErrorCode, YAMLError, YAMLParseError, YAMLWarning } from './errors.js'; -export { Alias } from './nodes/Alias.js'; -export { isAlias, isCollection, isDocument, isMap, isNode, isPair, isScalar, isSeq } from './nodes/identity.js'; -export { Node, ParsedNode, Range } from './nodes/Node.js'; -export { Pair } from './nodes/Pair.js'; -export { Scalar } from './nodes/Scalar.js'; -export { YAMLMap } from './nodes/YAMLMap.js'; -export { YAMLSeq } from './nodes/YAMLSeq.js'; -export type { CreateNodeOptions, DocumentOptions, ParseOptions, SchemaOptions, ToJSOptions, ToStringOptions } from './options.js'; -export * as CST from './parse/cst.js'; -export { Lexer } from './parse/lexer.js'; -export { LineCounter } from './parse/line-counter.js'; -export { Parser } from './parse/parser.js'; -export { EmptyStream, parse, parseAllDocuments, parseDocument, stringify } from './public-api.js'; -export type { TagId, Tags } from './schema/tags'; -export type { CollectionTag, ScalarTag } from './schema/types'; -export type { YAMLOMap } from './schema/yaml-1.1/omap'; -export type { YAMLSet } from './schema/yaml-1.1/set'; -export { asyncVisitor, asyncVisitorFn, visit, visitAsync, visitor, visitorFn } from './visit.js'; diff --git a/tools/yaml/dist/index.js b/tools/yaml/dist/index.js deleted file mode 100644 index 18c0cb6..0000000 --- a/tools/yaml/dist/index.js +++ /dev/null @@ -1,50 +0,0 @@ -'use strict'; - -var composer = require('./compose/composer.js'); -var Document = require('./doc/Document.js'); -var Schema = require('./schema/Schema.js'); -var errors = require('./errors.js'); -var Alias = require('./nodes/Alias.js'); -var identity = require('./nodes/identity.js'); -var Pair = require('./nodes/Pair.js'); -var Scalar = require('./nodes/Scalar.js'); -var YAMLMap = require('./nodes/YAMLMap.js'); -var YAMLSeq = require('./nodes/YAMLSeq.js'); -var cst = require('./parse/cst.js'); -var lexer = require('./parse/lexer.js'); -var lineCounter = require('./parse/line-counter.js'); -var parser = require('./parse/parser.js'); -var publicApi = require('./public-api.js'); -var visit = require('./visit.js'); - - - -exports.Composer = composer.Composer; -exports.Document = Document.Document; -exports.Schema = Schema.Schema; -exports.YAMLError = errors.YAMLError; -exports.YAMLParseError = errors.YAMLParseError; -exports.YAMLWarning = errors.YAMLWarning; -exports.Alias = Alias.Alias; -exports.isAlias = identity.isAlias; -exports.isCollection = identity.isCollection; -exports.isDocument = identity.isDocument; -exports.isMap = identity.isMap; -exports.isNode = identity.isNode; -exports.isPair = identity.isPair; -exports.isScalar = identity.isScalar; -exports.isSeq = identity.isSeq; -exports.Pair = Pair.Pair; -exports.Scalar = Scalar.Scalar; -exports.YAMLMap = YAMLMap.YAMLMap; -exports.YAMLSeq = YAMLSeq.YAMLSeq; -exports.CST = cst; -exports.Lexer = lexer.Lexer; -exports.LineCounter = lineCounter.LineCounter; -exports.Parser = parser.Parser; -exports.parse = publicApi.parse; -exports.parseAllDocuments = publicApi.parseAllDocuments; -exports.parseDocument = publicApi.parseDocument; -exports.stringify = publicApi.stringify; -exports.visit = visit.visit; -exports.visitAsync = visit.visitAsync; diff --git a/tools/yaml/dist/log.d.ts b/tools/yaml/dist/log.d.ts deleted file mode 100644 index 5e21612..0000000 --- a/tools/yaml/dist/log.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export type LogLevelId = 'silent' | 'error' | 'warn' | 'debug'; -export declare function debug(logLevel: LogLevelId, ...messages: any[]): void; -export declare function warn(logLevel: LogLevelId, warning: string | Error): void; diff --git a/tools/yaml/dist/log.js b/tools/yaml/dist/log.js deleted file mode 100644 index afb6895..0000000 --- a/tools/yaml/dist/log.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -function debug(logLevel, ...messages) { - if (logLevel === 'debug') - console.log(...messages); -} -function warn(logLevel, warning) { - if (logLevel === 'debug' || logLevel === 'warn') { - // https://github.com/typescript-eslint/typescript-eslint/issues/7478 - // eslint-disable-next-line @typescript-eslint/prefer-optional-chain - if (typeof process !== 'undefined' && process.emitWarning) - process.emitWarning(warning); - else - console.warn(warning); - } -} - -exports.debug = debug; -exports.warn = warn; diff --git a/tools/yaml/dist/nodes/Alias.d.ts b/tools/yaml/dist/nodes/Alias.d.ts deleted file mode 100644 index b55ebae..0000000 --- a/tools/yaml/dist/nodes/Alias.d.ts +++ /dev/null @@ -1,28 +0,0 @@ -import type { Document } from '../doc/Document.js'; -import type { FlowScalar } from '../parse/cst.js'; -import type { StringifyContext } from '../stringify/stringify.js'; -import { NodeBase, Range } from './Node.js'; -import type { Scalar } from './Scalar'; -import { ToJSContext } from './toJS.js'; -import type { YAMLMap } from './YAMLMap.js'; -import type { YAMLSeq } from './YAMLSeq.js'; -export declare namespace Alias { - interface Parsed extends Alias { - range: Range; - srcToken?: FlowScalar & { - type: 'alias'; - }; - } -} -export declare class Alias extends NodeBase { - source: string; - anchor?: never; - constructor(source: string); - /** - * Resolve the value of this alias within `doc`, finding the last - * instance of the `source` anchor before this node. - */ - resolve(doc: Document): Scalar | YAMLMap | YAMLSeq | undefined; - toJSON(_arg?: unknown, ctx?: ToJSContext): {} | null; - toString(ctx?: StringifyContext, _onComment?: () => void, _onChompKeep?: () => void): string; -} diff --git a/tools/yaml/dist/nodes/Alias.js b/tools/yaml/dist/nodes/Alias.js deleted file mode 100644 index 46b37d9..0000000 --- a/tools/yaml/dist/nodes/Alias.js +++ /dev/null @@ -1,103 +0,0 @@ -'use strict'; - -var anchors = require('../doc/anchors.js'); -var visit = require('../visit.js'); -var identity = require('./identity.js'); -var Node = require('./Node.js'); -var toJS = require('./toJS.js'); - -class Alias extends Node.NodeBase { - constructor(source) { - super(identity.ALIAS); - this.source = source; - Object.defineProperty(this, 'tag', { - set() { - throw new Error('Alias nodes cannot have tags'); - } - }); - } - /** - * Resolve the value of this alias within `doc`, finding the last - * instance of the `source` anchor before this node. - */ - resolve(doc) { - let found = undefined; - visit.visit(doc, { - Node: (_key, node) => { - if (node === this) - return visit.visit.BREAK; - if (node.anchor === this.source) - found = node; - } - }); - return found; - } - toJSON(_arg, ctx) { - if (!ctx) - return { source: this.source }; - const { anchors, doc, maxAliasCount } = ctx; - const source = this.resolve(doc); - if (!source) { - const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`; - throw new ReferenceError(msg); - } - let data = anchors.get(source); - if (!data) { - // Resolve anchors for Node.prototype.toJS() - toJS.toJS(source, null, ctx); - data = anchors.get(source); - } - /* istanbul ignore if */ - if (!data || data.res === undefined) { - const msg = 'This should not happen: Alias anchor was not resolved?'; - throw new ReferenceError(msg); - } - if (maxAliasCount >= 0) { - data.count += 1; - if (data.aliasCount === 0) - data.aliasCount = getAliasCount(doc, source, anchors); - if (data.count * data.aliasCount > maxAliasCount) { - const msg = 'Excessive alias count indicates a resource exhaustion attack'; - throw new ReferenceError(msg); - } - } - return data.res; - } - toString(ctx, _onComment, _onChompKeep) { - const src = `*${this.source}`; - if (ctx) { - anchors.anchorIsValid(this.source); - if (ctx.options.verifyAliasOrder && !ctx.anchors.has(this.source)) { - const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`; - throw new Error(msg); - } - if (ctx.implicitKey) - return `${src} `; - } - return src; - } -} -function getAliasCount(doc, node, anchors) { - if (identity.isAlias(node)) { - const source = node.resolve(doc); - const anchor = anchors && source && anchors.get(source); - return anchor ? anchor.count * anchor.aliasCount : 0; - } - else if (identity.isCollection(node)) { - let count = 0; - for (const item of node.items) { - const c = getAliasCount(doc, item, anchors); - if (c > count) - count = c; - } - return count; - } - else if (identity.isPair(node)) { - const kc = getAliasCount(doc, node.key, anchors); - const vc = getAliasCount(doc, node.value, anchors); - return Math.max(kc, vc); - } - return 1; -} - -exports.Alias = Alias; diff --git a/tools/yaml/dist/nodes/Collection.d.ts b/tools/yaml/dist/nodes/Collection.d.ts deleted file mode 100644 index 981ca11..0000000 --- a/tools/yaml/dist/nodes/Collection.d.ts +++ /dev/null @@ -1,74 +0,0 @@ -import type { Schema } from '../schema/Schema.js'; -import { NODE_TYPE } from './identity.js'; -import { NodeBase } from './Node.js'; -export declare function collectionFromPath(schema: Schema, path: unknown[], value: unknown): import("./Node.js").Node; -export declare const isEmptyPath: (path: Iterable | null | undefined) => path is null | undefined; -export declare abstract class Collection extends NodeBase { - static maxFlowStringSingleLineLength: number; - schema: Schema | undefined; - [NODE_TYPE]: symbol; - items: unknown[]; - /** An optional anchor on this node. Used by alias nodes. */ - anchor?: string; - /** - * If true, stringify this and all child nodes using flow rather than - * block styles. - */ - flow?: boolean; - constructor(type: symbol, schema?: Schema); - /** - * Create a copy of this collection. - * - * @param schema - If defined, overwrites the original's schema - */ - clone(schema?: Schema): Collection; - /** Adds a value to the collection. */ - abstract add(value: unknown): void; - /** - * Removes a value from the collection. - * @returns `true` if the item was found and removed. - */ - abstract delete(key: unknown): boolean; - /** - * Returns item at `key`, or `undefined` if not found. By default unwraps - * scalar values from their surrounding node; to disable set `keepScalar` to - * `true` (collections are always returned intact). - */ - abstract get(key: unknown, keepScalar?: boolean): unknown; - /** - * Checks if the collection includes a value with the key `key`. - */ - abstract has(key: unknown): boolean; - /** - * Sets a value in this collection. For `!!set`, `value` needs to be a - * boolean to add/remove the item from the set. - */ - abstract set(key: unknown, value: unknown): void; - /** - * Adds a value to the collection. For `!!map` and `!!omap` the value must - * be a Pair instance or a `{ key, value }` object, which may not have a key - * that already exists in the map. - */ - addIn(path: Iterable, value: unknown): void; - /** - * Removes a value from the collection. - * @returns `true` if the item was found and removed. - */ - deleteIn(path: Iterable): boolean; - /** - * Returns item at `key`, or `undefined` if not found. By default unwraps - * scalar values from their surrounding node; to disable set `keepScalar` to - * `true` (collections are always returned intact). - */ - getIn(path: Iterable, keepScalar?: boolean): unknown; - hasAllNullValues(allowScalar?: boolean): boolean; - /** - * Checks if the collection includes a value with the key `key`. - */ - hasIn(path: Iterable): boolean; - /** - * Sets a value in this collection. For `!!set`, `value` needs to be a - * boolean to add/remove the item from the set. - */ - setIn(path: Iterable, value: unknown): void; -} diff --git a/tools/yaml/dist/nodes/Collection.js b/tools/yaml/dist/nodes/Collection.js deleted file mode 100644 index 1c03294..0000000 --- a/tools/yaml/dist/nodes/Collection.js +++ /dev/null @@ -1,152 +0,0 @@ -'use strict'; - -var createNode = require('../doc/createNode.js'); -var identity = require('./identity.js'); -var Node = require('./Node.js'); - -function collectionFromPath(schema, path, value) { - let v = value; - for (let i = path.length - 1; i >= 0; --i) { - const k = path[i]; - if (typeof k === 'number' && Number.isInteger(k) && k >= 0) { - const a = []; - a[k] = v; - v = a; - } - else { - v = new Map([[k, v]]); - } - } - return createNode.createNode(v, undefined, { - aliasDuplicateObjects: false, - keepUndefined: false, - onAnchor: () => { - throw new Error('This should not happen, please report a bug.'); - }, - schema, - sourceObjects: new Map() - }); -} -// Type guard is intentionally a little wrong so as to be more useful, -// as it does not cover untypable empty non-string iterables (e.g. []). -const isEmptyPath = (path) => path == null || - (typeof path === 'object' && !!path[Symbol.iterator]().next().done); -class Collection extends Node.NodeBase { - constructor(type, schema) { - super(type); - Object.defineProperty(this, 'schema', { - value: schema, - configurable: true, - enumerable: false, - writable: true - }); - } - /** - * Create a copy of this collection. - * - * @param schema - If defined, overwrites the original's schema - */ - clone(schema) { - const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this)); - if (schema) - copy.schema = schema; - copy.items = copy.items.map(it => identity.isNode(it) || identity.isPair(it) ? it.clone(schema) : it); - if (this.range) - copy.range = this.range.slice(); - return copy; - } - /** - * Adds a value to the collection. For `!!map` and `!!omap` the value must - * be a Pair instance or a `{ key, value }` object, which may not have a key - * that already exists in the map. - */ - addIn(path, value) { - if (isEmptyPath(path)) - this.add(value); - else { - const [key, ...rest] = path; - const node = this.get(key, true); - if (identity.isCollection(node)) - node.addIn(rest, value); - else if (node === undefined && this.schema) - this.set(key, collectionFromPath(this.schema, rest, value)); - else - throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`); - } - } - /** - * Removes a value from the collection. - * @returns `true` if the item was found and removed. - */ - deleteIn(path) { - const [key, ...rest] = path; - if (rest.length === 0) - return this.delete(key); - const node = this.get(key, true); - if (identity.isCollection(node)) - return node.deleteIn(rest); - else - throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`); - } - /** - * Returns item at `key`, or `undefined` if not found. By default unwraps - * scalar values from their surrounding node; to disable set `keepScalar` to - * `true` (collections are always returned intact). - */ - getIn(path, keepScalar) { - const [key, ...rest] = path; - const node = this.get(key, true); - if (rest.length === 0) - return !keepScalar && identity.isScalar(node) ? node.value : node; - else - return identity.isCollection(node) ? node.getIn(rest, keepScalar) : undefined; - } - hasAllNullValues(allowScalar) { - return this.items.every(node => { - if (!identity.isPair(node)) - return false; - const n = node.value; - return (n == null || - (allowScalar && - identity.isScalar(n) && - n.value == null && - !n.commentBefore && - !n.comment && - !n.tag)); - }); - } - /** - * Checks if the collection includes a value with the key `key`. - */ - hasIn(path) { - const [key, ...rest] = path; - if (rest.length === 0) - return this.has(key); - const node = this.get(key, true); - return identity.isCollection(node) ? node.hasIn(rest) : false; - } - /** - * Sets a value in this collection. For `!!set`, `value` needs to be a - * boolean to add/remove the item from the set. - */ - setIn(path, value) { - const [key, ...rest] = path; - if (rest.length === 0) { - this.set(key, value); - } - else { - const node = this.get(key, true); - if (identity.isCollection(node)) - node.setIn(rest, value); - else if (node === undefined && this.schema) - this.set(key, collectionFromPath(this.schema, rest, value)); - else - throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`); - } - } -} -Collection.maxFlowStringSingleLineLength = 60; - -exports.Collection = Collection; -exports.collectionFromPath = collectionFromPath; -exports.isEmptyPath = isEmptyPath; diff --git a/tools/yaml/dist/nodes/Node.d.ts b/tools/yaml/dist/nodes/Node.d.ts deleted file mode 100644 index fe91ba6..0000000 --- a/tools/yaml/dist/nodes/Node.d.ts +++ /dev/null @@ -1,46 +0,0 @@ -import type { Document } from '../doc/Document.js'; -import type { ToJSOptions } from '../options.js'; -import { Token } from '../parse/cst.js'; -import type { StringifyContext } from '../stringify/stringify.js'; -import type { Alias } from './Alias.js'; -import { NODE_TYPE } from './identity.js'; -import type { Scalar } from './Scalar.js'; -import type { YAMLMap } from './YAMLMap.js'; -import type { YAMLSeq } from './YAMLSeq.js'; -export type Node = Alias | Scalar | YAMLMap | YAMLSeq; -/** Utility type mapper */ -export type NodeType = T extends string | number | bigint | boolean | null | undefined ? Scalar : T extends Date ? Scalar : T extends Array ? YAMLSeq> : T extends { - [key: string]: any; -} ? YAMLMap, NodeType> : T extends { - [key: number]: any; -} ? YAMLMap, NodeType> : Node; -export type ParsedNode = Alias.Parsed | Scalar.Parsed | YAMLMap.Parsed | YAMLSeq.Parsed; -export type Range = [number, number, number]; -export declare abstract class NodeBase { - readonly [NODE_TYPE]: symbol; - /** A comment on or immediately after this */ - comment?: string | null; - /** A comment before this */ - commentBefore?: string | null; - /** - * The `[start, value-end, node-end]` character offsets for the part of the - * source parsed into this node (undefined if not parsed). The `value-end` - * and `node-end` positions are themselves not included in their respective - * ranges. - */ - range?: Range | null; - /** A blank line before this node and its commentBefore */ - spaceBefore?: boolean; - /** The CST token that was composed into this node. */ - srcToken?: Token; - /** A fully qualified tag, if required */ - tag?: string; - /** A plain JS representation of this node */ - abstract toJSON(): any; - abstract toString(ctx?: StringifyContext, onComment?: () => void, onChompKeep?: () => void): string; - constructor(type: symbol); - /** Create a copy of this node. */ - clone(): NodeBase; - /** A plain JavaScript representation of this node. */ - toJS(doc: Document, { mapAsMap, maxAliasCount, onAnchor, reviver }?: ToJSOptions): any; -} diff --git a/tools/yaml/dist/nodes/Node.js b/tools/yaml/dist/nodes/Node.js deleted file mode 100644 index d384e1c..0000000 --- a/tools/yaml/dist/nodes/Node.js +++ /dev/null @@ -1,40 +0,0 @@ -'use strict'; - -var applyReviver = require('../doc/applyReviver.js'); -var identity = require('./identity.js'); -var toJS = require('./toJS.js'); - -class NodeBase { - constructor(type) { - Object.defineProperty(this, identity.NODE_TYPE, { value: type }); - } - /** Create a copy of this node. */ - clone() { - const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this)); - if (this.range) - copy.range = this.range.slice(); - return copy; - } - /** A plain JavaScript representation of this node. */ - toJS(doc, { mapAsMap, maxAliasCount, onAnchor, reviver } = {}) { - if (!identity.isDocument(doc)) - throw new TypeError('A document argument is required'); - const ctx = { - anchors: new Map(), - doc, - keep: true, - mapAsMap: mapAsMap === true, - mapKeyWarned: false, - maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100 - }; - const res = toJS.toJS(this, '', ctx); - if (typeof onAnchor === 'function') - for (const { count, res } of ctx.anchors.values()) - onAnchor(res, count); - return typeof reviver === 'function' - ? applyReviver.applyReviver(reviver, { '': res }, '', res) - : res; - } -} - -exports.NodeBase = NodeBase; diff --git a/tools/yaml/dist/nodes/Pair.d.ts b/tools/yaml/dist/nodes/Pair.d.ts deleted file mode 100644 index e87fe66..0000000 --- a/tools/yaml/dist/nodes/Pair.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { CreateNodeContext } from '../doc/createNode.js'; -import type { CollectionItem } from '../parse/cst.js'; -import type { Schema } from '../schema/Schema.js'; -import type { StringifyContext } from '../stringify/stringify.js'; -import { addPairToJSMap } from './addPairToJSMap.js'; -import { NODE_TYPE } from './identity.js'; -import type { ToJSContext } from './toJS.js'; -export declare function createPair(key: unknown, value: unknown, ctx: CreateNodeContext): Pair | import("./Scalar.js").Scalar | import("./Alias.js").Alias | import("./YAMLSeq.js").YAMLSeq>; -export declare class Pair { - readonly [NODE_TYPE]: symbol; - /** Always Node or null when parsed, but can be set to anything. */ - key: K; - /** Always Node or null when parsed, but can be set to anything. */ - value: V | null; - /** The CST token that was composed into this pair. */ - srcToken?: CollectionItem; - constructor(key: K, value?: V | null); - clone(schema?: Schema): Pair; - toJSON(_?: unknown, ctx?: ToJSContext): ReturnType; - toString(ctx?: StringifyContext, onComment?: () => void, onChompKeep?: () => void): string; -} diff --git a/tools/yaml/dist/nodes/Pair.js b/tools/yaml/dist/nodes/Pair.js deleted file mode 100644 index ae4c772..0000000 --- a/tools/yaml/dist/nodes/Pair.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; - -var createNode = require('../doc/createNode.js'); -var stringifyPair = require('../stringify/stringifyPair.js'); -var addPairToJSMap = require('./addPairToJSMap.js'); -var identity = require('./identity.js'); - -function createPair(key, value, ctx) { - const k = createNode.createNode(key, undefined, ctx); - const v = createNode.createNode(value, undefined, ctx); - return new Pair(k, v); -} -class Pair { - constructor(key, value = null) { - Object.defineProperty(this, identity.NODE_TYPE, { value: identity.PAIR }); - this.key = key; - this.value = value; - } - clone(schema) { - let { key, value } = this; - if (identity.isNode(key)) - key = key.clone(schema); - if (identity.isNode(value)) - value = value.clone(schema); - return new Pair(key, value); - } - toJSON(_, ctx) { - const pair = ctx?.mapAsMap ? new Map() : {}; - return addPairToJSMap.addPairToJSMap(ctx, pair, this); - } - toString(ctx, onComment, onChompKeep) { - return ctx?.doc - ? stringifyPair.stringifyPair(this, ctx, onComment, onChompKeep) - : JSON.stringify(this); - } -} - -exports.Pair = Pair; -exports.createPair = createPair; diff --git a/tools/yaml/dist/nodes/Scalar.d.ts b/tools/yaml/dist/nodes/Scalar.d.ts deleted file mode 100644 index dd330b2..0000000 --- a/tools/yaml/dist/nodes/Scalar.d.ts +++ /dev/null @@ -1,42 +0,0 @@ -import type { BlockScalar, FlowScalar } from '../parse/cst.js'; -import { NodeBase, Range } from './Node.js'; -import { ToJSContext } from './toJS.js'; -export declare const isScalarValue: (value: unknown) => boolean; -export declare namespace Scalar { - interface Parsed extends Scalar { - range: Range; - source: string; - srcToken?: FlowScalar | BlockScalar; - } - type BLOCK_FOLDED = 'BLOCK_FOLDED'; - type BLOCK_LITERAL = 'BLOCK_LITERAL'; - type PLAIN = 'PLAIN'; - type QUOTE_DOUBLE = 'QUOTE_DOUBLE'; - type QUOTE_SINGLE = 'QUOTE_SINGLE'; - type Type = BLOCK_FOLDED | BLOCK_LITERAL | PLAIN | QUOTE_DOUBLE | QUOTE_SINGLE; -} -export declare class Scalar extends NodeBase { - static readonly BLOCK_FOLDED = "BLOCK_FOLDED"; - static readonly BLOCK_LITERAL = "BLOCK_LITERAL"; - static readonly PLAIN = "PLAIN"; - static readonly QUOTE_DOUBLE = "QUOTE_DOUBLE"; - static readonly QUOTE_SINGLE = "QUOTE_SINGLE"; - value: T; - /** An optional anchor on this node. Used by alias nodes. */ - anchor?: string; - /** - * By default (undefined), numbers use decimal notation. - * The YAML 1.2 core schema only supports 'HEX' and 'OCT'. - * The YAML 1.1 schema also supports 'BIN' and 'TIME' - */ - format?: string; - /** If `value` is a number, use this value when stringifying this node. */ - minFractionDigits?: number; - /** Set during parsing to the source string value */ - source?: string; - /** The scalar style used for the node's string representation */ - type?: Scalar.Type; - constructor(value: T); - toJSON(arg?: any, ctx?: ToJSContext): any; - toString(): string; -} diff --git a/tools/yaml/dist/nodes/Scalar.js b/tools/yaml/dist/nodes/Scalar.js deleted file mode 100644 index bd7d4d2..0000000 --- a/tools/yaml/dist/nodes/Scalar.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict'; - -var identity = require('./identity.js'); -var Node = require('./Node.js'); -var toJS = require('./toJS.js'); - -const isScalarValue = (value) => !value || (typeof value !== 'function' && typeof value !== 'object'); -class Scalar extends Node.NodeBase { - constructor(value) { - super(identity.SCALAR); - this.value = value; - } - toJSON(arg, ctx) { - return ctx?.keep ? this.value : toJS.toJS(this.value, arg, ctx); - } - toString() { - return String(this.value); - } -} -Scalar.BLOCK_FOLDED = 'BLOCK_FOLDED'; -Scalar.BLOCK_LITERAL = 'BLOCK_LITERAL'; -Scalar.PLAIN = 'PLAIN'; -Scalar.QUOTE_DOUBLE = 'QUOTE_DOUBLE'; -Scalar.QUOTE_SINGLE = 'QUOTE_SINGLE'; - -exports.Scalar = Scalar; -exports.isScalarValue = isScalarValue; diff --git a/tools/yaml/dist/nodes/YAMLMap.d.ts b/tools/yaml/dist/nodes/YAMLMap.d.ts deleted file mode 100644 index cef75f0..0000000 --- a/tools/yaml/dist/nodes/YAMLMap.d.ts +++ /dev/null @@ -1,53 +0,0 @@ -import type { BlockMap, FlowCollection } from '../parse/cst.js'; -import type { Schema } from '../schema/Schema.js'; -import type { StringifyContext } from '../stringify/stringify.js'; -import { CreateNodeContext } from '../util.js'; -import { Collection } from './Collection.js'; -import type { ParsedNode, Range } from './Node.js'; -import { Pair } from './Pair.js'; -import { Scalar } from './Scalar.js'; -import type { ToJSContext } from './toJS.js'; -export type MapLike = Map | Set | Record; -export declare function findPair(items: Iterable>, key: unknown): Pair | undefined; -export declare namespace YAMLMap { - interface Parsed extends YAMLMap { - items: Pair[]; - range: Range; - srcToken?: BlockMap | FlowCollection; - } -} -export declare class YAMLMap extends Collection { - static get tagName(): 'tag:yaml.org,2002:map'; - items: Pair[]; - constructor(schema?: Schema); - /** - * A generic collection parsing method that can be extended - * to other node classes that inherit from YAMLMap - */ - static from(schema: Schema, obj: unknown, ctx: CreateNodeContext): YAMLMap; - /** - * Adds a value to the collection. - * - * @param overwrite - If not set `true`, using a key that is already in the - * collection will throw. Otherwise, overwrites the previous value. - */ - add(pair: Pair | { - key: K; - value: V; - }, overwrite?: boolean): void; - delete(key: unknown): boolean; - get(key: unknown, keepScalar: true): Scalar | undefined; - get(key: unknown, keepScalar?: false): V | undefined; - get(key: unknown, keepScalar?: boolean): V | Scalar | undefined; - has(key: unknown): boolean; - set(key: K, value: V): void; - /** - * @param ctx - Conversion context, originally set in Document#toJS() - * @param {Class} Type - If set, forces the returned collection type - * @returns Instance of Type, Map, or Object - */ - toJSON>(_?: unknown, ctx?: ToJSContext, Type?: { - new (): T; - }): any; - toString(ctx?: StringifyContext, onComment?: () => void, onChompKeep?: () => void): string; -} diff --git a/tools/yaml/dist/nodes/YAMLMap.js b/tools/yaml/dist/nodes/YAMLMap.js deleted file mode 100644 index 210abbf..0000000 --- a/tools/yaml/dist/nodes/YAMLMap.js +++ /dev/null @@ -1,147 +0,0 @@ -'use strict'; - -var stringifyCollection = require('../stringify/stringifyCollection.js'); -var addPairToJSMap = require('./addPairToJSMap.js'); -var Collection = require('./Collection.js'); -var identity = require('./identity.js'); -var Pair = require('./Pair.js'); -var Scalar = require('./Scalar.js'); - -function findPair(items, key) { - const k = identity.isScalar(key) ? key.value : key; - for (const it of items) { - if (identity.isPair(it)) { - if (it.key === key || it.key === k) - return it; - if (identity.isScalar(it.key) && it.key.value === k) - return it; - } - } - return undefined; -} -class YAMLMap extends Collection.Collection { - static get tagName() { - return 'tag:yaml.org,2002:map'; - } - constructor(schema) { - super(identity.MAP, schema); - this.items = []; - } - /** - * A generic collection parsing method that can be extended - * to other node classes that inherit from YAMLMap - */ - static from(schema, obj, ctx) { - const { keepUndefined, replacer } = ctx; - const map = new this(schema); - const add = (key, value) => { - if (typeof replacer === 'function') - value = replacer.call(obj, key, value); - else if (Array.isArray(replacer) && !replacer.includes(key)) - return; - if (value !== undefined || keepUndefined) - map.items.push(Pair.createPair(key, value, ctx)); - }; - if (obj instanceof Map) { - for (const [key, value] of obj) - add(key, value); - } - else if (obj && typeof obj === 'object') { - for (const key of Object.keys(obj)) - add(key, obj[key]); - } - if (typeof schema.sortMapEntries === 'function') { - map.items.sort(schema.sortMapEntries); - } - return map; - } - /** - * Adds a value to the collection. - * - * @param overwrite - If not set `true`, using a key that is already in the - * collection will throw. Otherwise, overwrites the previous value. - */ - add(pair, overwrite) { - let _pair; - if (identity.isPair(pair)) - _pair = pair; - else if (!pair || typeof pair !== 'object' || !('key' in pair)) { - // In TypeScript, this never happens. - _pair = new Pair.Pair(pair, pair?.value); - } - else - _pair = new Pair.Pair(pair.key, pair.value); - const prev = findPair(this.items, _pair.key); - const sortEntries = this.schema?.sortMapEntries; - if (prev) { - if (!overwrite) - throw new Error(`Key ${_pair.key} already set`); - // For scalars, keep the old node & its comments and anchors - if (identity.isScalar(prev.value) && Scalar.isScalarValue(_pair.value)) - prev.value.value = _pair.value; - else - prev.value = _pair.value; - } - else if (sortEntries) { - const i = this.items.findIndex(item => sortEntries(_pair, item) < 0); - if (i === -1) - this.items.push(_pair); - else - this.items.splice(i, 0, _pair); - } - else { - this.items.push(_pair); - } - } - delete(key) { - const it = findPair(this.items, key); - if (!it) - return false; - const del = this.items.splice(this.items.indexOf(it), 1); - return del.length > 0; - } - get(key, keepScalar) { - const it = findPair(this.items, key); - const node = it?.value; - return (!keepScalar && identity.isScalar(node) ? node.value : node) ?? undefined; - } - has(key) { - return !!findPair(this.items, key); - } - set(key, value) { - this.add(new Pair.Pair(key, value), true); - } - /** - * @param ctx - Conversion context, originally set in Document#toJS() - * @param {Class} Type - If set, forces the returned collection type - * @returns Instance of Type, Map, or Object - */ - toJSON(_, ctx, Type) { - const map = Type ? new Type() : ctx?.mapAsMap ? new Map() : {}; - if (ctx?.onCreate) - ctx.onCreate(map); - for (const item of this.items) - addPairToJSMap.addPairToJSMap(ctx, map, item); - return map; - } - toString(ctx, onComment, onChompKeep) { - if (!ctx) - return JSON.stringify(this); - for (const item of this.items) { - if (!identity.isPair(item)) - throw new Error(`Map items must all be pairs; found ${JSON.stringify(item)} instead`); - } - if (!ctx.allNullValues && this.hasAllNullValues(false)) - ctx = Object.assign({}, ctx, { allNullValues: true }); - return stringifyCollection.stringifyCollection(this, ctx, { - blockItemPrefix: '', - flowChars: { start: '{', end: '}' }, - itemIndent: ctx.indent || '', - onChompKeep, - onComment - }); - } -} - -exports.YAMLMap = YAMLMap; -exports.findPair = findPair; diff --git a/tools/yaml/dist/nodes/YAMLSeq.d.ts b/tools/yaml/dist/nodes/YAMLSeq.d.ts deleted file mode 100644 index 47fe24d..0000000 --- a/tools/yaml/dist/nodes/YAMLSeq.d.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { CreateNodeContext } from '../doc/createNode.js'; -import type { BlockSequence, FlowCollection } from '../parse/cst.js'; -import type { Schema } from '../schema/Schema.js'; -import type { StringifyContext } from '../stringify/stringify.js'; -import { Collection } from './Collection.js'; -import type { ParsedNode, Range } from './Node.js'; -import type { Pair } from './Pair.js'; -import { Scalar } from './Scalar.js'; -import { ToJSContext } from './toJS.js'; -export declare namespace YAMLSeq { - interface Parsed = ParsedNode> extends YAMLSeq { - items: T[]; - range: Range; - srcToken?: BlockSequence | FlowCollection; - } -} -export declare class YAMLSeq extends Collection { - static get tagName(): 'tag:yaml.org,2002:seq'; - items: T[]; - constructor(schema?: Schema); - add(value: T): void; - /** - * Removes a value from the collection. - * - * `key` must contain a representation of an integer for this to succeed. - * It may be wrapped in a `Scalar`. - * - * @returns `true` if the item was found and removed. - */ - delete(key: unknown): boolean; - /** - * Returns item at `key`, or `undefined` if not found. By default unwraps - * scalar values from their surrounding node; to disable set `keepScalar` to - * `true` (collections are always returned intact). - * - * `key` must contain a representation of an integer for this to succeed. - * It may be wrapped in a `Scalar`. - */ - get(key: unknown, keepScalar: true): Scalar | undefined; - get(key: unknown, keepScalar?: false): T | undefined; - get(key: unknown, keepScalar?: boolean): T | Scalar | undefined; - /** - * Checks if the collection includes a value with the key `key`. - * - * `key` must contain a representation of an integer for this to succeed. - * It may be wrapped in a `Scalar`. - */ - has(key: unknown): boolean; - /** - * Sets a value in this collection. For `!!set`, `value` needs to be a - * boolean to add/remove the item from the set. - * - * If `key` does not contain a representation of an integer, this will throw. - * It may be wrapped in a `Scalar`. - */ - set(key: unknown, value: T): void; - toJSON(_?: unknown, ctx?: ToJSContext): unknown[]; - toString(ctx?: StringifyContext, onComment?: () => void, onChompKeep?: () => void): string; - static from(schema: Schema, obj: unknown, ctx: CreateNodeContext): YAMLSeq; -} diff --git a/tools/yaml/dist/nodes/YAMLSeq.js b/tools/yaml/dist/nodes/YAMLSeq.js deleted file mode 100644 index a2af086..0000000 --- a/tools/yaml/dist/nodes/YAMLSeq.js +++ /dev/null @@ -1,115 +0,0 @@ -'use strict'; - -var createNode = require('../doc/createNode.js'); -var stringifyCollection = require('../stringify/stringifyCollection.js'); -var Collection = require('./Collection.js'); -var identity = require('./identity.js'); -var Scalar = require('./Scalar.js'); -var toJS = require('./toJS.js'); - -class YAMLSeq extends Collection.Collection { - static get tagName() { - return 'tag:yaml.org,2002:seq'; - } - constructor(schema) { - super(identity.SEQ, schema); - this.items = []; - } - add(value) { - this.items.push(value); - } - /** - * Removes a value from the collection. - * - * `key` must contain a representation of an integer for this to succeed. - * It may be wrapped in a `Scalar`. - * - * @returns `true` if the item was found and removed. - */ - delete(key) { - const idx = asItemIndex(key); - if (typeof idx !== 'number') - return false; - const del = this.items.splice(idx, 1); - return del.length > 0; - } - get(key, keepScalar) { - const idx = asItemIndex(key); - if (typeof idx !== 'number') - return undefined; - const it = this.items[idx]; - return !keepScalar && identity.isScalar(it) ? it.value : it; - } - /** - * Checks if the collection includes a value with the key `key`. - * - * `key` must contain a representation of an integer for this to succeed. - * It may be wrapped in a `Scalar`. - */ - has(key) { - const idx = asItemIndex(key); - return typeof idx === 'number' && idx < this.items.length; - } - /** - * Sets a value in this collection. For `!!set`, `value` needs to be a - * boolean to add/remove the item from the set. - * - * If `key` does not contain a representation of an integer, this will throw. - * It may be wrapped in a `Scalar`. - */ - set(key, value) { - const idx = asItemIndex(key); - if (typeof idx !== 'number') - throw new Error(`Expected a valid index, not ${key}.`); - const prev = this.items[idx]; - if (identity.isScalar(prev) && Scalar.isScalarValue(value)) - prev.value = value; - else - this.items[idx] = value; - } - toJSON(_, ctx) { - const seq = []; - if (ctx?.onCreate) - ctx.onCreate(seq); - let i = 0; - for (const item of this.items) - seq.push(toJS.toJS(item, String(i++), ctx)); - return seq; - } - toString(ctx, onComment, onChompKeep) { - if (!ctx) - return JSON.stringify(this); - return stringifyCollection.stringifyCollection(this, ctx, { - blockItemPrefix: '- ', - flowChars: { start: '[', end: ']' }, - itemIndent: (ctx.indent || '') + ' ', - onChompKeep, - onComment - }); - } - static from(schema, obj, ctx) { - const { replacer } = ctx; - const seq = new this(schema); - if (obj && Symbol.iterator in Object(obj)) { - let i = 0; - for (let it of obj) { - if (typeof replacer === 'function') { - const key = obj instanceof Set ? it : String(i++); - it = replacer.call(obj, key, it); - } - seq.items.push(createNode.createNode(it, undefined, ctx)); - } - } - return seq; - } -} -function asItemIndex(key) { - let idx = identity.isScalar(key) ? key.value : key; - if (idx && typeof idx === 'string') - idx = Number(idx); - return typeof idx === 'number' && Number.isInteger(idx) && idx >= 0 - ? idx - : null; -} - -exports.YAMLSeq = YAMLSeq; diff --git a/tools/yaml/dist/nodes/addPairToJSMap.d.ts b/tools/yaml/dist/nodes/addPairToJSMap.d.ts deleted file mode 100644 index 70d9e62..0000000 --- a/tools/yaml/dist/nodes/addPairToJSMap.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { Pair } from './Pair.js'; -import { ToJSContext } from './toJS.js'; -import type { MapLike } from './YAMLMap.js'; -export declare function addPairToJSMap(ctx: ToJSContext | undefined, map: MapLike, { key, value }: Pair): MapLike; diff --git a/tools/yaml/dist/nodes/addPairToJSMap.js b/tools/yaml/dist/nodes/addPairToJSMap.js deleted file mode 100644 index 30f6f95..0000000 --- a/tools/yaml/dist/nodes/addPairToJSMap.js +++ /dev/null @@ -1,106 +0,0 @@ -'use strict'; - -var log = require('../log.js'); -var stringify = require('../stringify/stringify.js'); -var identity = require('./identity.js'); -var Scalar = require('./Scalar.js'); -var toJS = require('./toJS.js'); - -const MERGE_KEY = '<<'; -function addPairToJSMap(ctx, map, { key, value }) { - if (ctx?.doc.schema.merge && isMergeKey(key)) { - value = identity.isAlias(value) ? value.resolve(ctx.doc) : value; - if (identity.isSeq(value)) - for (const it of value.items) - mergeToJSMap(ctx, map, it); - else if (Array.isArray(value)) - for (const it of value) - mergeToJSMap(ctx, map, it); - else - mergeToJSMap(ctx, map, value); - } - else { - const jsKey = toJS.toJS(key, '', ctx); - if (map instanceof Map) { - map.set(jsKey, toJS.toJS(value, jsKey, ctx)); - } - else if (map instanceof Set) { - map.add(jsKey); - } - else { - const stringKey = stringifyKey(key, jsKey, ctx); - const jsValue = toJS.toJS(value, stringKey, ctx); - if (stringKey in map) - Object.defineProperty(map, stringKey, { - value: jsValue, - writable: true, - enumerable: true, - configurable: true - }); - else - map[stringKey] = jsValue; - } - } - return map; -} -const isMergeKey = (key) => key === MERGE_KEY || - (identity.isScalar(key) && - key.value === MERGE_KEY && - (!key.type || key.type === Scalar.Scalar.PLAIN)); -// If the value associated with a merge key is a single mapping node, each of -// its key/value pairs is inserted into the current mapping, unless the key -// already exists in it. If the value associated with the merge key is a -// sequence, then this sequence is expected to contain mapping nodes and each -// of these nodes is merged in turn according to its order in the sequence. -// Keys in mapping nodes earlier in the sequence override keys specified in -// later mapping nodes. -- http://yaml.org/type/merge.html -function mergeToJSMap(ctx, map, value) { - const source = ctx && identity.isAlias(value) ? value.resolve(ctx.doc) : value; - if (!identity.isMap(source)) - throw new Error('Merge sources must be maps or map aliases'); - const srcMap = source.toJSON(null, ctx, Map); - for (const [key, value] of srcMap) { - if (map instanceof Map) { - if (!map.has(key)) - map.set(key, value); - } - else if (map instanceof Set) { - map.add(key); - } - else if (!Object.prototype.hasOwnProperty.call(map, key)) { - Object.defineProperty(map, key, { - value, - writable: true, - enumerable: true, - configurable: true - }); - } - } - return map; -} -function stringifyKey(key, jsKey, ctx) { - if (jsKey === null) - return ''; - if (typeof jsKey !== 'object') - return String(jsKey); - if (identity.isNode(key) && ctx?.doc) { - const strCtx = stringify.createStringifyContext(ctx.doc, {}); - strCtx.anchors = new Set(); - for (const node of ctx.anchors.keys()) - strCtx.anchors.add(node.anchor); - strCtx.inFlow = true; - strCtx.inStringifyKey = true; - const strKey = key.toString(strCtx); - if (!ctx.mapKeyWarned) { - let jsonStr = JSON.stringify(strKey); - if (jsonStr.length > 40) - jsonStr = jsonStr.substring(0, 36) + '..."'; - log.warn(ctx.doc.options.logLevel, `Keys with collection values will be stringified due to JS Object restrictions: ${jsonStr}. Set mapAsMap: true to use object keys.`); - ctx.mapKeyWarned = true; - } - return strKey; - } - return JSON.stringify(jsKey); -} - -exports.addPairToJSMap = addPairToJSMap; diff --git a/tools/yaml/dist/nodes/identity.d.ts b/tools/yaml/dist/nodes/identity.d.ts deleted file mode 100644 index c12fdf7..0000000 --- a/tools/yaml/dist/nodes/identity.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type { Document } from '../doc/Document.js'; -import type { Alias } from './Alias.js'; -import type { Node } from './Node.js'; -import type { Pair } from './Pair.js'; -import type { Scalar } from './Scalar.js'; -import type { YAMLMap } from './YAMLMap.js'; -import type { YAMLSeq } from './YAMLSeq.js'; -export declare const ALIAS: unique symbol; -export declare const DOC: unique symbol; -export declare const MAP: unique symbol; -export declare const PAIR: unique symbol; -export declare const SCALAR: unique symbol; -export declare const SEQ: unique symbol; -export declare const NODE_TYPE: unique symbol; -export declare const isAlias: (node: any) => node is Alias; -export declare const isDocument: (node: any) => node is Document; -export declare const isMap: (node: any) => node is YAMLMap; -export declare const isPair: (node: any) => node is Pair; -export declare const isScalar: (node: any) => node is Scalar; -export declare const isSeq: (node: any) => node is YAMLSeq; -export declare function isCollection(node: any): node is YAMLMap | YAMLSeq; -export declare function isNode(node: any): node is Node; -export declare const hasAnchor: (node: unknown) => node is Scalar | YAMLMap | YAMLSeq; diff --git a/tools/yaml/dist/nodes/identity.js b/tools/yaml/dist/nodes/identity.js deleted file mode 100644 index 5794aa3..0000000 --- a/tools/yaml/dist/nodes/identity.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -const ALIAS = Symbol.for('yaml.alias'); -const DOC = Symbol.for('yaml.document'); -const MAP = Symbol.for('yaml.map'); -const PAIR = Symbol.for('yaml.pair'); -const SCALAR = Symbol.for('yaml.scalar'); -const SEQ = Symbol.for('yaml.seq'); -const NODE_TYPE = Symbol.for('yaml.node.type'); -const isAlias = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === ALIAS; -const isDocument = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === DOC; -const isMap = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === MAP; -const isPair = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === PAIR; -const isScalar = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SCALAR; -const isSeq = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SEQ; -function isCollection(node) { - if (node && typeof node === 'object') - switch (node[NODE_TYPE]) { - case MAP: - case SEQ: - return true; - } - return false; -} -function isNode(node) { - if (node && typeof node === 'object') - switch (node[NODE_TYPE]) { - case ALIAS: - case MAP: - case SCALAR: - case SEQ: - return true; - } - return false; -} -const hasAnchor = (node) => (isScalar(node) || isCollection(node)) && !!node.anchor; - -exports.ALIAS = ALIAS; -exports.DOC = DOC; -exports.MAP = MAP; -exports.NODE_TYPE = NODE_TYPE; -exports.PAIR = PAIR; -exports.SCALAR = SCALAR; -exports.SEQ = SEQ; -exports.hasAnchor = hasAnchor; -exports.isAlias = isAlias; -exports.isCollection = isCollection; -exports.isDocument = isDocument; -exports.isMap = isMap; -exports.isNode = isNode; -exports.isPair = isPair; -exports.isScalar = isScalar; -exports.isSeq = isSeq; diff --git a/tools/yaml/dist/nodes/toJS.d.ts b/tools/yaml/dist/nodes/toJS.d.ts deleted file mode 100644 index dcd0642..0000000 --- a/tools/yaml/dist/nodes/toJS.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { Document } from '../doc/Document.js'; -import type { Node } from './Node.js'; -export interface AnchorData { - aliasCount: number; - count: number; - res: unknown; -} -export interface ToJSContext { - anchors: Map; - doc: Document; - keep: boolean; - mapAsMap: boolean; - mapKeyWarned: boolean; - maxAliasCount: number; - onCreate?: (res: unknown) => void; -} -/** - * Recursively convert any node or its contents to native JavaScript - * - * @param value - The input value - * @param arg - If `value` defines a `toJSON()` method, use this - * as its first argument - * @param ctx - Conversion context, originally set in Document#toJS(). If - * `{ keep: true }` is not set, output should be suitable for JSON - * stringification. - */ -export declare function toJS(value: any, arg: string | null, ctx?: ToJSContext): any; diff --git a/tools/yaml/dist/nodes/toJS.js b/tools/yaml/dist/nodes/toJS.js deleted file mode 100644 index a012823..0000000 --- a/tools/yaml/dist/nodes/toJS.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; - -var identity = require('./identity.js'); - -/** - * Recursively convert any node or its contents to native JavaScript - * - * @param value - The input value - * @param arg - If `value` defines a `toJSON()` method, use this - * as its first argument - * @param ctx - Conversion context, originally set in Document#toJS(). If - * `{ keep: true }` is not set, output should be suitable for JSON - * stringification. - */ -function toJS(value, arg, ctx) { - // eslint-disable-next-line @typescript-eslint/no-unsafe-return - if (Array.isArray(value)) - return value.map((v, i) => toJS(v, String(i), ctx)); - if (value && typeof value.toJSON === 'function') { - // eslint-disable-next-line @typescript-eslint/no-unsafe-call - if (!ctx || !identity.hasAnchor(value)) - return value.toJSON(arg, ctx); - const data = { aliasCount: 0, count: 1, res: undefined }; - ctx.anchors.set(value, data); - ctx.onCreate = res => { - data.res = res; - delete ctx.onCreate; - }; - const res = value.toJSON(arg, ctx); - if (ctx.onCreate) - ctx.onCreate(res); - return res; - } - if (typeof value === 'bigint' && !ctx?.keep) - return Number(value); - return value; -} - -exports.toJS = toJS; diff --git a/tools/yaml/dist/options.d.ts b/tools/yaml/dist/options.d.ts deleted file mode 100644 index 85bec7e..0000000 --- a/tools/yaml/dist/options.d.ts +++ /dev/null @@ -1,338 +0,0 @@ -import type { Reviver } from './doc/applyReviver.js'; -import type { Directives } from './doc/directives.js'; -import type { LogLevelId } from './log.js'; -import type { ParsedNode } from './nodes/Node.js'; -import type { Pair } from './nodes/Pair.js'; -import type { Scalar } from './nodes/Scalar.js'; -import type { LineCounter } from './parse/line-counter.js'; -import type { Schema } from './schema/Schema.js'; -import type { Tags } from './schema/tags.js'; -import type { CollectionTag, ScalarTag } from './schema/types.js'; -export type ParseOptions = { - /** - * Whether integers should be parsed into BigInt rather than number values. - * - * Default: `false` - * - * https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/BigInt - */ - intAsBigInt?: boolean; - /** - * Include a `srcToken` value on each parsed `Node`, containing the CST token - * that was composed into this node. - * - * Default: `false` - */ - keepSourceTokens?: boolean; - /** - * If set, newlines will be tracked, to allow for `lineCounter.linePos(offset)` - * to provide the `{ line, col }` positions within the input. - */ - lineCounter?: LineCounter; - /** - * Include line/col position & node type directly in parse errors. - * - * Default: `true` - */ - prettyErrors?: boolean; - /** - * Detect and report errors that are required by the YAML 1.2 spec, - * but are caused by unambiguous content. - * - * Default: `true` - */ - strict?: boolean; - /** - * YAML requires map keys to be unique. By default, this is checked by - * comparing scalar values with `===`; deep equality is not checked for - * aliases or collections. If merge keys are enabled by the schema, - * multiple `<<` keys are allowed. - * - * Set `false` to disable, or provide your own comparator function to - * customise. The comparator will be passed two `ParsedNode` values, and - * is expected to return a `boolean` indicating their equality. - * - * Default: `true` - */ - uniqueKeys?: boolean | ((a: ParsedNode, b: ParsedNode) => boolean); -}; -export type DocumentOptions = { - /** - * @internal - * Used internally by Composer. If set and includes an explicit version, - * that overrides the `version` option. - */ - _directives?: Directives; - /** - * Control the logging level during parsing - * - * Default: `'warn'` - */ - logLevel?: LogLevelId; - /** - * The YAML version used by documents without a `%YAML` directive. - * - * Default: `"1.2"` - */ - version?: '1.1' | '1.2' | 'next'; -}; -export type SchemaOptions = { - /** - * When parsing, warn about compatibility issues with the given schema. - * When stringifying, use scalar styles that are parsed correctly - * by the `compat` schema as well as the actual schema. - * - * Default: `null` - */ - compat?: string | Tags | null; - /** - * Array of additional tags to include in the schema, or a function that may - * modify the schema's base tag array. - */ - customTags?: Tags | ((tags: Tags) => Tags) | null; - /** - * Enable support for `<<` merge keys. - * - * Default: `false` for YAML 1.2, `true` for earlier versions - */ - merge?: boolean; - /** - * When using the `'core'` schema, support parsing values with these - * explicit YAML 1.1 tags: - * - * `!!binary`, `!!omap`, `!!pairs`, `!!set`, `!!timestamp`. - * - * Default `true` - */ - resolveKnownTags?: boolean; - /** - * The base schema to use. - * - * The core library has built-in support for the following: - * - `'failsafe'`: A minimal schema that parses all scalars as strings - * - `'core'`: The YAML 1.2 core schema - * - `'json'`: The YAML 1.2 JSON schema, with minimal rules for JSON compatibility - * - `'yaml-1.1'`: The YAML 1.1 schema - * - * If using another (custom) schema, the `customTags` array needs to - * fully define the schema's tags. - * - * Default: `'core'` for YAML 1.2, `'yaml-1.1'` for earlier versions - */ - schema?: string | Schema; - /** - * When adding to or stringifying a map, sort the entries. - * If `true`, sort by comparing key values with `<`. - * Does not affect item order when parsing. - * - * Default: `false` - */ - sortMapEntries?: boolean | ((a: Pair, b: Pair) => number); - /** - * Override default values for `toString()` options. - */ - toStringDefaults?: ToStringOptions; -}; -export type CreateNodeOptions = { - /** - * During node construction, use anchors and aliases to keep strictly equal - * non-null objects as equivalent in YAML. - * - * Default: `true` - */ - aliasDuplicateObjects?: boolean; - /** - * Default prefix for anchors. - * - * Default: `'a'`, resulting in anchors `a1`, `a2`, etc. - */ - anchorPrefix?: string; - /** Force the top-level collection node to use flow style. */ - flow?: boolean; - /** - * Keep `undefined` object values when creating mappings, rather than - * discarding them. - * - * Default: `false` - */ - keepUndefined?: boolean | null; - onTagObj?: (tagObj: ScalarTag | CollectionTag) => void; - /** - * Specify the top-level collection type, e.g. `"!!omap"`. Note that this - * requires the corresponding tag to be available in this document's schema. - */ - tag?: string; -}; -export type ToJSOptions = { - /** - * Use Map rather than Object to represent mappings. - * - * Default: `false` - */ - mapAsMap?: boolean; - /** - * Prevent exponential entity expansion attacks by limiting data aliasing count; - * set to `-1` to disable checks; `0` disallows all alias nodes. - * - * Default: `100` - */ - maxAliasCount?: number; - /** - * If defined, called with the resolved `value` and reference `count` for - * each anchor in the document. - */ - onAnchor?: (value: unknown, count: number) => void; - /** - * Optional function that may filter or modify the output JS value - * - * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#using_the_reviver_parameter - */ - reviver?: Reviver; -}; -export type ToStringOptions = { - /** - * Use block quote styles for scalar values where applicable. - * Set to `false` to disable block quotes completely. - * - * Default: `true` - */ - blockQuote?: boolean | 'folded' | 'literal'; - /** - * Enforce `'block'` or `'flow'` style on maps and sequences. - * Empty collections will always be stringified as `{}` or `[]`. - * - * Default: `'any'`, allowing each node to set its style separately - * with its `flow: boolean` (default `false`) property. - */ - collectionStyle?: 'any' | 'block' | 'flow'; - /** - * Comment stringifier. - * Output should be valid for the current schema. - * - * By default, empty comment lines are left empty, - * lines consisting of a single space are replaced by `#`, - * and all other lines are prefixed with a `#`. - */ - commentString?: (comment: string) => string; - /** - * The default type of string literal used to stringify implicit key values. - * Output may use other types if required to fully represent the value. - * - * If `null`, the value of `defaultStringType` is used. - * - * Default: `null` - */ - defaultKeyType?: Scalar.Type | null; - /** - * The default type of string literal used to stringify values in general. - * Output may use other types if required to fully represent the value. - * - * Default: `'PLAIN'` - */ - defaultStringType?: Scalar.Type; - /** - * Include directives in the output. - * - * - If `true`, at least the document-start marker `---` is always included. - * This does not force the `%YAML` directive to be included. To do that, - * set `doc.directives.yaml.explicit = true`. - * - If `false`, no directives or marker is ever included. If using the `%TAG` - * directive, you are expected to include it manually in the stream before - * its use. - * - If `null`, directives and marker may be included if required. - * - * Default: `null` - */ - directives?: boolean | null; - /** - * Restrict double-quoted strings to use JSON-compatible syntax. - * - * Default: `false` - */ - doubleQuotedAsJSON?: boolean; - /** - * Minimum length for double-quoted strings to use multiple lines to - * represent the value. Ignored if `doubleQuotedAsJSON` is set. - * - * Default: `40` - */ - doubleQuotedMinMultiLineLength?: number; - /** - * String representation for `false`. - * With the core schema, use `'false'`, `'False'`, or `'FALSE'`. - * - * Default: `'false'` - */ - falseStr?: string; - /** - * When true, a single space of padding will be added inside the delimiters - * of non-empty single-line flow collections. - * - * Default: `true` - */ - flowCollectionPadding?: boolean; - /** - * The number of spaces to use when indenting code. - * - * Default: `2` - */ - indent?: number; - /** - * Whether block sequences should be indented. - * - * Default: `true` - */ - indentSeq?: boolean; - /** - * Maximum line width (set to `0` to disable folding). - * - * This is a soft limit, as only double-quoted semantics allow for inserting - * a line break in the middle of a word, as well as being influenced by the - * `minContentWidth` option. - * - * Default: `80` - */ - lineWidth?: number; - /** - * Minimum line width for highly-indented content (set to `0` to disable). - * - * Default: `20` - */ - minContentWidth?: number; - /** - * String representation for `null`. - * With the core schema, use `'null'`, `'Null'`, `'NULL'`, `'~'`, or an empty - * string `''`. - * - * Default: `'null'` - */ - nullStr?: string; - /** - * Require keys to be scalars and to use implicit rather than explicit notation. - * - * Default: `false` - */ - simpleKeys?: boolean; - /** - * Use 'single quote' rather than "double quote" where applicable. - * Set to `false` to disable single quotes completely. - * - * Default: `null` - */ - singleQuote?: boolean | null; - /** - * String representation for `true`. - * With the core schema, use `'true'`, `'True'`, or `'TRUE'`. - * - * Default: `'true'` - */ - trueStr?: string; - /** - * The anchor used by an alias must be defined before the alias node. As it's - * possible for the document to be modified manually, the order may be - * verified during stringification. - * - * Default: `'true'` - */ - verifyAliasOrder?: boolean; -}; diff --git a/tools/yaml/dist/parse/cst-scalar.d.ts b/tools/yaml/dist/parse/cst-scalar.d.ts deleted file mode 100644 index a7bd1d6..0000000 --- a/tools/yaml/dist/parse/cst-scalar.d.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { ErrorCode } from '../errors.js'; -import { Range } from '../nodes/Node.js'; -import type { Scalar } from '../nodes/Scalar.js'; -import type { BlockScalar, FlowScalar, SourceToken, Token } from './cst.js'; -/** - * If `token` is a CST flow or block scalar, determine its string value and a few other attributes. - * Otherwise, return `null`. - */ -export declare function resolveAsScalar(token: FlowScalar | BlockScalar, strict?: boolean, onError?: (offset: number, code: ErrorCode, message: string) => void): { - value: string; - type: Scalar.Type | null; - comment: string; - range: Range; -}; -export declare function resolveAsScalar(token: Token | null | undefined, strict?: boolean, onError?: (offset: number, code: ErrorCode, message: string) => void): { - value: string; - type: Scalar.Type | null; - comment: string; - range: Range; -} | null; -/** - * Create a new scalar token with `value` - * - * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`, - * as this function does not support any schema operations and won't check for such conflicts. - * - * @param value The string representation of the value, which will have its content properly indented. - * @param context.end Comments and whitespace after the end of the value, or after the block scalar header. If undefined, a newline will be added. - * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value. - * @param context.indent The indent level of the token. - * @param context.inFlow Is this scalar within a flow collection? This may affect the resolved type of the token's value. - * @param context.offset The offset position of the token. - * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`. - */ -export declare function createScalarToken(value: string, context: { - end?: SourceToken[]; - implicitKey?: boolean; - indent: number; - inFlow?: boolean; - offset?: number; - type?: Scalar.Type; -}): BlockScalar | FlowScalar; -/** - * Set the value of `token` to the given string `value`, overwriting any previous contents and type that it may have. - * - * Best efforts are made to retain any comments previously associated with the `token`, - * though all contents within a collection's `items` will be overwritten. - * - * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`, - * as this function does not support any schema operations and won't check for such conflicts. - * - * @param token Any token. If it does not include an `indent` value, the value will be stringified as if it were an implicit key. - * @param value The string representation of the value, which will have its content properly indented. - * @param context.afterKey In most cases, values after a key should have an additional level of indentation. - * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value. - * @param context.inFlow Being within a flow collection may affect the resolved type of the token's value. - * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`. - */ -export declare function setScalarValue(token: Token, value: string, context?: { - afterKey?: boolean; - implicitKey?: boolean; - inFlow?: boolean; - type?: Scalar.Type; -}): void; diff --git a/tools/yaml/dist/parse/cst-scalar.js b/tools/yaml/dist/parse/cst-scalar.js deleted file mode 100644 index 11c5fcc..0000000 --- a/tools/yaml/dist/parse/cst-scalar.js +++ /dev/null @@ -1,218 +0,0 @@ -'use strict'; - -var resolveBlockScalar = require('../compose/resolve-block-scalar.js'); -var resolveFlowScalar = require('../compose/resolve-flow-scalar.js'); -var errors = require('../errors.js'); -var stringifyString = require('../stringify/stringifyString.js'); - -function resolveAsScalar(token, strict = true, onError) { - if (token) { - const _onError = (pos, code, message) => { - const offset = typeof pos === 'number' ? pos : Array.isArray(pos) ? pos[0] : pos.offset; - if (onError) - onError(offset, code, message); - else - throw new errors.YAMLParseError([offset, offset + 1], code, message); - }; - switch (token.type) { - case 'scalar': - case 'single-quoted-scalar': - case 'double-quoted-scalar': - return resolveFlowScalar.resolveFlowScalar(token, strict, _onError); - case 'block-scalar': - return resolveBlockScalar.resolveBlockScalar(token, strict, _onError); - } - } - return null; -} -/** - * Create a new scalar token with `value` - * - * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`, - * as this function does not support any schema operations and won't check for such conflicts. - * - * @param value The string representation of the value, which will have its content properly indented. - * @param context.end Comments and whitespace after the end of the value, or after the block scalar header. If undefined, a newline will be added. - * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value. - * @param context.indent The indent level of the token. - * @param context.inFlow Is this scalar within a flow collection? This may affect the resolved type of the token's value. - * @param context.offset The offset position of the token. - * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`. - */ -function createScalarToken(value, context) { - const { implicitKey = false, indent, inFlow = false, offset = -1, type = 'PLAIN' } = context; - const source = stringifyString.stringifyString({ type, value }, { - implicitKey, - indent: indent > 0 ? ' '.repeat(indent) : '', - inFlow, - options: { blockQuote: true, lineWidth: -1 } - }); - const end = context.end ?? [ - { type: 'newline', offset: -1, indent, source: '\n' } - ]; - switch (source[0]) { - case '|': - case '>': { - const he = source.indexOf('\n'); - const head = source.substring(0, he); - const body = source.substring(he + 1) + '\n'; - const props = [ - { type: 'block-scalar-header', offset, indent, source: head } - ]; - if (!addEndtoBlockProps(props, end)) - props.push({ type: 'newline', offset: -1, indent, source: '\n' }); - return { type: 'block-scalar', offset, indent, props, source: body }; - } - case '"': - return { type: 'double-quoted-scalar', offset, indent, source, end }; - case "'": - return { type: 'single-quoted-scalar', offset, indent, source, end }; - default: - return { type: 'scalar', offset, indent, source, end }; - } -} -/** - * Set the value of `token` to the given string `value`, overwriting any previous contents and type that it may have. - * - * Best efforts are made to retain any comments previously associated with the `token`, - * though all contents within a collection's `items` will be overwritten. - * - * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`, - * as this function does not support any schema operations and won't check for such conflicts. - * - * @param token Any token. If it does not include an `indent` value, the value will be stringified as if it were an implicit key. - * @param value The string representation of the value, which will have its content properly indented. - * @param context.afterKey In most cases, values after a key should have an additional level of indentation. - * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value. - * @param context.inFlow Being within a flow collection may affect the resolved type of the token's value. - * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`. - */ -function setScalarValue(token, value, context = {}) { - let { afterKey = false, implicitKey = false, inFlow = false, type } = context; - let indent = 'indent' in token ? token.indent : null; - if (afterKey && typeof indent === 'number') - indent += 2; - if (!type) - switch (token.type) { - case 'single-quoted-scalar': - type = 'QUOTE_SINGLE'; - break; - case 'double-quoted-scalar': - type = 'QUOTE_DOUBLE'; - break; - case 'block-scalar': { - const header = token.props[0]; - if (header.type !== 'block-scalar-header') - throw new Error('Invalid block scalar header'); - type = header.source[0] === '>' ? 'BLOCK_FOLDED' : 'BLOCK_LITERAL'; - break; - } - default: - type = 'PLAIN'; - } - const source = stringifyString.stringifyString({ type, value }, { - implicitKey: implicitKey || indent === null, - indent: indent !== null && indent > 0 ? ' '.repeat(indent) : '', - inFlow, - options: { blockQuote: true, lineWidth: -1 } - }); - switch (source[0]) { - case '|': - case '>': - setBlockScalarValue(token, source); - break; - case '"': - setFlowScalarValue(token, source, 'double-quoted-scalar'); - break; - case "'": - setFlowScalarValue(token, source, 'single-quoted-scalar'); - break; - default: - setFlowScalarValue(token, source, 'scalar'); - } -} -function setBlockScalarValue(token, source) { - const he = source.indexOf('\n'); - const head = source.substring(0, he); - const body = source.substring(he + 1) + '\n'; - if (token.type === 'block-scalar') { - const header = token.props[0]; - if (header.type !== 'block-scalar-header') - throw new Error('Invalid block scalar header'); - header.source = head; - token.source = body; - } - else { - const { offset } = token; - const indent = 'indent' in token ? token.indent : -1; - const props = [ - { type: 'block-scalar-header', offset, indent, source: head } - ]; - if (!addEndtoBlockProps(props, 'end' in token ? token.end : undefined)) - props.push({ type: 'newline', offset: -1, indent, source: '\n' }); - for (const key of Object.keys(token)) - if (key !== 'type' && key !== 'offset') - delete token[key]; - Object.assign(token, { type: 'block-scalar', indent, props, source: body }); - } -} -/** @returns `true` if last token is a newline */ -function addEndtoBlockProps(props, end) { - if (end) - for (const st of end) - switch (st.type) { - case 'space': - case 'comment': - props.push(st); - break; - case 'newline': - props.push(st); - return true; - } - return false; -} -function setFlowScalarValue(token, source, type) { - switch (token.type) { - case 'scalar': - case 'double-quoted-scalar': - case 'single-quoted-scalar': - token.type = type; - token.source = source; - break; - case 'block-scalar': { - const end = token.props.slice(1); - let oa = source.length; - if (token.props[0].type === 'block-scalar-header') - oa -= token.props[0].source.length; - for (const tok of end) - tok.offset += oa; - delete token.props; - Object.assign(token, { type, source, end }); - break; - } - case 'block-map': - case 'block-seq': { - const offset = token.offset + source.length; - const nl = { type: 'newline', offset, indent: token.indent, source: '\n' }; - delete token.items; - Object.assign(token, { type, source, end: [nl] }); - break; - } - default: { - const indent = 'indent' in token ? token.indent : -1; - const end = 'end' in token && Array.isArray(token.end) - ? token.end.filter(st => st.type === 'space' || - st.type === 'comment' || - st.type === 'newline') - : []; - for (const key of Object.keys(token)) - if (key !== 'type' && key !== 'offset') - delete token[key]; - Object.assign(token, { type, indent, source, end }); - } - } -} - -exports.createScalarToken = createScalarToken; -exports.resolveAsScalar = resolveAsScalar; -exports.setScalarValue = setScalarValue; diff --git a/tools/yaml/dist/parse/cst-stringify.d.ts b/tools/yaml/dist/parse/cst-stringify.d.ts deleted file mode 100644 index dbf66d6..0000000 --- a/tools/yaml/dist/parse/cst-stringify.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import type { CollectionItem, Token } from './cst.js'; -/** - * Stringify a CST document, token, or collection item - * - * Fair warning: This applies no validation whatsoever, and - * simply concatenates the sources in their logical order. - */ -export declare const stringify: (cst: Token | CollectionItem) => string; diff --git a/tools/yaml/dist/parse/cst-stringify.js b/tools/yaml/dist/parse/cst-stringify.js deleted file mode 100644 index 78e8c37..0000000 --- a/tools/yaml/dist/parse/cst-stringify.js +++ /dev/null @@ -1,63 +0,0 @@ -'use strict'; - -/** - * Stringify a CST document, token, or collection item - * - * Fair warning: This applies no validation whatsoever, and - * simply concatenates the sources in their logical order. - */ -const stringify = (cst) => 'type' in cst ? stringifyToken(cst) : stringifyItem(cst); -function stringifyToken(token) { - switch (token.type) { - case 'block-scalar': { - let res = ''; - for (const tok of token.props) - res += stringifyToken(tok); - return res + token.source; - } - case 'block-map': - case 'block-seq': { - let res = ''; - for (const item of token.items) - res += stringifyItem(item); - return res; - } - case 'flow-collection': { - let res = token.start.source; - for (const item of token.items) - res += stringifyItem(item); - for (const st of token.end) - res += st.source; - return res; - } - case 'document': { - let res = stringifyItem(token); - if (token.end) - for (const st of token.end) - res += st.source; - return res; - } - default: { - let res = token.source; - if ('end' in token && token.end) - for (const st of token.end) - res += st.source; - return res; - } - } -} -function stringifyItem({ start, key, sep, value }) { - let res = ''; - for (const st of start) - res += st.source; - if (key) - res += stringifyToken(key); - if (sep) - for (const st of sep) - res += st.source; - if (value) - res += stringifyToken(value); - return res; -} - -exports.stringify = stringify; diff --git a/tools/yaml/dist/parse/cst-visit.d.ts b/tools/yaml/dist/parse/cst-visit.d.ts deleted file mode 100644 index 4f21f05..0000000 --- a/tools/yaml/dist/parse/cst-visit.d.ts +++ /dev/null @@ -1,39 +0,0 @@ -import type { CollectionItem, Document } from './cst.js'; -export type VisitPath = readonly ['key' | 'value', number][]; -export type Visitor = (item: CollectionItem, path: VisitPath) => number | symbol | Visitor | void; -/** - * Apply a visitor to a CST document or item. - * - * Walks through the tree (depth-first) starting from the root, calling a - * `visitor` function with two arguments when entering each item: - * - `item`: The current item, which included the following members: - * - `start: SourceToken[]` – Source tokens before the key or value, - * possibly including its anchor or tag. - * - `key?: Token | null` – Set for pair values. May then be `null`, if - * the key before the `:` separator is empty. - * - `sep?: SourceToken[]` – Source tokens between the key and the value, - * which should include the `:` map value indicator if `value` is set. - * - `value?: Token` – The value of a sequence item, or of a map pair. - * - `path`: The steps from the root to the current node, as an array of - * `['key' | 'value', number]` tuples. - * - * The return value of the visitor may be used to control the traversal: - * - `undefined` (default): Do nothing and continue - * - `visit.SKIP`: Do not visit the children of this token, continue with - * next sibling - * - `visit.BREAK`: Terminate traversal completely - * - `visit.REMOVE`: Remove the current item, then continue with the next one - * - `number`: Set the index of the next step. This is useful especially if - * the index of the current token has changed. - * - `function`: Define the next visitor for this item. After the original - * visitor is called on item entry, next visitors are called after handling - * a non-empty `key` and when exiting the item. - */ -export declare function visit(cst: Document | CollectionItem, visitor: Visitor): void; -export declare namespace visit { - var BREAK: symbol; - var SKIP: symbol; - var REMOVE: symbol; - var itemAtPath: (cst: Document | CollectionItem, path: VisitPath) => CollectionItem | undefined; - var parentCollection: (cst: Document | CollectionItem, path: VisitPath) => import("./cst.js").BlockMap | import("./cst.js").BlockSequence | import("./cst.js").FlowCollection; -} diff --git a/tools/yaml/dist/parse/cst-visit.js b/tools/yaml/dist/parse/cst-visit.js deleted file mode 100644 index 9ceee93..0000000 --- a/tools/yaml/dist/parse/cst-visit.js +++ /dev/null @@ -1,99 +0,0 @@ -'use strict'; - -const BREAK = Symbol('break visit'); -const SKIP = Symbol('skip children'); -const REMOVE = Symbol('remove item'); -/** - * Apply a visitor to a CST document or item. - * - * Walks through the tree (depth-first) starting from the root, calling a - * `visitor` function with two arguments when entering each item: - * - `item`: The current item, which included the following members: - * - `start: SourceToken[]` – Source tokens before the key or value, - * possibly including its anchor or tag. - * - `key?: Token | null` – Set for pair values. May then be `null`, if - * the key before the `:` separator is empty. - * - `sep?: SourceToken[]` – Source tokens between the key and the value, - * which should include the `:` map value indicator if `value` is set. - * - `value?: Token` – The value of a sequence item, or of a map pair. - * - `path`: The steps from the root to the current node, as an array of - * `['key' | 'value', number]` tuples. - * - * The return value of the visitor may be used to control the traversal: - * - `undefined` (default): Do nothing and continue - * - `visit.SKIP`: Do not visit the children of this token, continue with - * next sibling - * - `visit.BREAK`: Terminate traversal completely - * - `visit.REMOVE`: Remove the current item, then continue with the next one - * - `number`: Set the index of the next step. This is useful especially if - * the index of the current token has changed. - * - `function`: Define the next visitor for this item. After the original - * visitor is called on item entry, next visitors are called after handling - * a non-empty `key` and when exiting the item. - */ -function visit(cst, visitor) { - if ('type' in cst && cst.type === 'document') - cst = { start: cst.start, value: cst.value }; - _visit(Object.freeze([]), cst, visitor); -} -// Without the `as symbol` casts, TS declares these in the `visit` -// namespace using `var`, but then complains about that because -// `unique symbol` must be `const`. -/** Terminate visit traversal completely */ -visit.BREAK = BREAK; -/** Do not visit the children of the current item */ -visit.SKIP = SKIP; -/** Remove the current item */ -visit.REMOVE = REMOVE; -/** Find the item at `path` from `cst` as the root */ -visit.itemAtPath = (cst, path) => { - let item = cst; - for (const [field, index] of path) { - const tok = item?.[field]; - if (tok && 'items' in tok) { - item = tok.items[index]; - } - else - return undefined; - } - return item; -}; -/** - * Get the immediate parent collection of the item at `path` from `cst` as the root. - * - * Throws an error if the collection is not found, which should never happen if the item itself exists. - */ -visit.parentCollection = (cst, path) => { - const parent = visit.itemAtPath(cst, path.slice(0, -1)); - const field = path[path.length - 1][0]; - const coll = parent?.[field]; - if (coll && 'items' in coll) - return coll; - throw new Error('Parent collection not found'); -}; -function _visit(path, item, visitor) { - let ctrl = visitor(item, path); - if (typeof ctrl === 'symbol') - return ctrl; - for (const field of ['key', 'value']) { - const token = item[field]; - if (token && 'items' in token) { - for (let i = 0; i < token.items.length; ++i) { - const ci = _visit(Object.freeze(path.concat([[field, i]])), token.items[i], visitor); - if (typeof ci === 'number') - i = ci - 1; - else if (ci === BREAK) - return BREAK; - else if (ci === REMOVE) { - token.items.splice(i, 1); - i -= 1; - } - } - if (typeof ctrl === 'function' && field === 'key') - ctrl = ctrl(item, path); - } - } - return typeof ctrl === 'function' ? ctrl(item, path) : ctrl; -} - -exports.visit = visit; diff --git a/tools/yaml/dist/parse/cst.d.ts b/tools/yaml/dist/parse/cst.d.ts deleted file mode 100644 index bfe7fc1..0000000 --- a/tools/yaml/dist/parse/cst.d.ts +++ /dev/null @@ -1,106 +0,0 @@ -export { createScalarToken, resolveAsScalar, setScalarValue } from './cst-scalar.js'; -export { stringify } from './cst-stringify.js'; -export { visit, Visitor, VisitPath } from './cst-visit.js'; -export interface SourceToken { - type: 'byte-order-mark' | 'doc-mode' | 'doc-start' | 'space' | 'comment' | 'newline' | 'directive-line' | 'anchor' | 'tag' | 'seq-item-ind' | 'explicit-key-ind' | 'map-value-ind' | 'flow-map-start' | 'flow-map-end' | 'flow-seq-start' | 'flow-seq-end' | 'flow-error-end' | 'comma' | 'block-scalar-header'; - offset: number; - indent: number; - source: string; -} -export interface ErrorToken { - type: 'error'; - offset: number; - source: string; - message: string; -} -export interface Directive { - type: 'directive'; - offset: number; - source: string; -} -export interface Document { - type: 'document'; - offset: number; - start: SourceToken[]; - value?: Token; - end?: SourceToken[]; -} -export interface DocumentEnd { - type: 'doc-end'; - offset: number; - source: string; - end?: SourceToken[]; -} -export interface FlowScalar { - type: 'alias' | 'scalar' | 'single-quoted-scalar' | 'double-quoted-scalar'; - offset: number; - indent: number; - source: string; - end?: SourceToken[]; -} -export interface BlockScalar { - type: 'block-scalar'; - offset: number; - indent: number; - props: Token[]; - source: string; -} -export interface BlockMap { - type: 'block-map'; - offset: number; - indent: number; - items: Array<{ - start: SourceToken[]; - key?: never; - sep?: never; - value?: never; - } | { - start: SourceToken[]; - key: Token | null; - sep: SourceToken[]; - value?: Token; - }>; -} -export interface BlockSequence { - type: 'block-seq'; - offset: number; - indent: number; - items: Array<{ - start: SourceToken[]; - key?: never; - sep?: never; - value?: Token; - }>; -} -export type CollectionItem = { - start: SourceToken[]; - key?: Token | null; - sep?: SourceToken[]; - value?: Token; -}; -export interface FlowCollection { - type: 'flow-collection'; - offset: number; - indent: number; - start: SourceToken; - items: CollectionItem[]; - end: SourceToken[]; -} -export type Token = SourceToken | ErrorToken | Directive | Document | DocumentEnd | FlowScalar | BlockScalar | BlockMap | BlockSequence | FlowCollection; -export type TokenType = SourceToken['type'] | DocumentEnd['type'] | FlowScalar['type']; -/** The byte order mark */ -export declare const BOM = "\uFEFF"; -/** Start of doc-mode */ -export declare const DOCUMENT = "\u0002"; -/** Unexpected end of flow-mode */ -export declare const FLOW_END = "\u0018"; -/** Next token is a scalar value */ -export declare const SCALAR = "\u001F"; -/** @returns `true` if `token` is a flow or block collection */ -export declare const isCollection: (token: Token | null | undefined) => token is BlockMap | BlockSequence | FlowCollection; -/** @returns `true` if `token` is a flow or block scalar; not an alias */ -export declare const isScalar: (token: Token | null | undefined) => token is BlockScalar | FlowScalar; -/** Get a printable representation of a lexer token */ -export declare function prettyToken(token: string): string; -/** Identify the type of a lexer token. May return `null` for unknown tokens. */ -export declare function tokenType(source: string): TokenType | null; diff --git a/tools/yaml/dist/parse/cst.js b/tools/yaml/dist/parse/cst.js deleted file mode 100644 index 613c229..0000000 --- a/tools/yaml/dist/parse/cst.js +++ /dev/null @@ -1,112 +0,0 @@ -'use strict'; - -var cstScalar = require('./cst-scalar.js'); -var cstStringify = require('./cst-stringify.js'); -var cstVisit = require('./cst-visit.js'); - -/** The byte order mark */ -const BOM = '\u{FEFF}'; -/** Start of doc-mode */ -const DOCUMENT = '\x02'; // C0: Start of Text -/** Unexpected end of flow-mode */ -const FLOW_END = '\x18'; // C0: Cancel -/** Next token is a scalar value */ -const SCALAR = '\x1f'; // C0: Unit Separator -/** @returns `true` if `token` is a flow or block collection */ -const isCollection = (token) => !!token && 'items' in token; -/** @returns `true` if `token` is a flow or block scalar; not an alias */ -const isScalar = (token) => !!token && - (token.type === 'scalar' || - token.type === 'single-quoted-scalar' || - token.type === 'double-quoted-scalar' || - token.type === 'block-scalar'); -/* istanbul ignore next */ -/** Get a printable representation of a lexer token */ -function prettyToken(token) { - switch (token) { - case BOM: - return ''; - case DOCUMENT: - return ''; - case FLOW_END: - return ''; - case SCALAR: - return ''; - default: - return JSON.stringify(token); - } -} -/** Identify the type of a lexer token. May return `null` for unknown tokens. */ -function tokenType(source) { - switch (source) { - case BOM: - return 'byte-order-mark'; - case DOCUMENT: - return 'doc-mode'; - case FLOW_END: - return 'flow-error-end'; - case SCALAR: - return 'scalar'; - case '---': - return 'doc-start'; - case '...': - return 'doc-end'; - case '': - case '\n': - case '\r\n': - return 'newline'; - case '-': - return 'seq-item-ind'; - case '?': - return 'explicit-key-ind'; - case ':': - return 'map-value-ind'; - case '{': - return 'flow-map-start'; - case '}': - return 'flow-map-end'; - case '[': - return 'flow-seq-start'; - case ']': - return 'flow-seq-end'; - case ',': - return 'comma'; - } - switch (source[0]) { - case ' ': - case '\t': - return 'space'; - case '#': - return 'comment'; - case '%': - return 'directive-line'; - case '*': - return 'alias'; - case '&': - return 'anchor'; - case '!': - return 'tag'; - case "'": - return 'single-quoted-scalar'; - case '"': - return 'double-quoted-scalar'; - case '|': - case '>': - return 'block-scalar-header'; - } - return null; -} - -exports.createScalarToken = cstScalar.createScalarToken; -exports.resolveAsScalar = cstScalar.resolveAsScalar; -exports.setScalarValue = cstScalar.setScalarValue; -exports.stringify = cstStringify.stringify; -exports.visit = cstVisit.visit; -exports.BOM = BOM; -exports.DOCUMENT = DOCUMENT; -exports.FLOW_END = FLOW_END; -exports.SCALAR = SCALAR; -exports.isCollection = isCollection; -exports.isScalar = isScalar; -exports.prettyToken = prettyToken; -exports.tokenType = tokenType; diff --git a/tools/yaml/dist/parse/lexer.d.ts b/tools/yaml/dist/parse/lexer.d.ts deleted file mode 100644 index 238e7b5..0000000 --- a/tools/yaml/dist/parse/lexer.d.ts +++ /dev/null @@ -1,87 +0,0 @@ -/** - * Splits an input string into lexical tokens, i.e. smaller strings that are - * easily identifiable by `tokens.tokenType()`. - * - * Lexing starts always in a "stream" context. Incomplete input may be buffered - * until a complete token can be emitted. - * - * In addition to slices of the original input, the following control characters - * may also be emitted: - * - * - `\x02` (Start of Text): A document starts with the next token - * - `\x18` (Cancel): Unexpected end of flow-mode (indicates an error) - * - `\x1f` (Unit Separator): Next token is a scalar value - * - `\u{FEFF}` (Byte order mark): Emitted separately outside documents - */ -export declare class Lexer { - /** - * Flag indicating whether the end of the current buffer marks the end of - * all input - */ - private atEnd; - /** - * Explicit indent set in block scalar header, as an offset from the current - * minimum indent, so e.g. set to 1 from a header `|2+`. Set to -1 if not - * explicitly set. - */ - private blockScalarIndent; - /** - * Block scalars that include a + (keep) chomping indicator in their header - * include trailing empty lines, which are otherwise excluded from the - * scalar's contents. - */ - private blockScalarKeep; - /** Current input */ - private buffer; - /** - * Flag noting whether the map value indicator : can immediately follow this - * node within a flow context. - */ - private flowKey; - /** Count of surrounding flow collection levels. */ - private flowLevel; - /** - * Minimum level of indentation required for next lines to be parsed as a - * part of the current scalar value. - */ - private indentNext; - /** Indentation level of the current line. */ - private indentValue; - /** Position of the next \n character. */ - private lineEndPos; - /** Stores the state of the lexer if reaching the end of incpomplete input */ - private next; - /** A pointer to `buffer`; the current position of the lexer. */ - private pos; - /** - * Generate YAML tokens from the `source` string. If `incomplete`, - * a part of the last line may be left as a buffer for the next call. - * - * @returns A generator of lexical tokens - */ - lex(source: string, incomplete?: boolean): Generator; - private atLineEnd; - private charAt; - private continueScalar; - private getLine; - private hasChars; - private setNext; - private peek; - private parseNext; - private parseStream; - private parseLineStart; - private parseBlockStart; - private parseDocument; - private parseFlowCollection; - private parseQuotedScalar; - private parseBlockScalarHeader; - private parseBlockScalar; - private parsePlainScalar; - private pushCount; - private pushToIndex; - private pushIndicators; - private pushTag; - private pushNewline; - private pushSpaces; - private pushUntil; -} diff --git a/tools/yaml/dist/parse/lexer.js b/tools/yaml/dist/parse/lexer.js deleted file mode 100644 index f408ce4..0000000 --- a/tools/yaml/dist/parse/lexer.js +++ /dev/null @@ -1,703 +0,0 @@ -'use strict'; - -var cst = require('./cst.js'); - -/* -START -> stream - -stream - directive -> line-end -> stream - indent + line-end -> stream - [else] -> line-start - -line-end - comment -> line-end - newline -> . - input-end -> END - -line-start - doc-start -> doc - doc-end -> stream - [else] -> indent -> block-start - -block-start - seq-item-start -> block-start - explicit-key-start -> block-start - map-value-start -> block-start - [else] -> doc - -doc - line-end -> line-start - spaces -> doc - anchor -> doc - tag -> doc - flow-start -> flow -> doc - flow-end -> error -> doc - seq-item-start -> error -> doc - explicit-key-start -> error -> doc - map-value-start -> doc - alias -> doc - quote-start -> quoted-scalar -> doc - block-scalar-header -> line-end -> block-scalar(min) -> line-start - [else] -> plain-scalar(false, min) -> doc - -flow - line-end -> flow - spaces -> flow - anchor -> flow - tag -> flow - flow-start -> flow -> flow - flow-end -> . - seq-item-start -> error -> flow - explicit-key-start -> flow - map-value-start -> flow - alias -> flow - quote-start -> quoted-scalar -> flow - comma -> flow - [else] -> plain-scalar(true, 0) -> flow - -quoted-scalar - quote-end -> . - [else] -> quoted-scalar - -block-scalar(min) - newline + peek(indent < min) -> . - [else] -> block-scalar(min) - -plain-scalar(is-flow, min) - scalar-end(is-flow) -> . - peek(newline + (indent < min)) -> . - [else] -> plain-scalar(min) -*/ -function isEmpty(ch) { - switch (ch) { - case undefined: - case ' ': - case '\n': - case '\r': - case '\t': - return true; - default: - return false; - } -} -const hexDigits = '0123456789ABCDEFabcdef'.split(''); -const tagChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()".split(''); -const invalidFlowScalarChars = ',[]{}'.split(''); -const invalidAnchorChars = ' ,[]{}\n\r\t'.split(''); -const isNotAnchorChar = (ch) => !ch || invalidAnchorChars.includes(ch); -/** - * Splits an input string into lexical tokens, i.e. smaller strings that are - * easily identifiable by `tokens.tokenType()`. - * - * Lexing starts always in a "stream" context. Incomplete input may be buffered - * until a complete token can be emitted. - * - * In addition to slices of the original input, the following control characters - * may also be emitted: - * - * - `\x02` (Start of Text): A document starts with the next token - * - `\x18` (Cancel): Unexpected end of flow-mode (indicates an error) - * - `\x1f` (Unit Separator): Next token is a scalar value - * - `\u{FEFF}` (Byte order mark): Emitted separately outside documents - */ -class Lexer { - constructor() { - /** - * Flag indicating whether the end of the current buffer marks the end of - * all input - */ - this.atEnd = false; - /** - * Explicit indent set in block scalar header, as an offset from the current - * minimum indent, so e.g. set to 1 from a header `|2+`. Set to -1 if not - * explicitly set. - */ - this.blockScalarIndent = -1; - /** - * Block scalars that include a + (keep) chomping indicator in their header - * include trailing empty lines, which are otherwise excluded from the - * scalar's contents. - */ - this.blockScalarKeep = false; - /** Current input */ - this.buffer = ''; - /** - * Flag noting whether the map value indicator : can immediately follow this - * node within a flow context. - */ - this.flowKey = false; - /** Count of surrounding flow collection levels. */ - this.flowLevel = 0; - /** - * Minimum level of indentation required for next lines to be parsed as a - * part of the current scalar value. - */ - this.indentNext = 0; - /** Indentation level of the current line. */ - this.indentValue = 0; - /** Position of the next \n character. */ - this.lineEndPos = null; - /** Stores the state of the lexer if reaching the end of incpomplete input */ - this.next = null; - /** A pointer to `buffer`; the current position of the lexer. */ - this.pos = 0; - } - /** - * Generate YAML tokens from the `source` string. If `incomplete`, - * a part of the last line may be left as a buffer for the next call. - * - * @returns A generator of lexical tokens - */ - *lex(source, incomplete = false) { - if (source) { - this.buffer = this.buffer ? this.buffer + source : source; - this.lineEndPos = null; - } - this.atEnd = !incomplete; - let next = this.next ?? 'stream'; - while (next && (incomplete || this.hasChars(1))) - next = yield* this.parseNext(next); - } - atLineEnd() { - let i = this.pos; - let ch = this.buffer[i]; - while (ch === ' ' || ch === '\t') - ch = this.buffer[++i]; - if (!ch || ch === '#' || ch === '\n') - return true; - if (ch === '\r') - return this.buffer[i + 1] === '\n'; - return false; - } - charAt(n) { - return this.buffer[this.pos + n]; - } - continueScalar(offset) { - let ch = this.buffer[offset]; - if (this.indentNext > 0) { - let indent = 0; - while (ch === ' ') - ch = this.buffer[++indent + offset]; - if (ch === '\r') { - const next = this.buffer[indent + offset + 1]; - if (next === '\n' || (!next && !this.atEnd)) - return offset + indent + 1; - } - return ch === '\n' || indent >= this.indentNext || (!ch && !this.atEnd) - ? offset + indent - : -1; - } - if (ch === '-' || ch === '.') { - const dt = this.buffer.substr(offset, 3); - if ((dt === '---' || dt === '...') && isEmpty(this.buffer[offset + 3])) - return -1; - } - return offset; - } - getLine() { - let end = this.lineEndPos; - if (typeof end !== 'number' || (end !== -1 && end < this.pos)) { - end = this.buffer.indexOf('\n', this.pos); - this.lineEndPos = end; - } - if (end === -1) - return this.atEnd ? this.buffer.substring(this.pos) : null; - if (this.buffer[end - 1] === '\r') - end -= 1; - return this.buffer.substring(this.pos, end); - } - hasChars(n) { - return this.pos + n <= this.buffer.length; - } - setNext(state) { - this.buffer = this.buffer.substring(this.pos); - this.pos = 0; - this.lineEndPos = null; - this.next = state; - return null; - } - peek(n) { - return this.buffer.substr(this.pos, n); - } - *parseNext(next) { - switch (next) { - case 'stream': - return yield* this.parseStream(); - case 'line-start': - return yield* this.parseLineStart(); - case 'block-start': - return yield* this.parseBlockStart(); - case 'doc': - return yield* this.parseDocument(); - case 'flow': - return yield* this.parseFlowCollection(); - case 'quoted-scalar': - return yield* this.parseQuotedScalar(); - case 'block-scalar': - return yield* this.parseBlockScalar(); - case 'plain-scalar': - return yield* this.parsePlainScalar(); - } - } - *parseStream() { - let line = this.getLine(); - if (line === null) - return this.setNext('stream'); - if (line[0] === cst.BOM) { - yield* this.pushCount(1); - line = line.substring(1); - } - if (line[0] === '%') { - let dirEnd = line.length; - const cs = line.indexOf('#'); - if (cs !== -1) { - const ch = line[cs - 1]; - if (ch === ' ' || ch === '\t') - dirEnd = cs - 1; - } - while (true) { - const ch = line[dirEnd - 1]; - if (ch === ' ' || ch === '\t') - dirEnd -= 1; - else - break; - } - const n = (yield* this.pushCount(dirEnd)) + (yield* this.pushSpaces(true)); - yield* this.pushCount(line.length - n); // possible comment - this.pushNewline(); - return 'stream'; - } - if (this.atLineEnd()) { - const sp = yield* this.pushSpaces(true); - yield* this.pushCount(line.length - sp); - yield* this.pushNewline(); - return 'stream'; - } - yield cst.DOCUMENT; - return yield* this.parseLineStart(); - } - *parseLineStart() { - const ch = this.charAt(0); - if (!ch && !this.atEnd) - return this.setNext('line-start'); - if (ch === '-' || ch === '.') { - if (!this.atEnd && !this.hasChars(4)) - return this.setNext('line-start'); - const s = this.peek(3); - if (s === '---' && isEmpty(this.charAt(3))) { - yield* this.pushCount(3); - this.indentValue = 0; - this.indentNext = 0; - return 'doc'; - } - else if (s === '...' && isEmpty(this.charAt(3))) { - yield* this.pushCount(3); - return 'stream'; - } - } - this.indentValue = yield* this.pushSpaces(false); - if (this.indentNext > this.indentValue && !isEmpty(this.charAt(1))) - this.indentNext = this.indentValue; - return yield* this.parseBlockStart(); - } - *parseBlockStart() { - const [ch0, ch1] = this.peek(2); - if (!ch1 && !this.atEnd) - return this.setNext('block-start'); - if ((ch0 === '-' || ch0 === '?' || ch0 === ':') && isEmpty(ch1)) { - const n = (yield* this.pushCount(1)) + (yield* this.pushSpaces(true)); - this.indentNext = this.indentValue + 1; - this.indentValue += n; - return yield* this.parseBlockStart(); - } - return 'doc'; - } - *parseDocument() { - yield* this.pushSpaces(true); - const line = this.getLine(); - if (line === null) - return this.setNext('doc'); - let n = yield* this.pushIndicators(); - switch (line[n]) { - case '#': - yield* this.pushCount(line.length - n); - // fallthrough - case undefined: - yield* this.pushNewline(); - return yield* this.parseLineStart(); - case '{': - case '[': - yield* this.pushCount(1); - this.flowKey = false; - this.flowLevel = 1; - return 'flow'; - case '}': - case ']': - // this is an error - yield* this.pushCount(1); - return 'doc'; - case '*': - yield* this.pushUntil(isNotAnchorChar); - return 'doc'; - case '"': - case "'": - return yield* this.parseQuotedScalar(); - case '|': - case '>': - n += yield* this.parseBlockScalarHeader(); - n += yield* this.pushSpaces(true); - yield* this.pushCount(line.length - n); - yield* this.pushNewline(); - return yield* this.parseBlockScalar(); - default: - return yield* this.parsePlainScalar(); - } - } - *parseFlowCollection() { - let nl, sp; - let indent = -1; - do { - nl = yield* this.pushNewline(); - if (nl > 0) { - sp = yield* this.pushSpaces(false); - this.indentValue = indent = sp; - } - else { - sp = 0; - } - sp += yield* this.pushSpaces(true); - } while (nl + sp > 0); - const line = this.getLine(); - if (line === null) - return this.setNext('flow'); - if ((indent !== -1 && indent < this.indentNext && line[0] !== '#') || - (indent === 0 && - (line.startsWith('---') || line.startsWith('...')) && - isEmpty(line[3]))) { - // Allowing for the terminal ] or } at the same (rather than greater) - // indent level as the initial [ or { is technically invalid, but - // failing here would be surprising to users. - const atFlowEndMarker = indent === this.indentNext - 1 && - this.flowLevel === 1 && - (line[0] === ']' || line[0] === '}'); - if (!atFlowEndMarker) { - // this is an error - this.flowLevel = 0; - yield cst.FLOW_END; - return yield* this.parseLineStart(); - } - } - let n = 0; - while (line[n] === ',') { - n += yield* this.pushCount(1); - n += yield* this.pushSpaces(true); - this.flowKey = false; - } - n += yield* this.pushIndicators(); - switch (line[n]) { - case undefined: - return 'flow'; - case '#': - yield* this.pushCount(line.length - n); - return 'flow'; - case '{': - case '[': - yield* this.pushCount(1); - this.flowKey = false; - this.flowLevel += 1; - return 'flow'; - case '}': - case ']': - yield* this.pushCount(1); - this.flowKey = true; - this.flowLevel -= 1; - return this.flowLevel ? 'flow' : 'doc'; - case '*': - yield* this.pushUntil(isNotAnchorChar); - return 'flow'; - case '"': - case "'": - this.flowKey = true; - return yield* this.parseQuotedScalar(); - case ':': { - const next = this.charAt(1); - if (this.flowKey || isEmpty(next) || next === ',') { - this.flowKey = false; - yield* this.pushCount(1); - yield* this.pushSpaces(true); - return 'flow'; - } - } - // fallthrough - default: - this.flowKey = false; - return yield* this.parsePlainScalar(); - } - } - *parseQuotedScalar() { - const quote = this.charAt(0); - let end = this.buffer.indexOf(quote, this.pos + 1); - if (quote === "'") { - while (end !== -1 && this.buffer[end + 1] === "'") - end = this.buffer.indexOf("'", end + 2); - } - else { - // double-quote - while (end !== -1) { - let n = 0; - while (this.buffer[end - 1 - n] === '\\') - n += 1; - if (n % 2 === 0) - break; - end = this.buffer.indexOf('"', end + 1); - } - } - // Only looking for newlines within the quotes - const qb = this.buffer.substring(0, end); - let nl = qb.indexOf('\n', this.pos); - if (nl !== -1) { - while (nl !== -1) { - const cs = this.continueScalar(nl + 1); - if (cs === -1) - break; - nl = qb.indexOf('\n', cs); - } - if (nl !== -1) { - // this is an error caused by an unexpected unindent - end = nl - (qb[nl - 1] === '\r' ? 2 : 1); - } - } - if (end === -1) { - if (!this.atEnd) - return this.setNext('quoted-scalar'); - end = this.buffer.length; - } - yield* this.pushToIndex(end + 1, false); - return this.flowLevel ? 'flow' : 'doc'; - } - *parseBlockScalarHeader() { - this.blockScalarIndent = -1; - this.blockScalarKeep = false; - let i = this.pos; - while (true) { - const ch = this.buffer[++i]; - if (ch === '+') - this.blockScalarKeep = true; - else if (ch > '0' && ch <= '9') - this.blockScalarIndent = Number(ch) - 1; - else if (ch !== '-') - break; - } - return yield* this.pushUntil(ch => isEmpty(ch) || ch === '#'); - } - *parseBlockScalar() { - let nl = this.pos - 1; // may be -1 if this.pos === 0 - let indent = 0; - let ch; - loop: for (let i = this.pos; (ch = this.buffer[i]); ++i) { - switch (ch) { - case ' ': - indent += 1; - break; - case '\n': - nl = i; - indent = 0; - break; - case '\r': { - const next = this.buffer[i + 1]; - if (!next && !this.atEnd) - return this.setNext('block-scalar'); - if (next === '\n') - break; - } // fallthrough - default: - break loop; - } - } - if (!ch && !this.atEnd) - return this.setNext('block-scalar'); - if (indent >= this.indentNext) { - if (this.blockScalarIndent === -1) - this.indentNext = indent; - else - this.indentNext += this.blockScalarIndent; - do { - const cs = this.continueScalar(nl + 1); - if (cs === -1) - break; - nl = this.buffer.indexOf('\n', cs); - } while (nl !== -1); - if (nl === -1) { - if (!this.atEnd) - return this.setNext('block-scalar'); - nl = this.buffer.length; - } - } - if (!this.blockScalarKeep) { - do { - let i = nl - 1; - let ch = this.buffer[i]; - if (ch === '\r') - ch = this.buffer[--i]; - const lastChar = i; // Drop the line if last char not more indented - while (ch === ' ' || ch === '\t') - ch = this.buffer[--i]; - if (ch === '\n' && i >= this.pos && i + 1 + indent > lastChar) - nl = i; - else - break; - } while (true); - } - yield cst.SCALAR; - yield* this.pushToIndex(nl + 1, true); - return yield* this.parseLineStart(); - } - *parsePlainScalar() { - const inFlow = this.flowLevel > 0; - let end = this.pos - 1; - let i = this.pos - 1; - let ch; - while ((ch = this.buffer[++i])) { - if (ch === ':') { - const next = this.buffer[i + 1]; - if (isEmpty(next) || (inFlow && next === ',')) - break; - end = i; - } - else if (isEmpty(ch)) { - let next = this.buffer[i + 1]; - if (ch === '\r') { - if (next === '\n') { - i += 1; - ch = '\n'; - next = this.buffer[i + 1]; - } - else - end = i; - } - if (next === '#' || (inFlow && invalidFlowScalarChars.includes(next))) - break; - if (ch === '\n') { - const cs = this.continueScalar(i + 1); - if (cs === -1) - break; - i = Math.max(i, cs - 2); // to advance, but still account for ' #' - } - } - else { - if (inFlow && invalidFlowScalarChars.includes(ch)) - break; - end = i; - } - } - if (!ch && !this.atEnd) - return this.setNext('plain-scalar'); - yield cst.SCALAR; - yield* this.pushToIndex(end + 1, true); - return inFlow ? 'flow' : 'doc'; - } - *pushCount(n) { - if (n > 0) { - yield this.buffer.substr(this.pos, n); - this.pos += n; - return n; - } - return 0; - } - *pushToIndex(i, allowEmpty) { - const s = this.buffer.slice(this.pos, i); - if (s) { - yield s; - this.pos += s.length; - return s.length; - } - else if (allowEmpty) - yield ''; - return 0; - } - *pushIndicators() { - switch (this.charAt(0)) { - case '!': - return ((yield* this.pushTag()) + - (yield* this.pushSpaces(true)) + - (yield* this.pushIndicators())); - case '&': - return ((yield* this.pushUntil(isNotAnchorChar)) + - (yield* this.pushSpaces(true)) + - (yield* this.pushIndicators())); - case '-': // this is an error - case '?': // this is an error outside flow collections - case ':': { - const inFlow = this.flowLevel > 0; - const ch1 = this.charAt(1); - if (isEmpty(ch1) || (inFlow && invalidFlowScalarChars.includes(ch1))) { - if (!inFlow) - this.indentNext = this.indentValue + 1; - else if (this.flowKey) - this.flowKey = false; - return ((yield* this.pushCount(1)) + - (yield* this.pushSpaces(true)) + - (yield* this.pushIndicators())); - } - } - } - return 0; - } - *pushTag() { - if (this.charAt(1) === '<') { - let i = this.pos + 2; - let ch = this.buffer[i]; - while (!isEmpty(ch) && ch !== '>') - ch = this.buffer[++i]; - return yield* this.pushToIndex(ch === '>' ? i + 1 : i, false); - } - else { - let i = this.pos + 1; - let ch = this.buffer[i]; - while (ch) { - if (tagChars.includes(ch)) - ch = this.buffer[++i]; - else if (ch === '%' && - hexDigits.includes(this.buffer[i + 1]) && - hexDigits.includes(this.buffer[i + 2])) { - ch = this.buffer[(i += 3)]; - } - else - break; - } - return yield* this.pushToIndex(i, false); - } - } - *pushNewline() { - const ch = this.buffer[this.pos]; - if (ch === '\n') - return yield* this.pushCount(1); - else if (ch === '\r' && this.charAt(1) === '\n') - return yield* this.pushCount(2); - else - return 0; - } - *pushSpaces(allowTabs) { - let i = this.pos - 1; - let ch; - do { - ch = this.buffer[++i]; - } while (ch === ' ' || (allowTabs && ch === '\t')); - const n = i - this.pos; - if (n > 0) { - yield this.buffer.substr(this.pos, n); - this.pos = i; - } - return n; - } - *pushUntil(test) { - let i = this.pos; - let ch = this.buffer[i]; - while (!test(ch)) - ch = this.buffer[++i]; - return yield* this.pushToIndex(i, false); - } -} - -exports.Lexer = Lexer; diff --git a/tools/yaml/dist/parse/line-counter.d.ts b/tools/yaml/dist/parse/line-counter.d.ts deleted file mode 100644 index b469095..0000000 --- a/tools/yaml/dist/parse/line-counter.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Tracks newlines during parsing in order to provide an efficient API for - * determining the one-indexed `{ line, col }` position for any offset - * within the input. - */ -export declare class LineCounter { - lineStarts: number[]; - /** - * Should be called in ascending order. Otherwise, call - * `lineCounter.lineStarts.sort()` before calling `linePos()`. - */ - addNewLine: (offset: number) => number; - /** - * Performs a binary search and returns the 1-indexed { line, col } - * position of `offset`. If `line === 0`, `addNewLine` has never been - * called or `offset` is before the first known newline. - */ - linePos: (offset: number) => { - line: number; - col: number; - }; -} diff --git a/tools/yaml/dist/parse/line-counter.js b/tools/yaml/dist/parse/line-counter.js deleted file mode 100644 index 0e7383b..0000000 --- a/tools/yaml/dist/parse/line-counter.js +++ /dev/null @@ -1,41 +0,0 @@ -'use strict'; - -/** - * Tracks newlines during parsing in order to provide an efficient API for - * determining the one-indexed `{ line, col }` position for any offset - * within the input. - */ -class LineCounter { - constructor() { - this.lineStarts = []; - /** - * Should be called in ascending order. Otherwise, call - * `lineCounter.lineStarts.sort()` before calling `linePos()`. - */ - this.addNewLine = (offset) => this.lineStarts.push(offset); - /** - * Performs a binary search and returns the 1-indexed { line, col } - * position of `offset`. If `line === 0`, `addNewLine` has never been - * called or `offset` is before the first known newline. - */ - this.linePos = (offset) => { - let low = 0; - let high = this.lineStarts.length; - while (low < high) { - const mid = (low + high) >> 1; // Math.floor((low + high) / 2) - if (this.lineStarts[mid] < offset) - low = mid + 1; - else - high = mid; - } - if (this.lineStarts[low] === offset) - return { line: low + 1, col: 1 }; - if (low === 0) - return { line: 0, col: offset }; - const start = this.lineStarts[low - 1]; - return { line: low, col: offset - start + 1 }; - }; - } -} - -exports.LineCounter = LineCounter; diff --git a/tools/yaml/dist/parse/parser.d.ts b/tools/yaml/dist/parse/parser.d.ts deleted file mode 100644 index 8f3159f..0000000 --- a/tools/yaml/dist/parse/parser.d.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { Token } from './cst.js'; -/** - * A YAML concrete syntax tree (CST) parser - * - * ```ts - * const src: string = ... - * for (const token of new Parser().parse(src)) { - * // token: Token - * } - * ``` - * - * To use the parser with a user-provided lexer: - * - * ```ts - * function* parse(source: string, lexer: Lexer) { - * const parser = new Parser() - * for (const lexeme of lexer.lex(source)) - * yield* parser.next(lexeme) - * yield* parser.end() - * } - * - * const src: string = ... - * const lexer = new Lexer() - * for (const token of parse(src, lexer)) { - * // token: Token - * } - * ``` - */ -export declare class Parser { - private onNewLine?; - /** If true, space and sequence indicators count as indentation */ - private atNewLine; - /** If true, next token is a scalar value */ - private atScalar; - /** Current indentation level */ - private indent; - /** Current offset since the start of parsing */ - offset: number; - /** On the same line with a block map key */ - private onKeyLine; - /** Top indicates the node that's currently being built */ - stack: Token[]; - /** The source of the current token, set in parse() */ - private source; - /** The type of the current token, set in parse() */ - private type; - /** - * @param onNewLine - If defined, called separately with the start position of - * each new line (in `parse()`, including the start of input). - */ - constructor(onNewLine?: (offset: number) => void); - /** - * Parse `source` as a YAML stream. - * If `incomplete`, a part of the last line may be left as a buffer for the next call. - * - * Errors are not thrown, but yielded as `{ type: 'error', message }` tokens. - * - * @returns A generator of tokens representing each directive, document, and other structure. - */ - parse(source: string, incomplete?: boolean): Generator; - /** - * Advance the parser by the `source` of one lexical token. - */ - next(source: string): Generator; - private lexer; - /** Call at end of input to push out any remaining constructions */ - end(): Generator; - private get sourceToken(); - private step; - private peek; - private pop; - private stream; - private document; - private scalar; - private blockScalar; - private blockMap; - private blockSequence; - private flowCollection; - private flowScalar; - private startBlockValue; - private atIndentedComment; - private documentEnd; - private lineEnd; -} diff --git a/tools/yaml/dist/parse/parser.js b/tools/yaml/dist/parse/parser.js deleted file mode 100644 index 8dcdf5d..0000000 --- a/tools/yaml/dist/parse/parser.js +++ /dev/null @@ -1,954 +0,0 @@ -'use strict'; - -var cst = require('./cst.js'); -var lexer = require('./lexer.js'); - -function includesToken(list, type) { - for (let i = 0; i < list.length; ++i) - if (list[i].type === type) - return true; - return false; -} -function findNonEmptyIndex(list) { - for (let i = 0; i < list.length; ++i) { - switch (list[i].type) { - case 'space': - case 'comment': - case 'newline': - break; - default: - return i; - } - } - return -1; -} -function isFlowToken(token) { - switch (token?.type) { - case 'alias': - case 'scalar': - case 'single-quoted-scalar': - case 'double-quoted-scalar': - case 'flow-collection': - return true; - default: - return false; - } -} -function getPrevProps(parent) { - switch (parent.type) { - case 'document': - return parent.start; - case 'block-map': { - const it = parent.items[parent.items.length - 1]; - return it.sep ?? it.start; - } - case 'block-seq': - return parent.items[parent.items.length - 1].start; - /* istanbul ignore next should not happen */ - default: - return []; - } -} -/** Note: May modify input array */ -function getFirstKeyStartProps(prev) { - if (prev.length === 0) - return []; - let i = prev.length; - loop: while (--i >= 0) { - switch (prev[i].type) { - case 'doc-start': - case 'explicit-key-ind': - case 'map-value-ind': - case 'seq-item-ind': - case 'newline': - break loop; - } - } - while (prev[++i]?.type === 'space') { - /* loop */ - } - return prev.splice(i, prev.length); -} -function fixFlowSeqItems(fc) { - if (fc.start.type === 'flow-seq-start') { - for (const it of fc.items) { - if (it.sep && - !it.value && - !includesToken(it.start, 'explicit-key-ind') && - !includesToken(it.sep, 'map-value-ind')) { - if (it.key) - it.value = it.key; - delete it.key; - if (isFlowToken(it.value)) { - if (it.value.end) - Array.prototype.push.apply(it.value.end, it.sep); - else - it.value.end = it.sep; - } - else - Array.prototype.push.apply(it.start, it.sep); - delete it.sep; - } - } - } -} -/** - * A YAML concrete syntax tree (CST) parser - * - * ```ts - * const src: string = ... - * for (const token of new Parser().parse(src)) { - * // token: Token - * } - * ``` - * - * To use the parser with a user-provided lexer: - * - * ```ts - * function* parse(source: string, lexer: Lexer) { - * const parser = new Parser() - * for (const lexeme of lexer.lex(source)) - * yield* parser.next(lexeme) - * yield* parser.end() - * } - * - * const src: string = ... - * const lexer = new Lexer() - * for (const token of parse(src, lexer)) { - * // token: Token - * } - * ``` - */ -class Parser { - /** - * @param onNewLine - If defined, called separately with the start position of - * each new line (in `parse()`, including the start of input). - */ - constructor(onNewLine) { - /** If true, space and sequence indicators count as indentation */ - this.atNewLine = true; - /** If true, next token is a scalar value */ - this.atScalar = false; - /** Current indentation level */ - this.indent = 0; - /** Current offset since the start of parsing */ - this.offset = 0; - /** On the same line with a block map key */ - this.onKeyLine = false; - /** Top indicates the node that's currently being built */ - this.stack = []; - /** The source of the current token, set in parse() */ - this.source = ''; - /** The type of the current token, set in parse() */ - this.type = ''; - // Must be defined after `next()` - this.lexer = new lexer.Lexer(); - this.onNewLine = onNewLine; - } - /** - * Parse `source` as a YAML stream. - * If `incomplete`, a part of the last line may be left as a buffer for the next call. - * - * Errors are not thrown, but yielded as `{ type: 'error', message }` tokens. - * - * @returns A generator of tokens representing each directive, document, and other structure. - */ - *parse(source, incomplete = false) { - if (this.onNewLine && this.offset === 0) - this.onNewLine(0); - for (const lexeme of this.lexer.lex(source, incomplete)) - yield* this.next(lexeme); - if (!incomplete) - yield* this.end(); - } - /** - * Advance the parser by the `source` of one lexical token. - */ - *next(source) { - this.source = source; - if (process.env.LOG_TOKENS) - console.log('|', cst.prettyToken(source)); - if (this.atScalar) { - this.atScalar = false; - yield* this.step(); - this.offset += source.length; - return; - } - const type = cst.tokenType(source); - if (!type) { - const message = `Not a YAML token: ${source}`; - yield* this.pop({ type: 'error', offset: this.offset, message, source }); - this.offset += source.length; - } - else if (type === 'scalar') { - this.atNewLine = false; - this.atScalar = true; - this.type = 'scalar'; - } - else { - this.type = type; - yield* this.step(); - switch (type) { - case 'newline': - this.atNewLine = true; - this.indent = 0; - if (this.onNewLine) - this.onNewLine(this.offset + source.length); - break; - case 'space': - if (this.atNewLine && source[0] === ' ') - this.indent += source.length; - break; - case 'explicit-key-ind': - case 'map-value-ind': - case 'seq-item-ind': - if (this.atNewLine) - this.indent += source.length; - break; - case 'doc-mode': - case 'flow-error-end': - return; - default: - this.atNewLine = false; - } - this.offset += source.length; - } - } - /** Call at end of input to push out any remaining constructions */ - *end() { - while (this.stack.length > 0) - yield* this.pop(); - } - get sourceToken() { - const st = { - type: this.type, - offset: this.offset, - indent: this.indent, - source: this.source - }; - return st; - } - *step() { - const top = this.peek(1); - if (this.type === 'doc-end' && (!top || top.type !== 'doc-end')) { - while (this.stack.length > 0) - yield* this.pop(); - this.stack.push({ - type: 'doc-end', - offset: this.offset, - source: this.source - }); - return; - } - if (!top) - return yield* this.stream(); - switch (top.type) { - case 'document': - return yield* this.document(top); - case 'alias': - case 'scalar': - case 'single-quoted-scalar': - case 'double-quoted-scalar': - return yield* this.scalar(top); - case 'block-scalar': - return yield* this.blockScalar(top); - case 'block-map': - return yield* this.blockMap(top); - case 'block-seq': - return yield* this.blockSequence(top); - case 'flow-collection': - return yield* this.flowCollection(top); - case 'doc-end': - return yield* this.documentEnd(top); - } - /* istanbul ignore next should not happen */ - yield* this.pop(); - } - peek(n) { - return this.stack[this.stack.length - n]; - } - *pop(error) { - const token = error ?? this.stack.pop(); - /* istanbul ignore if should not happen */ - if (!token) { - const message = 'Tried to pop an empty stack'; - yield { type: 'error', offset: this.offset, source: '', message }; - } - else if (this.stack.length === 0) { - yield token; - } - else { - const top = this.peek(1); - if (token.type === 'block-scalar') { - // Block scalars use their parent rather than header indent - token.indent = 'indent' in top ? top.indent : 0; - } - else if (token.type === 'flow-collection' && top.type === 'document') { - // Ignore all indent for top-level flow collections - token.indent = 0; - } - if (token.type === 'flow-collection') - fixFlowSeqItems(token); - switch (top.type) { - case 'document': - top.value = token; - break; - case 'block-scalar': - top.props.push(token); // error - break; - case 'block-map': { - const it = top.items[top.items.length - 1]; - if (it.value) { - top.items.push({ start: [], key: token, sep: [] }); - this.onKeyLine = true; - return; - } - else if (it.sep) { - it.value = token; - } - else { - Object.assign(it, { key: token, sep: [] }); - this.onKeyLine = !includesToken(it.start, 'explicit-key-ind'); - return; - } - break; - } - case 'block-seq': { - const it = top.items[top.items.length - 1]; - if (it.value) - top.items.push({ start: [], value: token }); - else - it.value = token; - break; - } - case 'flow-collection': { - const it = top.items[top.items.length - 1]; - if (!it || it.value) - top.items.push({ start: [], key: token, sep: [] }); - else if (it.sep) - it.value = token; - else - Object.assign(it, { key: token, sep: [] }); - return; - } - /* istanbul ignore next should not happen */ - default: - yield* this.pop(); - yield* this.pop(token); - } - if ((top.type === 'document' || - top.type === 'block-map' || - top.type === 'block-seq') && - (token.type === 'block-map' || token.type === 'block-seq')) { - const last = token.items[token.items.length - 1]; - if (last && - !last.sep && - !last.value && - last.start.length > 0 && - findNonEmptyIndex(last.start) === -1 && - (token.indent === 0 || - last.start.every(st => st.type !== 'comment' || st.indent < token.indent))) { - if (top.type === 'document') - top.end = last.start; - else - top.items.push({ start: last.start }); - token.items.splice(-1, 1); - } - } - } - } - *stream() { - switch (this.type) { - case 'directive-line': - yield { type: 'directive', offset: this.offset, source: this.source }; - return; - case 'byte-order-mark': - case 'space': - case 'comment': - case 'newline': - yield this.sourceToken; - return; - case 'doc-mode': - case 'doc-start': { - const doc = { - type: 'document', - offset: this.offset, - start: [] - }; - if (this.type === 'doc-start') - doc.start.push(this.sourceToken); - this.stack.push(doc); - return; - } - } - yield { - type: 'error', - offset: this.offset, - message: `Unexpected ${this.type} token in YAML stream`, - source: this.source - }; - } - *document(doc) { - if (doc.value) - return yield* this.lineEnd(doc); - switch (this.type) { - case 'doc-start': { - if (findNonEmptyIndex(doc.start) !== -1) { - yield* this.pop(); - yield* this.step(); - } - else - doc.start.push(this.sourceToken); - return; - } - case 'anchor': - case 'tag': - case 'space': - case 'comment': - case 'newline': - doc.start.push(this.sourceToken); - return; - } - const bv = this.startBlockValue(doc); - if (bv) - this.stack.push(bv); - else { - yield { - type: 'error', - offset: this.offset, - message: `Unexpected ${this.type} token in YAML document`, - source: this.source - }; - } - } - *scalar(scalar) { - if (this.type === 'map-value-ind') { - const prev = getPrevProps(this.peek(2)); - const start = getFirstKeyStartProps(prev); - let sep; - if (scalar.end) { - sep = scalar.end; - sep.push(this.sourceToken); - delete scalar.end; - } - else - sep = [this.sourceToken]; - const map = { - type: 'block-map', - offset: scalar.offset, - indent: scalar.indent, - items: [{ start, key: scalar, sep }] - }; - this.onKeyLine = true; - this.stack[this.stack.length - 1] = map; - } - else - yield* this.lineEnd(scalar); - } - *blockScalar(scalar) { - switch (this.type) { - case 'space': - case 'comment': - case 'newline': - scalar.props.push(this.sourceToken); - return; - case 'scalar': - scalar.source = this.source; - // block-scalar source includes trailing newline - this.atNewLine = true; - this.indent = 0; - if (this.onNewLine) { - let nl = this.source.indexOf('\n') + 1; - while (nl !== 0) { - this.onNewLine(this.offset + nl); - nl = this.source.indexOf('\n', nl) + 1; - } - } - yield* this.pop(); - break; - /* istanbul ignore next should not happen */ - default: - yield* this.pop(); - yield* this.step(); - } - } - *blockMap(map) { - const it = map.items[map.items.length - 1]; - // it.sep is true-ish if pair already has key or : separator - switch (this.type) { - case 'newline': - this.onKeyLine = false; - if (it.value) { - const end = 'end' in it.value ? it.value.end : undefined; - const last = Array.isArray(end) ? end[end.length - 1] : undefined; - if (last?.type === 'comment') - end?.push(this.sourceToken); - else - map.items.push({ start: [this.sourceToken] }); - } - else if (it.sep) { - it.sep.push(this.sourceToken); - } - else { - it.start.push(this.sourceToken); - } - return; - case 'space': - case 'comment': - if (it.value) { - map.items.push({ start: [this.sourceToken] }); - } - else if (it.sep) { - it.sep.push(this.sourceToken); - } - else { - if (this.atIndentedComment(it.start, map.indent)) { - const prev = map.items[map.items.length - 2]; - const end = prev?.value?.end; - if (Array.isArray(end)) { - Array.prototype.push.apply(end, it.start); - end.push(this.sourceToken); - map.items.pop(); - return; - } - } - it.start.push(this.sourceToken); - } - return; - } - if (this.indent >= map.indent) { - const atNextItem = !this.onKeyLine && this.indent === map.indent && it.sep; - // For empty nodes, assign newline-separated not indented empty tokens to following node - let start = []; - if (atNextItem && it.sep && !it.value) { - const nl = []; - for (let i = 0; i < it.sep.length; ++i) { - const st = it.sep[i]; - switch (st.type) { - case 'newline': - nl.push(i); - break; - case 'space': - break; - case 'comment': - if (st.indent > map.indent) - nl.length = 0; - break; - default: - nl.length = 0; - } - } - if (nl.length >= 2) - start = it.sep.splice(nl[1]); - } - switch (this.type) { - case 'anchor': - case 'tag': - if (atNextItem || it.value) { - start.push(this.sourceToken); - map.items.push({ start }); - this.onKeyLine = true; - } - else if (it.sep) { - it.sep.push(this.sourceToken); - } - else { - it.start.push(this.sourceToken); - } - return; - case 'explicit-key-ind': - if (!it.sep && !includesToken(it.start, 'explicit-key-ind')) { - it.start.push(this.sourceToken); - } - else if (atNextItem || it.value) { - start.push(this.sourceToken); - map.items.push({ start }); - } - else { - this.stack.push({ - type: 'block-map', - offset: this.offset, - indent: this.indent, - items: [{ start: [this.sourceToken] }] - }); - } - this.onKeyLine = true; - return; - case 'map-value-ind': - if (includesToken(it.start, 'explicit-key-ind')) { - if (!it.sep) { - if (includesToken(it.start, 'newline')) { - Object.assign(it, { key: null, sep: [this.sourceToken] }); - } - else { - const start = getFirstKeyStartProps(it.start); - this.stack.push({ - type: 'block-map', - offset: this.offset, - indent: this.indent, - items: [{ start, key: null, sep: [this.sourceToken] }] - }); - } - } - else if (it.value) { - map.items.push({ start: [], key: null, sep: [this.sourceToken] }); - } - else if (includesToken(it.sep, 'map-value-ind')) { - this.stack.push({ - type: 'block-map', - offset: this.offset, - indent: this.indent, - items: [{ start, key: null, sep: [this.sourceToken] }] - }); - } - else if (isFlowToken(it.key) && - !includesToken(it.sep, 'newline')) { - const start = getFirstKeyStartProps(it.start); - const key = it.key; - const sep = it.sep; - sep.push(this.sourceToken); - // @ts-expect-error type guard is wrong here - delete it.key, delete it.sep; - this.stack.push({ - type: 'block-map', - offset: this.offset, - indent: this.indent, - items: [{ start, key, sep }] - }); - } - else if (start.length > 0) { - // Not actually at next item - it.sep = it.sep.concat(start, this.sourceToken); - } - else { - it.sep.push(this.sourceToken); - } - } - else { - if (!it.sep) { - Object.assign(it, { key: null, sep: [this.sourceToken] }); - } - else if (it.value || atNextItem) { - map.items.push({ start, key: null, sep: [this.sourceToken] }); - } - else if (includesToken(it.sep, 'map-value-ind')) { - this.stack.push({ - type: 'block-map', - offset: this.offset, - indent: this.indent, - items: [{ start: [], key: null, sep: [this.sourceToken] }] - }); - } - else { - it.sep.push(this.sourceToken); - } - } - this.onKeyLine = true; - return; - case 'alias': - case 'scalar': - case 'single-quoted-scalar': - case 'double-quoted-scalar': { - const fs = this.flowScalar(this.type); - if (atNextItem || it.value) { - map.items.push({ start, key: fs, sep: [] }); - this.onKeyLine = true; - } - else if (it.sep) { - this.stack.push(fs); - } - else { - Object.assign(it, { key: fs, sep: [] }); - this.onKeyLine = true; - } - return; - } - default: { - const bv = this.startBlockValue(map); - if (bv) { - if (atNextItem && - bv.type !== 'block-seq' && - includesToken(it.start, 'explicit-key-ind')) { - map.items.push({ start }); - } - this.stack.push(bv); - return; - } - } - } - } - yield* this.pop(); - yield* this.step(); - } - *blockSequence(seq) { - const it = seq.items[seq.items.length - 1]; - switch (this.type) { - case 'newline': - if (it.value) { - const end = 'end' in it.value ? it.value.end : undefined; - const last = Array.isArray(end) ? end[end.length - 1] : undefined; - if (last?.type === 'comment') - end?.push(this.sourceToken); - else - seq.items.push({ start: [this.sourceToken] }); - } - else - it.start.push(this.sourceToken); - return; - case 'space': - case 'comment': - if (it.value) - seq.items.push({ start: [this.sourceToken] }); - else { - if (this.atIndentedComment(it.start, seq.indent)) { - const prev = seq.items[seq.items.length - 2]; - const end = prev?.value?.end; - if (Array.isArray(end)) { - Array.prototype.push.apply(end, it.start); - end.push(this.sourceToken); - seq.items.pop(); - return; - } - } - it.start.push(this.sourceToken); - } - return; - case 'anchor': - case 'tag': - if (it.value || this.indent <= seq.indent) - break; - it.start.push(this.sourceToken); - return; - case 'seq-item-ind': - if (this.indent !== seq.indent) - break; - if (it.value || includesToken(it.start, 'seq-item-ind')) - seq.items.push({ start: [this.sourceToken] }); - else - it.start.push(this.sourceToken); - return; - } - if (this.indent > seq.indent) { - const bv = this.startBlockValue(seq); - if (bv) { - this.stack.push(bv); - return; - } - } - yield* this.pop(); - yield* this.step(); - } - *flowCollection(fc) { - const it = fc.items[fc.items.length - 1]; - if (this.type === 'flow-error-end') { - let top; - do { - yield* this.pop(); - top = this.peek(1); - } while (top && top.type === 'flow-collection'); - } - else if (fc.end.length === 0) { - switch (this.type) { - case 'comma': - case 'explicit-key-ind': - if (!it || it.sep) - fc.items.push({ start: [this.sourceToken] }); - else - it.start.push(this.sourceToken); - return; - case 'map-value-ind': - if (!it || it.value) - fc.items.push({ start: [], key: null, sep: [this.sourceToken] }); - else if (it.sep) - it.sep.push(this.sourceToken); - else - Object.assign(it, { key: null, sep: [this.sourceToken] }); - return; - case 'space': - case 'comment': - case 'newline': - case 'anchor': - case 'tag': - if (!it || it.value) - fc.items.push({ start: [this.sourceToken] }); - else if (it.sep) - it.sep.push(this.sourceToken); - else - it.start.push(this.sourceToken); - return; - case 'alias': - case 'scalar': - case 'single-quoted-scalar': - case 'double-quoted-scalar': { - const fs = this.flowScalar(this.type); - if (!it || it.value) - fc.items.push({ start: [], key: fs, sep: [] }); - else if (it.sep) - this.stack.push(fs); - else - Object.assign(it, { key: fs, sep: [] }); - return; - } - case 'flow-map-end': - case 'flow-seq-end': - fc.end.push(this.sourceToken); - return; - } - const bv = this.startBlockValue(fc); - /* istanbul ignore else should not happen */ - if (bv) - this.stack.push(bv); - else { - yield* this.pop(); - yield* this.step(); - } - } - else { - const parent = this.peek(2); - if (parent.type === 'block-map' && - ((this.type === 'map-value-ind' && parent.indent === fc.indent) || - (this.type === 'newline' && - !parent.items[parent.items.length - 1].sep))) { - yield* this.pop(); - yield* this.step(); - } - else if (this.type === 'map-value-ind' && - parent.type !== 'flow-collection') { - const prev = getPrevProps(parent); - const start = getFirstKeyStartProps(prev); - fixFlowSeqItems(fc); - const sep = fc.end.splice(1, fc.end.length); - sep.push(this.sourceToken); - const map = { - type: 'block-map', - offset: fc.offset, - indent: fc.indent, - items: [{ start, key: fc, sep }] - }; - this.onKeyLine = true; - this.stack[this.stack.length - 1] = map; - } - else { - yield* this.lineEnd(fc); - } - } - } - flowScalar(type) { - if (this.onNewLine) { - let nl = this.source.indexOf('\n') + 1; - while (nl !== 0) { - this.onNewLine(this.offset + nl); - nl = this.source.indexOf('\n', nl) + 1; - } - } - return { - type, - offset: this.offset, - indent: this.indent, - source: this.source - }; - } - startBlockValue(parent) { - switch (this.type) { - case 'alias': - case 'scalar': - case 'single-quoted-scalar': - case 'double-quoted-scalar': - return this.flowScalar(this.type); - case 'block-scalar-header': - return { - type: 'block-scalar', - offset: this.offset, - indent: this.indent, - props: [this.sourceToken], - source: '' - }; - case 'flow-map-start': - case 'flow-seq-start': - return { - type: 'flow-collection', - offset: this.offset, - indent: this.indent, - start: this.sourceToken, - items: [], - end: [] - }; - case 'seq-item-ind': - return { - type: 'block-seq', - offset: this.offset, - indent: this.indent, - items: [{ start: [this.sourceToken] }] - }; - case 'explicit-key-ind': { - this.onKeyLine = true; - const prev = getPrevProps(parent); - const start = getFirstKeyStartProps(prev); - start.push(this.sourceToken); - return { - type: 'block-map', - offset: this.offset, - indent: this.indent, - items: [{ start }] - }; - } - case 'map-value-ind': { - this.onKeyLine = true; - const prev = getPrevProps(parent); - const start = getFirstKeyStartProps(prev); - return { - type: 'block-map', - offset: this.offset, - indent: this.indent, - items: [{ start, key: null, sep: [this.sourceToken] }] - }; - } - } - return null; - } - atIndentedComment(start, indent) { - if (this.type !== 'comment') - return false; - if (this.indent <= indent) - return false; - return start.every(st => st.type === 'newline' || st.type === 'space'); - } - *documentEnd(docEnd) { - if (this.type !== 'doc-mode') { - if (docEnd.end) - docEnd.end.push(this.sourceToken); - else - docEnd.end = [this.sourceToken]; - if (this.type === 'newline') - yield* this.pop(); - } - } - *lineEnd(token) { - switch (this.type) { - case 'comma': - case 'doc-start': - case 'doc-end': - case 'flow-seq-end': - case 'flow-map-end': - case 'map-value-ind': - yield* this.pop(); - yield* this.step(); - break; - case 'newline': - this.onKeyLine = false; - // fallthrough - case 'space': - case 'comment': - default: - // all other values are errors - if (token.end) - token.end.push(this.sourceToken); - else - token.end = [this.sourceToken]; - if (this.type === 'newline') - yield* this.pop(); - } - } -} - -exports.Parser = Parser; diff --git a/tools/yaml/dist/public-api.d.ts b/tools/yaml/dist/public-api.d.ts deleted file mode 100644 index 2b771ca..0000000 --- a/tools/yaml/dist/public-api.d.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { Composer } from './compose/composer.js'; -import type { Reviver } from './doc/applyReviver.js'; -import { Document, Replacer } from './doc/Document.js'; -import type { Node, ParsedNode } from './nodes/Node.js'; -import type { CreateNodeOptions, DocumentOptions, ParseOptions, SchemaOptions, ToJSOptions, ToStringOptions } from './options.js'; -export interface EmptyStream extends Array, ReturnType { - empty: true; -} -/** - * Parse the input as a stream of YAML documents. - * - * Documents should be separated from each other by `...` or `---` marker lines. - * - * @returns If an empty `docs` array is returned, it will be of type - * EmptyStream and contain additional stream information. In - * TypeScript, you should use `'empty' in docs` as a type guard for it. - */ -export declare function parseAllDocuments(source: string, options?: ParseOptions & DocumentOptions & SchemaOptions): Array : Document> | EmptyStream; -/** Parse an input string into a single YAML.Document */ -export declare function parseDocument(source: string, options?: ParseOptions & DocumentOptions & SchemaOptions): Contents extends ParsedNode ? Document.Parsed : Document; -/** - * Parse an input string into JavaScript. - * - * Only supports input consisting of a single YAML document; for multi-document - * support you should use `YAML.parseAllDocuments`. May throw on error, and may - * log warnings using `console.warn`. - * - * @param str - A string with YAML formatting. - * @param reviver - A reviver function, as in `JSON.parse()` - * @returns The value will match the type of the root value of the parsed YAML - * document, so Maps become objects, Sequences arrays, and scalars result in - * nulls, booleans, numbers and strings. - */ -export declare function parse(src: string, options?: ParseOptions & DocumentOptions & SchemaOptions & ToJSOptions): any; -export declare function parse(src: string, reviver: Reviver, options?: ParseOptions & DocumentOptions & SchemaOptions & ToJSOptions): any; -/** - * Stringify a value as a YAML document. - * - * @param replacer - A replacer array or function, as in `JSON.stringify()` - * @returns Will always include `\n` as the last character, as is expected of YAML documents. - */ -export declare function stringify(value: any, options?: DocumentOptions & SchemaOptions & ParseOptions & CreateNodeOptions & ToStringOptions): string; -export declare function stringify(value: any, replacer?: Replacer | null, options?: string | number | (DocumentOptions & SchemaOptions & ParseOptions & CreateNodeOptions & ToStringOptions)): string; diff --git a/tools/yaml/dist/public-api.js b/tools/yaml/dist/public-api.js deleted file mode 100644 index 38aad92..0000000 --- a/tools/yaml/dist/public-api.js +++ /dev/null @@ -1,104 +0,0 @@ -'use strict'; - -var composer = require('./compose/composer.js'); -var Document = require('./doc/Document.js'); -var errors = require('./errors.js'); -var log = require('./log.js'); -var lineCounter = require('./parse/line-counter.js'); -var parser = require('./parse/parser.js'); - -function parseOptions(options) { - const prettyErrors = options.prettyErrors !== false; - const lineCounter$1 = options.lineCounter || (prettyErrors && new lineCounter.LineCounter()) || null; - return { lineCounter: lineCounter$1, prettyErrors }; -} -/** - * Parse the input as a stream of YAML documents. - * - * Documents should be separated from each other by `...` or `---` marker lines. - * - * @returns If an empty `docs` array is returned, it will be of type - * EmptyStream and contain additional stream information. In - * TypeScript, you should use `'empty' in docs` as a type guard for it. - */ -function parseAllDocuments(source, options = {}) { - const { lineCounter, prettyErrors } = parseOptions(options); - const parser$1 = new parser.Parser(lineCounter?.addNewLine); - const composer$1 = new composer.Composer(options); - const docs = Array.from(composer$1.compose(parser$1.parse(source))); - if (prettyErrors && lineCounter) - for (const doc of docs) { - doc.errors.forEach(errors.prettifyError(source, lineCounter)); - doc.warnings.forEach(errors.prettifyError(source, lineCounter)); - } - if (docs.length > 0) - return docs; - return Object.assign([], { empty: true }, composer$1.streamInfo()); -} -/** Parse an input string into a single YAML.Document */ -function parseDocument(source, options = {}) { - const { lineCounter, prettyErrors } = parseOptions(options); - const parser$1 = new parser.Parser(lineCounter?.addNewLine); - const composer$1 = new composer.Composer(options); - // `doc` is always set by compose.end(true) at the very latest - let doc = null; - for (const _doc of composer$1.compose(parser$1.parse(source), true, source.length)) { - if (!doc) - doc = _doc; - else if (doc.options.logLevel !== 'silent') { - doc.errors.push(new errors.YAMLParseError(_doc.range.slice(0, 2), 'MULTIPLE_DOCS', 'Source contains multiple documents; please use YAML.parseAllDocuments()')); - break; - } - } - if (prettyErrors && lineCounter) { - doc.errors.forEach(errors.prettifyError(source, lineCounter)); - doc.warnings.forEach(errors.prettifyError(source, lineCounter)); - } - return doc; -} -function parse(src, reviver, options) { - let _reviver = undefined; - if (typeof reviver === 'function') { - _reviver = reviver; - } - else if (options === undefined && reviver && typeof reviver === 'object') { - options = reviver; - } - const doc = parseDocument(src, options); - if (!doc) - return null; - doc.warnings.forEach(warning => log.warn(doc.options.logLevel, warning)); - if (doc.errors.length > 0) { - if (doc.options.logLevel !== 'silent') - throw doc.errors[0]; - else - doc.errors = []; - } - return doc.toJS(Object.assign({ reviver: _reviver }, options)); -} -function stringify(value, replacer, options) { - let _replacer = null; - if (typeof replacer === 'function' || Array.isArray(replacer)) { - _replacer = replacer; - } - else if (options === undefined && replacer) { - options = replacer; - } - if (typeof options === 'string') - options = options.length; - if (typeof options === 'number') { - const indent = Math.round(options); - options = indent < 1 ? undefined : indent > 8 ? { indent: 8 } : { indent }; - } - if (value === undefined) { - const { keepUndefined } = options ?? replacer ?? {}; - if (!keepUndefined) - return undefined; - } - return new Document.Document(value, _replacer, options).toString(options); -} - -exports.parse = parse; -exports.parseAllDocuments = parseAllDocuments; -exports.parseDocument = parseDocument; -exports.stringify = stringify; diff --git a/tools/yaml/dist/schema/Schema.d.ts b/tools/yaml/dist/schema/Schema.d.ts deleted file mode 100644 index fdd9e6b..0000000 --- a/tools/yaml/dist/schema/Schema.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { MAP, SCALAR, SEQ } from '../nodes/identity.js'; -import type { Pair } from '../nodes/Pair.js'; -import type { SchemaOptions, ToStringOptions } from '../options.js'; -import type { CollectionTag, ScalarTag } from './types.js'; -export declare class Schema { - compat: Array | null; - knownTags: Record; - merge: boolean; - name: string; - sortMapEntries: ((a: Pair, b: Pair) => number) | null; - tags: Array; - toStringOptions: Readonly | null; - readonly [MAP]: CollectionTag; - readonly [SCALAR]: ScalarTag; - readonly [SEQ]: CollectionTag; - constructor({ compat, customTags, merge, resolveKnownTags, schema, sortMapEntries, toStringDefaults }: SchemaOptions); - clone(): Schema; -} diff --git a/tools/yaml/dist/schema/Schema.js b/tools/yaml/dist/schema/Schema.js deleted file mode 100644 index 91521d0..0000000 --- a/tools/yaml/dist/schema/Schema.js +++ /dev/null @@ -1,40 +0,0 @@ -'use strict'; - -var identity = require('../nodes/identity.js'); -var map = require('./common/map.js'); -var seq = require('./common/seq.js'); -var string = require('./common/string.js'); -var tags = require('./tags.js'); - -const sortMapEntriesByKey = (a, b) => a.key < b.key ? -1 : a.key > b.key ? 1 : 0; -class Schema { - constructor({ compat, customTags, merge, resolveKnownTags, schema, sortMapEntries, toStringDefaults }) { - this.compat = Array.isArray(compat) - ? tags.getTags(compat, 'compat') - : compat - ? tags.getTags(null, compat) - : null; - this.merge = !!merge; - this.name = (typeof schema === 'string' && schema) || 'core'; - this.knownTags = resolveKnownTags ? tags.coreKnownTags : {}; - this.tags = tags.getTags(customTags, this.name); - this.toStringOptions = toStringDefaults ?? null; - Object.defineProperty(this, identity.MAP, { value: map.map }); - Object.defineProperty(this, identity.SCALAR, { value: string.string }); - Object.defineProperty(this, identity.SEQ, { value: seq.seq }); - // Used by createMap() - this.sortMapEntries = - typeof sortMapEntries === 'function' - ? sortMapEntries - : sortMapEntries === true - ? sortMapEntriesByKey - : null; - } - clone() { - const copy = Object.create(Schema.prototype, Object.getOwnPropertyDescriptors(this)); - copy.tags = this.tags.slice(); - return copy; - } -} - -exports.Schema = Schema; diff --git a/tools/yaml/dist/schema/common/map.d.ts b/tools/yaml/dist/schema/common/map.d.ts deleted file mode 100644 index 9b300f8..0000000 --- a/tools/yaml/dist/schema/common/map.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import type { CollectionTag } from '../types.js'; -export declare const map: CollectionTag; diff --git a/tools/yaml/dist/schema/common/map.js b/tools/yaml/dist/schema/common/map.js deleted file mode 100644 index 649c3b9..0000000 --- a/tools/yaml/dist/schema/common/map.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var identity = require('../../nodes/identity.js'); -var YAMLMap = require('../../nodes/YAMLMap.js'); - -const map = { - collection: 'map', - default: true, - nodeClass: YAMLMap.YAMLMap, - tag: 'tag:yaml.org,2002:map', - resolve(map, onError) { - if (!identity.isMap(map)) - onError('Expected a mapping for this tag'); - return map; - }, - createNode: (schema, obj, ctx) => YAMLMap.YAMLMap.from(schema, obj, ctx) -}; - -exports.map = map; diff --git a/tools/yaml/dist/schema/common/null.d.ts b/tools/yaml/dist/schema/common/null.d.ts deleted file mode 100644 index 66abea5..0000000 --- a/tools/yaml/dist/schema/common/null.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { ScalarTag } from '../types.js'; -export declare const nullTag: ScalarTag & { - test: RegExp; -}; diff --git a/tools/yaml/dist/schema/common/null.js b/tools/yaml/dist/schema/common/null.js deleted file mode 100644 index cb353a7..0000000 --- a/tools/yaml/dist/schema/common/null.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var Scalar = require('../../nodes/Scalar.js'); - -const nullTag = { - identify: value => value == null, - createNode: () => new Scalar.Scalar(null), - default: true, - tag: 'tag:yaml.org,2002:null', - test: /^(?:~|[Nn]ull|NULL)?$/, - resolve: () => new Scalar.Scalar(null), - stringify: ({ source }, ctx) => typeof source === 'string' && nullTag.test.test(source) - ? source - : ctx.options.nullStr -}; - -exports.nullTag = nullTag; diff --git a/tools/yaml/dist/schema/common/seq.d.ts b/tools/yaml/dist/schema/common/seq.d.ts deleted file mode 100644 index c038d30..0000000 --- a/tools/yaml/dist/schema/common/seq.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import type { CollectionTag } from '../types.js'; -export declare const seq: CollectionTag; diff --git a/tools/yaml/dist/schema/common/seq.js b/tools/yaml/dist/schema/common/seq.js deleted file mode 100644 index 9c54bc9..0000000 --- a/tools/yaml/dist/schema/common/seq.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var identity = require('../../nodes/identity.js'); -var YAMLSeq = require('../../nodes/YAMLSeq.js'); - -const seq = { - collection: 'seq', - default: true, - nodeClass: YAMLSeq.YAMLSeq, - tag: 'tag:yaml.org,2002:seq', - resolve(seq, onError) { - if (!identity.isSeq(seq)) - onError('Expected a sequence for this tag'); - return seq; - }, - createNode: (schema, obj, ctx) => YAMLSeq.YAMLSeq.from(schema, obj, ctx) -}; - -exports.seq = seq; diff --git a/tools/yaml/dist/schema/common/string.d.ts b/tools/yaml/dist/schema/common/string.d.ts deleted file mode 100644 index 539c9b1..0000000 --- a/tools/yaml/dist/schema/common/string.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import type { ScalarTag } from '../types.js'; -export declare const string: ScalarTag; diff --git a/tools/yaml/dist/schema/common/string.js b/tools/yaml/dist/schema/common/string.js deleted file mode 100644 index 7601420..0000000 --- a/tools/yaml/dist/schema/common/string.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -var stringifyString = require('../../stringify/stringifyString.js'); - -const string = { - identify: value => typeof value === 'string', - default: true, - tag: 'tag:yaml.org,2002:str', - resolve: str => str, - stringify(item, ctx, onComment, onChompKeep) { - ctx = Object.assign({ actualString: true }, ctx); - return stringifyString.stringifyString(item, ctx, onComment, onChompKeep); - } -}; - -exports.string = string; diff --git a/tools/yaml/dist/schema/core/bool.d.ts b/tools/yaml/dist/schema/core/bool.d.ts deleted file mode 100644 index e4bdc4c..0000000 --- a/tools/yaml/dist/schema/core/bool.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { ScalarTag } from '../types.js'; -export declare const boolTag: ScalarTag & { - test: RegExp; -}; diff --git a/tools/yaml/dist/schema/core/bool.js b/tools/yaml/dist/schema/core/bool.js deleted file mode 100644 index 4def73c..0000000 --- a/tools/yaml/dist/schema/core/bool.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var Scalar = require('../../nodes/Scalar.js'); - -const boolTag = { - identify: value => typeof value === 'boolean', - default: true, - tag: 'tag:yaml.org,2002:bool', - test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/, - resolve: str => new Scalar.Scalar(str[0] === 't' || str[0] === 'T'), - stringify({ source, value }, ctx) { - if (source && boolTag.test.test(source)) { - const sv = source[0] === 't' || source[0] === 'T'; - if (value === sv) - return source; - } - return value ? ctx.options.trueStr : ctx.options.falseStr; - } -}; - -exports.boolTag = boolTag; diff --git a/tools/yaml/dist/schema/core/float.d.ts b/tools/yaml/dist/schema/core/float.d.ts deleted file mode 100644 index 22f0249..0000000 --- a/tools/yaml/dist/schema/core/float.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { ScalarTag } from '../types.js'; -export declare const floatNaN: ScalarTag; -export declare const floatExp: ScalarTag; -export declare const float: ScalarTag; diff --git a/tools/yaml/dist/schema/core/float.js b/tools/yaml/dist/schema/core/float.js deleted file mode 100644 index a1c96dd..0000000 --- a/tools/yaml/dist/schema/core/float.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -var Scalar = require('../../nodes/Scalar.js'); -var stringifyNumber = require('../../stringify/stringifyNumber.js'); - -const floatNaN = { - identify: value => typeof value === 'number', - default: true, - tag: 'tag:yaml.org,2002:float', - test: /^(?:[-+]?\.(?:inf|Inf|INF|nan|NaN|NAN))$/, - resolve: str => str.slice(-3).toLowerCase() === 'nan' - ? NaN - : str[0] === '-' - ? Number.NEGATIVE_INFINITY - : Number.POSITIVE_INFINITY, - stringify: stringifyNumber.stringifyNumber -}; -const floatExp = { - identify: value => typeof value === 'number', - default: true, - tag: 'tag:yaml.org,2002:float', - format: 'EXP', - test: /^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/, - resolve: str => parseFloat(str), - stringify(node) { - const num = Number(node.value); - return isFinite(num) ? num.toExponential() : stringifyNumber.stringifyNumber(node); - } -}; -const float = { - identify: value => typeof value === 'number', - default: true, - tag: 'tag:yaml.org,2002:float', - test: /^[-+]?(?:\.[0-9]+|[0-9]+\.[0-9]*)$/, - resolve(str) { - const node = new Scalar.Scalar(parseFloat(str)); - const dot = str.indexOf('.'); - if (dot !== -1 && str[str.length - 1] === '0') - node.minFractionDigits = str.length - dot - 1; - return node; - }, - stringify: stringifyNumber.stringifyNumber -}; - -exports.float = float; -exports.floatExp = floatExp; -exports.floatNaN = floatNaN; diff --git a/tools/yaml/dist/schema/core/int.d.ts b/tools/yaml/dist/schema/core/int.d.ts deleted file mode 100644 index 35e2d4b..0000000 --- a/tools/yaml/dist/schema/core/int.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { ScalarTag } from '../types.js'; -export declare const intOct: ScalarTag; -export declare const int: ScalarTag; -export declare const intHex: ScalarTag; diff --git a/tools/yaml/dist/schema/core/int.js b/tools/yaml/dist/schema/core/int.js deleted file mode 100644 index fe4c9ca..0000000 --- a/tools/yaml/dist/schema/core/int.js +++ /dev/null @@ -1,42 +0,0 @@ -'use strict'; - -var stringifyNumber = require('../../stringify/stringifyNumber.js'); - -const intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value); -const intResolve = (str, offset, radix, { intAsBigInt }) => (intAsBigInt ? BigInt(str) : parseInt(str.substring(offset), radix)); -function intStringify(node, radix, prefix) { - const { value } = node; - if (intIdentify(value) && value >= 0) - return prefix + value.toString(radix); - return stringifyNumber.stringifyNumber(node); -} -const intOct = { - identify: value => intIdentify(value) && value >= 0, - default: true, - tag: 'tag:yaml.org,2002:int', - format: 'OCT', - test: /^0o[0-7]+$/, - resolve: (str, _onError, opt) => intResolve(str, 2, 8, opt), - stringify: node => intStringify(node, 8, '0o') -}; -const int = { - identify: intIdentify, - default: true, - tag: 'tag:yaml.org,2002:int', - test: /^[-+]?[0-9]+$/, - resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt), - stringify: stringifyNumber.stringifyNumber -}; -const intHex = { - identify: value => intIdentify(value) && value >= 0, - default: true, - tag: 'tag:yaml.org,2002:int', - format: 'HEX', - test: /^0x[0-9a-fA-F]+$/, - resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt), - stringify: node => intStringify(node, 16, '0x') -}; - -exports.int = int; -exports.intHex = intHex; -exports.intOct = intOct; diff --git a/tools/yaml/dist/schema/core/schema.d.ts b/tools/yaml/dist/schema/core/schema.d.ts deleted file mode 100644 index f5bdd21..0000000 --- a/tools/yaml/dist/schema/core/schema.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare const schema: (import("../types.js").CollectionTag | import("../types.js").ScalarTag)[]; diff --git a/tools/yaml/dist/schema/core/schema.js b/tools/yaml/dist/schema/core/schema.js deleted file mode 100644 index 6ab87f2..0000000 --- a/tools/yaml/dist/schema/core/schema.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -var map = require('../common/map.js'); -var _null = require('../common/null.js'); -var seq = require('../common/seq.js'); -var string = require('../common/string.js'); -var bool = require('./bool.js'); -var float = require('./float.js'); -var int = require('./int.js'); - -const schema = [ - map.map, - seq.seq, - string.string, - _null.nullTag, - bool.boolTag, - int.intOct, - int.int, - int.intHex, - float.floatNaN, - float.floatExp, - float.float -]; - -exports.schema = schema; diff --git a/tools/yaml/dist/schema/json-schema.d.ts b/tools/yaml/dist/schema/json-schema.d.ts deleted file mode 100644 index 6d51f40..0000000 --- a/tools/yaml/dist/schema/json-schema.d.ts +++ /dev/null @@ -1,69 +0,0 @@ -type JsonSchema = boolean | ArraySchema | ObjectSchema | NumberSchema | StringSchema; -type JsonType = 'array' | 'object' | 'string' | 'number' | 'integer' | 'boolean' | 'null'; -interface CommonSchema { - type?: JsonType | JsonType[]; - const?: unknown; - enum?: unknown[]; - format?: string; - allOf?: JsonSchema[]; - anyOf?: JsonSchema[]; - oneOf?: JsonSchema[]; - not?: JsonSchema; - if?: JsonSchema; - then?: JsonSchema; - else?: JsonSchema; - $id?: string; - $defs?: Record; - $anchor?: string; - $dynamicAnchor?: string; - $ref?: string; - $dynamicRef?: string; - $schema?: string; - $vocabulary?: Record; - $comment?: string; - default?: unknown; - deprecated?: boolean; - readOnly?: boolean; - writeOnly?: boolean; - title?: string; - description?: string; - examples?: unknown[]; -} -interface ArraySchema extends CommonSchema { - prefixItems?: JsonSchema[]; - items?: JsonSchema; - contains?: JsonSchema; - unevaluatedItems?: JsonSchema; - maxItems?: number; - minItems?: number; - uniqueItems?: boolean; - maxContains?: number; - minContains?: number; -} -interface ObjectSchema extends CommonSchema { - properties?: Record; - patternProperties?: Record; - additionalProperties?: JsonSchema; - propertyNames?: JsonSchema; - unevaluatedProperties?: JsonSchema; - maxProperties?: number; - minProperties?: number; - required?: string[]; - dependentRequired?: Record; - dependentSchemas?: Record; -} -interface StringSchema extends CommonSchema { - maxLength?: number; - minLength?: number; - patter?: string; - contentEncoding?: string; - contentMediaType?: string; - contentSchema?: JsonSchema; -} -interface NumberSchema extends CommonSchema { - multipleOf?: number; - maximum?: number; - exclusiveMaximum?: number; - minimum?: number; - exclusiveMinimum?: number; -} diff --git a/tools/yaml/dist/schema/json/schema.d.ts b/tools/yaml/dist/schema/json/schema.d.ts deleted file mode 100644 index 76a4301..0000000 --- a/tools/yaml/dist/schema/json/schema.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { CollectionTag, ScalarTag } from '../types.js'; -export declare const schema: (CollectionTag | ScalarTag)[]; diff --git a/tools/yaml/dist/schema/json/schema.js b/tools/yaml/dist/schema/json/schema.js deleted file mode 100644 index 31d0b4d..0000000 --- a/tools/yaml/dist/schema/json/schema.js +++ /dev/null @@ -1,64 +0,0 @@ -'use strict'; - -var Scalar = require('../../nodes/Scalar.js'); -var map = require('../common/map.js'); -var seq = require('../common/seq.js'); - -function intIdentify(value) { - return typeof value === 'bigint' || Number.isInteger(value); -} -const stringifyJSON = ({ value }) => JSON.stringify(value); -const jsonScalars = [ - { - identify: value => typeof value === 'string', - default: true, - tag: 'tag:yaml.org,2002:str', - resolve: str => str, - stringify: stringifyJSON - }, - { - identify: value => value == null, - createNode: () => new Scalar.Scalar(null), - default: true, - tag: 'tag:yaml.org,2002:null', - test: /^null$/, - resolve: () => null, - stringify: stringifyJSON - }, - { - identify: value => typeof value === 'boolean', - default: true, - tag: 'tag:yaml.org,2002:bool', - test: /^true|false$/, - resolve: str => str === 'true', - stringify: stringifyJSON - }, - { - identify: intIdentify, - default: true, - tag: 'tag:yaml.org,2002:int', - test: /^-?(?:0|[1-9][0-9]*)$/, - resolve: (str, _onError, { intAsBigInt }) => intAsBigInt ? BigInt(str) : parseInt(str, 10), - stringify: ({ value }) => intIdentify(value) ? value.toString() : JSON.stringify(value) - }, - { - identify: value => typeof value === 'number', - default: true, - tag: 'tag:yaml.org,2002:float', - test: /^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/, - resolve: str => parseFloat(str), - stringify: stringifyJSON - } -]; -const jsonError = { - default: true, - tag: '', - test: /^/, - resolve(str, onError) { - onError(`Unresolved plain scalar ${JSON.stringify(str)}`); - return str; - } -}; -const schema = [map.map, seq.seq].concat(jsonScalars, jsonError); - -exports.schema = schema; diff --git a/tools/yaml/dist/schema/tags.d.ts b/tools/yaml/dist/schema/tags.d.ts deleted file mode 100644 index 133333f..0000000 --- a/tools/yaml/dist/schema/tags.d.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { SchemaOptions } from '../options.js'; -import type { CollectionTag, ScalarTag } from './types.js'; -declare const tagsByName: { - binary: ScalarTag; - bool: ScalarTag & { - test: RegExp; - }; - float: ScalarTag; - floatExp: ScalarTag; - floatNaN: ScalarTag; - floatTime: ScalarTag; - int: ScalarTag; - intHex: ScalarTag; - intOct: ScalarTag; - intTime: ScalarTag; - map: CollectionTag; - null: ScalarTag & { - test: RegExp; - }; - omap: CollectionTag; - pairs: CollectionTag; - seq: CollectionTag; - set: CollectionTag; - timestamp: ScalarTag & { - test: RegExp; - }; -}; -export type TagId = keyof typeof tagsByName; -export type Tags = Array; -export declare const coreKnownTags: { - 'tag:yaml.org,2002:binary': ScalarTag; - 'tag:yaml.org,2002:omap': CollectionTag; - 'tag:yaml.org,2002:pairs': CollectionTag; - 'tag:yaml.org,2002:set': CollectionTag; - 'tag:yaml.org,2002:timestamp': ScalarTag & { - test: RegExp; - }; -}; -export declare function getTags(customTags: SchemaOptions['customTags'] | undefined, schemaName: string): (CollectionTag | ScalarTag)[]; -export {}; diff --git a/tools/yaml/dist/schema/tags.js b/tools/yaml/dist/schema/tags.js deleted file mode 100644 index e49d2b0..0000000 --- a/tools/yaml/dist/schema/tags.js +++ /dev/null @@ -1,86 +0,0 @@ -'use strict'; - -var map = require('./common/map.js'); -var _null = require('./common/null.js'); -var seq = require('./common/seq.js'); -var string = require('./common/string.js'); -var bool = require('./core/bool.js'); -var float = require('./core/float.js'); -var int = require('./core/int.js'); -var schema = require('./core/schema.js'); -var schema$1 = require('./json/schema.js'); -var binary = require('./yaml-1.1/binary.js'); -var omap = require('./yaml-1.1/omap.js'); -var pairs = require('./yaml-1.1/pairs.js'); -var schema$2 = require('./yaml-1.1/schema.js'); -var set = require('./yaml-1.1/set.js'); -var timestamp = require('./yaml-1.1/timestamp.js'); - -const schemas = new Map([ - ['core', schema.schema], - ['failsafe', [map.map, seq.seq, string.string]], - ['json', schema$1.schema], - ['yaml11', schema$2.schema], - ['yaml-1.1', schema$2.schema] -]); -const tagsByName = { - binary: binary.binary, - bool: bool.boolTag, - float: float.float, - floatExp: float.floatExp, - floatNaN: float.floatNaN, - floatTime: timestamp.floatTime, - int: int.int, - intHex: int.intHex, - intOct: int.intOct, - intTime: timestamp.intTime, - map: map.map, - null: _null.nullTag, - omap: omap.omap, - pairs: pairs.pairs, - seq: seq.seq, - set: set.set, - timestamp: timestamp.timestamp -}; -const coreKnownTags = { - 'tag:yaml.org,2002:binary': binary.binary, - 'tag:yaml.org,2002:omap': omap.omap, - 'tag:yaml.org,2002:pairs': pairs.pairs, - 'tag:yaml.org,2002:set': set.set, - 'tag:yaml.org,2002:timestamp': timestamp.timestamp -}; -function getTags(customTags, schemaName) { - let tags = schemas.get(schemaName); - if (!tags) { - if (Array.isArray(customTags)) - tags = []; - else { - const keys = Array.from(schemas.keys()) - .filter(key => key !== 'yaml11') - .map(key => JSON.stringify(key)) - .join(', '); - throw new Error(`Unknown schema "${schemaName}"; use one of ${keys} or define customTags array`); - } - } - if (Array.isArray(customTags)) { - for (const tag of customTags) - tags = tags.concat(tag); - } - else if (typeof customTags === 'function') { - tags = customTags(tags.slice()); - } - return tags.map(tag => { - if (typeof tag !== 'string') - return tag; - const tagObj = tagsByName[tag]; - if (tagObj) - return tagObj; - const keys = Object.keys(tagsByName) - .map(key => JSON.stringify(key)) - .join(', '); - throw new Error(`Unknown custom tag "${tag}"; use one of ${keys}`); - }); -} - -exports.coreKnownTags = coreKnownTags; -exports.getTags = getTags; diff --git a/tools/yaml/dist/schema/types.d.ts b/tools/yaml/dist/schema/types.d.ts deleted file mode 100644 index e814f1e..0000000 --- a/tools/yaml/dist/schema/types.d.ts +++ /dev/null @@ -1,90 +0,0 @@ -import type { CreateNodeContext } from '../doc/createNode.js'; -import type { Node } from '../nodes/Node.js'; -import type { Scalar } from '../nodes/Scalar.js'; -import type { YAMLMap } from '../nodes/YAMLMap.js'; -import type { YAMLSeq } from '../nodes/YAMLSeq.js'; -import type { ParseOptions } from '../options.js'; -import type { StringifyContext } from '../stringify/stringify.js'; -import type { Schema } from './Schema.js'; -interface TagBase { - /** - * An optional factory function, used e.g. by collections when wrapping JS objects as AST nodes. - */ - createNode?: (schema: Schema, value: unknown, ctx: CreateNodeContext) => Node; - /** - * If `true`, together with `test` allows for values to be stringified without - * an explicit tag. For most cases, it's unlikely that you'll actually want to - * use this, even if you first think you do. - */ - default?: boolean; - /** - * If a tag has multiple forms that should be parsed and/or stringified - * differently, use `format` to identify them. - */ - format?: string; - /** - * Used by `YAML.createNode` to detect your data type, e.g. using `typeof` or - * `instanceof`. - */ - identify?: (value: unknown) => boolean; - /** - * The identifier for your data type, with which its stringified form will be - * prefixed. Should either be a !-prefixed local `!tag`, or a fully qualified - * `tag:domain,date:foo`. - */ - tag: string; -} -export interface ScalarTag extends TagBase { - collection?: never; - nodeClass?: never; - /** - * Turns a value into an AST node. - * If returning a non-`Node` value, the output will be wrapped as a `Scalar`. - */ - resolve(value: string, onError: (message: string) => void, options: ParseOptions): unknown; - /** - * Optional function stringifying a Scalar node. If your data includes a - * suitable `.toString()` method, you can probably leave this undefined and - * use the default stringifier. - * - * @param item The node being stringified. - * @param ctx Contains the stringifying context variables. - * @param onComment Callback to signal that the stringifier includes the - * item's comment in its output. - * @param onChompKeep Callback to signal that the output uses a block scalar - * type with the `+` chomping indicator. - */ - stringify?: (item: Scalar, ctx: StringifyContext, onComment?: () => void, onChompKeep?: () => void) => string; - /** - * Together with `default` allows for values to be stringified without an - * explicit tag and detected using a regular expression. For most cases, it's - * unlikely that you'll actually want to use these, even if you first think - * you do. - */ - test?: RegExp; -} -export interface CollectionTag extends TagBase { - stringify?: never; - test?: never; - /** The source collection type supported by this tag. */ - collection: 'map' | 'seq'; - /** - * The `Node` child class that implements this tag. - * If set, used to select this tag when stringifying. - * - * If the class provides a static `from` method, then that - * will be used if the tag object doesn't have a `createNode` method. - */ - nodeClass?: { - new (schema?: Schema): Node; - from?: (schema: Schema, obj: unknown, ctx: CreateNodeContext) => Node; - }; - /** - * Turns a value into an AST node. - * If returning a non-`Node` value, the output will be wrapped as a `Scalar`. - * - * Note: this is required if nodeClass is not provided. - */ - resolve?: (value: YAMLMap.Parsed | YAMLSeq.Parsed, onError: (message: string) => void, options: ParseOptions) => unknown; -} -export {}; diff --git a/tools/yaml/dist/schema/yaml-1.1/binary.d.ts b/tools/yaml/dist/schema/yaml-1.1/binary.d.ts deleted file mode 100644 index 2054970..0000000 --- a/tools/yaml/dist/schema/yaml-1.1/binary.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import type { ScalarTag } from '../types.js'; -export declare const binary: ScalarTag; diff --git a/tools/yaml/dist/schema/yaml-1.1/binary.js b/tools/yaml/dist/schema/yaml-1.1/binary.js deleted file mode 100644 index df93e05..0000000 --- a/tools/yaml/dist/schema/yaml-1.1/binary.js +++ /dev/null @@ -1,68 +0,0 @@ -'use strict'; - -var Scalar = require('../../nodes/Scalar.js'); -var stringifyString = require('../../stringify/stringifyString.js'); - -const binary = { - identify: value => value instanceof Uint8Array, - default: false, - tag: 'tag:yaml.org,2002:binary', - /** - * Returns a Buffer in node and an Uint8Array in browsers - * - * To use the resulting buffer as an image, you'll want to do something like: - * - * const blob = new Blob([buffer], { type: 'image/jpeg' }) - * document.querySelector('#photo').src = URL.createObjectURL(blob) - */ - resolve(src, onError) { - if (typeof Buffer === 'function') { - return Buffer.from(src, 'base64'); - } - else if (typeof atob === 'function') { - // On IE 11, atob() can't handle newlines - const str = atob(src.replace(/[\n\r]/g, '')); - const buffer = new Uint8Array(str.length); - for (let i = 0; i < str.length; ++i) - buffer[i] = str.charCodeAt(i); - return buffer; - } - else { - onError('This environment does not support reading binary tags; either Buffer or atob is required'); - return src; - } - }, - stringify({ comment, type, value }, ctx, onComment, onChompKeep) { - const buf = value; // checked earlier by binary.identify() - let str; - if (typeof Buffer === 'function') { - str = - buf instanceof Buffer - ? buf.toString('base64') - : Buffer.from(buf.buffer).toString('base64'); - } - else if (typeof btoa === 'function') { - let s = ''; - for (let i = 0; i < buf.length; ++i) - s += String.fromCharCode(buf[i]); - str = btoa(s); - } - else { - throw new Error('This environment does not support writing binary tags; either Buffer or btoa is required'); - } - if (!type) - type = Scalar.Scalar.BLOCK_LITERAL; - if (type !== Scalar.Scalar.QUOTE_DOUBLE) { - const lineWidth = Math.max(ctx.options.lineWidth - ctx.indent.length, ctx.options.minContentWidth); - const n = Math.ceil(str.length / lineWidth); - const lines = new Array(n); - for (let i = 0, o = 0; i < n; ++i, o += lineWidth) { - lines[i] = str.substr(o, lineWidth); - } - str = lines.join(type === Scalar.Scalar.BLOCK_LITERAL ? '\n' : ' '); - } - return stringifyString.stringifyString({ comment, type, value: str }, ctx, onComment, onChompKeep); - } -}; - -exports.binary = binary; diff --git a/tools/yaml/dist/schema/yaml-1.1/bool.d.ts b/tools/yaml/dist/schema/yaml-1.1/bool.d.ts deleted file mode 100644 index 587b55b..0000000 --- a/tools/yaml/dist/schema/yaml-1.1/bool.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { ScalarTag } from '../types.js'; -export declare const trueTag: ScalarTag & { - test: RegExp; -}; -export declare const falseTag: ScalarTag & { - test: RegExp; -}; diff --git a/tools/yaml/dist/schema/yaml-1.1/bool.js b/tools/yaml/dist/schema/yaml-1.1/bool.js deleted file mode 100644 index fdb3b46..0000000 --- a/tools/yaml/dist/schema/yaml-1.1/bool.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; - -var Scalar = require('../../nodes/Scalar.js'); - -function boolStringify({ value, source }, ctx) { - const boolObj = value ? trueTag : falseTag; - if (source && boolObj.test.test(source)) - return source; - return value ? ctx.options.trueStr : ctx.options.falseStr; -} -const trueTag = { - identify: value => value === true, - default: true, - tag: 'tag:yaml.org,2002:bool', - test: /^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/, - resolve: () => new Scalar.Scalar(true), - stringify: boolStringify -}; -const falseTag = { - identify: value => value === false, - default: true, - tag: 'tag:yaml.org,2002:bool', - test: /^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/i, - resolve: () => new Scalar.Scalar(false), - stringify: boolStringify -}; - -exports.falseTag = falseTag; -exports.trueTag = trueTag; diff --git a/tools/yaml/dist/schema/yaml-1.1/float.d.ts b/tools/yaml/dist/schema/yaml-1.1/float.d.ts deleted file mode 100644 index 22f0249..0000000 --- a/tools/yaml/dist/schema/yaml-1.1/float.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { ScalarTag } from '../types.js'; -export declare const floatNaN: ScalarTag; -export declare const floatExp: ScalarTag; -export declare const float: ScalarTag; diff --git a/tools/yaml/dist/schema/yaml-1.1/float.js b/tools/yaml/dist/schema/yaml-1.1/float.js deleted file mode 100644 index 4aea19a..0000000 --- a/tools/yaml/dist/schema/yaml-1.1/float.js +++ /dev/null @@ -1,50 +0,0 @@ -'use strict'; - -var Scalar = require('../../nodes/Scalar.js'); -var stringifyNumber = require('../../stringify/stringifyNumber.js'); - -const floatNaN = { - identify: value => typeof value === 'number', - default: true, - tag: 'tag:yaml.org,2002:float', - test: /^[-+]?\.(?:inf|Inf|INF|nan|NaN|NAN)$/, - resolve: (str) => str.slice(-3).toLowerCase() === 'nan' - ? NaN - : str[0] === '-' - ? Number.NEGATIVE_INFINITY - : Number.POSITIVE_INFINITY, - stringify: stringifyNumber.stringifyNumber -}; -const floatExp = { - identify: value => typeof value === 'number', - default: true, - tag: 'tag:yaml.org,2002:float', - format: 'EXP', - test: /^[-+]?(?:[0-9][0-9_]*)?(?:\.[0-9_]*)?[eE][-+]?[0-9]+$/, - resolve: (str) => parseFloat(str.replace(/_/g, '')), - stringify(node) { - const num = Number(node.value); - return isFinite(num) ? num.toExponential() : stringifyNumber.stringifyNumber(node); - } -}; -const float = { - identify: value => typeof value === 'number', - default: true, - tag: 'tag:yaml.org,2002:float', - test: /^[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*$/, - resolve(str) { - const node = new Scalar.Scalar(parseFloat(str.replace(/_/g, ''))); - const dot = str.indexOf('.'); - if (dot !== -1) { - const f = str.substring(dot + 1).replace(/_/g, ''); - if (f[f.length - 1] === '0') - node.minFractionDigits = f.length; - } - return node; - }, - stringify: stringifyNumber.stringifyNumber -}; - -exports.float = float; -exports.floatExp = floatExp; -exports.floatNaN = floatNaN; diff --git a/tools/yaml/dist/schema/yaml-1.1/int.d.ts b/tools/yaml/dist/schema/yaml-1.1/int.d.ts deleted file mode 100644 index 3d92f37..0000000 --- a/tools/yaml/dist/schema/yaml-1.1/int.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import type { ScalarTag } from '../types.js'; -export declare const intBin: ScalarTag; -export declare const intOct: ScalarTag; -export declare const int: ScalarTag; -export declare const intHex: ScalarTag; diff --git a/tools/yaml/dist/schema/yaml-1.1/int.js b/tools/yaml/dist/schema/yaml-1.1/int.js deleted file mode 100644 index fdf47ca..0000000 --- a/tools/yaml/dist/schema/yaml-1.1/int.js +++ /dev/null @@ -1,76 +0,0 @@ -'use strict'; - -var stringifyNumber = require('../../stringify/stringifyNumber.js'); - -const intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value); -function intResolve(str, offset, radix, { intAsBigInt }) { - const sign = str[0]; - if (sign === '-' || sign === '+') - offset += 1; - str = str.substring(offset).replace(/_/g, ''); - if (intAsBigInt) { - switch (radix) { - case 2: - str = `0b${str}`; - break; - case 8: - str = `0o${str}`; - break; - case 16: - str = `0x${str}`; - break; - } - const n = BigInt(str); - return sign === '-' ? BigInt(-1) * n : n; - } - const n = parseInt(str, radix); - return sign === '-' ? -1 * n : n; -} -function intStringify(node, radix, prefix) { - const { value } = node; - if (intIdentify(value)) { - const str = value.toString(radix); - return value < 0 ? '-' + prefix + str.substr(1) : prefix + str; - } - return stringifyNumber.stringifyNumber(node); -} -const intBin = { - identify: intIdentify, - default: true, - tag: 'tag:yaml.org,2002:int', - format: 'BIN', - test: /^[-+]?0b[0-1_]+$/, - resolve: (str, _onError, opt) => intResolve(str, 2, 2, opt), - stringify: node => intStringify(node, 2, '0b') -}; -const intOct = { - identify: intIdentify, - default: true, - tag: 'tag:yaml.org,2002:int', - format: 'OCT', - test: /^[-+]?0[0-7_]+$/, - resolve: (str, _onError, opt) => intResolve(str, 1, 8, opt), - stringify: node => intStringify(node, 8, '0') -}; -const int = { - identify: intIdentify, - default: true, - tag: 'tag:yaml.org,2002:int', - test: /^[-+]?[0-9][0-9_]*$/, - resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt), - stringify: stringifyNumber.stringifyNumber -}; -const intHex = { - identify: intIdentify, - default: true, - tag: 'tag:yaml.org,2002:int', - format: 'HEX', - test: /^[-+]?0x[0-9a-fA-F_]+$/, - resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt), - stringify: node => intStringify(node, 16, '0x') -}; - -exports.int = int; -exports.intBin = intBin; -exports.intHex = intHex; -exports.intOct = intOct; diff --git a/tools/yaml/dist/schema/yaml-1.1/omap.d.ts b/tools/yaml/dist/schema/yaml-1.1/omap.d.ts deleted file mode 100644 index 12727dc..0000000 --- a/tools/yaml/dist/schema/yaml-1.1/omap.d.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { ToJSContext } from '../../nodes/toJS.js'; -import { YAMLSeq } from '../../nodes/YAMLSeq.js'; -import { CreateNodeContext } from '../../util.js'; -import type { Schema } from '../Schema.js'; -import { CollectionTag } from '../types.js'; -export declare class YAMLOMap extends YAMLSeq { - static tag: string; - constructor(); - add: (pair: import("../../index.js").Pair | { - key: any; - value: any; - }, overwrite?: boolean | undefined) => void; - delete: (key: unknown) => boolean; - get: { - (key: unknown, keepScalar: true): import("../../index.js").Scalar | undefined; - (key: unknown, keepScalar?: false | undefined): any; - (key: unknown, keepScalar?: boolean | undefined): any; - }; - has: (key: unknown) => boolean; - set: (key: any, value: any) => void; - /** - * If `ctx` is given, the return type is actually `Map`, - * but TypeScript won't allow widening the signature of a child method. - */ - toJSON(_?: unknown, ctx?: ToJSContext): unknown[]; - static from(schema: Schema, iterable: unknown, ctx: CreateNodeContext): YAMLOMap; -} -export declare const omap: CollectionTag; diff --git a/tools/yaml/dist/schema/yaml-1.1/omap.js b/tools/yaml/dist/schema/yaml-1.1/omap.js deleted file mode 100644 index 3ca141d..0000000 --- a/tools/yaml/dist/schema/yaml-1.1/omap.js +++ /dev/null @@ -1,77 +0,0 @@ -'use strict'; - -var identity = require('../../nodes/identity.js'); -var toJS = require('../../nodes/toJS.js'); -var YAMLMap = require('../../nodes/YAMLMap.js'); -var YAMLSeq = require('../../nodes/YAMLSeq.js'); -var pairs = require('./pairs.js'); - -class YAMLOMap extends YAMLSeq.YAMLSeq { - constructor() { - super(); - this.add = YAMLMap.YAMLMap.prototype.add.bind(this); - this.delete = YAMLMap.YAMLMap.prototype.delete.bind(this); - this.get = YAMLMap.YAMLMap.prototype.get.bind(this); - this.has = YAMLMap.YAMLMap.prototype.has.bind(this); - this.set = YAMLMap.YAMLMap.prototype.set.bind(this); - this.tag = YAMLOMap.tag; - } - /** - * If `ctx` is given, the return type is actually `Map`, - * but TypeScript won't allow widening the signature of a child method. - */ - toJSON(_, ctx) { - if (!ctx) - return super.toJSON(_); - const map = new Map(); - if (ctx?.onCreate) - ctx.onCreate(map); - for (const pair of this.items) { - let key, value; - if (identity.isPair(pair)) { - key = toJS.toJS(pair.key, '', ctx); - value = toJS.toJS(pair.value, key, ctx); - } - else { - key = toJS.toJS(pair, '', ctx); - } - if (map.has(key)) - throw new Error('Ordered maps must not include duplicate keys'); - map.set(key, value); - } - return map; - } - static from(schema, iterable, ctx) { - const pairs$1 = pairs.createPairs(schema, iterable, ctx); - const omap = new this(); - omap.items = pairs$1.items; - return omap; - } -} -YAMLOMap.tag = 'tag:yaml.org,2002:omap'; -const omap = { - collection: 'seq', - identify: value => value instanceof Map, - nodeClass: YAMLOMap, - default: false, - tag: 'tag:yaml.org,2002:omap', - resolve(seq, onError) { - const pairs$1 = pairs.resolvePairs(seq, onError); - const seenKeys = []; - for (const { key } of pairs$1.items) { - if (identity.isScalar(key)) { - if (seenKeys.includes(key.value)) { - onError(`Ordered maps must not include duplicate keys: ${key.value}`); - } - else { - seenKeys.push(key.value); - } - } - } - return Object.assign(new YAMLOMap(), pairs$1); - }, - createNode: (schema, iterable, ctx) => YAMLOMap.from(schema, iterable, ctx) -}; - -exports.YAMLOMap = YAMLOMap; -exports.omap = omap; diff --git a/tools/yaml/dist/schema/yaml-1.1/pairs.d.ts b/tools/yaml/dist/schema/yaml-1.1/pairs.d.ts deleted file mode 100644 index 20bb907..0000000 --- a/tools/yaml/dist/schema/yaml-1.1/pairs.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { CreateNodeContext } from '../../doc/createNode.js'; -import type { ParsedNode } from '../../nodes/Node.js'; -import { Pair } from '../../nodes/Pair.js'; -import { YAMLMap } from '../../nodes/YAMLMap.js'; -import { YAMLSeq } from '../../nodes/YAMLSeq.js'; -import type { Schema } from '../../schema/Schema.js'; -import type { CollectionTag } from '../types.js'; -export declare function resolvePairs(seq: YAMLSeq.Parsed> | YAMLMap.Parsed, onError: (message: string) => void): YAMLSeq.Parsed>; -export declare function createPairs(schema: Schema, iterable: unknown, ctx: CreateNodeContext): YAMLSeq; -export declare const pairs: CollectionTag; diff --git a/tools/yaml/dist/schema/yaml-1.1/pairs.js b/tools/yaml/dist/schema/yaml-1.1/pairs.js deleted file mode 100644 index aa32e0f..0000000 --- a/tools/yaml/dist/schema/yaml-1.1/pairs.js +++ /dev/null @@ -1,82 +0,0 @@ -'use strict'; - -var identity = require('../../nodes/identity.js'); -var Pair = require('../../nodes/Pair.js'); -var Scalar = require('../../nodes/Scalar.js'); -var YAMLSeq = require('../../nodes/YAMLSeq.js'); - -function resolvePairs(seq, onError) { - if (identity.isSeq(seq)) { - for (let i = 0; i < seq.items.length; ++i) { - let item = seq.items[i]; - if (identity.isPair(item)) - continue; - else if (identity.isMap(item)) { - if (item.items.length > 1) - onError('Each pair must have its own sequence indicator'); - const pair = item.items[0] || new Pair.Pair(new Scalar.Scalar(null)); - if (item.commentBefore) - pair.key.commentBefore = pair.key.commentBefore - ? `${item.commentBefore}\n${pair.key.commentBefore}` - : item.commentBefore; - if (item.comment) { - const cn = pair.value ?? pair.key; - cn.comment = cn.comment - ? `${item.comment}\n${cn.comment}` - : item.comment; - } - item = pair; - } - seq.items[i] = identity.isPair(item) ? item : new Pair.Pair(item); - } - } - else - onError('Expected a sequence for this tag'); - return seq; -} -function createPairs(schema, iterable, ctx) { - const { replacer } = ctx; - const pairs = new YAMLSeq.YAMLSeq(schema); - pairs.tag = 'tag:yaml.org,2002:pairs'; - let i = 0; - if (iterable && Symbol.iterator in Object(iterable)) - for (let it of iterable) { - if (typeof replacer === 'function') - it = replacer.call(iterable, String(i++), it); - let key, value; - if (Array.isArray(it)) { - if (it.length === 2) { - key = it[0]; - value = it[1]; - } - else - throw new TypeError(`Expected [key, value] tuple: ${it}`); - } - else if (it && it instanceof Object) { - const keys = Object.keys(it); - if (keys.length === 1) { - key = keys[0]; - value = it[key]; - } - else { - throw new TypeError(`Expected tuple with one key, not ${keys.length} keys`); - } - } - else { - key = it; - } - pairs.items.push(Pair.createPair(key, value, ctx)); - } - return pairs; -} -const pairs = { - collection: 'seq', - default: false, - tag: 'tag:yaml.org,2002:pairs', - resolve: resolvePairs, - createNode: createPairs -}; - -exports.createPairs = createPairs; -exports.pairs = pairs; -exports.resolvePairs = resolvePairs; diff --git a/tools/yaml/dist/schema/yaml-1.1/schema.d.ts b/tools/yaml/dist/schema/yaml-1.1/schema.d.ts deleted file mode 100644 index f5bdd21..0000000 --- a/tools/yaml/dist/schema/yaml-1.1/schema.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare const schema: (import("../types.js").CollectionTag | import("../types.js").ScalarTag)[]; diff --git a/tools/yaml/dist/schema/yaml-1.1/schema.js b/tools/yaml/dist/schema/yaml-1.1/schema.js deleted file mode 100644 index c04270a..0000000 --- a/tools/yaml/dist/schema/yaml-1.1/schema.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; - -var map = require('../common/map.js'); -var _null = require('../common/null.js'); -var seq = require('../common/seq.js'); -var string = require('../common/string.js'); -var binary = require('./binary.js'); -var bool = require('./bool.js'); -var float = require('./float.js'); -var int = require('./int.js'); -var omap = require('./omap.js'); -var pairs = require('./pairs.js'); -var set = require('./set.js'); -var timestamp = require('./timestamp.js'); - -const schema = [ - map.map, - seq.seq, - string.string, - _null.nullTag, - bool.trueTag, - bool.falseTag, - int.intBin, - int.intOct, - int.int, - int.intHex, - float.floatNaN, - float.floatExp, - float.float, - binary.binary, - omap.omap, - pairs.pairs, - set.set, - timestamp.intTime, - timestamp.floatTime, - timestamp.timestamp -]; - -exports.schema = schema; diff --git a/tools/yaml/dist/schema/yaml-1.1/set.d.ts b/tools/yaml/dist/schema/yaml-1.1/set.d.ts deleted file mode 100644 index 2054fb7..0000000 --- a/tools/yaml/dist/schema/yaml-1.1/set.d.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Pair } from '../../nodes/Pair.js'; -import { Scalar } from '../../nodes/Scalar.js'; -import { ToJSContext } from '../../nodes/toJS.js'; -import { YAMLMap } from '../../nodes/YAMLMap.js'; -import type { Schema } from '../../schema/Schema.js'; -import type { StringifyContext } from '../../stringify/stringify.js'; -import { CreateNodeContext } from '../../util.js'; -import type { CollectionTag } from '../types.js'; -export declare class YAMLSet extends YAMLMap | null> { - static tag: string; - constructor(schema?: Schema); - add(key: T | Pair | null> | { - key: T; - value: Scalar | null; - }): void; - /** - * If `keepPair` is `true`, returns the Pair matching `key`. - * Otherwise, returns the value of that Pair's key. - */ - get(key: unknown, keepPair?: boolean): any; - set(key: T, value: boolean): void; - /** @deprecated Will throw; `value` must be boolean */ - set(key: T, value: null): void; - toJSON(_?: unknown, ctx?: ToJSContext): any; - toString(ctx?: StringifyContext, onComment?: () => void, onChompKeep?: () => void): string; - static from(schema: Schema, iterable: unknown, ctx: CreateNodeContext): YAMLSet; -} -export declare const set: CollectionTag; diff --git a/tools/yaml/dist/schema/yaml-1.1/set.js b/tools/yaml/dist/schema/yaml-1.1/set.js deleted file mode 100644 index 650c250..0000000 --- a/tools/yaml/dist/schema/yaml-1.1/set.js +++ /dev/null @@ -1,96 +0,0 @@ -'use strict'; - -var identity = require('../../nodes/identity.js'); -var Pair = require('../../nodes/Pair.js'); -var YAMLMap = require('../../nodes/YAMLMap.js'); - -class YAMLSet extends YAMLMap.YAMLMap { - constructor(schema) { - super(schema); - this.tag = YAMLSet.tag; - } - add(key) { - let pair; - if (identity.isPair(key)) - pair = key; - else if (key && - typeof key === 'object' && - 'key' in key && - 'value' in key && - key.value === null) - pair = new Pair.Pair(key.key, null); - else - pair = new Pair.Pair(key, null); - const prev = YAMLMap.findPair(this.items, pair.key); - if (!prev) - this.items.push(pair); - } - /** - * If `keepPair` is `true`, returns the Pair matching `key`. - * Otherwise, returns the value of that Pair's key. - */ - get(key, keepPair) { - const pair = YAMLMap.findPair(this.items, key); - return !keepPair && identity.isPair(pair) - ? identity.isScalar(pair.key) - ? pair.key.value - : pair.key - : pair; - } - set(key, value) { - if (typeof value !== 'boolean') - throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`); - const prev = YAMLMap.findPair(this.items, key); - if (prev && !value) { - this.items.splice(this.items.indexOf(prev), 1); - } - else if (!prev && value) { - this.items.push(new Pair.Pair(key)); - } - } - toJSON(_, ctx) { - return super.toJSON(_, ctx, Set); - } - toString(ctx, onComment, onChompKeep) { - if (!ctx) - return JSON.stringify(this); - if (this.hasAllNullValues(true)) - return super.toString(Object.assign({}, ctx, { allNullValues: true }), onComment, onChompKeep); - else - throw new Error('Set items must all have null values'); - } - static from(schema, iterable, ctx) { - const { replacer } = ctx; - const set = new this(schema); - if (iterable && Symbol.iterator in Object(iterable)) - for (let value of iterable) { - if (typeof replacer === 'function') - value = replacer.call(iterable, value, value); - set.items.push(Pair.createPair(value, null, ctx)); - } - return set; - } -} -YAMLSet.tag = 'tag:yaml.org,2002:set'; -const set = { - collection: 'map', - identify: value => value instanceof Set, - nodeClass: YAMLSet, - default: false, - tag: 'tag:yaml.org,2002:set', - createNode: (schema, iterable, ctx) => YAMLSet.from(schema, iterable, ctx), - resolve(map, onError) { - if (identity.isMap(map)) { - if (map.hasAllNullValues(true)) - return Object.assign(new YAMLSet(), map); - else - onError('Set items must all have null values'); - } - else - onError('Expected a mapping for this tag'); - return map; - } -}; - -exports.YAMLSet = YAMLSet; -exports.set = set; diff --git a/tools/yaml/dist/schema/yaml-1.1/timestamp.d.ts b/tools/yaml/dist/schema/yaml-1.1/timestamp.d.ts deleted file mode 100644 index 0c1d2d4..0000000 --- a/tools/yaml/dist/schema/yaml-1.1/timestamp.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { ScalarTag } from '../types.js'; -export declare const intTime: ScalarTag; -export declare const floatTime: ScalarTag; -export declare const timestamp: ScalarTag & { - test: RegExp; -}; diff --git a/tools/yaml/dist/schema/yaml-1.1/timestamp.js b/tools/yaml/dist/schema/yaml-1.1/timestamp.js deleted file mode 100644 index c0b29e8..0000000 --- a/tools/yaml/dist/schema/yaml-1.1/timestamp.js +++ /dev/null @@ -1,105 +0,0 @@ -'use strict'; - -var stringifyNumber = require('../../stringify/stringifyNumber.js'); - -/** Internal types handle bigint as number, because TS can't figure it out. */ -function parseSexagesimal(str, asBigInt) { - const sign = str[0]; - const parts = sign === '-' || sign === '+' ? str.substring(1) : str; - const num = (n) => asBigInt ? BigInt(n) : Number(n); - const res = parts - .replace(/_/g, '') - .split(':') - .reduce((res, p) => res * num(60) + num(p), num(0)); - return (sign === '-' ? num(-1) * res : res); -} -/** - * hhhh:mm:ss.sss - * - * Internal types handle bigint as number, because TS can't figure it out. - */ -function stringifySexagesimal(node) { - let { value } = node; - let num = (n) => n; - if (typeof value === 'bigint') - num = n => BigInt(n); - else if (isNaN(value) || !isFinite(value)) - return stringifyNumber.stringifyNumber(node); - let sign = ''; - if (value < 0) { - sign = '-'; - value *= num(-1); - } - const _60 = num(60); - const parts = [value % _60]; // seconds, including ms - if (value < 60) { - parts.unshift(0); // at least one : is required - } - else { - value = (value - parts[0]) / _60; - parts.unshift(value % _60); // minutes - if (value >= 60) { - value = (value - parts[0]) / _60; - parts.unshift(value); // hours - } - } - return (sign + - parts - .map(n => String(n).padStart(2, '0')) - .join(':') - .replace(/000000\d*$/, '') // % 60 may introduce error - ); -} -const intTime = { - identify: value => typeof value === 'bigint' || Number.isInteger(value), - default: true, - tag: 'tag:yaml.org,2002:int', - format: 'TIME', - test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/, - resolve: (str, _onError, { intAsBigInt }) => parseSexagesimal(str, intAsBigInt), - stringify: stringifySexagesimal -}; -const floatTime = { - identify: value => typeof value === 'number', - default: true, - tag: 'tag:yaml.org,2002:float', - format: 'TIME', - test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/, - resolve: str => parseSexagesimal(str, false), - stringify: stringifySexagesimal -}; -const timestamp = { - identify: value => value instanceof Date, - default: true, - tag: 'tag:yaml.org,2002:timestamp', - // If the time zone is omitted, the timestamp is assumed to be specified in UTC. The time part - // may be omitted altogether, resulting in a date format. In such a case, the time part is - // assumed to be 00:00:00Z (start of day, UTC). - test: RegExp('^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})' + // YYYY-Mm-Dd - '(?:' + // time is optional - '(?:t|T|[ \\t]+)' + // t | T | whitespace - '([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)' + // Hh:Mm:Ss(.ss)? - '(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?' + // Z | +5 | -03:30 - ')?$'), - resolve(str) { - const match = str.match(timestamp.test); - if (!match) - throw new Error('!!timestamp expects a date, starting with yyyy-mm-dd'); - const [, year, month, day, hour, minute, second] = match.map(Number); - const millisec = match[7] ? Number((match[7] + '00').substr(1, 3)) : 0; - let date = Date.UTC(year, month - 1, day, hour || 0, minute || 0, second || 0, millisec); - const tz = match[8]; - if (tz && tz !== 'Z') { - let d = parseSexagesimal(tz, false); - if (Math.abs(d) < 30) - d *= 60; - date -= 60000 * d; - } - return new Date(date); - }, - stringify: ({ value }) => value.toISOString().replace(/((T00:00)?:00)?\.000Z$/, '') -}; - -exports.floatTime = floatTime; -exports.intTime = intTime; -exports.timestamp = timestamp; diff --git a/tools/yaml/dist/stringify/foldFlowLines.d.ts b/tools/yaml/dist/stringify/foldFlowLines.d.ts deleted file mode 100644 index aac3cac..0000000 --- a/tools/yaml/dist/stringify/foldFlowLines.d.ts +++ /dev/null @@ -1,34 +0,0 @@ -export declare const FOLD_FLOW = "flow"; -export declare const FOLD_BLOCK = "block"; -export declare const FOLD_QUOTED = "quoted"; -/** - * `'block'` prevents more-indented lines from being folded; - * `'quoted'` allows for `\` escapes, including escaped newlines - */ -export type FoldMode = 'flow' | 'block' | 'quoted'; -export interface FoldOptions { - /** - * Accounts for leading contents on the first line, defaulting to - * `indent.length` - */ - indentAtStart?: number; - /** Default: `80` */ - lineWidth?: number; - /** - * Allow highly indented lines to stretch the line width or indent content - * from the start. - * - * Default: `20` - */ - minContentWidth?: number; - /** Called once if the text is folded */ - onFold?: () => void; - /** Called once if any line of text exceeds lineWidth characters */ - onOverflow?: () => void; -} -/** - * Tries to keep input at up to `lineWidth` characters, splitting only on spaces - * not followed by newlines or spaces unless `mode` is `'quoted'`. Lines are - * terminated with `\n` and started with `indent`. - */ -export declare function foldFlowLines(text: string, indent: string, mode?: FoldMode, { indentAtStart, lineWidth, minContentWidth, onFold, onOverflow }?: FoldOptions): string; diff --git a/tools/yaml/dist/stringify/foldFlowLines.js b/tools/yaml/dist/stringify/foldFlowLines.js deleted file mode 100644 index efe7a25..0000000 --- a/tools/yaml/dist/stringify/foldFlowLines.js +++ /dev/null @@ -1,140 +0,0 @@ -'use strict'; - -const FOLD_FLOW = 'flow'; -const FOLD_BLOCK = 'block'; -const FOLD_QUOTED = 'quoted'; -/** - * Tries to keep input at up to `lineWidth` characters, splitting only on spaces - * not followed by newlines or spaces unless `mode` is `'quoted'`. Lines are - * terminated with `\n` and started with `indent`. - */ -function foldFlowLines(text, indent, mode = 'flow', { indentAtStart, lineWidth = 80, minContentWidth = 20, onFold, onOverflow } = {}) { - if (!lineWidth || lineWidth < 0) - return text; - const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length); - if (text.length <= endStep) - return text; - const folds = []; - const escapedFolds = {}; - let end = lineWidth - indent.length; - if (typeof indentAtStart === 'number') { - if (indentAtStart > lineWidth - Math.max(2, minContentWidth)) - folds.push(0); - else - end = lineWidth - indentAtStart; - } - let split = undefined; - let prev = undefined; - let overflow = false; - let i = -1; - let escStart = -1; - let escEnd = -1; - if (mode === FOLD_BLOCK) { - i = consumeMoreIndentedLines(text, i); - if (i !== -1) - end = i + endStep; - } - for (let ch; (ch = text[(i += 1)]);) { - if (mode === FOLD_QUOTED && ch === '\\') { - escStart = i; - switch (text[i + 1]) { - case 'x': - i += 3; - break; - case 'u': - i += 5; - break; - case 'U': - i += 9; - break; - default: - i += 1; - } - escEnd = i; - } - if (ch === '\n') { - if (mode === FOLD_BLOCK) - i = consumeMoreIndentedLines(text, i); - end = i + endStep; - split = undefined; - } - else { - if (ch === ' ' && - prev && - prev !== ' ' && - prev !== '\n' && - prev !== '\t') { - // space surrounded by non-space can be replaced with newline + indent - const next = text[i + 1]; - if (next && next !== ' ' && next !== '\n' && next !== '\t') - split = i; - } - if (i >= end) { - if (split) { - folds.push(split); - end = split + endStep; - split = undefined; - } - else if (mode === FOLD_QUOTED) { - // white-space collected at end may stretch past lineWidth - while (prev === ' ' || prev === '\t') { - prev = ch; - ch = text[(i += 1)]; - overflow = true; - } - // Account for newline escape, but don't break preceding escape - const j = i > escEnd + 1 ? i - 2 : escStart - 1; - // Bail out if lineWidth & minContentWidth are shorter than an escape string - if (escapedFolds[j]) - return text; - folds.push(j); - escapedFolds[j] = true; - end = j + endStep; - split = undefined; - } - else { - overflow = true; - } - } - } - prev = ch; - } - if (overflow && onOverflow) - onOverflow(); - if (folds.length === 0) - return text; - if (onFold) - onFold(); - let res = text.slice(0, folds[0]); - for (let i = 0; i < folds.length; ++i) { - const fold = folds[i]; - const end = folds[i + 1] || text.length; - if (fold === 0) - res = `\n${indent}${text.slice(0, end)}`; - else { - if (mode === FOLD_QUOTED && escapedFolds[fold]) - res += `${text[fold]}\\`; - res += `\n${indent}${text.slice(fold + 1, end)}`; - } - } - return res; -} -/** - * Presumes `i + 1` is at the start of a line - * @returns index of last newline in more-indented block - */ -function consumeMoreIndentedLines(text, i) { - let ch = text[i + 1]; - while (ch === ' ' || ch === '\t') { - do { - ch = text[(i += 1)]; - } while (ch && ch !== '\n'); - ch = text[i + 1]; - } - return i; -} - -exports.FOLD_BLOCK = FOLD_BLOCK; -exports.FOLD_FLOW = FOLD_FLOW; -exports.FOLD_QUOTED = FOLD_QUOTED; -exports.foldFlowLines = foldFlowLines; diff --git a/tools/yaml/dist/stringify/stringify.d.ts b/tools/yaml/dist/stringify/stringify.d.ts deleted file mode 100644 index f408b75..0000000 --- a/tools/yaml/dist/stringify/stringify.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import type { Document } from '../doc/Document.js'; -import type { Alias } from '../nodes/Alias.js'; -import type { ToStringOptions } from '../options.js'; -export type StringifyContext = { - actualString?: boolean; - allNullValues?: boolean; - anchors: Set; - doc: Document; - forceBlockIndent?: boolean; - implicitKey?: boolean; - indent: string; - indentStep: string; - indentAtStart?: number; - inFlow: boolean | null; - inStringifyKey?: boolean; - flowCollectionPadding: string; - options: Readonly>>; - resolvedAliases?: Set; -}; -export declare function createStringifyContext(doc: Document, options: ToStringOptions): StringifyContext; -export declare function stringify(item: unknown, ctx: StringifyContext, onComment?: () => void, onChompKeep?: () => void): string; diff --git a/tools/yaml/dist/stringify/stringify.js b/tools/yaml/dist/stringify/stringify.js deleted file mode 100644 index 1b472a6..0000000 --- a/tools/yaml/dist/stringify/stringify.js +++ /dev/null @@ -1,127 +0,0 @@ -'use strict'; - -var anchors = require('../doc/anchors.js'); -var identity = require('../nodes/identity.js'); -var stringifyComment = require('./stringifyComment.js'); -var stringifyString = require('./stringifyString.js'); - -function createStringifyContext(doc, options) { - const opt = Object.assign({ - blockQuote: true, - commentString: stringifyComment.stringifyComment, - defaultKeyType: null, - defaultStringType: 'PLAIN', - directives: null, - doubleQuotedAsJSON: false, - doubleQuotedMinMultiLineLength: 40, - falseStr: 'false', - flowCollectionPadding: true, - indentSeq: true, - lineWidth: 80, - minContentWidth: 20, - nullStr: 'null', - simpleKeys: false, - singleQuote: null, - trueStr: 'true', - verifyAliasOrder: true - }, doc.schema.toStringOptions, options); - let inFlow; - switch (opt.collectionStyle) { - case 'block': - inFlow = false; - break; - case 'flow': - inFlow = true; - break; - default: - inFlow = null; - } - return { - anchors: new Set(), - doc, - flowCollectionPadding: opt.flowCollectionPadding ? ' ' : '', - indent: '', - indentStep: typeof opt.indent === 'number' ? ' '.repeat(opt.indent) : ' ', - inFlow, - options: opt - }; -} -function getTagObject(tags, item) { - if (item.tag) { - const match = tags.filter(t => t.tag === item.tag); - if (match.length > 0) - return match.find(t => t.format === item.format) ?? match[0]; - } - let tagObj = undefined; - let obj; - if (identity.isScalar(item)) { - obj = item.value; - const match = tags.filter(t => t.identify?.(obj)); - tagObj = - match.find(t => t.format === item.format) ?? match.find(t => !t.format); - } - else { - obj = item; - tagObj = tags.find(t => t.nodeClass && obj instanceof t.nodeClass); - } - if (!tagObj) { - const name = obj?.constructor?.name ?? typeof obj; - throw new Error(`Tag not resolved for ${name} value`); - } - return tagObj; -} -// needs to be called before value stringifier to allow for circular anchor refs -function stringifyProps(node, tagObj, { anchors: anchors$1, doc }) { - if (!doc.directives) - return ''; - const props = []; - const anchor = (identity.isScalar(node) || identity.isCollection(node)) && node.anchor; - if (anchor && anchors.anchorIsValid(anchor)) { - anchors$1.add(anchor); - props.push(`&${anchor}`); - } - const tag = node.tag ? node.tag : tagObj.default ? null : tagObj.tag; - if (tag) - props.push(doc.directives.tagString(tag)); - return props.join(' '); -} -function stringify(item, ctx, onComment, onChompKeep) { - if (identity.isPair(item)) - return item.toString(ctx, onComment, onChompKeep); - if (identity.isAlias(item)) { - if (ctx.doc.directives) - return item.toString(ctx); - if (ctx.resolvedAliases?.has(item)) { - throw new TypeError(`Cannot stringify circular structure without alias nodes`); - } - else { - if (ctx.resolvedAliases) - ctx.resolvedAliases.add(item); - else - ctx.resolvedAliases = new Set([item]); - item = item.resolve(ctx.doc); - } - } - let tagObj = undefined; - const node = identity.isNode(item) - ? item - : ctx.doc.createNode(item, { onTagObj: o => (tagObj = o) }); - if (!tagObj) - tagObj = getTagObject(ctx.doc.schema.tags, node); - const props = stringifyProps(node, tagObj, ctx); - if (props.length > 0) - ctx.indentAtStart = (ctx.indentAtStart ?? 0) + props.length + 1; - const str = typeof tagObj.stringify === 'function' - ? tagObj.stringify(node, ctx, onComment, onChompKeep) - : identity.isScalar(node) - ? stringifyString.stringifyString(node, ctx, onComment, onChompKeep) - : node.toString(ctx, onComment, onChompKeep); - if (!props) - return str; - return identity.isScalar(node) || str[0] === '{' || str[0] === '[' - ? `${props} ${str}` - : `${props}\n${ctx.indent}${str}`; -} - -exports.createStringifyContext = createStringifyContext; -exports.stringify = stringify; diff --git a/tools/yaml/dist/stringify/stringifyCollection.d.ts b/tools/yaml/dist/stringify/stringifyCollection.d.ts deleted file mode 100644 index 207d703..0000000 --- a/tools/yaml/dist/stringify/stringifyCollection.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Collection } from '../nodes/Collection.js'; -import { StringifyContext } from './stringify.js'; -interface StringifyCollectionOptions { - blockItemPrefix: string; - flowChars: { - start: '{'; - end: '}'; - } | { - start: '['; - end: ']'; - }; - itemIndent: string; - onChompKeep?: () => void; - onComment?: () => void; -} -export declare function stringifyCollection(collection: Readonly, ctx: StringifyContext, options: StringifyCollectionOptions): string; -export {}; diff --git a/tools/yaml/dist/stringify/stringifyCollection.js b/tools/yaml/dist/stringify/stringifyCollection.js deleted file mode 100644 index 750efc1..0000000 --- a/tools/yaml/dist/stringify/stringifyCollection.js +++ /dev/null @@ -1,153 +0,0 @@ -'use strict'; - -var Collection = require('../nodes/Collection.js'); -var identity = require('../nodes/identity.js'); -var stringify = require('./stringify.js'); -var stringifyComment = require('./stringifyComment.js'); - -function stringifyCollection(collection, ctx, options) { - const flow = ctx.inFlow ?? collection.flow; - const stringify = flow ? stringifyFlowCollection : stringifyBlockCollection; - return stringify(collection, ctx, options); -} -function stringifyBlockCollection({ comment, items }, ctx, { blockItemPrefix, flowChars, itemIndent, onChompKeep, onComment }) { - const { indent, options: { commentString } } = ctx; - const itemCtx = Object.assign({}, ctx, { indent: itemIndent, type: null }); - let chompKeep = false; // flag for the preceding node's status - const lines = []; - for (let i = 0; i < items.length; ++i) { - const item = items[i]; - let comment = null; - if (identity.isNode(item)) { - if (!chompKeep && item.spaceBefore) - lines.push(''); - addCommentBefore(ctx, lines, item.commentBefore, chompKeep); - if (item.comment) - comment = item.comment; - } - else if (identity.isPair(item)) { - const ik = identity.isNode(item.key) ? item.key : null; - if (ik) { - if (!chompKeep && ik.spaceBefore) - lines.push(''); - addCommentBefore(ctx, lines, ik.commentBefore, chompKeep); - } - } - chompKeep = false; - let str = stringify.stringify(item, itemCtx, () => (comment = null), () => (chompKeep = true)); - if (comment) - str += stringifyComment.lineComment(str, itemIndent, commentString(comment)); - if (chompKeep && comment) - chompKeep = false; - lines.push(blockItemPrefix + str); - } - let str; - if (lines.length === 0) { - str = flowChars.start + flowChars.end; - } - else { - str = lines[0]; - for (let i = 1; i < lines.length; ++i) { - const line = lines[i]; - str += line ? `\n${indent}${line}` : '\n'; - } - } - if (comment) { - str += '\n' + stringifyComment.indentComment(commentString(comment), indent); - if (onComment) - onComment(); - } - else if (chompKeep && onChompKeep) - onChompKeep(); - return str; -} -function stringifyFlowCollection({ comment, items }, ctx, { flowChars, itemIndent, onComment }) { - const { indent, indentStep, flowCollectionPadding: fcPadding, options: { commentString } } = ctx; - itemIndent += indentStep; - const itemCtx = Object.assign({}, ctx, { - indent: itemIndent, - inFlow: true, - type: null - }); - let reqNewline = false; - let linesAtValue = 0; - const lines = []; - for (let i = 0; i < items.length; ++i) { - const item = items[i]; - let comment = null; - if (identity.isNode(item)) { - if (item.spaceBefore) - lines.push(''); - addCommentBefore(ctx, lines, item.commentBefore, false); - if (item.comment) - comment = item.comment; - } - else if (identity.isPair(item)) { - const ik = identity.isNode(item.key) ? item.key : null; - if (ik) { - if (ik.spaceBefore) - lines.push(''); - addCommentBefore(ctx, lines, ik.commentBefore, false); - if (ik.comment) - reqNewline = true; - } - const iv = identity.isNode(item.value) ? item.value : null; - if (iv) { - if (iv.comment) - comment = iv.comment; - if (iv.commentBefore) - reqNewline = true; - } - else if (item.value == null && ik?.comment) { - comment = ik.comment; - } - } - if (comment) - reqNewline = true; - let str = stringify.stringify(item, itemCtx, () => (comment = null)); - if (i < items.length - 1) - str += ','; - if (comment) - str += stringifyComment.lineComment(str, itemIndent, commentString(comment)); - if (!reqNewline && (lines.length > linesAtValue || str.includes('\n'))) - reqNewline = true; - lines.push(str); - linesAtValue = lines.length; - } - let str; - const { start, end } = flowChars; - if (lines.length === 0) { - str = start + end; - } - else { - if (!reqNewline) { - const len = lines.reduce((sum, line) => sum + line.length + 2, 2); - reqNewline = len > Collection.Collection.maxFlowStringSingleLineLength; - } - if (reqNewline) { - str = start; - for (const line of lines) - str += line ? `\n${indentStep}${indent}${line}` : '\n'; - str += `\n${indent}${end}`; - } - else { - str = `${start}${fcPadding}${lines.join(' ')}${fcPadding}${end}`; - } - } - if (comment) { - str += stringifyComment.lineComment(str, indent, commentString(comment)); - if (onComment) - onComment(); - } - return str; -} -function addCommentBefore({ indent, options: { commentString } }, lines, comment, chompKeep) { - if (comment && chompKeep) - comment = comment.replace(/^\n+/, ''); - if (comment) { - const ic = stringifyComment.indentComment(commentString(comment), indent); - lines.push(ic.trimStart()); // Avoid double indent on first line - } -} - -exports.stringifyCollection = stringifyCollection; diff --git a/tools/yaml/dist/stringify/stringifyComment.d.ts b/tools/yaml/dist/stringify/stringifyComment.d.ts deleted file mode 100644 index 9fcf48d..0000000 --- a/tools/yaml/dist/stringify/stringifyComment.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Stringifies a comment. - * - * Empty comment lines are left empty, - * lines consisting of a single space are replaced by `#`, - * and all other lines are prefixed with a `#`. - */ -export declare const stringifyComment: (str: string) => string; -export declare function indentComment(comment: string, indent: string): string; -export declare const lineComment: (str: string, indent: string, comment: string) => string; diff --git a/tools/yaml/dist/stringify/stringifyComment.js b/tools/yaml/dist/stringify/stringifyComment.js deleted file mode 100644 index 26bf361..0000000 --- a/tools/yaml/dist/stringify/stringifyComment.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -/** - * Stringifies a comment. - * - * Empty comment lines are left empty, - * lines consisting of a single space are replaced by `#`, - * and all other lines are prefixed with a `#`. - */ -const stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, '#'); -function indentComment(comment, indent) { - if (/^\n+$/.test(comment)) - return comment.substring(1); - return indent ? comment.replace(/^(?! *$)/gm, indent) : comment; -} -const lineComment = (str, indent, comment) => str.endsWith('\n') - ? indentComment(comment, indent) - : comment.includes('\n') - ? '\n' + indentComment(comment, indent) - : (str.endsWith(' ') ? '' : ' ') + comment; - -exports.indentComment = indentComment; -exports.lineComment = lineComment; -exports.stringifyComment = stringifyComment; diff --git a/tools/yaml/dist/stringify/stringifyDocument.d.ts b/tools/yaml/dist/stringify/stringifyDocument.d.ts deleted file mode 100644 index 1eeb177..0000000 --- a/tools/yaml/dist/stringify/stringifyDocument.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { Document } from '../doc/Document.js'; -import type { Node } from '../nodes/Node.js'; -import type { ToStringOptions } from '../options.js'; -export declare function stringifyDocument(doc: Readonly>, options: ToStringOptions): string; diff --git a/tools/yaml/dist/stringify/stringifyDocument.js b/tools/yaml/dist/stringify/stringifyDocument.js deleted file mode 100644 index fb9d73c..0000000 --- a/tools/yaml/dist/stringify/stringifyDocument.js +++ /dev/null @@ -1,87 +0,0 @@ -'use strict'; - -var identity = require('../nodes/identity.js'); -var stringify = require('./stringify.js'); -var stringifyComment = require('./stringifyComment.js'); - -function stringifyDocument(doc, options) { - const lines = []; - let hasDirectives = options.directives === true; - if (options.directives !== false && doc.directives) { - const dir = doc.directives.toString(doc); - if (dir) { - lines.push(dir); - hasDirectives = true; - } - else if (doc.directives.docStart) - hasDirectives = true; - } - if (hasDirectives) - lines.push('---'); - const ctx = stringify.createStringifyContext(doc, options); - const { commentString } = ctx.options; - if (doc.commentBefore) { - if (lines.length !== 1) - lines.unshift(''); - const cs = commentString(doc.commentBefore); - lines.unshift(stringifyComment.indentComment(cs, '')); - } - let chompKeep = false; - let contentComment = null; - if (doc.contents) { - if (identity.isNode(doc.contents)) { - if (doc.contents.spaceBefore && hasDirectives) - lines.push(''); - if (doc.contents.commentBefore) { - const cs = commentString(doc.contents.commentBefore); - lines.push(stringifyComment.indentComment(cs, '')); - } - // top-level block scalars need to be indented if followed by a comment - ctx.forceBlockIndent = !!doc.comment; - contentComment = doc.contents.comment; - } - const onChompKeep = contentComment ? undefined : () => (chompKeep = true); - let body = stringify.stringify(doc.contents, ctx, () => (contentComment = null), onChompKeep); - if (contentComment) - body += stringifyComment.lineComment(body, '', commentString(contentComment)); - if ((body[0] === '|' || body[0] === '>') && - lines[lines.length - 1] === '---') { - // Top-level block scalars with a preceding doc marker ought to use the - // same line for their header. - lines[lines.length - 1] = `--- ${body}`; - } - else - lines.push(body); - } - else { - lines.push(stringify.stringify(doc.contents, ctx)); - } - if (doc.directives?.docEnd) { - if (doc.comment) { - const cs = commentString(doc.comment); - if (cs.includes('\n')) { - lines.push('...'); - lines.push(stringifyComment.indentComment(cs, '')); - } - else { - lines.push(`... ${cs}`); - } - } - else { - lines.push('...'); - } - } - else { - let dc = doc.comment; - if (dc && chompKeep) - dc = dc.replace(/^\n+/, ''); - if (dc) { - if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '') - lines.push(''); - lines.push(stringifyComment.indentComment(commentString(dc), '')); - } - } - return lines.join('\n') + '\n'; -} - -exports.stringifyDocument = stringifyDocument; diff --git a/tools/yaml/dist/stringify/stringifyNumber.d.ts b/tools/yaml/dist/stringify/stringifyNumber.d.ts deleted file mode 100644 index 3c14df1..0000000 --- a/tools/yaml/dist/stringify/stringifyNumber.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import type { Scalar } from '../nodes/Scalar.js'; -export declare function stringifyNumber({ format, minFractionDigits, tag, value }: Scalar): string; diff --git a/tools/yaml/dist/stringify/stringifyNumber.js b/tools/yaml/dist/stringify/stringifyNumber.js deleted file mode 100644 index 4118ff6..0000000 --- a/tools/yaml/dist/stringify/stringifyNumber.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict'; - -function stringifyNumber({ format, minFractionDigits, tag, value }) { - if (typeof value === 'bigint') - return String(value); - const num = typeof value === 'number' ? value : Number(value); - if (!isFinite(num)) - return isNaN(num) ? '.nan' : num < 0 ? '-.inf' : '.inf'; - let n = JSON.stringify(value); - if (!format && - minFractionDigits && - (!tag || tag === 'tag:yaml.org,2002:float') && - /^\d/.test(n)) { - let i = n.indexOf('.'); - if (i < 0) { - i = n.length; - n += '.'; - } - let d = minFractionDigits - (n.length - i - 1); - while (d-- > 0) - n += '0'; - } - return n; -} - -exports.stringifyNumber = stringifyNumber; diff --git a/tools/yaml/dist/stringify/stringifyPair.d.ts b/tools/yaml/dist/stringify/stringifyPair.d.ts deleted file mode 100644 index c512149..0000000 --- a/tools/yaml/dist/stringify/stringifyPair.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import type { Pair } from '../nodes/Pair.js'; -import { StringifyContext } from './stringify.js'; -export declare function stringifyPair({ key, value }: Readonly, ctx: StringifyContext, onComment?: () => void, onChompKeep?: () => void): string; diff --git a/tools/yaml/dist/stringify/stringifyPair.js b/tools/yaml/dist/stringify/stringifyPair.js deleted file mode 100644 index f5fc0ba..0000000 --- a/tools/yaml/dist/stringify/stringifyPair.js +++ /dev/null @@ -1,152 +0,0 @@ -'use strict'; - -var identity = require('../nodes/identity.js'); -var Scalar = require('../nodes/Scalar.js'); -var stringify = require('./stringify.js'); -var stringifyComment = require('./stringifyComment.js'); - -function stringifyPair({ key, value }, ctx, onComment, onChompKeep) { - const { allNullValues, doc, indent, indentStep, options: { commentString, indentSeq, simpleKeys } } = ctx; - let keyComment = (identity.isNode(key) && key.comment) || null; - if (simpleKeys) { - if (keyComment) { - throw new Error('With simple keys, key nodes cannot have comments'); - } - if (identity.isCollection(key)) { - const msg = 'With simple keys, collection cannot be used as a key value'; - throw new Error(msg); - } - } - let explicitKey = !simpleKeys && - (!key || - (keyComment && value == null && !ctx.inFlow) || - identity.isCollection(key) || - (identity.isScalar(key) - ? key.type === Scalar.Scalar.BLOCK_FOLDED || key.type === Scalar.Scalar.BLOCK_LITERAL - : typeof key === 'object')); - ctx = Object.assign({}, ctx, { - allNullValues: false, - implicitKey: !explicitKey && (simpleKeys || !allNullValues), - indent: indent + indentStep - }); - let keyCommentDone = false; - let chompKeep = false; - let str = stringify.stringify(key, ctx, () => (keyCommentDone = true), () => (chompKeep = true)); - if (!explicitKey && !ctx.inFlow && str.length > 1024) { - if (simpleKeys) - throw new Error('With simple keys, single line scalar must not span more than 1024 characters'); - explicitKey = true; - } - if (ctx.inFlow) { - if (allNullValues || value == null) { - if (keyCommentDone && onComment) - onComment(); - return str === '' ? '?' : explicitKey ? `? ${str}` : str; - } - } - else if ((allNullValues && !simpleKeys) || (value == null && explicitKey)) { - str = `? ${str}`; - if (keyComment && !keyCommentDone) { - str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment)); - } - else if (chompKeep && onChompKeep) - onChompKeep(); - return str; - } - if (keyCommentDone) - keyComment = null; - if (explicitKey) { - if (keyComment) - str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment)); - str = `? ${str}\n${indent}:`; - } - else { - str = `${str}:`; - if (keyComment) - str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment)); - } - let vsb, vcb, valueComment; - if (identity.isNode(value)) { - vsb = !!value.spaceBefore; - vcb = value.commentBefore; - valueComment = value.comment; - } - else { - vsb = false; - vcb = null; - valueComment = null; - if (value && typeof value === 'object') - value = doc.createNode(value); - } - ctx.implicitKey = false; - if (!explicitKey && !keyComment && identity.isScalar(value)) - ctx.indentAtStart = str.length + 1; - chompKeep = false; - if (!indentSeq && - indentStep.length >= 2 && - !ctx.inFlow && - !explicitKey && - identity.isSeq(value) && - !value.flow && - !value.tag && - !value.anchor) { - // If indentSeq === false, consider '- ' as part of indentation where possible - ctx.indent = ctx.indent.substring(2); - } - let valueCommentDone = false; - const valueStr = stringify.stringify(value, ctx, () => (valueCommentDone = true), () => (chompKeep = true)); - let ws = ' '; - if (keyComment || vsb || vcb) { - ws = vsb ? '\n' : ''; - if (vcb) { - const cs = commentString(vcb); - ws += `\n${stringifyComment.indentComment(cs, ctx.indent)}`; - } - if (valueStr === '' && !ctx.inFlow) { - if (ws === '\n') - ws = '\n\n'; - } - else { - ws += `\n${ctx.indent}`; - } - } - else if (!explicitKey && identity.isCollection(value)) { - const vs0 = valueStr[0]; - const nl0 = valueStr.indexOf('\n'); - const hasNewline = nl0 !== -1; - const flow = ctx.inFlow ?? value.flow ?? value.items.length === 0; - if (hasNewline || !flow) { - let hasPropsLine = false; - if (hasNewline && (vs0 === '&' || vs0 === '!')) { - let sp0 = valueStr.indexOf(' '); - if (vs0 === '&' && - sp0 !== -1 && - sp0 < nl0 && - valueStr[sp0 + 1] === '!') { - sp0 = valueStr.indexOf(' ', sp0 + 1); - } - if (sp0 === -1 || nl0 < sp0) - hasPropsLine = true; - } - if (!hasPropsLine) - ws = `\n${ctx.indent}`; - } - } - else if (valueStr === '' || valueStr[0] === '\n') { - ws = ''; - } - str += ws + valueStr; - if (ctx.inFlow) { - if (valueCommentDone && onComment) - onComment(); - } - else if (valueComment && !valueCommentDone) { - str += stringifyComment.lineComment(str, ctx.indent, commentString(valueComment)); - } - else if (chompKeep && onChompKeep) { - onChompKeep(); - } - return str; -} - -exports.stringifyPair = stringifyPair; diff --git a/tools/yaml/dist/stringify/stringifyString.d.ts b/tools/yaml/dist/stringify/stringifyString.d.ts deleted file mode 100644 index 017cc4e..0000000 --- a/tools/yaml/dist/stringify/stringifyString.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Scalar } from '../nodes/Scalar.js'; -import type { StringifyContext } from './stringify.js'; -interface StringifyScalar { - value: string; - comment?: string | null; - type?: string; -} -export declare function stringifyString(item: Scalar | StringifyScalar, ctx: StringifyContext, onComment?: () => void, onChompKeep?: () => void): string; -export {}; diff --git a/tools/yaml/dist/stringify/stringifyString.js b/tools/yaml/dist/stringify/stringifyString.js deleted file mode 100644 index 339e331..0000000 --- a/tools/yaml/dist/stringify/stringifyString.js +++ /dev/null @@ -1,330 +0,0 @@ -'use strict'; - -var Scalar = require('../nodes/Scalar.js'); -var foldFlowLines = require('./foldFlowLines.js'); - -const getFoldOptions = (ctx, isBlock) => ({ - indentAtStart: isBlock ? ctx.indent.length : ctx.indentAtStart, - lineWidth: ctx.options.lineWidth, - minContentWidth: ctx.options.minContentWidth -}); -// Also checks for lines starting with %, as parsing the output as YAML 1.1 will -// presume that's starting a new document. -const containsDocumentMarker = (str) => /^(%|---|\.\.\.)/m.test(str); -function lineLengthOverLimit(str, lineWidth, indentLength) { - if (!lineWidth || lineWidth < 0) - return false; - const limit = lineWidth - indentLength; - const strLen = str.length; - if (strLen <= limit) - return false; - for (let i = 0, start = 0; i < strLen; ++i) { - if (str[i] === '\n') { - if (i - start > limit) - return true; - start = i + 1; - if (strLen - start <= limit) - return false; - } - } - return true; -} -function doubleQuotedString(value, ctx) { - const json = JSON.stringify(value); - if (ctx.options.doubleQuotedAsJSON) - return json; - const { implicitKey } = ctx; - const minMultiLineLength = ctx.options.doubleQuotedMinMultiLineLength; - const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : ''); - let str = ''; - let start = 0; - for (let i = 0, ch = json[i]; ch; ch = json[++i]) { - if (ch === ' ' && json[i + 1] === '\\' && json[i + 2] === 'n') { - // space before newline needs to be escaped to not be folded - str += json.slice(start, i) + '\\ '; - i += 1; - start = i; - ch = '\\'; - } - if (ch === '\\') - switch (json[i + 1]) { - case 'u': - { - str += json.slice(start, i); - const code = json.substr(i + 2, 4); - switch (code) { - case '0000': - str += '\\0'; - break; - case '0007': - str += '\\a'; - break; - case '000b': - str += '\\v'; - break; - case '001b': - str += '\\e'; - break; - case '0085': - str += '\\N'; - break; - case '00a0': - str += '\\_'; - break; - case '2028': - str += '\\L'; - break; - case '2029': - str += '\\P'; - break; - default: - if (code.substr(0, 2) === '00') - str += '\\x' + code.substr(2); - else - str += json.substr(i, 6); - } - i += 5; - start = i + 1; - } - break; - case 'n': - if (implicitKey || - json[i + 2] === '"' || - json.length < minMultiLineLength) { - i += 1; - } - else { - // folding will eat first newline - str += json.slice(start, i) + '\n\n'; - while (json[i + 2] === '\\' && - json[i + 3] === 'n' && - json[i + 4] !== '"') { - str += '\n'; - i += 2; - } - str += indent; - // space after newline needs to be escaped to not be folded - if (json[i + 2] === ' ') - str += '\\'; - i += 1; - start = i + 1; - } - break; - default: - i += 1; - } - } - str = start ? str + json.slice(start) : json; - return implicitKey - ? str - : foldFlowLines.foldFlowLines(str, indent, foldFlowLines.FOLD_QUOTED, getFoldOptions(ctx, false)); -} -function singleQuotedString(value, ctx) { - if (ctx.options.singleQuote === false || - (ctx.implicitKey && value.includes('\n')) || - /[ \t]\n|\n[ \t]/.test(value) // single quoted string can't have leading or trailing whitespace around newline - ) - return doubleQuotedString(value, ctx); - const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : ''); - const res = "'" + value.replace(/'/g, "''").replace(/\n+/g, `$&\n${indent}`) + "'"; - return ctx.implicitKey - ? res - : foldFlowLines.foldFlowLines(res, indent, foldFlowLines.FOLD_FLOW, getFoldOptions(ctx, false)); -} -function quotedString(value, ctx) { - const { singleQuote } = ctx.options; - let qs; - if (singleQuote === false) - qs = doubleQuotedString; - else { - const hasDouble = value.includes('"'); - const hasSingle = value.includes("'"); - if (hasDouble && !hasSingle) - qs = singleQuotedString; - else if (hasSingle && !hasDouble) - qs = doubleQuotedString; - else - qs = singleQuote ? singleQuotedString : doubleQuotedString; - } - return qs(value, ctx); -} -// The negative lookbehind avoids a polynomial search, -// but isn't supported yet on Safari: https://caniuse.com/js-regexp-lookbehind -let blockEndNewlines; -try { - blockEndNewlines = new RegExp('(^|(?\n'; - // determine chomping from whitespace at value end - let chomp; - let endStart; - for (endStart = value.length; endStart > 0; --endStart) { - const ch = value[endStart - 1]; - if (ch !== '\n' && ch !== '\t' && ch !== ' ') - break; - } - let end = value.substring(endStart); - const endNlPos = end.indexOf('\n'); - if (endNlPos === -1) { - chomp = '-'; // strip - } - else if (value === end || endNlPos !== end.length - 1) { - chomp = '+'; // keep - if (onChompKeep) - onChompKeep(); - } - else { - chomp = ''; // clip - } - if (end) { - value = value.slice(0, -end.length); - if (end[end.length - 1] === '\n') - end = end.slice(0, -1); - end = end.replace(blockEndNewlines, `$&${indent}`); - } - // determine indent indicator from whitespace at value start - let startWithSpace = false; - let startEnd; - let startNlPos = -1; - for (startEnd = 0; startEnd < value.length; ++startEnd) { - const ch = value[startEnd]; - if (ch === ' ') - startWithSpace = true; - else if (ch === '\n') - startNlPos = startEnd; - else - break; - } - let start = value.substring(0, startNlPos < startEnd ? startNlPos + 1 : startEnd); - if (start) { - value = value.substring(start.length); - start = start.replace(/\n+/g, `$&${indent}`); - } - const indentSize = indent ? '2' : '1'; // root is at -1 - let header = (literal ? '|' : '>') + (startWithSpace ? indentSize : '') + chomp; - if (comment) { - header += ' ' + commentString(comment.replace(/ ?[\r\n]+/g, ' ')); - if (onComment) - onComment(); - } - if (literal) { - value = value.replace(/\n+/g, `$&${indent}`); - return `${header}\n${indent}${start}${value}${end}`; - } - value = value - .replace(/\n+/g, '\n$&') - .replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g, '$1$2') // more-indented lines aren't folded - // ^ more-ind. ^ empty ^ capture next empty lines only at end of indent - .replace(/\n+/g, `$&${indent}`); - const body = foldFlowLines.foldFlowLines(`${start}${value}${end}`, indent, foldFlowLines.FOLD_BLOCK, getFoldOptions(ctx, true)); - return `${header}\n${indent}${body}`; -} -function plainString(item, ctx, onComment, onChompKeep) { - const { type, value } = item; - const { actualString, implicitKey, indent, indentStep, inFlow } = ctx; - if ((implicitKey && value.includes('\n')) || - (inFlow && /[[\]{},]/.test(value))) { - return quotedString(value, ctx); - } - if (!value || - /^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(value)) { - // not allowed: - // - empty string, '-' or '?' - // - start with an indicator character (except [?:-]) or /[?-] / - // - '\n ', ': ' or ' \n' anywhere - // - '#' not preceded by a non-space char - // - end with ' ' or ':' - return implicitKey || inFlow || !value.includes('\n') - ? quotedString(value, ctx) - : blockString(item, ctx, onComment, onChompKeep); - } - if (!implicitKey && - !inFlow && - type !== Scalar.Scalar.PLAIN && - value.includes('\n')) { - // Where allowed & type not set explicitly, prefer block style for multiline strings - return blockString(item, ctx, onComment, onChompKeep); - } - if (containsDocumentMarker(value)) { - if (indent === '') { - ctx.forceBlockIndent = true; - return blockString(item, ctx, onComment, onChompKeep); - } - else if (implicitKey && indent === indentStep) { - return quotedString(value, ctx); - } - } - const str = value.replace(/\n+/g, `$&\n${indent}`); - // Verify that output will be parsed as a string, as e.g. plain numbers and - // booleans get parsed with those types in v1.2 (e.g. '42', 'true' & '0.9e-3'), - // and others in v1.1. - if (actualString) { - const test = (tag) => tag.default && tag.tag !== 'tag:yaml.org,2002:str' && tag.test?.test(str); - const { compat, tags } = ctx.doc.schema; - if (tags.some(test) || compat?.some(test)) - return quotedString(value, ctx); - } - return implicitKey - ? str - : foldFlowLines.foldFlowLines(str, indent, foldFlowLines.FOLD_FLOW, getFoldOptions(ctx, false)); -} -function stringifyString(item, ctx, onComment, onChompKeep) { - const { implicitKey, inFlow } = ctx; - const ss = typeof item.value === 'string' - ? item - : Object.assign({}, item, { value: String(item.value) }); - let { type } = item; - if (type !== Scalar.Scalar.QUOTE_DOUBLE) { - // force double quotes on control characters & unpaired surrogates - if (/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(ss.value)) - type = Scalar.Scalar.QUOTE_DOUBLE; - } - const _stringify = (_type) => { - switch (_type) { - case Scalar.Scalar.BLOCK_FOLDED: - case Scalar.Scalar.BLOCK_LITERAL: - return implicitKey || inFlow - ? quotedString(ss.value, ctx) // blocks are not valid inside flow containers - : blockString(ss, ctx, onComment, onChompKeep); - case Scalar.Scalar.QUOTE_DOUBLE: - return doubleQuotedString(ss.value, ctx); - case Scalar.Scalar.QUOTE_SINGLE: - return singleQuotedString(ss.value, ctx); - case Scalar.Scalar.PLAIN: - return plainString(ss, ctx, onComment, onChompKeep); - default: - return null; - } - }; - let res = _stringify(type); - if (res === null) { - const { defaultKeyType, defaultStringType } = ctx.options; - const t = (implicitKey && defaultKeyType) || defaultStringType; - res = _stringify(t); - if (res === null) - throw new Error(`Unsupported default string type ${t}`); - } - return res; -} - -exports.stringifyString = stringifyString; diff --git a/tools/yaml/dist/test-events.d.ts b/tools/yaml/dist/test-events.d.ts deleted file mode 100644 index d1a2348..0000000 --- a/tools/yaml/dist/test-events.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export declare function testEvents(src: string): { - events: string[]; - error: unknown; -}; diff --git a/tools/yaml/dist/test-events.js b/tools/yaml/dist/test-events.js deleted file mode 100644 index f38d336..0000000 --- a/tools/yaml/dist/test-events.js +++ /dev/null @@ -1,134 +0,0 @@ -'use strict'; - -var identity = require('./nodes/identity.js'); -var publicApi = require('./public-api.js'); -var visit = require('./visit.js'); - -const scalarChar = { - BLOCK_FOLDED: '>', - BLOCK_LITERAL: '|', - PLAIN: ':', - QUOTE_DOUBLE: '"', - QUOTE_SINGLE: "'" -}; -function anchorExists(doc, anchor) { - let found = false; - visit.visit(doc, { - Value(_key, node) { - if (node.anchor === anchor) { - found = true; - return visit.visit.BREAK; - } - } - }); - return found; -} -// test harness for yaml-test-suite event tests -function testEvents(src) { - const docs = publicApi.parseAllDocuments(src); - const errDoc = docs.find(doc => doc.errors.length > 0); - const error = errDoc ? errDoc.errors[0].message : null; - const events = ['+STR']; - try { - for (let i = 0; i < docs.length; ++i) { - const doc = docs[i]; - let root = doc.contents; - if (Array.isArray(root)) - root = root[0]; - const [rootStart] = doc.range || [0]; - const error = doc.errors[0]; - if (error && (!error.pos || error.pos[0] < rootStart)) - throw new Error(); - let docStart = '+DOC'; - if (doc.directives.docStart) - docStart += ' ---'; - else if (doc.contents && - doc.contents.range[2] === doc.contents.range[0] && - !doc.contents.anchor && - !doc.contents.tag) - continue; - events.push(docStart); - addEvents(events, doc, error?.pos[0] ?? -1, root); - let docEnd = '-DOC'; - if (doc.directives.docEnd) - docEnd += ' ...'; - events.push(docEnd); - } - } - catch (e) { - return { events, error: error ?? e }; - } - events.push('-STR'); - return { events, error }; -} -function addEvents(events, doc, errPos, node) { - if (!node) { - events.push('=VAL :'); - return; - } - if (errPos !== -1 && identity.isNode(node) && node.range[0] >= errPos) - throw new Error(); - let props = ''; - let anchor = identity.isScalar(node) || identity.isCollection(node) ? node.anchor : undefined; - if (anchor) { - if (/\d$/.test(anchor)) { - const alt = anchor.replace(/\d$/, ''); - if (anchorExists(doc, alt)) - anchor = alt; - } - props = ` &${anchor}`; - } - if (identity.isNode(node) && node.tag) - props += ` <${node.tag}>`; - if (identity.isMap(node)) { - const ev = node.flow ? '+MAP {}' : '+MAP'; - events.push(`${ev}${props}`); - node.items.forEach(({ key, value }) => { - addEvents(events, doc, errPos, key); - addEvents(events, doc, errPos, value); - }); - events.push('-MAP'); - } - else if (identity.isSeq(node)) { - const ev = node.flow ? '+SEQ []' : '+SEQ'; - events.push(`${ev}${props}`); - node.items.forEach(item => { - addEvents(events, doc, errPos, item); - }); - events.push('-SEQ'); - } - else if (identity.isPair(node)) { - events.push(`+MAP${props}`); - addEvents(events, doc, errPos, node.key); - addEvents(events, doc, errPos, node.value); - events.push('-MAP'); - } - else if (identity.isAlias(node)) { - let alias = node.source; - if (alias && /\d$/.test(alias)) { - const alt = alias.replace(/\d$/, ''); - if (anchorExists(doc, alt)) - alias = alt; - } - events.push(`=ALI${props} *${alias}`); - } - else { - const scalar = scalarChar[String(node.type)]; - if (!scalar) - throw new Error(`Unexpected node type ${node.type}`); - const value = node.source - .replace(/\\/g, '\\\\') - .replace(/\0/g, '\\0') - .replace(/\x07/g, '\\a') - .replace(/\x08/g, '\\b') - .replace(/\t/g, '\\t') - .replace(/\n/g, '\\n') - .replace(/\v/g, '\\v') - .replace(/\f/g, '\\f') - .replace(/\r/g, '\\r') - .replace(/\x1b/g, '\\e'); - events.push(`=VAL${props} ${scalar}${value}`); - } -} - -exports.testEvents = testEvents; diff --git a/tools/yaml/dist/util.d.ts b/tools/yaml/dist/util.d.ts deleted file mode 100644 index 3d1b198..0000000 --- a/tools/yaml/dist/util.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -export { createNode, CreateNodeContext } from './doc/createNode.js'; -export { debug, LogLevelId, warn } from './log.js'; -export { createPair } from './nodes/Pair.js'; -export { findPair } from './nodes/YAMLMap.js'; -export { toJS, ToJSContext } from './nodes/toJS.js'; -export { map as mapTag } from './schema/common/map.js'; -export { seq as seqTag } from './schema/common/seq.js'; -export { string as stringTag } from './schema/common/string.js'; -export { foldFlowLines, FoldOptions } from './stringify/foldFlowLines'; -export { StringifyContext } from './stringify/stringify.js'; -export { stringifyNumber } from './stringify/stringifyNumber.js'; -export { stringifyString } from './stringify/stringifyString.js'; diff --git a/tools/yaml/dist/util.js b/tools/yaml/dist/util.js deleted file mode 100644 index 2e0e5cd..0000000 --- a/tools/yaml/dist/util.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - -var createNode = require('./doc/createNode.js'); -var log = require('./log.js'); -var Pair = require('./nodes/Pair.js'); -var YAMLMap = require('./nodes/YAMLMap.js'); -var toJS = require('./nodes/toJS.js'); -var map = require('./schema/common/map.js'); -var seq = require('./schema/common/seq.js'); -var string = require('./schema/common/string.js'); -var foldFlowLines = require('./stringify/foldFlowLines.js'); -var stringifyNumber = require('./stringify/stringifyNumber.js'); -var stringifyString = require('./stringify/stringifyString.js'); - - - -exports.createNode = createNode.createNode; -exports.debug = log.debug; -exports.warn = log.warn; -exports.createPair = Pair.createPair; -exports.findPair = YAMLMap.findPair; -exports.toJS = toJS.toJS; -exports.mapTag = map.map; -exports.seqTag = seq.seq; -exports.stringTag = string.string; -exports.foldFlowLines = foldFlowLines.foldFlowLines; -exports.stringifyNumber = stringifyNumber.stringifyNumber; -exports.stringifyString = stringifyString.stringifyString; diff --git a/tools/yaml/dist/visit.d.ts b/tools/yaml/dist/visit.d.ts deleted file mode 100644 index 7a27bfc..0000000 --- a/tools/yaml/dist/visit.d.ts +++ /dev/null @@ -1,102 +0,0 @@ -import type { Document } from './doc/Document.js'; -import type { Alias } from './nodes/Alias.js'; -import { Node } from './nodes/Node.js'; -import type { Pair } from './nodes/Pair.js'; -import type { Scalar } from './nodes/Scalar.js'; -import type { YAMLMap } from './nodes/YAMLMap.js'; -import type { YAMLSeq } from './nodes/YAMLSeq.js'; -export type visitorFn = (key: number | 'key' | 'value' | null, node: T, path: readonly (Document | Node | Pair)[]) => void | symbol | number | Node | Pair; -export type visitor = visitorFn | { - Alias?: visitorFn; - Collection?: visitorFn; - Map?: visitorFn; - Node?: visitorFn; - Pair?: visitorFn; - Scalar?: visitorFn; - Seq?: visitorFn; - Value?: visitorFn; -}; -export type asyncVisitorFn = (key: number | 'key' | 'value' | null, node: T, path: readonly (Document | Node | Pair)[]) => void | symbol | number | Node | Pair | Promise; -export type asyncVisitor = asyncVisitorFn | { - Alias?: asyncVisitorFn; - Collection?: asyncVisitorFn; - Map?: asyncVisitorFn; - Node?: asyncVisitorFn; - Pair?: asyncVisitorFn; - Scalar?: asyncVisitorFn; - Seq?: asyncVisitorFn; - Value?: asyncVisitorFn; -}; -/** - * Apply a visitor to an AST node or document. - * - * Walks through the tree (depth-first) starting from `node`, calling a - * `visitor` function with three arguments: - * - `key`: For sequence values and map `Pair`, the node's index in the - * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly. - * `null` for the root node. - * - `node`: The current node. - * - `path`: The ancestry of the current node. - * - * The return value of the visitor may be used to control the traversal: - * - `undefined` (default): Do nothing and continue - * - `visit.SKIP`: Do not visit the children of this node, continue with next - * sibling - * - `visit.BREAK`: Terminate traversal completely - * - `visit.REMOVE`: Remove the current node, then continue with the next one - * - `Node`: Replace the current node, then continue by visiting it - * - `number`: While iterating the items of a sequence or map, set the index - * of the next step. This is useful especially if the index of the current - * node has changed. - * - * If `visitor` is a single function, it will be called with all values - * encountered in the tree, including e.g. `null` values. Alternatively, - * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`, - * `Alias` and `Scalar` node. To define the same visitor function for more than - * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar) - * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most - * specific defined one will be used for each node. - */ -export declare function visit(node: Node | Document | null, visitor: visitor): void; -export declare namespace visit { - var BREAK: symbol; - var SKIP: symbol; - var REMOVE: symbol; -} -/** - * Apply an async visitor to an AST node or document. - * - * Walks through the tree (depth-first) starting from `node`, calling a - * `visitor` function with three arguments: - * - `key`: For sequence values and map `Pair`, the node's index in the - * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly. - * `null` for the root node. - * - `node`: The current node. - * - `path`: The ancestry of the current node. - * - * The return value of the visitor may be used to control the traversal: - * - `Promise`: Must resolve to one of the following values - * - `undefined` (default): Do nothing and continue - * - `visit.SKIP`: Do not visit the children of this node, continue with next - * sibling - * - `visit.BREAK`: Terminate traversal completely - * - `visit.REMOVE`: Remove the current node, then continue with the next one - * - `Node`: Replace the current node, then continue by visiting it - * - `number`: While iterating the items of a sequence or map, set the index - * of the next step. This is useful especially if the index of the current - * node has changed. - * - * If `visitor` is a single function, it will be called with all values - * encountered in the tree, including e.g. `null` values. Alternatively, - * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`, - * `Alias` and `Scalar` node. To define the same visitor function for more than - * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar) - * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most - * specific defined one will be used for each node. - */ -export declare function visitAsync(node: Node | Document | null, visitor: asyncVisitor): Promise; -export declare namespace visitAsync { - var BREAK: symbol; - var SKIP: symbol; - var REMOVE: symbol; -} diff --git a/tools/yaml/dist/visit.js b/tools/yaml/dist/visit.js deleted file mode 100644 index f126e54..0000000 --- a/tools/yaml/dist/visit.js +++ /dev/null @@ -1,236 +0,0 @@ -'use strict'; - -var identity = require('./nodes/identity.js'); - -const BREAK = Symbol('break visit'); -const SKIP = Symbol('skip children'); -const REMOVE = Symbol('remove node'); -/** - * Apply a visitor to an AST node or document. - * - * Walks through the tree (depth-first) starting from `node`, calling a - * `visitor` function with three arguments: - * - `key`: For sequence values and map `Pair`, the node's index in the - * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly. - * `null` for the root node. - * - `node`: The current node. - * - `path`: The ancestry of the current node. - * - * The return value of the visitor may be used to control the traversal: - * - `undefined` (default): Do nothing and continue - * - `visit.SKIP`: Do not visit the children of this node, continue with next - * sibling - * - `visit.BREAK`: Terminate traversal completely - * - `visit.REMOVE`: Remove the current node, then continue with the next one - * - `Node`: Replace the current node, then continue by visiting it - * - `number`: While iterating the items of a sequence or map, set the index - * of the next step. This is useful especially if the index of the current - * node has changed. - * - * If `visitor` is a single function, it will be called with all values - * encountered in the tree, including e.g. `null` values. Alternatively, - * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`, - * `Alias` and `Scalar` node. To define the same visitor function for more than - * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar) - * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most - * specific defined one will be used for each node. - */ -function visit(node, visitor) { - const visitor_ = initVisitor(visitor); - if (identity.isDocument(node)) { - const cd = visit_(null, node.contents, visitor_, Object.freeze([node])); - if (cd === REMOVE) - node.contents = null; - } - else - visit_(null, node, visitor_, Object.freeze([])); -} -// Without the `as symbol` casts, TS declares these in the `visit` -// namespace using `var`, but then complains about that because -// `unique symbol` must be `const`. -/** Terminate visit traversal completely */ -visit.BREAK = BREAK; -/** Do not visit the children of the current node */ -visit.SKIP = SKIP; -/** Remove the current node */ -visit.REMOVE = REMOVE; -function visit_(key, node, visitor, path) { - const ctrl = callVisitor(key, node, visitor, path); - if (identity.isNode(ctrl) || identity.isPair(ctrl)) { - replaceNode(key, path, ctrl); - return visit_(key, ctrl, visitor, path); - } - if (typeof ctrl !== 'symbol') { - if (identity.isCollection(node)) { - path = Object.freeze(path.concat(node)); - for (let i = 0; i < node.items.length; ++i) { - const ci = visit_(i, node.items[i], visitor, path); - if (typeof ci === 'number') - i = ci - 1; - else if (ci === BREAK) - return BREAK; - else if (ci === REMOVE) { - node.items.splice(i, 1); - i -= 1; - } - } - } - else if (identity.isPair(node)) { - path = Object.freeze(path.concat(node)); - const ck = visit_('key', node.key, visitor, path); - if (ck === BREAK) - return BREAK; - else if (ck === REMOVE) - node.key = null; - const cv = visit_('value', node.value, visitor, path); - if (cv === BREAK) - return BREAK; - else if (cv === REMOVE) - node.value = null; - } - } - return ctrl; -} -/** - * Apply an async visitor to an AST node or document. - * - * Walks through the tree (depth-first) starting from `node`, calling a - * `visitor` function with three arguments: - * - `key`: For sequence values and map `Pair`, the node's index in the - * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly. - * `null` for the root node. - * - `node`: The current node. - * - `path`: The ancestry of the current node. - * - * The return value of the visitor may be used to control the traversal: - * - `Promise`: Must resolve to one of the following values - * - `undefined` (default): Do nothing and continue - * - `visit.SKIP`: Do not visit the children of this node, continue with next - * sibling - * - `visit.BREAK`: Terminate traversal completely - * - `visit.REMOVE`: Remove the current node, then continue with the next one - * - `Node`: Replace the current node, then continue by visiting it - * - `number`: While iterating the items of a sequence or map, set the index - * of the next step. This is useful especially if the index of the current - * node has changed. - * - * If `visitor` is a single function, it will be called with all values - * encountered in the tree, including e.g. `null` values. Alternatively, - * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`, - * `Alias` and `Scalar` node. To define the same visitor function for more than - * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar) - * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most - * specific defined one will be used for each node. - */ -async function visitAsync(node, visitor) { - const visitor_ = initVisitor(visitor); - if (identity.isDocument(node)) { - const cd = await visitAsync_(null, node.contents, visitor_, Object.freeze([node])); - if (cd === REMOVE) - node.contents = null; - } - else - await visitAsync_(null, node, visitor_, Object.freeze([])); -} -// Without the `as symbol` casts, TS declares these in the `visit` -// namespace using `var`, but then complains about that because -// `unique symbol` must be `const`. -/** Terminate visit traversal completely */ -visitAsync.BREAK = BREAK; -/** Do not visit the children of the current node */ -visitAsync.SKIP = SKIP; -/** Remove the current node */ -visitAsync.REMOVE = REMOVE; -async function visitAsync_(key, node, visitor, path) { - const ctrl = await callVisitor(key, node, visitor, path); - if (identity.isNode(ctrl) || identity.isPair(ctrl)) { - replaceNode(key, path, ctrl); - return visitAsync_(key, ctrl, visitor, path); - } - if (typeof ctrl !== 'symbol') { - if (identity.isCollection(node)) { - path = Object.freeze(path.concat(node)); - for (let i = 0; i < node.items.length; ++i) { - const ci = await visitAsync_(i, node.items[i], visitor, path); - if (typeof ci === 'number') - i = ci - 1; - else if (ci === BREAK) - return BREAK; - else if (ci === REMOVE) { - node.items.splice(i, 1); - i -= 1; - } - } - } - else if (identity.isPair(node)) { - path = Object.freeze(path.concat(node)); - const ck = await visitAsync_('key', node.key, visitor, path); - if (ck === BREAK) - return BREAK; - else if (ck === REMOVE) - node.key = null; - const cv = await visitAsync_('value', node.value, visitor, path); - if (cv === BREAK) - return BREAK; - else if (cv === REMOVE) - node.value = null; - } - } - return ctrl; -} -function initVisitor(visitor) { - if (typeof visitor === 'object' && - (visitor.Collection || visitor.Node || visitor.Value)) { - return Object.assign({ - Alias: visitor.Node, - Map: visitor.Node, - Scalar: visitor.Node, - Seq: visitor.Node - }, visitor.Value && { - Map: visitor.Value, - Scalar: visitor.Value, - Seq: visitor.Value - }, visitor.Collection && { - Map: visitor.Collection, - Seq: visitor.Collection - }, visitor); - } - return visitor; -} -function callVisitor(key, node, visitor, path) { - if (typeof visitor === 'function') - return visitor(key, node, path); - if (identity.isMap(node)) - return visitor.Map?.(key, node, path); - if (identity.isSeq(node)) - return visitor.Seq?.(key, node, path); - if (identity.isPair(node)) - return visitor.Pair?.(key, node, path); - if (identity.isScalar(node)) - return visitor.Scalar?.(key, node, path); - if (identity.isAlias(node)) - return visitor.Alias?.(key, node, path); - return undefined; -} -function replaceNode(key, path, node) { - const parent = path[path.length - 1]; - if (identity.isCollection(parent)) { - parent.items[key] = node; - } - else if (identity.isPair(parent)) { - if (key === 'key') - parent.key = node; - else - parent.value = node; - } - else if (identity.isDocument(parent)) { - parent.contents = node; - } - else { - const pt = identity.isAlias(parent) ? 'alias' : 'scalar'; - throw new Error(`Cannot replace node with ${pt} parent`); - } -} - -exports.visit = visit; -exports.visitAsync = visitAsync; diff --git a/tools/yaml/package.json b/tools/yaml/package.json deleted file mode 100644 index ceb2f63..0000000 --- a/tools/yaml/package.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "name": "yaml", - "version": "2.3.2", - "license": "ISC", - "author": "Eemeli Aro ", - "repository": "github:eemeli/yaml", - "description": "JavaScript parser and stringifier for YAML", - "keywords": [ - "YAML", - "parser", - "stringifier" - ], - "homepage": "https://eemeli.org/yaml/", - "files": [ - "browser/", - "dist/", - "util.js" - ], - "type": "commonjs", - "main": "./dist/index.js", - "browser": { - "./dist/index.js": "./browser/index.js", - "./dist/util.js": "./browser/dist/util.js", - "./util.js": "./browser/dist/util.js" - }, - "exports": { - ".": { - "types": "./dist/index.d.ts", - "node": "./dist/index.js", - "default": "./browser/index.js" - }, - "./package.json": "./package.json", - "./util": { - "types": "./dist/util.d.ts", - "node": "./dist/util.js", - "default": "./browser/dist/util.js" - } - }, - "scripts": { - "build": "npm run build:node && npm run build:browser", - "build:browser": "rollup -c config/rollup.browser-config.mjs", - "build:node": "rollup -c config/rollup.node-config.mjs", - "clean": "git clean -fdxe node_modules", - "lint": "eslint src/", - "prettier": "prettier --write .", - "prestart": "npm run build:node", - "start": "node -i -e 'YAML=require(\"./dist/index.js\")'", - "test": "jest --config config/jest.config.js", - "test:all": "npm test && npm run test:types && npm run test:dist && npm run test:dist:types", - "test:browsers": "cd playground && npm test", - "test:dist": "npm run build:node && jest --config config/jest.config.js", - "test:dist:types": "tsc --allowJs --moduleResolution node --noEmit --target es5 dist/index.js", - "test:types": "tsc --noEmit && tsc --noEmit -p tests/tsconfig.json", - "docs:install": "cd docs-slate && bundle install", - "docs:deploy": "cd docs-slate && ./deploy.sh", - "docs": "cd docs-slate && bundle exec middleman server", - "preversion": "npm test && npm run build", - "prepublishOnly": "npm run clean && npm test && npm run build" - }, - "browserslist": "defaults, not ie 11", - "prettier": { - "arrowParens": "avoid", - "semi": false, - "singleQuote": true, - "trailingComma": "none" - }, - "devDependencies": { - "@babel/core": "^7.12.10", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", - "@babel/plugin-transform-typescript": "^7.12.17", - "@babel/preset-env": "^7.12.11", - "@rollup/plugin-babel": "^6.0.3", - "@rollup/plugin-replace": "^5.0.2", - "@rollup/plugin-typescript": "^11.0.0", - "@types/jest": "^29.2.4", - "@types/node": "^14.18.35", - "@typescript-eslint/eslint-plugin": "^6.4.1", - "@typescript-eslint/parser": "^6.4.1", - "babel-jest": "^29.0.1", - "cross-env": "^7.0.3", - "eslint": "^8.2.0", - "eslint-config-prettier": "^9.0.0", - "fast-check": "^2.12.0", - "jest": "^29.0.1", - "jest-ts-webcompat-resolver": "^1.0.0", - "prettier": "^3.0.2", - "rollup": "^3.7.5", - "tslib": "^2.1.0", - "typescript": "^5.0.3" - }, - "engines": { - "node": ">= 14" - } -} diff --git a/tools/yaml/util.js b/tools/yaml/util.js deleted file mode 100644 index 070103f..0000000 --- a/tools/yaml/util.js +++ /dev/null @@ -1,2 +0,0 @@ -// Re-exporter for Node.js < 12.16.0 -module.exports = require('./dist/util.js')